gtGraphicsSystem
abstract class : gtRefObject

Класс для работы с графическим API.

Методы
gtGraphicsSystem::beginRender
virtual void beginRender( bool clearRenderTarget = true, const gtColor& color = gtColor( gtColorBlack ) ) = 0;
Начать процесс рисования.
После рисования нужно вызвать метод gtGraphicsSystem::endRender.

gtGraphicsSystem::clearModelCache
virtual void clearModelCache() = 0;
Удалить все render-модели из памяти, загруженные через метод gtGraphicsSystem::getModel.

gtGraphicsSystem::clearTextureCache
virtual void clearTextureCache() = 0;
Удалить все текстуры из памяти, загруженные через метод gtGraphicsSystem::getTexture.

gtGraphicsSystem::createModel
virtual gtPtr<gtRenderModel> createModel( gtModel* software_model, gtRenderModelInfo * info = nullptr ) = 0;
Данный метод не добавляет модель в кеш. Для автоматического удаления используется gtPtr.

gtGraphicsSystem::createRenderTargetTexture
virtual gtPtr<gtTexture> createRenderTargetTexture( const v2u& size, gtImageFormat pixelFormat ) = 0;
Создать Render Target Texture.
Для автоматического удаления используется gtPtr.

gtGraphicsSystem::createTexture
virtual gtPtr<gtTexture> createTexture( gtImage* sourceImage ) = 0;
Создаёт текстуру без добавления в кеш текстур. Для автоматического удаления используется gtPtr.

gtGraphicsSystem::draw2DBox
virtual void draw2DBox( const v4i& rect, const gtColor& color ) = 0;
Нарисовать прямоугольник. Координаты соответствуют координатам экрана, левый верхний угол - 0;0.

gtGraphicsSystem::draw2DImage
virtual void draw2DImage( const v4i& rect, const gtMaterial& m ) = 0;
Нарисовать изображение. Координаты соответствуют координатам экрана, левый верхний угол - 0;0.
Данный метод даёт возможность указать материал, через который например можно указать шейдер для рисования.

gtGraphicsSystem::draw2DImage
virtual void draw2DImage( const v4i& rect, gtTexture* texture ) = 0;
Нарисовать изображение. Координаты соответствуют координатам экрана, левый верхний угол - 0;0.

gtGraphicsSystem::draw2DImage
virtual void draw2DImage( const v4i& rect, const v4i& region, const gtMaterial& m ) = 0;
Нарисовать изображение. Координаты соответствуют координатам экрана, левый верхний угол - 0;0.
Данный метод даёт возможность указать материал, через который например можно указать шейдер для рисования.
Параметр region указывает на область изображения которая будет показана на прямоугольнике.

gtGraphicsSystem::draw2DImage
virtual void draw2DImage( const v4i& rect, const v4i& region, gtTexture* texture ) = 0;
Нарисовать изображение. Координаты соответствуют координатам экрана, левый верхний угол - 0;0.
Параметр region указывает на область изображения которая будет показана на прямоугольнике.

gtGraphicsSystem::drawLine
virtual void drawLine( const v4f& start, const v4f& end, const gtColor& color = gtColor( gtColorWhite ) ) = 0;
Нарисовать линию.

gtGraphicsSystem::drawLineBox
virtual void drawLineBox( const v4f& minimum, const v4f& maximum, const v4f& positionOffset = v4f(), const gtColor& color = gtColor( gtColorWhite ) ) = 0;
Из линий нарисовать AABB прямоугольник.

gtGraphicsSystem::drawLineBox
virtual void drawLineBox( const v4f& v1, const v4f& v2, const v4f& v3, const v4f& v4, const v4f& v5, const v4f& v6, const v4f& v7, const v4f& v8, const v4f& positionOffset = v4f(), const gtColor& color = gtColor( gtColorWhite ) ) = 0;
Из линий нарисовать OBB прямоугольник.

gtGraphicsSystem::drawLineSphere
virtual void drawLineSphere( const v4f& position, f32 radius, u32 smoothLevel = 1u, const gtColor& color1 = gtColor( gtColorWhite ), const gtColor& color2 = gtColor( gtColorWhite ), const gtColor& color3 = gtColor( gtColorWhite )) = 0;
Из линий нарисовать что-то на подобии сферы.

gtGraphicsSystem::drawModel
virtual void drawModel( gtRenderModel* model, gtArray<gtMaterial>* materials = nullptr ) = 0;
Нарисовать render-модель.
Можно указать свои материалы. Их количество должно соответствовать количеству суб-моделей.

gtGraphicsSystem::endRender
virtual void endRender() = 0;
Завершить процесс рисования.

gtGraphicsSystem::getClearColor
virtual gtColor getClearColor() = 0;
Получить текущий цвет закрашивания поверхности для рисования.

gtGraphicsSystem::getDefaultTexture
virtual gtTexture* getDefaultTexture() = 0;
Получить стандартную текстуру.
Стандартная текстура применяется к моделям если к ней не применили текстуру.

