mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-13 05:20:45 +00:00
Implement glDrawRangeElementsBaseVertex
This commit is contained in:
@@ -241,6 +241,7 @@ enum GLChunkType
|
||||
DRAWELEMENTS,
|
||||
DRAWELEMENTS_INDIRECT,
|
||||
DRAWRANGEELEMENTS,
|
||||
DRAWRANGEELEMENTSBASEVERTEX,
|
||||
DRAWELEMENTS_INSTANCED,
|
||||
DRAWELEMENTS_INSTANCEDBASEINSTANCE,
|
||||
DRAWELEMENTS_BASEVERTEX,
|
||||
|
||||
@@ -186,6 +186,7 @@ const char *GLChunkNames[] =
|
||||
"glDrawElements",
|
||||
"glDrawElementsIndirect",
|
||||
"glDrawRangeElements",
|
||||
"glDrawRangeElementsBaseVertex",
|
||||
"glDrawElementsInstanced",
|
||||
"glDrawElementsInstancedBaseInstance",
|
||||
"glDrawElementsBaseVertex",
|
||||
@@ -1980,6 +1981,9 @@ void WrappedOpenGL::ProcessChunk(uint64_t offset, GLChunkType context)
|
||||
case DRAWRANGEELEMENTS:
|
||||
Serialise_glDrawRangeElements(eGL_NONE, 0, 0, 0, eGL_NONE, NULL);
|
||||
break;
|
||||
case DRAWRANGEELEMENTSBASEVERTEX:
|
||||
Serialise_glDrawRangeElementsBaseVertex(eGL_NONE, 0, 0, 0, eGL_NONE, NULL, 0);
|
||||
break;
|
||||
case DRAWELEMENTS_INSTANCED:
|
||||
Serialise_glDrawElementsInstanced(eGL_NONE, 0, eGL_NONE, NULL, 0);
|
||||
break;
|
||||
|
||||
@@ -965,6 +965,7 @@ class WrappedOpenGL
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawArraysInstancedBaseInstance(GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElements(GLenum mode, GLsizei count, GLenum type, const void *indices));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount));
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawElementsInstancedBaseInstance(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance));
|
||||
|
||||
@@ -569,6 +569,7 @@ struct GLHookSet
|
||||
PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glProgramUniformMatrix4x2dv;
|
||||
PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glProgramUniformMatrix4x3dv;
|
||||
PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
|
||||
PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
|
||||
PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance;
|
||||
PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
|
||||
PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
|
||||
|
||||
@@ -599,6 +599,7 @@
|
||||
HookExtension(PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC, glProgramUniformMatrix4x2dv); \
|
||||
HookExtension(PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC, glProgramUniformMatrix4x3dv); \
|
||||
HookExtension(PFNGLDRAWRANGEELEMENTSPROC, glDrawRangeElements); \
|
||||
HookExtension(PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC, glDrawRangeElementsBaseVertex); \
|
||||
HookExtension(PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC, glDrawArraysInstancedBaseInstance); \
|
||||
HookExtension(PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced); \
|
||||
HookExtension(PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstanced); \
|
||||
@@ -1262,6 +1263,7 @@
|
||||
HookWrapper5(void, glProgramUniformMatrix4x2dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
|
||||
HookWrapper5(void, glProgramUniformMatrix4x3dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
|
||||
HookWrapper6(void, glDrawRangeElements, GLenum, mode, GLuint, start, GLuint, end, GLsizei, count, GLenum, type, const void *, indices); \
|
||||
HookWrapper7(void, glDrawRangeElementsBaseVertex, GLenum, mode, GLuint, start, GLuint, end, GLsizei, count, GLenum, type, const void *, indices, GLint, basevertex); \
|
||||
HookWrapper5(void, glDrawArraysInstancedBaseInstance, GLenum, mode, GLint, first, GLsizei, count, GLsizei, instancecount, GLuint, baseinstance); \
|
||||
HookWrapper4(void, glDrawArraysInstanced, GLenum, mode, GLint, first, GLsizei, count, GLsizei, instancecount); \
|
||||
HookWrapper5(void, glDrawElementsInstanced, GLenum, mode, GLsizei, count, GLenum, type, const void *, indices, GLsizei, instancecount); \
|
||||
|
||||
@@ -557,6 +557,70 @@ void WrappedOpenGL::glDrawRangeElements(GLenum mode, GLuint start, GLuint end, G
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex)
|
||||
{
|
||||
SERIALISE_ELEMENT(GLenum, Mode, mode);
|
||||
SERIALISE_ELEMENT(uint32_t, Start, start);
|
||||
SERIALISE_ELEMENT(uint32_t, End, end);
|
||||
SERIALISE_ELEMENT(uint32_t, Count, count);
|
||||
SERIALISE_ELEMENT(GLenum, Type, type);
|
||||
SERIALISE_ELEMENT(uint64_t, IdxOffset, (uint64_t)indices);
|
||||
SERIALISE_ELEMENT(uint32_t, BaseVtx, basevertex);
|
||||
|
||||
if(m_State <= EXECUTING)
|
||||
{
|
||||
m_Real.glDrawRangeElementsBaseVertex(Mode, Start, End, Count, Type, (const void *)IdxOffset, BaseVtx);
|
||||
}
|
||||
|
||||
const string desc = m_pSerialiser->GetDebugStr();
|
||||
|
||||
vector<DebugMessage> debugMessages = Serialise_DebugMessages();
|
||||
|
||||
if(m_State == READING)
|
||||
{
|
||||
AddEvent(DRAWELEMENTS, desc);
|
||||
string name = "glDrawRangeElementsBaseVertex(" +
|
||||
ToStr::Get(Mode) + ", " +
|
||||
ToStr::Get(Count) + ", " +
|
||||
ToStr::Get(Type) + ", " +
|
||||
ToStr::Get(IdxOffset) + ", " +
|
||||
ToStr::Get(BaseVtx) + ")";
|
||||
|
||||
FetchDrawcall draw;
|
||||
draw.name = name;
|
||||
draw.numIndices = Count;
|
||||
draw.numInstances = 1;
|
||||
draw.indexOffset = (uint32_t)IdxOffset;
|
||||
draw.vertexOffset = BaseVtx;
|
||||
draw.instanceOffset = 0;
|
||||
|
||||
draw.flags |= eDraw_Drawcall|eDraw_UseIBuffer;
|
||||
|
||||
draw.debugMessages = debugMessages;
|
||||
|
||||
m_LastDrawMode = Mode;
|
||||
m_LastIndexSize = Type;
|
||||
m_LastIndexOffset = (GLuint)IdxOffset;
|
||||
|
||||
AddDrawcall(draw, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedOpenGL::glDrawRangeElementsBaseVertex(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex)
|
||||
{
|
||||
m_Real.glDrawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex);
|
||||
|
||||
if(m_State == WRITING_CAPFRAME)
|
||||
{
|
||||
SCOPED_SERIALISE_CONTEXT(DRAWRANGEELEMENTSBASEVERTEX);
|
||||
Serialise_glDrawRangeElementsBaseVertex(mode, start, end, count, type, indices, basevertex);
|
||||
|
||||
m_ContextRecord->AddChunk(scope.Get());
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedOpenGL::Serialise_glDrawElementsBaseVertex(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex)
|
||||
{
|
||||
SERIALISE_ELEMENT(GLenum, Mode, mode);
|
||||
|
||||
Reference in New Issue
Block a user