mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-19 03:15:27 +00:00
Add OpenGL support.
This commit is contained in:
parent
c354f59b72
commit
dd08fd2e7d
55 changed files with 2957 additions and 802 deletions
133
Engine/source/gfx/gl/gfxGLStateCache.h
Normal file
133
Engine/source/gfx/gl/gfxGLStateCache.h
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
#ifndef GFX_GL_STATE_CACHE
|
||||
#define GFX_GL_STATE_CACHE
|
||||
|
||||
|
||||
/// GFXGLStateCache store OpenGL state to avoid performance penalities of glGet* calls
|
||||
/// GL_TEXTURE_1D/2D/3D, GL_FRAMEBUFFER, GL_ARRAY_BUFFER, GL_ELEMENT_ARRAY_BUFFER
|
||||
class GFXGLStateCache
|
||||
{
|
||||
public:
|
||||
GFXGLStateCache()
|
||||
{
|
||||
mActiveTexture = 0;
|
||||
mBindedVBO = 0;
|
||||
mBindedIBO = 0;
|
||||
mBindedFBO_W = 0;
|
||||
mBindedFBO_R = 0;
|
||||
mVertexAttribActive = 0;
|
||||
}
|
||||
|
||||
class TextureUnit
|
||||
{
|
||||
public:
|
||||
TextureUnit() : mTexture1D(0), mTexture2D(0), mTexture3D(0), mTextureCube(0)
|
||||
{
|
||||
|
||||
}
|
||||
GLuint mTexture1D, mTexture2D, mTexture3D, mTextureCube;
|
||||
};
|
||||
|
||||
/// after glBindTexture
|
||||
void setCacheBindedTex(U32 texUnit, GLenum biding, GLuint handle)
|
||||
{
|
||||
mActiveTexture = texUnit;
|
||||
switch (biding)
|
||||
{
|
||||
case GL_TEXTURE_2D:
|
||||
mTextureUnits[mActiveTexture].mTexture2D = handle;
|
||||
break;
|
||||
case GL_TEXTURE_3D:
|
||||
mTextureUnits[mActiveTexture].mTexture3D = handle;
|
||||
break;
|
||||
case GL_TEXTURE_1D:
|
||||
mTextureUnits[mActiveTexture].mTexture1D = handle;
|
||||
break;
|
||||
case GL_TEXTURE_CUBE_MAP:
|
||||
mTextureUnits[mActiveTexture].mTextureCube = handle;
|
||||
break;
|
||||
default:
|
||||
AssertFatal(0, avar("GFXGLStateCache::setCacheBindedTex - binding (%x) not supported.", biding) );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/// after opengl object binded
|
||||
void setCacheBinded(GLenum biding, GLuint handle)
|
||||
{
|
||||
switch (biding)
|
||||
{
|
||||
case GL_TEXTURE_2D:
|
||||
mTextureUnits[mActiveTexture].mTexture2D = handle;
|
||||
break;
|
||||
case GL_TEXTURE_3D:
|
||||
mTextureUnits[mActiveTexture].mTexture3D = handle;
|
||||
break;
|
||||
case GL_TEXTURE_1D:
|
||||
mTextureUnits[mActiveTexture].mTexture1D = handle;
|
||||
break;
|
||||
case GL_TEXTURE_CUBE_MAP:
|
||||
mTextureUnits[mActiveTexture].mTextureCube = handle;
|
||||
break;
|
||||
case GL_FRAMEBUFFER:
|
||||
mBindedFBO_W = mBindedFBO_R = handle;
|
||||
break;
|
||||
case GL_DRAW_FRAMEBUFFER:
|
||||
mBindedFBO_W = handle;
|
||||
break;
|
||||
case GL_READ_FRAMEBUFFER:
|
||||
mBindedFBO_R = handle;
|
||||
break;
|
||||
case GL_ARRAY_BUFFER:
|
||||
mBindedVBO = handle;
|
||||
break;
|
||||
case GL_ELEMENT_ARRAY_BUFFER:
|
||||
mBindedIBO = handle;
|
||||
break;
|
||||
default:
|
||||
AssertFatal(0, avar("GFXGLStateCache::setCacheBinded - binding (%x) not supported.", biding) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
GLuint getCacheBinded(GLenum biding) const
|
||||
{
|
||||
switch (biding)
|
||||
{
|
||||
case GL_TEXTURE_2D:
|
||||
return mTextureUnits[mActiveTexture].mTexture2D;
|
||||
case GL_TEXTURE_3D:
|
||||
return mTextureUnits[mActiveTexture].mTexture3D;
|
||||
case GL_TEXTURE_1D:
|
||||
return mTextureUnits[mActiveTexture].mTexture1D;
|
||||
case GL_TEXTURE_CUBE_MAP:
|
||||
return mTextureUnits[mActiveTexture].mTextureCube;
|
||||
case GL_DRAW_FRAMEBUFFER:
|
||||
return mBindedFBO_W;
|
||||
case GL_READ_FRAMEBUFFER:
|
||||
return mBindedFBO_R;
|
||||
case GL_ARRAY_BUFFER:
|
||||
return mBindedVBO;
|
||||
case GL_ELEMENT_ARRAY_BUFFER:
|
||||
return mBindedIBO;
|
||||
default:
|
||||
AssertFatal(0, avar("GFXGLStateCache::getCacheBinded - binding (%x) not supported.", biding) );
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// after glActiveTexture
|
||||
void setCacheActiveTexture(U32 unit) { mActiveTexture = unit; }
|
||||
U32 getCacheActiveTexture() const { return mActiveTexture; }
|
||||
|
||||
/// for cache glEnableVertexAttribArray / glDisableVertexAttribArray
|
||||
void setCacheVertexAttribActive(U32 activeMask) { mVertexAttribActive = activeMask; }
|
||||
U32 getCacheVertexAttribActive() const { return mVertexAttribActive; }
|
||||
|
||||
protected:
|
||||
GLuint mActiveTexture, mBindedVBO, mBindedIBO, mBindedFBO_W, mBindedFBO_R;
|
||||
TextureUnit mTextureUnits[TEXTURE_STAGE_COUNT];
|
||||
U32 mVertexAttribActive;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue