Implement glDrawRangeElementsBaseVertex

This commit is contained in:
baldurk
2014-11-23 19:39:10 +00:00
parent 403456a82f
commit 56d500ffdb
6 changed files with 73 additions and 0 deletions
+1
View File
@@ -241,6 +241,7 @@ enum GLChunkType
DRAWELEMENTS,
DRAWELEMENTS_INDIRECT,
DRAWRANGEELEMENTS,
DRAWRANGEELEMENTSBASEVERTEX,
DRAWELEMENTS_INSTANCED,
DRAWELEMENTS_INSTANCEDBASEINSTANCE,
DRAWELEMENTS_BASEVERTEX,
+4
View File
@@ -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;
+1
View File
@@ -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));
+1
View File
@@ -569,6 +569,7 @@ struct GLHookSet
PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glProgramUniformMatrix4x2dv;
PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glProgramUniformMatrix4x3dv;
PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glDrawRangeElementsBaseVertex;
PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance;
PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
+2
View File
@@ -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);