Add support for EXT_depth_bounds_test

This commit is contained in:
Baldur Karlsson
2014-06-17 16:41:47 +01:00
parent 76ad555ddf
commit 272fa3d2b7
8 changed files with 61 additions and 0 deletions
+1
View File
@@ -150,6 +150,7 @@ enum GLChunkType
DEPTH_MASK,
DEPTH_RANGE,
DEPTH_RANGEARRAY,
DEPTH_BOUNDS,
VIEWPORT,
VIEWPORT_ARRAY,
SCISSOR,
+26
View File
@@ -381,6 +381,32 @@ void WrappedOpenGL::glDepthRangeArrayv(GLuint first, GLsizei count, const GLdoub
}
}
bool WrappedOpenGL::Serialise_glDepthBoundsEXT(GLclampd nearVal, GLclampd farVal)
{
SERIALISE_ELEMENT(GLdouble, n, nearVal);
SERIALISE_ELEMENT(GLdouble, f, farVal);
if(m_State <= EXECUTING)
{
m_Real.glDepthBoundsEXT(n, f);
}
return true;
}
void WrappedOpenGL::glDepthBoundsEXT(GLclampd nearVal, GLclampd farVal)
{
m_Real.glDepthBoundsEXT(nearVal, farVal);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(DEPTH_BOUNDS);
Serialise_glDepthBoundsEXT(nearVal, farVal);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glDisable(GLenum cap)
{
SERIALISE_ELEMENT(GLenum, c, cap);
+9
View File
@@ -107,6 +107,7 @@ const char *GLChunkNames[] =
"glDepthMask",
"glDepthRange",
"glDepthRangeArrayv",
"glDepthBoundsEXT",
"glViewport",
"glViewportArrayv",
"glScissor",
@@ -1157,6 +1158,9 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
case DEPTH_RANGEARRAY:
Serialise_glDepthRangeArrayv(0, 0, NULL);
break;
case DEPTH_BOUNDS:
Serialise_glDepthBoundsEXT(0, 0);
break;
case VIEWPORT:
Serialise_glViewport(0, 0, 0, 0);
break;
@@ -1587,6 +1591,11 @@ void WrappedOpenGL::glGetFloatv(GLenum pname, GLfloat *params)
m_Real.glGetFloatv(pname, params);
}
void WrappedOpenGL::glGetDoublev(GLenum pname, GLdouble *params)
{
m_Real.glGetDoublev(pname, params);
}
void WrappedOpenGL::glGetIntegerv(GLenum pname, GLint *params)
{
if(pname == GL_NUM_EXTENSIONS)
+2
View File
@@ -286,6 +286,7 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glDepthRange(GLdouble nearVal, GLdouble farVal));
IMPLEMENT_FUNCTION_SERIALISED(void, glDepthRangef(GLfloat nearVal, GLfloat farVal));
IMPLEMENT_FUNCTION_SERIALISED(void, glDepthRangeArrayv(GLuint first, GLsizei count, const GLdouble *v));
IMPLEMENT_FUNCTION_SERIALISED(void, glDepthBoundsEXT(GLclampd nearVal, GLclampd farVal));
IMPLEMENT_FUNCTION_SERIALISED(void, glDisable(GLenum cap));
IMPLEMENT_FUNCTION_SERIALISED(void, glEnable(GLenum cap));
IMPLEMENT_FUNCTION_SERIALISED(void, glDisablei(GLenum cap, GLuint index));
@@ -295,6 +296,7 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(void, glFinish());
IMPLEMENT_FUNCTION_SERIALISED(void, glFlush());
IMPLEMENT_FUNCTION_SERIALISED(void, glGetFloatv(GLenum pname, GLfloat *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetDoublev(GLenum pname, GLdouble *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetIntegerv(GLenum pname, GLint *params));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetBooleanv(GLenum pname, GLboolean *data));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetIntegeri_v(GLenum pname, GLuint index, GLint *data));
+2
View File
@@ -57,6 +57,7 @@ struct GLHookSet
PFNGLGETTEXIMAGEPROC glGetTexImage;
PFNGLGETBOOLEANVPROC glGetBooleanv;
PFNGLGETFLOATVPROC glGetFloatv;
PFNGLGETDOUBLEVPROC glGetDoublev;
PFNGLGETINTEGERVPROC glGetIntegerv;
PFNGLGETSTRINGPROC glGetString;
PFNGLHINTPROC glHint;
@@ -121,6 +122,7 @@ struct GLHookSet
PFNGLDEPTHRANGEPROC glDepthRange;
PFNGLDEPTHRANGEFPROC glDepthRangef;
PFNGLDEPTHRANGEARRAYVPROC glDepthRangeArrayv;
PFNGLDEPTHBOUNDSEXTPROC glDepthBoundsEXT;
PFNGLCREATESHADERPROC glCreateShader;
PFNGLDELETESHADERPROC glDeleteShader;
PFNGLSHADERSOURCEPROC glShaderSource;
+5
View File
@@ -57,6 +57,7 @@
HookInit(glGetTexImage); \
HookInit(glGetBooleanv); \
HookInit(glGetFloatv); \
HookInit(glGetDoublev); \
HookInit(glGetIntegerv); \
HookInit(glGetString); \
HookInit(glHint); \
@@ -132,6 +133,7 @@
HookExtension(PFNGLDEPTHRANGEPROC, glDepthRange); \
HookExtension(PFNGLDEPTHRANGEFPROC, glDepthRangef); \
HookExtension(PFNGLDEPTHRANGEARRAYVPROC, glDepthRangeArrayv); \
HookExtension(PFNGLDEPTHBOUNDSEXTPROC, glDepthBoundsEXT); \
HookExtension(PFNGLCREATESHADERPROC, glCreateShader); \
HookExtension(PFNGLDELETESHADERPROC, glDeleteShader); \
HookExtension(PFNGLSHADERSOURCEPROC, glShaderSource); \
@@ -249,6 +251,7 @@
HookExtension(PFNGLGETTEXIMAGEPROC, glGetTexImage); \
HookExtension(PFNGLGETBOOLEANVPROC, glGetBooleanv); \
HookExtension(PFNGLGETFLOATVPROC, glGetFloatv); \
HookExtension(PFNGLGETDOUBLEVPROC, glGetDoublev); \
HookExtension(PFNGLGETINTEGERVPROC, glGetIntegerv); \
HookExtension(PFNGLGETSTRINGPROC, glGetString); \
HookExtension(PFNGLHINTPROC, glHint); \
@@ -312,6 +315,7 @@
HookWrapper5(void, glGetTexImage, GLenum, target, GLint, level, GLenum, format, GLenum, type, void *, pixels); \
HookWrapper2(void, glGetBooleanv, GLenum, pname, GLboolean *, data); \
HookWrapper2(void, glGetFloatv, GLenum, pname, GLfloat *, data); \
HookWrapper2(void, glGetDoublev, GLenum, pname, GLdouble *, data); \
HookWrapper2(void, glGetIntegerv, GLenum, pname, GLint *, data); \
HookWrapper1(const GLubyte *, glGetString, GLenum, name); \
HookWrapper2(void, glHint, GLenum, target, GLenum, mode); \
@@ -387,6 +391,7 @@
HookWrapper2(void, glDepthRange, GLdouble, nearVal, GLdouble, farVal); \
HookWrapper2(void, glDepthRangef, GLfloat, nearVal, GLfloat, farVal); \
HookWrapper3(void, glDepthRangeArrayv, GLuint, first, GLsizei, count, const GLdouble *, v); \
HookWrapper2(void, glDepthBoundsEXT, GLclampd, nearVal, GLclampd, farVal); \
HookWrapper1(GLuint, glCreateShader, GLenum, type); \
HookWrapper1(void, glDeleteShader, GLuint, shader); \
HookWrapper4(void, glShaderSource, GLuint, shader, GLsizei, count, const GLchar *const*, string, const GLint *, length); \
+11
View File
@@ -38,6 +38,7 @@ GLRenderState::~GLRenderState()
void GLRenderState::FetchState()
{
// TODO check GL_MAX_*
// TODO check the extensions/core version for these is around
m_Real->glGetIntegerv(eGL_ACTIVE_TEXTURE, (GLint *)&ActiveTexture);
@@ -123,6 +124,8 @@ void GLRenderState::FetchState()
for(GLuint i=0; i < (GLuint)ARRAY_COUNT(DepthRanges); i++)
m_Real->glGetDoublei_v(eGL_DEPTH_RANGE, i, &DepthRanges[i].nearZ);
m_Real->glGetDoublev(eGL_DEPTH_BOUNDS_TEST_EXT, &DepthBounds.nearZ);
for(size_t i=0; i < ARRAY_COUNT(ColorMasks); i++)
m_Real->glGetBooleanv(eGL_COLOR_WRITEMASK, &ColorMasks[i].red);
@@ -203,6 +206,8 @@ void GLRenderState::ApplyState()
double v[2] = { DepthRanges[i].nearZ, DepthRanges[i].farZ };
m_Real->glDepthRangeArrayv(i, 1, v);
}
m_Real->glDepthBoundsEXT(DepthBounds.nearZ, DepthBounds.farZ);
for(GLuint i=0; i < (GLuint)ARRAY_COUNT(ColorMasks); i++)
m_Real->glColorMaski(i, ColorMasks[i].red, ColorMasks[i].green, ColorMasks[i].blue, ColorMasks[i].alpha);
@@ -235,6 +240,7 @@ void GLRenderState::Clear()
RDCEraseEl(DepthWriteMask);
RDCEraseEl(DepthClearValue);
RDCEraseEl(DepthRanges);
RDCEraseEl(DepthBounds);
RDCEraseEl(ColorMasks);
RDCEraseEl(ColorClearValue);
@@ -334,6 +340,11 @@ void GLRenderState::Serialise(LogState state, GLResourceManager *rm)
m_pSerialiser->Serialise("GL_DEPTH_RANGE.far", DepthRanges[i].farZ);
}
{
m_pSerialiser->Serialise("GL_DEPTH_BOUNDS_EXT.near", DepthBounds.nearZ);
m_pSerialiser->Serialise("GL_DEPTH_BOUNDS_EXT.far", DepthBounds.farZ);
}
for(size_t i=0; i < ARRAY_COUNT(ColorMasks); i++)
m_pSerialiser->Serialise<4>("GL_COLOR_WRITEMASK", &ColorMasks[i].red);
+5
View File
@@ -87,6 +87,11 @@ struct GLRenderState
{
double nearZ, farZ;
} DepthRanges[16];
struct
{
double nearZ, farZ;
} DepthBounds;
struct
{