Differentiate between glDepthRangef and glDepthRange when capturing.

This prevents a crash when the captured application doesn't retrieve the glDepthRange pointer, and uses glDepthRangef instead.
This commit is contained in:
valeriog
2014-10-14 17:45:53 +02:00
parent 1a71922910
commit 86a87f091c
3 changed files with 25 additions and 1 deletions
+1
View File
@@ -171,6 +171,7 @@ enum GLChunkType
DEPTH_FUNC,
DEPTH_MASK,
DEPTH_RANGE,
DEPTH_RANGEF,
DEPTH_RANGEARRAY,
DEPTH_BOUNDS,
PATCH_PARAMI,
+4
View File
@@ -121,6 +121,7 @@ const char *GLChunkNames[] =
"glDepthFunc",
"glDepthMask",
"glDepthRange",
"glDepthRangef",
"glDepthRangeArrayv",
"glDepthBoundsEXT",
"glPatchParameteri",
@@ -1191,6 +1192,9 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
case DEPTH_RANGE:
Serialise_glDepthRange(0, 0);
break;
case DEPTH_RANGEF:
Serialise_glDepthRangef(0, 0);
break;
case DEPTH_RANGEARRAY:
Serialise_glDepthRangeArrayv(0, 0, NULL);
break;
@@ -506,9 +506,28 @@ void WrappedOpenGL::glDepthRange(GLdouble nearVal, GLdouble farVal)
}
}
bool WrappedOpenGL::Serialise_glDepthRangef(GLfloat nearVal, GLfloat farVal)
{
SERIALISE_ELEMENT(GLfloat, n, nearVal);
SERIALISE_ELEMENT(GLfloat, f, farVal);
if(m_State <= EXECUTING)
m_Real.glDepthRangef(n, f);
return true;
}
void WrappedOpenGL::glDepthRangef(GLfloat nearVal, GLfloat farVal)
{
glDepthRange(nearVal, farVal);
m_Real.glDepthRangef(nearVal, farVal);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(DEPTH_RANGEF);
Serialise_glDepthRangef(nearVal, farVal);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glDepthRangeArrayv(GLuint first, GLsizei count, const GLdouble *v)