mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-06 10:00:40 +00:00
Add other glClearBuffer variants
This commit is contained in:
@@ -121,6 +121,9 @@ enum GLChunkType
|
||||
CLEAR_DEPTH,
|
||||
CLEAR,
|
||||
CLEARBUFFERF,
|
||||
CLEARBUFFERI,
|
||||
CLEARBUFFERUI,
|
||||
CLEARBUFFERFI,
|
||||
CULL_FACE,
|
||||
ENABLE,
|
||||
DISABLE,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -145,6 +145,9 @@ struct GLHookSet
|
||||
PFNGLBINDSAMPLERPROC glBindSampler;
|
||||
PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
|
||||
PFNGLCLEARBUFFERFVPROC glClearBufferfv;
|
||||
PFNGLCLEARBUFFERIVPROC glClearBufferiv;
|
||||
PFNGLCLEARBUFFERUIVPROC glClearBufferuiv;
|
||||
PFNGLCLEARBUFFERFIPROC glClearBufferfi;
|
||||
PFNGLVIEWPORTINDEXEDFPROC glViewportIndexedf;
|
||||
PFNGLVIEWPORTINDEXEDFVPROC glViewportIndexedfv;
|
||||
PFNGLVIEWPORTARRAYVPROC glViewportArrayv;
|
||||
|
||||
@@ -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); \
|
||||
|
||||
Reference in New Issue
Block a user