Add other glClearBuffer variants

This commit is contained in:
baldurk
2014-05-31 00:23:21 +01:00
parent 640ad6b7b2
commit a37dc952e0
6 changed files with 174 additions and 1 deletions
+3
View File
@@ -121,6 +121,9 @@ enum GLChunkType
CLEAR_DEPTH,
CLEAR,
CLEARBUFFERF,
CLEARBUFFERI,
CLEARBUFFERUI,
CLEARBUFFERFI,
CULL_FACE,
ENABLE,
DISABLE,
+147 -1
View File
@@ -711,12 +711,13 @@ void WrappedOpenGL::glDrawArrays(GLenum mode, GLint first, GLsizei count)
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value)
{
SERIALISE_ELEMENT(GLenum, buf, buffer);
SERIALISE_ELEMENT(GLint, draw, drawbuffer);
if(buf != eGL_DEPTH && buf != eGL_STENCIL)
if(buf != eGL_DEPTH)
{
Vec4f v;
if(value) v = *((Vec4f *)value);
@@ -767,6 +768,151 @@ void WrappedOpenGL::glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLflo
}
}
bool WrappedOpenGL::Serialise_glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
{
SERIALISE_ELEMENT(GLenum, buf, buffer);
SERIALISE_ELEMENT(GLint, draw, drawbuffer);
if(buf != eGL_STENCIL)
{
int32_t v[4];
if(value) memcpy(v, value, sizeof(v));
m_pSerialiser->Serialise<4>("value", v);
if(m_State <= EXECUTING)
m_Real.glClearBufferiv(buf, draw, v);
}
else
{
SERIALISE_ELEMENT(GLint, val, *value);
if(m_State <= EXECUTING)
m_Real.glClearBufferiv(buf, draw, &val);
}
const string desc = m_pSerialiser->GetDebugStr();
if(m_State == READING)
{
AddEvent(CLEARBUFFERI, desc);
string name = "glClearBufferiv(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ")";
FetchDrawcall draw;
draw.name = widen(name);
draw.flags |= eDraw_Clear;
AddDrawcall(draw, true);
}
return true;
}
void WrappedOpenGL::glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value)
{
m_Real.glClearBufferiv(buffer, drawbuffer, value);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(CLEARBUFFERI);
Serialise_glClearBufferiv(buffer, drawbuffer, value);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
{
SERIALISE_ELEMENT(GLenum, buf, buffer);
SERIALISE_ELEMENT(GLint, draw, drawbuffer);
{
uint32_t v[4];
if(value) memcpy(v, value, sizeof(v));
m_pSerialiser->Serialise<4>("value", v);
if(m_State <= EXECUTING)
m_Real.glClearBufferuiv(buf, draw, v);
}
const string desc = m_pSerialiser->GetDebugStr();
if(m_State == READING)
{
AddEvent(CLEARBUFFERUI, desc);
string name = "glClearBufferuiv(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ")";
FetchDrawcall draw;
draw.name = widen(name);
draw.flags |= eDraw_Clear;
AddDrawcall(draw, true);
}
return true;
}
void WrappedOpenGL::glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value)
{
m_Real.glClearBufferuiv(buffer, drawbuffer, value);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(CLEARBUFFERUI);
Serialise_glClearBufferuiv(buffer, drawbuffer, value);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
{
SERIALISE_ELEMENT(GLenum, buf, buffer);
SERIALISE_ELEMENT(GLint, draw, drawbuffer);
SERIALISE_ELEMENT(GLfloat, d, depth);
SERIALISE_ELEMENT(GLint, s, stencil);
if(m_State <= EXECUTING)
m_Real.glClearBufferfi(buf, draw, d, s);
const string desc = m_pSerialiser->GetDebugStr();
if(m_State == READING)
{
AddEvent(CLEARBUFFERFI, desc);
string name = "glClearBufferfi(" +
ToStr::Get(buf) + ", " +
ToStr::Get(draw) + ")";
FetchDrawcall draw;
draw.name = widen(name);
draw.flags |= eDraw_Clear;
AddDrawcall(draw, true);
}
return true;
}
void WrappedOpenGL::glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil)
{
m_Real.glClearBufferfi(buffer, drawbuffer, depth, stencil);
if(m_State == WRITING_CAPFRAME)
{
SCOPED_SERIALISE_CONTEXT(CLEARBUFFERFI);
Serialise_glClearBufferfi(buffer, drawbuffer, depth, stencil);
m_ContextRecord->AddChunk(scope.Get());
}
}
bool WrappedOpenGL::Serialise_glClear(GLbitfield mask)
{
SERIALISE_ELEMENT(GLbitfield, Mask, mask);
+12
View File
@@ -78,6 +78,9 @@ const char *GLChunkNames[] =
"glClearDepth",
"glClear",
"glClearBufferfv",
"glClearBufferiv",
"glClearBufferuiv",
"glClearBufferfi",
"glCullFace",
"glEnable",
"glDisable",
@@ -985,6 +988,15 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
case CLEARBUFFERF:
Serialise_glClearBufferfv(eGL_UNKNOWN_ENUM, 0, NULL);
break;
case CLEARBUFFERI:
Serialise_glClearBufferiv(eGL_UNKNOWN_ENUM, 0, NULL);
break;
case CLEARBUFFERUI:
Serialise_glClearBufferuiv(eGL_UNKNOWN_ENUM, 0, NULL);
break;
case CLEARBUFFERFI:
Serialise_glClearBufferfi(eGL_UNKNOWN_ENUM, 0, 0, 0);
break;
case DISABLE:
Serialise_glDisable(eGL_UNKNOWN_ENUM);
break;
+3
View File
@@ -360,6 +360,9 @@ class WrappedOpenGL
IMPLEMENT_FUNCTION_SERIALISED(GLboolean, glUnmapBuffer(GLenum target));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil));
IMPLEMENT_FUNCTION_SERIALISED(void, glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer));
IMPLEMENT_FUNCTION_SERIALISED(void, glEnableVertexAttribArray(GLuint index));
IMPLEMENT_FUNCTION_SERIALISED(void, glGetVertexAttribiv(GLuint index, GLenum pname, GLint *params));
+3
View File
@@ -145,6 +145,9 @@ struct GLHookSet
PFNGLBINDSAMPLERPROC glBindSampler;
PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
PFNGLCLEARBUFFERFVPROC glClearBufferfv;
PFNGLCLEARBUFFERIVPROC glClearBufferiv;
PFNGLCLEARBUFFERUIVPROC glClearBufferuiv;
PFNGLCLEARBUFFERFIPROC glClearBufferfi;
PFNGLVIEWPORTINDEXEDFPROC glViewportIndexedf;
PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv;
PFNGLVIEWPORTARRAYVPROC glViewportArrayv;
+6
View File
@@ -157,6 +157,9 @@
HookExtension(PFNGLBINDSAMPLERPROC, glBindSampler); \
HookExtension(PFNGLSAMPLERPARAMETERIPROC, glSamplerParameteri); \
HookExtension(PFNGLCLEARBUFFERFVPROC, glClearBufferfv); \
HookExtension(PFNGLCLEARBUFFERIVPROC, glClearBufferiv); \
HookExtension(PFNGLCLEARBUFFERUIVPROC, glClearBufferuiv); \
HookExtension(PFNGLCLEARBUFFERFIPROC, glClearBufferfi); \
HookExtension(PFNGLVIEWPORTINDEXEDFPROC, glViewportIndexedf); \
HookExtension(PFNGLVIEWPORTINDEXEDFVPROC, glViewportIndexedfv); \
HookExtension(PFNGLVIEWPORTARRAYVPROC, glViewportArrayv); \
@@ -349,6 +352,9 @@
HookWrapper2(void, glBindSampler, GLuint, unit, GLuint, sampler); \
HookWrapper3(void, glSamplerParameteri, GLuint, sampler, GLenum, pname, GLint, param); \
HookWrapper3(void, glClearBufferfv, GLenum, buffer, GLint, drawbuffer, const GLfloat *, value); \
HookWrapper3(void, glClearBufferiv, GLenum, buffer, GLint, drawbuffer, const GLint *, value); \
HookWrapper3(void, glClearBufferuiv, GLenum, buffer, GLint, drawbuffer, const GLuint *, value); \
HookWrapper4(void, glClearBufferfi, GLenum, buffer, GLint, drawbuffer, GLfloat, depth, GLint, stencil); \
HookWrapper5(void, glViewportIndexedf, GLuint, index, GLfloat, x, GLfloat, y, GLfloat, w, GLfloat, h); \
HookWrapper2(void, glViewportIndexedfv, GLuint, index, const GLfloat *, v); \
HookWrapper3(void, glViewportArrayv, GLuint, first, GLsizei, count, const GLfloat *, v); \