mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-12 13:00:32 +00:00
Add support for EXT_depth_bounds_test
This commit is contained in:
@@ -150,6 +150,7 @@ enum GLChunkType
|
||||
DEPTH_MASK,
|
||||
DEPTH_RANGE,
|
||||
DEPTH_RANGEARRAY,
|
||||
DEPTH_BOUNDS,
|
||||
VIEWPORT,
|
||||
VIEWPORT_ARRAY,
|
||||
SCISSOR,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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); \
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -87,6 +87,11 @@ struct GLRenderState
|
||||
{
|
||||
double nearZ, farZ;
|
||||
} DepthRanges[16];
|
||||
|
||||
struct
|
||||
{
|
||||
double nearZ, farZ;
|
||||
} DepthBounds;
|
||||
|
||||
struct
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user