gtGraphicsSystem::getModel
virtual gtRenderModel* getModel( const gtString& fileName, bool generate_tangents = true, gtModel** software_model = nullptr ) = 0;
Метод загрузит модель, создасть hardware модель, вернёт его. Если модель была загружена ранее, то вернётся указатель на hardware модель. gtModel удаляется, если software_model равен nullptr. Если получили gtModel, то нужно его удалить самому вызвав release()

gtGraphicsSystem::getParams
virtual const gtGraphicsSystemInfo& getParams() = 0;
Получить параметры с которыми запускалась данная графическая система.

gtGraphicsSystem::getRenderTarget
virtual gtTexture* getRenderTarget() = 0;
Получить текущий RTT если он установлен. Вернёт nullptr если рендеринг идёт в главный буфер.

gtGraphicsSystem::getShader
virtual gtShader * getShader( gtShaderCallback * callback, const gtString& vertexShader, const gtStringA& vertexShaderMain, const gtString& pixelShader, const gtStringA& pixelShaderMain, gtShaderModel shaderModel, gtVertexType * vertexType ) = 0;
Компилировать шейдер.
Параметр gtShaderCallback это указатель на объект производного от gtShaderCallback класса. Он даёт доступ к настройкам шейдера, позволяет передавать ему данные.
Параметр vertexType это массив из gtVertexType, определяющий формат вершины (например 4 байта это позиция, потом 2 байта текстурные координаты, следующие 3 это нормаль и т.д.). Данный массив должен заканчиваться на gtVertexType::End(это сделано на подобии завершающего нуля в строках).

gtGraphicsSystem::getTexture
virtual gtTexture* getTexture( const gtString& fileName, gtImage** outImage = nullptr ) = 0;
Загрузить картинку, создать текстуру, сунуть в кеш и получить на неё указатель. Если outImage не указан то загруженный gtImage удалится.
Если текстура уже создана то просто вернётся указатель.
Если указали outImage то необходимо будет позаботится о его удалении (использовать gtPtr или вручную вызвать release()).
gtGraphicsSystem::isClearDepth
virtual bool isClearDepth() = 0;
Вернёт истину если текущий render target будет очищать буфер глубины перед рисованием.

gtGraphicsSystem::isClearTarget
virtual bool isClearTarget() = 0;
Вернёт истину если текущий render target будет очищаться перед рисованием.

gtGraphicsSystem::makeScreenshot
virtual void makeScreenshot( const gtString&, const GT_GUID& ) = 0;
Сделать скриншот.

gtGraphicsSystem::removeModel
virtual bool removeModel( gtRenderModel* model ) = 0;
Удалит render-модель и уберёт её из кеша моделей.

gtGraphicsSystem::removeTexture
virtual bool removeTexture( gtTexture* texture ) = 0;
Удалит текстуру и уберёт её из кеша текстур.

gtGraphicsSystem::scissorAdd
virtual void scissorAdd( const v4i& rect ) = 0;
Добавить область которая будет рисоваться.
Пока работает одна область.

gtGraphicsSystem::scissorClear
virtual void scissorClear( bool setOriginal = true ) = 0;
Удалит добавленные области для рисования. Чтобы вернуть полноэкранное рисование нужно установить setOriginal как истину.

gtGraphicsSystem::setComparisonFunc
virtual void setComparisonFunc( gtTextureComparisonFunc ) = 0;
Установить тип сравнения (sampler state в D3D11).

gtGraphicsSystem::setDepthState
virtual void setDepthState( bool state = true ) = 0;
Использовать ли буфер глубины.
Если выключить, то нужно будет вручную соблюдать порядок отрисовки - сначало задние объекты, потом передние. Не будет работать с перекрывающимися 3D объектами, но отлично подходит для 2D объектов.

gtGraphicsSystem::setRenderTarget
virtual void setRenderTarget( gtTexture* rtt, bool clearDepth = true, bool clearTarget = true, const gtColor& clearTargetColor = gtColorBlack ) = 0;
Установить текстуру в которую будет идти рисование.
Чтобы вернуть главный буфер первый параметр должен быть nullptr.

gtGraphicsSystem::setTextureAddressMode
virtual void setTextureAddressMode( gtTextureAddressMode ) = 0;
Установить режим адресации текстурных координат.

gtGraphicsSystem::setTextureFilterType
virtual void setTextureFilterType( gtTextureFilterType, bool useCompareFunc = false ) = 0;
Установить фильтр для загружаемых текстур.
Если useCompareFunc истина то текстуры будут создаваться со специальным sampler state (это в D3D11)..

gtGraphicsSystem::setViewport
virtual void setViewport( const v2f& viewportSize ) = 0;
..... . .. нужно доработать.

gtGraphicsSystem::renderEffects
virtual void renderEffects() = 0;
Рендерит стандартные эффекты.
gtSceneSystem вызывает этот метод автоматически.