3#ifdef TRENDERINTERFACE_GL
12struct DrawElementsIndirectCommand
14 DrawElementsIndirectCommand() =
default;
15 DrawElementsIndirectCommand(
TUINT a_uiCount,
TUINT a_uiInstanceCount,
TUINT a_uiFirstIndex,
TINT a_iBaseVertex,
TUINT a_uiBaseInstance )
17 , instanceCount( a_uiInstanceCount )
18 , firstIndex( a_uiFirstIndex )
19 , baseVertex( a_iBaseVertex )
20 , baseInstance( a_uiBaseInstance )
41 inline static constexpr T2RenderAPI API = T2RenderAPI::OpenGL;
45 const TCHAR* pchTitle;
56 TBOOL Create(
const WindowParams& a_rcWindowParams );
61 void Update(
TFLOAT a_fDeltaTime );
65 T2Window* GetWindow()
const {
return m_pWindow; }
66 const WindowParams& GetWindowParams()
const {
return m_oWindowParams; }
67 SDL_GLContext GetGLContext()
const {
return m_pGLContext; }
70 static T2RenderContext& GetRenderContext() {
return GetSingleton()->m_oRenderContext; }
71 static TBOOL SetShaderProgram(
const T2Shader& a_rcShaderProgram ) {
return GetRenderContext().SetShaderProgram( a_rcShaderProgram ); }
72 static GLuint GetTexture2D(
TINT a_iTextureIndex ) {
return GetRenderContext().GetTexture2D( a_iTextureIndex ); }
73 static void SetTexture2D(
TINT a_iTextureIndex,
const T2GLTexture& a_rcTexture ) { GetRenderContext().SetTexture2D( a_iTextureIndex, a_rcTexture ); }
74 static void SetTexture2D(
TINT a_iTextureIndex, T2GLTexture* a_pTexture ) { GetRenderContext().SetTexture2D( a_iTextureIndex, *a_pTexture ); }
75 static void SetTexture2D(
TINT a_iTextureIndex, GLuint a_uiTexture ) { GetRenderContext().SetTexture2D( a_iTextureIndex, a_uiTexture ); }
76 static void ResetTexture2D(
TINT a_iTextureIndex ) { GetRenderContext().ResetTexture2D( a_iTextureIndex ); }
78 static GLuint CreateTexture( GLsizei a_iWidth, GLsizei a_iHeight, GLenum a_eInternalFormat, GLenum a_eFormat, GLenum a_ePixelType,
TBOOL a_bGenerateMipmap,
const void* a_pData );
79 static void DestroyTexture( GLuint a_iId );
81 static T2CompiledShader CompileShader( GLenum a_eShader,
const TCHAR* a_szSource );
82 static T2CompiledShader CompileShaderFromFile( GLenum a_eShader,
const TCHAR* a_szFileName );
83 static T2Shader CreateShaderProgram( T2CompiledShader a_VertexShader, T2CompiledShader a_FragmentShader );
84 static T2VertexBuffer CreateVertexBuffer(
const void* a_pData, GLuint a_uiSize, GLenum a_eUsage );
85 static T2IndexBuffer CreateIndexBuffer(
const TUINT16* a_pIndices, GLuint a_uiCount, GLenum a_eUsage );
86 static T2IndirectBuffer CreateIndirectBuffer(
const void* a_pData, GLuint a_uiSize, GLenum a_eUsage );
87 static T2ShaderStorageBuffer CreateShaderStorageBuffer(
const void* a_pData, GLuint a_uiSize, GLenum a_eUsage );
88 static T2UniformBuffer CreateUniformBuffer(
const void* a_pData, GLuint a_uiSize, GLenum a_eUsage );
89 static T2VertexArray CreateVertexArray();
90 static T2VertexArray CreateVertexArray( T2VertexBuffer a_VertexBuffer, T2IndexBuffer a_IndexBuffer );
92 static void DestroyVertexBuffer(
const T2VertexBuffer& a_VertexBuffer );
93 static void DestroyIndexBuffer(
const T2IndexBuffer& a_IndexBuffer );
94 static void DestroyIndirectBuffer(
const T2IndirectBuffer& a_IndirectBuffer );
95 static void DestroyShaderStorageBuffer(
const T2IndirectBuffer& a_IndirectBuffer );
96 static void DestroyUniformBuffer(
const T2IndirectBuffer& a_IndirectBuffer );
102 T2Window* m_pWindow =
TNULL;
103 SDL_GLContext m_pGLContext =
TNULL;
104 WindowParams m_oWindowParams;
105 T2RenderContext m_oRenderContext;
#define TOSHI_NAMESPACE_START
#define TOSHI_NAMESPACE_END
static TFORCEINLINE T * GetSingleton()