Implement all glUniformN_ and glProgramUniformMatrixMxN_ variants

* Using macros for most implementations redirecting to either
  Serialise_glUniformVector or Serialise_glUniformMatrix
This commit is contained in:
baldurk
2014-11-03 22:25:11 +00:00
parent c7528aeb49
commit d318ca5182
6 changed files with 895 additions and 564 deletions
+57
View File
@@ -280,6 +280,63 @@ ResourceFormat MakeResourceFormat(WrappedOpenGL &gl, GLenum target, GLenum fmt)
return ret;
}
template<>
string ToStrHelper<false, WrappedOpenGL::UniformType>::Get(const WrappedOpenGL::UniformType &el)
{
switch(el)
{
case WrappedOpenGL::UNIFORM_UNKNOWN: return "unk";
#define VEC2STR(suffix) case WrappedOpenGL::CONCAT(VEC, suffix): return STRINGIZE(suffix);
VEC2STR(1fv)
VEC2STR(1iv)
VEC2STR(1uiv)
VEC2STR(1dv)
VEC2STR(2fv)
VEC2STR(2iv)
VEC2STR(2uiv)
VEC2STR(2dv)
VEC2STR(3fv)
VEC2STR(3iv)
VEC2STR(3uiv)
VEC2STR(3dv)
VEC2STR(4fv)
VEC2STR(4iv)
VEC2STR(4uiv)
VEC2STR(4dv)
#undef VEC2STR
#define MAT2STR(suffix) case WrappedOpenGL::CONCAT(MAT, suffix): return STRINGIZE(suffix);
MAT2STR(2fv)
MAT2STR(2x3fv)
MAT2STR(2x4fv)
MAT2STR(3fv)
MAT2STR(3x2fv)
MAT2STR(3x4fv)
MAT2STR(4fv)
MAT2STR(4x2fv)
MAT2STR(4x3fv)
MAT2STR(2dv)
MAT2STR(2x3dv)
MAT2STR(2x4dv)
MAT2STR(3dv)
MAT2STR(3x2dv)
MAT2STR(3x4dv)
MAT2STR(4dv)
MAT2STR(4x2dv)
MAT2STR(4x3dv)
#undef MAT2STR
default:
break;
}
char tostrBuf[256] = {0};
StringFormat::snprintf(tostrBuf, 255, "WrappedOpenGL::UniformType<%d>", el);
return tostrBuf;
}
template<>
string ToStrHelper<false, RDCGLenum>::Get(const RDCGLenum &el)
{
-21
View File
@@ -203,27 +203,6 @@ const char *GLChunkNames[] =
"EndCapture",
};
template<>
string ToStrHelper<false, WrappedOpenGL::UniformType>::Get(const WrappedOpenGL::UniformType &el)
{
switch(el)
{
case WrappedOpenGL::UNIFORM_UNKNOWN: return "unk";
case WrappedOpenGL::VEC1FV: return "1fv";
case WrappedOpenGL::VEC1IV: return "1iv";
case WrappedOpenGL::VEC1UIV: return "1uiv";
case WrappedOpenGL::VEC2FV: return "2fv";
case WrappedOpenGL::VEC3FV: return "3fv";
case WrappedOpenGL::VEC4FV: return "4fv";
case WrappedOpenGL::MAT4FV: return "4fv";
}
char tostrBuf[256] = {0};
StringFormat::snprintf(tostrBuf, 255, "WrappedOpenGL::UniformType<%d>", el);
return tostrBuf;
}
GLInitParams::GLInitParams()
{
SerialiseVersion = GL_SERIALISE_VERSION;
+131 -14
View File
@@ -558,14 +558,45 @@ class WrappedOpenGL
{
UNIFORM_UNKNOWN,
VEC1FV,
VEC1IV,
VEC1UIV,
VEC2FV,
VEC3FV,
VEC4FV,
VEC1fv,
VEC1iv,
VEC1uiv,
VEC1dv,
MAT4FV,
VEC2fv,
VEC2iv,
VEC2uiv,
VEC2dv,
VEC3fv,
VEC3iv,
VEC3uiv,
VEC3dv,
VEC4fv,
VEC4iv,
VEC4uiv,
VEC4dv,
MAT2fv,
MAT2x3fv,
MAT2x4fv,
MAT3fv,
MAT3x2fv,
MAT3x4fv,
MAT4fv,
MAT4x2fv,
MAT4x3fv,
MAT2dv,
MAT2x3dv,
MAT2x4dv,
MAT3dv,
MAT3x2dv,
MAT3x4dv,
MAT4dv,
MAT4x2dv,
MAT4x3dv,
};
bool Serialise_glUniformMatrix(GLint location, GLsizei count, GLboolean transpose, const void *value, UniformType type);
@@ -574,25 +605,111 @@ class WrappedOpenGL
bool Serialise_glProgramUniformMatrix(GLuint program, GLint location, GLsizei count, GLboolean transpose, const void *value, UniformType type);
bool Serialise_glProgramUniformVector(GLuint program, GLint location, GLsizei count, const void *value, UniformType type);
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1f(GLint location, GLfloat value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1i(GLint location, GLint value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1ui(GLint location, GLuint value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1f(GLint location, GLfloat v0));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1i(GLint location, GLint v0));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1ui(GLint location, GLuint v0));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1d(GLint location, GLdouble v0));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2f(GLint location, GLfloat v0, GLfloat v1));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2i(GLint location, GLint v0, GLint v1));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2ui(GLint location, GLuint v0, GLuint v1));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2d(GLint location, GLdouble v0, GLdouble v1));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3i(GLint location, GLint v0, GLint v1, GLint v2));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3d(GLint location, GLdouble v0, GLdouble v1, GLdouble v2));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4d(GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1iv(GLint location, GLsizei count, const GLint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1uiv(GLint location, GLsizei count, const GLuint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1fv(GLint location, GLsizei count, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform1dv(GLint location, GLsizei count, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2iv(GLint location, GLsizei count, const GLint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2uiv(GLint location, GLsizei count, const GLuint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2fv(GLint location, GLsizei count, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform2dv(GLint location, GLsizei count, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3iv(GLint location, GLsizei count, const GLint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3uiv(GLint location, GLsizei count, const GLuint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3fv(GLint location, GLsizei count, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform3dv(GLint location, GLsizei count, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4iv(GLint location, GLsizei count, const GLint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4uiv(GLint location, GLsizei count, const GLuint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4fv(GLint location, GLsizei count, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniform4dv(GLint location, GLsizei count, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1f(GLuint program, GLint location, GLfloat v0));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1i(GLuint program, GLint location, GLint v0));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1ui(GLuint program, GLint location, GLuint v0));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1d(GLuint program, GLint location, GLdouble v0));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2f(GLuint program, GLint location, GLfloat v0, GLfloat v1));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2i(GLuint program, GLint location, GLint v0, GLint v1));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2ui(GLuint program, GLint location, GLuint v0, GLuint v1));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2d(GLuint program, GLint location, GLdouble v0, GLdouble v1));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3d(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4f(GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4i(GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4ui(GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4d(GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform1dv(GLuint program, GLint location, GLsizei count, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2iv(GLuint program, GLint location, GLsizei count, const GLint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2uiv(GLuint program, GLint location, GLsizei count, const GLuint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform2dv(GLuint program, GLint location, GLsizei count, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3iv(GLuint program, GLint location, GLsizei count, const GLint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3uiv(GLuint program, GLint location, GLsizei count, const GLuint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform3dv(GLuint program, GLint location, GLsizei count, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4iv(GLuint program, GLint location, GLsizei count, const GLint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4uiv(GLuint program, GLint location, GLsizei count, const GLuint *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniform4dv(GLuint program, GLint location, GLsizei count, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2x3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix2x4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3x2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix3x4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4x2dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glUniformMatrix4x3dv(GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3x4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4x2fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4x3fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2x3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix2x4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3x2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix3x4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4x2dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glProgramUniformMatrix4x3dv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value));
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawArrays(GLenum mode, GLint first, GLsizei count));
IMPLEMENT_FUNCTION_SERIALISED(void, glDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount));
+99 -17
View File
@@ -139,14 +139,6 @@ struct GLHookSet
PFNGLRELEASESHADERCOMPILERPROC glReleaseShaderCompiler;
PFNGLLINKPROGRAMPROC glLinkProgram;
PFNGLPROGRAMPARAMETERIPROC glProgramParameteri;
PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv;
PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i;
PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv;
PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv;
PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv;
PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv;
PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv;
PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv;
PFNGLUSEPROGRAMPROC glUseProgram;
PFNGLUSEPROGRAMSTAGESPROC glUseProgramStages;
PFNGLVALIDATEPROGRAMPROC glValidateProgram;
@@ -257,16 +249,106 @@ struct GLHookSet
PFNGLGETUNIFORMUIVPROC glGetUniformuiv;
PFNGLGETUNIFORMDVPROC glGetUniformdv;
PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
PFNGLUNIFORM1FPROC glUniform1f;
PFNGLUNIFORM1IPROC glUniform1i;
PFNGLUNIFORM1UIPROC glUniform1ui;
PFNGLUNIFORM1FVPROC glUniform1fv;
PFNGLUNIFORM1IVPROC glUniform1iv;
PFNGLUNIFORM1FPROC glUniform1f;
PFNGLUNIFORM1IPROC glUniform1i;
PFNGLUNIFORM1UIPROC glUniform1ui;
PFNGLUNIFORM1DPROC glUniform1d;
PFNGLUNIFORM2FPROC glUniform2f;
PFNGLUNIFORM2IPROC glUniform2i;
PFNGLUNIFORM2UIPROC glUniform2ui;
PFNGLUNIFORM2DPROC glUniform2d;
PFNGLUNIFORM3FPROC glUniform3f;
PFNGLUNIFORM3IPROC glUniform3i;
PFNGLUNIFORM3UIPROC glUniform3ui;
PFNGLUNIFORM3DPROC glUniform3d;
PFNGLUNIFORM4FPROC glUniform4f;
PFNGLUNIFORM4IPROC glUniform4i;
PFNGLUNIFORM4UIPROC glUniform4ui;
PFNGLUNIFORM4DPROC glUniform4d;
PFNGLUNIFORM1FVPROC glUniform1fv;
PFNGLUNIFORM1IVPROC glUniform1iv;
PFNGLUNIFORM1UIVPROC glUniform1uiv;
PFNGLUNIFORM2FVPROC glUniform2fv;
PFNGLUNIFORM3FVPROC glUniform3fv;
PFNGLUNIFORM4FVPROC glUniform4fv;
PFNGLUNIFORM1DVPROC glUniform1dv;
PFNGLUNIFORM2FVPROC glUniform2fv;
PFNGLUNIFORM2IVPROC glUniform2iv;
PFNGLUNIFORM2UIVPROC glUniform2uiv;
PFNGLUNIFORM2DVPROC glUniform2dv;
PFNGLUNIFORM3FVPROC glUniform3fv;
PFNGLUNIFORM3IVPROC glUniform3iv;
PFNGLUNIFORM3UIVPROC glUniform3uiv;
PFNGLUNIFORM3DVPROC glUniform3dv;
PFNGLUNIFORM4FVPROC glUniform4fv;
PFNGLUNIFORM4IVPROC glUniform4iv;
PFNGLUNIFORM4UIVPROC glUniform4uiv;
PFNGLUNIFORM4DVPROC glUniform4dv;
PFNGLUNIFORMMATRIX2FVPROC glUniformMatrix2fv;
PFNGLUNIFORMMATRIX2X3FVPROC glUniformMatrix2x3fv;
PFNGLUNIFORMMATRIX2X4FVPROC glUniformMatrix2x4fv;
PFNGLUNIFORMMATRIX3FVPROC glUniformMatrix3fv;
PFNGLUNIFORMMATRIX3X2FVPROC glUniformMatrix3x2fv;
PFNGLUNIFORMMATRIX3X4FVPROC glUniformMatrix3x4fv;
PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
PFNGLUNIFORMMATRIX4X2FVPROC glUniformMatrix4x2fv;
PFNGLUNIFORMMATRIX4X3FVPROC glUniformMatrix4x3fv;
PFNGLUNIFORMMATRIX2DVPROC glUniformMatrix2dv;
PFNGLUNIFORMMATRIX2X3DVPROC glUniformMatrix2x3dv;
PFNGLUNIFORMMATRIX2X4DVPROC glUniformMatrix2x4dv;
PFNGLUNIFORMMATRIX3DVPROC glUniformMatrix3dv;
PFNGLUNIFORMMATRIX3X2DVPROC glUniformMatrix3x2dv;
PFNGLUNIFORMMATRIX3X4DVPROC glUniformMatrix3x4dv;
PFNGLUNIFORMMATRIX4DVPROC glUniformMatrix4dv;
PFNGLUNIFORMMATRIX4X2DVPROC glUniformMatrix4x2dv;
PFNGLUNIFORMMATRIX4X3DVPROC glUniformMatrix4x3dv;
PFNGLPROGRAMUNIFORM1FPROC glProgramUniform1f;
PFNGLPROGRAMUNIFORM1IPROC glProgramUniform1i;
PFNGLPROGRAMUNIFORM1UIPROC glProgramUniform1ui;
PFNGLPROGRAMUNIFORM1DPROC glProgramUniform1d;
PFNGLPROGRAMUNIFORM2FPROC glProgramUniform2f;
PFNGLPROGRAMUNIFORM2IPROC glProgramUniform2i;
PFNGLPROGRAMUNIFORM2UIPROC glProgramUniform2ui;
PFNGLPROGRAMUNIFORM2DPROC glProgramUniform2d;
PFNGLPROGRAMUNIFORM3FPROC glProgramUniform3f;
PFNGLPROGRAMUNIFORM3IPROC glProgramUniform3i;
PFNGLPROGRAMUNIFORM3UIPROC glProgramUniform3ui;
PFNGLPROGRAMUNIFORM3DPROC glProgramUniform3d;
PFNGLPROGRAMUNIFORM4FPROC glProgramUniform4f;
PFNGLPROGRAMUNIFORM4IPROC glProgramUniform4i;
PFNGLPROGRAMUNIFORM4UIPROC glProgramUniform4ui;
PFNGLPROGRAMUNIFORM4DPROC glProgramUniform4d;
PFNGLPROGRAMUNIFORM1FVPROC glProgramUniform1fv;
PFNGLPROGRAMUNIFORM1IVPROC glProgramUniform1iv;
PFNGLPROGRAMUNIFORM1UIVPROC glProgramUniform1uiv;
PFNGLPROGRAMUNIFORM1DVPROC glProgramUniform1dv;
PFNGLPROGRAMUNIFORM2FVPROC glProgramUniform2fv;
PFNGLPROGRAMUNIFORM2IVPROC glProgramUniform2iv;
PFNGLPROGRAMUNIFORM2UIVPROC glProgramUniform2uiv;
PFNGLPROGRAMUNIFORM2DVPROC glProgramUniform2dv;
PFNGLPROGRAMUNIFORM3FVPROC glProgramUniform3fv;
PFNGLPROGRAMUNIFORM3IVPROC glProgramUniform3iv;
PFNGLPROGRAMUNIFORM3UIVPROC glProgramUniform3uiv;
PFNGLPROGRAMUNIFORM3DVPROC glProgramUniform3dv;
PFNGLPROGRAMUNIFORM4FVPROC glProgramUniform4fv;
PFNGLPROGRAMUNIFORM4IVPROC glProgramUniform4iv;
PFNGLPROGRAMUNIFORM4UIVPROC glProgramUniform4uiv;
PFNGLPROGRAMUNIFORM4DVPROC glProgramUniform4dv;
PFNGLPROGRAMUNIFORMMATRIX2FVPROC glProgramUniformMatrix2fv;
PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC glProgramUniformMatrix2x3fv;
PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC glProgramUniformMatrix2x4fv;
PFNGLPROGRAMUNIFORMMATRIX3FVPROC glProgramUniformMatrix3fv;
PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC glProgramUniformMatrix3x2fv;
PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC glProgramUniformMatrix3x4fv;
PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv;
PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC glProgramUniformMatrix4x2fv;
PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC glProgramUniformMatrix4x3fv;
PFNGLPROGRAMUNIFORMMATRIX2DVPROC glProgramUniformMatrix2dv;
PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC glProgramUniformMatrix2x3dv;
PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC glProgramUniformMatrix2x4dv;
PFNGLPROGRAMUNIFORMMATRIX3DVPROC glProgramUniformMatrix3dv;
PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC glProgramUniformMatrix3x2dv;
PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC glProgramUniformMatrix3x4dv;
PFNGLPROGRAMUNIFORMMATRIX4DVPROC glProgramUniformMatrix4dv;
PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC glProgramUniformMatrix4x2dv;
PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC glProgramUniformMatrix4x3dv;
PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC glDrawArraysInstancedBaseInstance;
PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
+198 -34
View File
@@ -152,14 +152,6 @@
HookExtension(PFNGLRELEASESHADERCOMPILERPROC, glReleaseShaderCompiler); \
HookExtension(PFNGLLINKPROGRAMPROC, glLinkProgram); \
HookExtension(PFNGLPROGRAMPARAMETERIPROC, glProgramParameteri); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX4FVPROC, glProgramUniformMatrix4fv); \
HookExtension(PFNGLPROGRAMUNIFORM1IPROC, glProgramUniform1i); \
HookExtension(PFNGLPROGRAMUNIFORM1FVPROC, glProgramUniform1fv); \
HookExtension(PFNGLPROGRAMUNIFORM1IVPROC, glProgramUniform1iv); \
HookExtension(PFNGLPROGRAMUNIFORM1UIVPROC, glProgramUniform1uiv); \
HookExtension(PFNGLPROGRAMUNIFORM2FVPROC, glProgramUniform2fv); \
HookExtension(PFNGLPROGRAMUNIFORM3FVPROC, glProgramUniform3fv); \
HookExtension(PFNGLPROGRAMUNIFORM4FVPROC, glProgramUniform4fv); \
HookExtension(PFNGLUSEPROGRAMPROC, glUseProgram); \
HookExtension(PFNGLUSEPROGRAMSTAGESPROC, glUseProgramStages); \
HookExtension(PFNGLVALIDATEPROGRAMPROC, glValidateProgram); \
@@ -271,16 +263,106 @@
HookExtension(PFNGLGETUNIFORMUIVPROC, glGetUniformuiv); \
HookExtension(PFNGLGETUNIFORMDVPROC, glGetUniformdv); \
HookExtension(PFNGLUNIFORMBLOCKBINDINGPROC, glUniformBlockBinding); \
HookExtension(PFNGLUNIFORMMATRIX4FVPROC, glUniformMatrix4fv); \
HookExtension(PFNGLUNIFORM1FPROC, glUniform1f); \
HookExtension(PFNGLUNIFORM1IPROC, glUniform1i); \
HookExtension(PFNGLUNIFORM1UIPROC, glUniform1ui); \
HookExtension(PFNGLUNIFORM1FVPROC, glUniform1fv); \
HookExtension(PFNGLUNIFORM1IVPROC, glUniform1iv); \
HookExtension(PFNGLUNIFORM1FPROC, glUniform1f); \
HookExtension(PFNGLUNIFORM1IPROC, glUniform1i); \
HookExtension(PFNGLUNIFORM1UIPROC, glUniform1ui); \
HookExtension(PFNGLUNIFORM1DPROC, glUniform1d); \
HookExtension(PFNGLUNIFORM2FPROC, glUniform2f); \
HookExtension(PFNGLUNIFORM2IPROC, glUniform2i); \
HookExtension(PFNGLUNIFORM2UIPROC, glUniform2ui); \
HookExtension(PFNGLUNIFORM2DPROC, glUniform2d); \
HookExtension(PFNGLUNIFORM3FPROC, glUniform3f); \
HookExtension(PFNGLUNIFORM3IPROC, glUniform3i); \
HookExtension(PFNGLUNIFORM3UIPROC, glUniform3ui); \
HookExtension(PFNGLUNIFORM3DPROC, glUniform3d); \
HookExtension(PFNGLUNIFORM4FPROC, glUniform4f); \
HookExtension(PFNGLUNIFORM4IPROC, glUniform4i); \
HookExtension(PFNGLUNIFORM4UIPROC, glUniform4ui); \
HookExtension(PFNGLUNIFORM4DPROC, glUniform4d); \
HookExtension(PFNGLUNIFORM1FVPROC, glUniform1fv); \
HookExtension(PFNGLUNIFORM1IVPROC, glUniform1iv); \
HookExtension(PFNGLUNIFORM1UIVPROC, glUniform1uiv); \
HookExtension(PFNGLUNIFORM2FVPROC, glUniform2fv); \
HookExtension(PFNGLUNIFORM3FVPROC, glUniform3fv); \
HookExtension(PFNGLUNIFORM4FVPROC, glUniform4fv); \
HookExtension(PFNGLUNIFORM1DVPROC, glUniform1dv); \
HookExtension(PFNGLUNIFORM2FVPROC, glUniform2fv); \
HookExtension(PFNGLUNIFORM2IVPROC, glUniform2iv); \
HookExtension(PFNGLUNIFORM2UIVPROC, glUniform2uiv); \
HookExtension(PFNGLUNIFORM2DVPROC, glUniform2dv); \
HookExtension(PFNGLUNIFORM3FVPROC, glUniform3fv); \
HookExtension(PFNGLUNIFORM3IVPROC, glUniform3iv); \
HookExtension(PFNGLUNIFORM3UIVPROC, glUniform3uiv); \
HookExtension(PFNGLUNIFORM3DVPROC, glUniform3dv); \
HookExtension(PFNGLUNIFORM4FVPROC, glUniform4fv); \
HookExtension(PFNGLUNIFORM4IVPROC, glUniform4iv); \
HookExtension(PFNGLUNIFORM4UIVPROC, glUniform4uiv); \
HookExtension(PFNGLUNIFORM4DVPROC, glUniform4dv); \
HookExtension(PFNGLUNIFORMMATRIX2FVPROC, glUniformMatrix2fv); \
HookExtension(PFNGLUNIFORMMATRIX2X3FVPROC, glUniformMatrix2x3fv); \
HookExtension(PFNGLUNIFORMMATRIX2X4FVPROC, glUniformMatrix2x4fv); \
HookExtension(PFNGLUNIFORMMATRIX3FVPROC, glUniformMatrix3fv); \
HookExtension(PFNGLUNIFORMMATRIX3X2FVPROC, glUniformMatrix3x2fv); \
HookExtension(PFNGLUNIFORMMATRIX3X4FVPROC, glUniformMatrix3x4fv); \
HookExtension(PFNGLUNIFORMMATRIX4FVPROC, glUniformMatrix4fv); \
HookExtension(PFNGLUNIFORMMATRIX4X2FVPROC, glUniformMatrix4x2fv); \
HookExtension(PFNGLUNIFORMMATRIX4X3FVPROC, glUniformMatrix4x3fv); \
HookExtension(PFNGLUNIFORMMATRIX2DVPROC, glUniformMatrix2dv); \
HookExtension(PFNGLUNIFORMMATRIX2X3DVPROC, glUniformMatrix2x3dv); \
HookExtension(PFNGLUNIFORMMATRIX2X4DVPROC, glUniformMatrix2x4dv); \
HookExtension(PFNGLUNIFORMMATRIX3DVPROC, glUniformMatrix3dv); \
HookExtension(PFNGLUNIFORMMATRIX3X2DVPROC, glUniformMatrix3x2dv); \
HookExtension(PFNGLUNIFORMMATRIX3X4DVPROC, glUniformMatrix3x4dv); \
HookExtension(PFNGLUNIFORMMATRIX4DVPROC, glUniformMatrix4dv); \
HookExtension(PFNGLUNIFORMMATRIX4X2DVPROC, glUniformMatrix4x2dv); \
HookExtension(PFNGLUNIFORMMATRIX4X3DVPROC, glUniformMatrix4x3dv); \
HookExtension(PFNGLPROGRAMUNIFORM1FPROC, glProgramUniform1f); \
HookExtension(PFNGLPROGRAMUNIFORM1IPROC, glProgramUniform1i); \
HookExtension(PFNGLPROGRAMUNIFORM1UIPROC, glProgramUniform1ui); \
HookExtension(PFNGLPROGRAMUNIFORM1DPROC, glProgramUniform1d); \
HookExtension(PFNGLPROGRAMUNIFORM2FPROC, glProgramUniform2f); \
HookExtension(PFNGLPROGRAMUNIFORM2IPROC, glProgramUniform2i); \
HookExtension(PFNGLPROGRAMUNIFORM2UIPROC, glProgramUniform2ui); \
HookExtension(PFNGLPROGRAMUNIFORM2DPROC, glProgramUniform2d); \
HookExtension(PFNGLPROGRAMUNIFORM3FPROC, glProgramUniform3f); \
HookExtension(PFNGLPROGRAMUNIFORM3IPROC, glProgramUniform3i); \
HookExtension(PFNGLPROGRAMUNIFORM3UIPROC, glProgramUniform3ui); \
HookExtension(PFNGLPROGRAMUNIFORM3DPROC, glProgramUniform3d); \
HookExtension(PFNGLPROGRAMUNIFORM4FPROC, glProgramUniform4f); \
HookExtension(PFNGLPROGRAMUNIFORM4IPROC, glProgramUniform4i); \
HookExtension(PFNGLPROGRAMUNIFORM4UIPROC, glProgramUniform4ui); \
HookExtension(PFNGLPROGRAMUNIFORM4DPROC, glProgramUniform4d); \
HookExtension(PFNGLPROGRAMUNIFORM1FVPROC, glProgramUniform1fv); \
HookExtension(PFNGLPROGRAMUNIFORM1IVPROC, glProgramUniform1iv); \
HookExtension(PFNGLPROGRAMUNIFORM1UIVPROC, glProgramUniform1uiv); \
HookExtension(PFNGLPROGRAMUNIFORM1DVPROC, glProgramUniform1dv); \
HookExtension(PFNGLPROGRAMUNIFORM2FVPROC, glProgramUniform2fv); \
HookExtension(PFNGLPROGRAMUNIFORM2IVPROC, glProgramUniform2iv); \
HookExtension(PFNGLPROGRAMUNIFORM2UIVPROC, glProgramUniform2uiv); \
HookExtension(PFNGLPROGRAMUNIFORM2DVPROC, glProgramUniform2dv); \
HookExtension(PFNGLPROGRAMUNIFORM3FVPROC, glProgramUniform3fv); \
HookExtension(PFNGLPROGRAMUNIFORM3IVPROC, glProgramUniform3iv); \
HookExtension(PFNGLPROGRAMUNIFORM3UIVPROC, glProgramUniform3uiv); \
HookExtension(PFNGLPROGRAMUNIFORM3DVPROC, glProgramUniform3dv); \
HookExtension(PFNGLPROGRAMUNIFORM4FVPROC, glProgramUniform4fv); \
HookExtension(PFNGLPROGRAMUNIFORM4IVPROC, glProgramUniform4iv); \
HookExtension(PFNGLPROGRAMUNIFORM4UIVPROC, glProgramUniform4uiv); \
HookExtension(PFNGLPROGRAMUNIFORM4DVPROC, glProgramUniform4dv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX2FVPROC, glProgramUniformMatrix2fv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC, glProgramUniformMatrix2x3fv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC, glProgramUniformMatrix2x4fv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX3FVPROC, glProgramUniformMatrix3fv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC, glProgramUniformMatrix3x2fv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC, glProgramUniformMatrix3x4fv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX4FVPROC, glProgramUniformMatrix4fv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC, glProgramUniformMatrix4x2fv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC, glProgramUniformMatrix4x3fv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX2DVPROC, glProgramUniformMatrix2dv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC, glProgramUniformMatrix2x3dv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC, glProgramUniformMatrix2x4dv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX3DVPROC, glProgramUniformMatrix3dv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC, glProgramUniformMatrix3x2dv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC, glProgramUniformMatrix3x4dv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX4DVPROC, glProgramUniformMatrix4dv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC, glProgramUniformMatrix4x2dv); \
HookExtension(PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC, glProgramUniformMatrix4x3dv); \
HookExtension(PFNGLDRAWRANGEELEMENTSPROC, glDrawRangeElements); \
HookExtension(PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC, glDrawArraysInstancedBaseInstance); \
HookExtension(PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced); \
@@ -507,14 +589,6 @@
HookWrapper0(void, glReleaseShaderCompiler); \
HookWrapper1(void, glLinkProgram, GLuint, program); \
HookWrapper3(void, glProgramParameteri, GLuint, program, GLenum, pname, GLint, value); \
HookWrapper5(void, glProgramUniformMatrix4fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper3(void, glProgramUniform1i, GLuint, program, GLint, location, GLint, v0); \
HookWrapper4(void, glProgramUniform1fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper4(void, glProgramUniform1iv, GLuint, program, GLint, location, GLsizei, count, const GLint *, value); \
HookWrapper4(void, glProgramUniform1uiv, GLuint, program, GLint, location, GLsizei, count, const GLuint *, value); \
HookWrapper4(void, glProgramUniform2fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper4(void, glProgramUniform3fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper4(void, glProgramUniform4fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper1(void, glUseProgram, GLuint, program); \
HookWrapper3(void, glUseProgramStages, GLuint, pipeline, GLbitfield, stages, GLuint, program); \
HookWrapper1(void, glValidateProgram, GLuint, program); \
@@ -625,16 +699,106 @@
HookWrapper3(void, glGetUniformuiv, GLuint, program, GLint, location, GLuint *, params); \
HookWrapper3(void, glGetUniformdv, GLuint, program, GLint, location, GLdouble *, params); \
HookWrapper3(void, glUniformBlockBinding, GLuint, program, GLuint, uniformBlockIndex, GLuint, uniformBlockBinding); \
HookWrapper4(void, glUniformMatrix4fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper2(void, glUniform1f, GLint, location, GLfloat, v0); \
HookWrapper2(void, glUniform1i, GLint, location, GLint, v0); \
HookWrapper2(void, glUniform1ui, GLint, location, GLuint, v0); \
HookWrapper3(void, glUniform1fv, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper3(void, glUniform1iv, GLint, location, GLsizei, count, const GLint *, value); \
HookWrapper2(void, glUniform1f, GLint, location, GLfloat, v0); \
HookWrapper2(void, glUniform1i, GLint, location, GLint, v0); \
HookWrapper2(void, glUniform1ui, GLint, location, GLuint, v0); \
HookWrapper2(void, glUniform1d, GLint, location, GLdouble, x); \
HookWrapper3(void, glUniform2f, GLint, location, GLfloat, v0, GLfloat, v1); \
HookWrapper3(void, glUniform2i, GLint, location, GLint, v0, GLint, v1); \
HookWrapper3(void, glUniform2ui, GLint, location, GLuint, v0, GLuint, v1); \
HookWrapper3(void, glUniform2d, GLint, location, GLdouble, x, GLdouble, y); \
HookWrapper4(void, glUniform3f, GLint, location, GLfloat, v0, GLfloat, v1, GLfloat, v2); \
HookWrapper4(void, glUniform3i, GLint, location, GLint, v0, GLint, v1, GLint, v2); \
HookWrapper4(void, glUniform3ui, GLint, location, GLuint, v0, GLuint, v1, GLuint, v2); \
HookWrapper4(void, glUniform3d, GLint, location, GLdouble, x, GLdouble, y, GLdouble, z); \
HookWrapper5(void, glUniform4f, GLint, location, GLfloat, v0, GLfloat, v1, GLfloat, v2, GLfloat, v3); \
HookWrapper5(void, glUniform4i, GLint, location, GLint, v0, GLint, v1, GLint, v2, GLint, v3); \
HookWrapper5(void, glUniform4ui, GLint, location, GLuint, v0, GLuint, v1, GLuint, v2, GLuint, v3); \
HookWrapper5(void, glUniform4d, GLint, location, GLdouble, x, GLdouble, y, GLdouble, z, GLdouble, w); \
HookWrapper3(void, glUniform1fv, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper3(void, glUniform1iv, GLint, location, GLsizei, count, const GLint *, value); \
HookWrapper3(void, glUniform1uiv, GLint, location, GLsizei, count, const GLuint *, value); \
HookWrapper3(void, glUniform2fv, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper3(void, glUniform3fv, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper3(void, glUniform4fv, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper3(void, glUniform1dv, GLint, location, GLsizei, count, const GLdouble *, value); \
HookWrapper3(void, glUniform2fv, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper3(void, glUniform2iv, GLint, location, GLsizei, count, const GLint *, value); \
HookWrapper3(void, glUniform2uiv, GLint, location, GLsizei, count, const GLuint *, value); \
HookWrapper3(void, glUniform2dv, GLint, location, GLsizei, count, const GLdouble *, value); \
HookWrapper3(void, glUniform3fv, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper3(void, glUniform3iv, GLint, location, GLsizei, count, const GLint *, value); \
HookWrapper3(void, glUniform3uiv, GLint, location, GLsizei, count, const GLuint *, value); \
HookWrapper3(void, glUniform3dv, GLint, location, GLsizei, count, const GLdouble *, value); \
HookWrapper3(void, glUniform4fv, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper3(void, glUniform4iv, GLint, location, GLsizei, count, const GLint *, value); \
HookWrapper3(void, glUniform4uiv, GLint, location, GLsizei, count, const GLuint *, value); \
HookWrapper3(void, glUniform4dv, GLint, location, GLsizei, count, const GLdouble *, value); \
HookWrapper4(void, glUniformMatrix2fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper4(void, glUniformMatrix2x3fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper4(void, glUniformMatrix2x4fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper4(void, glUniformMatrix3fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper4(void, glUniformMatrix3x2fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper4(void, glUniformMatrix3x4fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper4(void, glUniformMatrix4fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper4(void, glUniformMatrix4x2fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper4(void, glUniformMatrix4x3fv, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper4(void, glUniformMatrix2dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper4(void, glUniformMatrix2x3dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper4(void, glUniformMatrix2x4dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper4(void, glUniformMatrix3dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper4(void, glUniformMatrix3x2dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper4(void, glUniformMatrix3x4dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper4(void, glUniformMatrix4dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper4(void, glUniformMatrix4x2dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper4(void, glUniformMatrix4x3dv, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper3(void, glProgramUniform1f, GLuint, program, GLint, location, GLfloat, v0); \
HookWrapper3(void, glProgramUniform1i, GLuint, program, GLint, location, GLint, v0); \
HookWrapper3(void, glProgramUniform1ui, GLuint, program, GLint, location, GLuint, v0); \
HookWrapper3(void, glProgramUniform1d, GLuint, program, GLint, location, GLdouble, v0); \
HookWrapper4(void, glProgramUniform2f, GLuint, program, GLint, location, GLfloat, v0, GLfloat, v1); \
HookWrapper4(void, glProgramUniform2i, GLuint, program, GLint, location, GLint, v0, GLint, v1); \
HookWrapper4(void, glProgramUniform2ui, GLuint, program, GLint, location, GLuint, v0, GLuint, v1); \
HookWrapper4(void, glProgramUniform2d, GLuint, program, GLint, location, GLdouble, v0, GLdouble, v1); \
HookWrapper5(void, glProgramUniform3f, GLuint, program, GLint, location, GLfloat, v0, GLfloat, v1, GLfloat, v2); \
HookWrapper5(void, glProgramUniform3i, GLuint, program, GLint, location, GLint, v0, GLint, v1, GLint, v2); \
HookWrapper5(void, glProgramUniform3ui, GLuint, program, GLint, location, GLuint, v0, GLuint, v1, GLuint, v2); \
HookWrapper5(void, glProgramUniform3d, GLuint, program, GLint, location, GLdouble, v0, GLdouble, v1, GLdouble, v2); \
HookWrapper6(void, glProgramUniform4f, GLuint, program, GLint, location, GLfloat, v0, GLfloat, v1, GLfloat, v2, GLfloat, v3); \
HookWrapper6(void, glProgramUniform4i, GLuint, program, GLint, location, GLint, v0, GLint, v1, GLint, v2, GLint, v3); \
HookWrapper6(void, glProgramUniform4ui, GLuint, program, GLint, location, GLuint, v0, GLuint, v1, GLuint, v2, GLuint, v3); \
HookWrapper6(void, glProgramUniform4d, GLuint, program, GLint, location, GLdouble, v0, GLdouble, v1, GLdouble, v2, GLdouble, v3); \
HookWrapper4(void, glProgramUniform1fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper4(void, glProgramUniform1iv, GLuint, program, GLint, location, GLsizei, count, const GLint *, value); \
HookWrapper4(void, glProgramUniform1uiv, GLuint, program, GLint, location, GLsizei, count, const GLuint *, value); \
HookWrapper4(void, glProgramUniform1dv, GLuint, program, GLint, location, GLsizei, count, const GLdouble *, value); \
HookWrapper4(void, glProgramUniform2fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper4(void, glProgramUniform2iv, GLuint, program, GLint, location, GLsizei, count, const GLint *, value); \
HookWrapper4(void, glProgramUniform2uiv, GLuint, program, GLint, location, GLsizei, count, const GLuint *, value); \
HookWrapper4(void, glProgramUniform2dv, GLuint, program, GLint, location, GLsizei, count, const GLdouble *, value); \
HookWrapper4(void, glProgramUniform3fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper4(void, glProgramUniform3iv, GLuint, program, GLint, location, GLsizei, count, const GLint *, value); \
HookWrapper4(void, glProgramUniform3uiv, GLuint, program, GLint, location, GLsizei, count, const GLuint *, value); \
HookWrapper4(void, glProgramUniform3dv, GLuint, program, GLint, location, GLsizei, count, const GLdouble *, value); \
HookWrapper4(void, glProgramUniform4fv, GLuint, program, GLint, location, GLsizei, count, const GLfloat *, value); \
HookWrapper4(void, glProgramUniform4iv, GLuint, program, GLint, location, GLsizei, count, const GLint *, value); \
HookWrapper4(void, glProgramUniform4uiv, GLuint, program, GLint, location, GLsizei, count, const GLuint *, value); \
HookWrapper4(void, glProgramUniform4dv, GLuint, program, GLint, location, GLsizei, count, const GLdouble *, value); \
HookWrapper5(void, glProgramUniformMatrix2fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper5(void, glProgramUniformMatrix2x3fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper5(void, glProgramUniformMatrix2x4fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper5(void, glProgramUniformMatrix3fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper5(void, glProgramUniformMatrix3x2fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper5(void, glProgramUniformMatrix3x4fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper5(void, glProgramUniformMatrix4fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper5(void, glProgramUniformMatrix4x2fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper5(void, glProgramUniformMatrix4x3fv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLfloat *, value); \
HookWrapper5(void, glProgramUniformMatrix2dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper5(void, glProgramUniformMatrix2x3dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper5(void, glProgramUniformMatrix2x4dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper5(void, glProgramUniformMatrix3dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper5(void, glProgramUniformMatrix3x2dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper5(void, glProgramUniformMatrix3x4dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
HookWrapper5(void, glProgramUniformMatrix4dv, GLuint, program, GLint, location, GLsizei, count, GLboolean, transpose, const GLdouble *, value); \
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); \
HookWrapper5(void, glDrawArraysInstancedBaseInstance, GLenum, mode, GLint, first, GLsizei, count, GLsizei, instancecount, GLuint, baseinstance); \
HookWrapper4(void, glDrawArraysInstanced, GLenum, mode, GLint, first, GLsizei, count, GLsizei, instancecount); \
+410 -478
View File
@@ -26,226 +26,6 @@
#include "common/string_utils.h"
#include "../gl_driver.h"
void WrappedOpenGL::glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
m_Real.glUniformMatrix4fv(location, count, transpose, value);
if(m_State >= WRITING)
{
GLResourceRecord *record = m_ContextRecord;
// TODO grab this at capture time as initial state for program resources
if(m_State == WRITING_IDLE)
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program));
if(record)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_MATRIX);
Serialise_glProgramUniformMatrix(m_Program, location, count, transpose, value, MAT4FV);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glUniform1f(GLint location, GLfloat value)
{
m_Real.glUniform1f(location, value);
if(m_State >= WRITING)
{
GLResourceRecord *record = m_ContextRecord;
// TODO grab this at capture time as initial state for program resources
if(m_State == WRITING_IDLE)
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program));
if(record)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(m_Program, location, 1, &value, VEC1FV);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glUniform1i(GLint location, GLint value)
{
m_Real.glUniform1i(location, value);
if(m_State >= WRITING)
{
GLResourceRecord *record = m_ContextRecord;
// TODO grab this at capture time as initial state for program resources
if(m_State == WRITING_IDLE)
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program));
if(record)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(m_Program, location, 1, &value, VEC1IV);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glUniform1ui(GLint location, GLuint value)
{
m_Real.glUniform1ui(location, value);
if(m_State >= WRITING)
{
GLResourceRecord *record = m_ContextRecord;
// TODO grab this at capture time as initial state for program resources
if(m_State == WRITING_IDLE)
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program));
if(record)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(m_Program, location, 1, &value, VEC1UIV);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glUniform1fv(GLint location, GLsizei count, const GLfloat *value)
{
m_Real.glUniform1fv(location, count, value);
if(m_State >= WRITING)
{
GLResourceRecord *record = m_ContextRecord;
// TODO grab this at capture time as initial state for program resources
if(m_State == WRITING_IDLE)
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program));
if(record)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(m_Program, location, count, value, VEC1FV);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glUniform1iv(GLint location, GLsizei count, const GLint *value)
{
m_Real.glUniform1iv(location, count, value);
if(m_State >= WRITING)
{
GLResourceRecord *record = m_ContextRecord;
// TODO grab this at capture time as initial state for program resources
if(m_State == WRITING_IDLE)
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program));
if(record)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(m_Program, location, count, value, VEC1IV);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glUniform1uiv(GLint location, GLsizei count, const GLuint *value)
{
m_Real.glUniform1uiv(location, count, value);
if(m_State >= WRITING)
{
GLResourceRecord *record = m_ContextRecord;
// TODO grab this at capture time as initial state for program resources
if(m_State == WRITING_IDLE)
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program));
if(record)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(m_Program, location, count, value, VEC1UIV);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glUniform2fv(GLint location, GLsizei count, const GLfloat *value)
{
m_Real.glUniform2fv(location, count, value);
if(m_State >= WRITING)
{
GLResourceRecord *record = m_ContextRecord;
// TODO grab this at capture time as initial state for program resources
if(m_State == WRITING_IDLE)
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program));
if(record)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(m_Program, location, count, value, VEC2FV);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glUniform3fv(GLint location, GLsizei count, const GLfloat *value)
{
m_Real.glUniform3fv(location, count, value);
if(m_State >= WRITING)
{
GLResourceRecord *record = m_ContextRecord;
// TODO grab this at capture time as initial state for program resources
if(m_State == WRITING_IDLE)
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program));
if(record)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(m_Program, location, count, value, VEC3FV);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glUniform4fv(GLint location, GLsizei count, const GLfloat *value)
{
m_Real.glUniform4fv(location, count, value);
if(m_State >= WRITING)
{
GLResourceRecord *record = m_ContextRecord;
// TODO grab this at capture time as initial state for program resources
if(m_State == WRITING_IDLE)
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), m_Program));
if(record)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(m_Program, location, count, value, VEC4FV);
record->AddChunk(scope.Get());
}
}
}
bool WrappedOpenGL::Serialise_glProgramUniformVector(GLuint program, GLint location, GLsizei count, const void *value, UniformType type)
{
SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(ProgramRes(GetCtx(), program)));
@@ -254,37 +34,69 @@ bool WrappedOpenGL::Serialise_glProgramUniformVector(GLuint program, GLint locat
SERIALISE_ELEMENT(uint32_t, Count, count);
size_t elemsPerVec = 0;
size_t elemSize = sizeof(float);
switch(Type)
{
case VEC1IV:
case VEC1UIV:
case VEC1FV: elemsPerVec = 1; break;
case VEC2FV: elemsPerVec = 2; break;
case VEC3FV: elemsPerVec = 3; break;
case VEC4FV: elemsPerVec = 4; break;
case VEC1iv:
case VEC1uiv:
case VEC1fv:
case VEC1dv: elemsPerVec = 1; break;
case VEC2iv:
case VEC2uiv:
case VEC2fv:
case VEC2dv: elemsPerVec = 2; break;
case VEC3iv:
case VEC3uiv:
case VEC3fv:
case VEC3dv: elemsPerVec = 3; break;
case VEC4iv:
case VEC4uiv:
case VEC4fv:
case VEC4dv: elemsPerVec = 4; break;
default:
RDCERR("Unexpected uniform type to Serialise_glProgramUniformVector: %d", Type);
}
switch(Type)
{
case VEC1dv:
case VEC2dv:
case VEC3dv:
case VEC4dv:
elemSize = sizeof(double);
default:
break;
}
if(m_State >= WRITING)
{
m_pSerialiser->RawWriteBytes(value, sizeof(float)*elemsPerVec*Count);
m_pSerialiser->RawWriteBytes(value, elemSize*elemsPerVec*Count);
}
else if(m_State <= EXECUTING)
{
value = m_pSerialiser->RawReadBytes(sizeof(float)*elemsPerVec*Count);
value = m_pSerialiser->RawReadBytes(elemSize*elemsPerVec*Count);
GLuint live = GetResourceManager()->GetLiveResource(id).name;
switch(Type)
{
case VEC1IV: m_Real.glProgramUniform1iv(live, Loc, Count, (const GLint *)value); break;
case VEC1UIV: m_Real.glProgramUniform1uiv(live, Loc, Count, (const GLuint *)value); break;
case VEC1FV: m_Real.glProgramUniform1fv(live, Loc, Count, (const GLfloat *)value); break;
case VEC2FV: m_Real.glProgramUniform2fv(live, Loc, Count, (const GLfloat *)value); break;
case VEC3FV: m_Real.glProgramUniform3fv(live, Loc, Count, (const GLfloat *)value); break;
case VEC4FV: m_Real.glProgramUniform4fv(live, Loc, Count, (const GLfloat *)value); break;
case VEC1iv: m_Real.glProgramUniform1iv(live, Loc, Count, (const GLint *)value); break;
case VEC1uiv: m_Real.glProgramUniform1uiv(live, Loc, Count, (const GLuint *)value); break;
case VEC1fv: m_Real.glProgramUniform1fv(live, Loc, Count, (const GLfloat *)value); break;
case VEC1dv: m_Real.glProgramUniform1dv(live, Loc, Count, (const GLdouble *)value); break;
case VEC2iv: m_Real.glProgramUniform2iv(live, Loc, Count, (const GLint *)value); break;
case VEC2uiv: m_Real.glProgramUniform2uiv(live, Loc, Count, (const GLuint *)value); break;
case VEC2fv: m_Real.glProgramUniform2fv(live, Loc, Count, (const GLfloat *)value); break;
case VEC2dv: m_Real.glProgramUniform2dv(live, Loc, Count, (const GLdouble *)value); break;
case VEC3iv: m_Real.glProgramUniform3iv(live, Loc, Count, (const GLint *)value); break;
case VEC3uiv: m_Real.glProgramUniform3uiv(live, Loc, Count, (const GLuint *)value); break;
case VEC3fv: m_Real.glProgramUniform3fv(live, Loc, Count, (const GLfloat *)value); break;
case VEC3dv: m_Real.glProgramUniform3dv(live, Loc, Count, (const GLdouble *)value); break;
case VEC4iv: m_Real.glProgramUniform4iv(live, Loc, Count, (const GLint *)value); break;
case VEC4uiv: m_Real.glProgramUniform4uiv(live, Loc, Count, (const GLuint *)value); break;
case VEC4fv: m_Real.glProgramUniform4fv(live, Loc, Count, (const GLfloat *)value); break;
case VEC4dv: m_Real.glProgramUniform4dv(live, Loc, Count, (const GLdouble *)value); break;
default:
RDCERR("Unexpected uniform type to Serialise_glProgramUniformVector: %d", Type);
}
@@ -292,44 +104,38 @@ bool WrappedOpenGL::Serialise_glProgramUniformVector(GLuint program, GLint locat
if(m_pSerialiser->GetDebugText())
{
union
{
float *f;
int32_t *i;
uint32_t *u;
double *d;
} v;
v.f = (float *)value;
switch(Type)
{
case VEC1FV:
{
float *f = (float *)value;
m_pSerialiser->DebugPrint("value: {%f}\n", f[0]);
break;
}
case VEC1IV:
{
int32_t *i = (int32_t *)value;
m_pSerialiser->DebugPrint("value: {%d}\n", i[0]);
break;
}
case VEC1UIV:
{
uint32_t *u = (uint32_t *)value;
m_pSerialiser->DebugPrint("value: {%u}\n", u[0]);
break;
}
case VEC2FV:
{
float *f = (float *)value;
m_pSerialiser->DebugPrint("value: {%f %f}\n", f[0], f[1]);
break;
}
case VEC3FV:
{
float *f = (float *)value;
m_pSerialiser->DebugPrint("value: {%f %f %f}\n", f[0], f[1], f[2]);
break;
}
case VEC4FV:
{
float *f = (float *)value;
m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[0], f[1], f[2], f[3]);
break;
}
case VEC1fv: m_pSerialiser->DebugPrint("value: {%f}\n", v.f[0]); break;
case VEC1iv: m_pSerialiser->DebugPrint("value: {%d}\n", v.i[0]); break;
case VEC1uiv: m_pSerialiser->DebugPrint("value: {%u}\n", v.u[0]); break;
case VEC1dv: m_pSerialiser->DebugPrint("value: {%f}\n", (float)v.d[0]); break;
case VEC2fv: m_pSerialiser->DebugPrint("value: {%f, %f}\n", v.f[0], v.f[1]); break;
case VEC2iv: m_pSerialiser->DebugPrint("value: {%d, %d}\n", v.i[0], v.i[1]); break;
case VEC2uiv: m_pSerialiser->DebugPrint("value: {%u, %u}\n", v.u[0], v.u[1]); break;
case VEC2dv: m_pSerialiser->DebugPrint("value: {%f, %f}\n", (float)v.d[0], (float)v.d[1]); break;
case VEC3fv: m_pSerialiser->DebugPrint("value: {%f, %f, %f}\n", v.f[0], v.f[1], v.f[2]); break;
case VEC3iv: m_pSerialiser->DebugPrint("value: {%d, %d, %d}\n", v.i[0], v.i[1], v.i[2]); break;
case VEC3uiv: m_pSerialiser->DebugPrint("value: {%u, %u, %u}\n", v.u[0], v.u[1], v.u[2]); break;
case VEC3dv: m_pSerialiser->DebugPrint("value: {%f, %f, %f}\n", (float)v.d[0], (float)v.d[1], (float)v.d[2]); break;
case VEC4fv: m_pSerialiser->DebugPrint("value: {%f, %f, %f, %f}\n", v.f[0], v.f[1], v.f[2], v.f[3]); break;
case VEC4iv: m_pSerialiser->DebugPrint("value: {%d, %d, %d, %d}\n", v.i[0], v.i[1], v.i[2], v.i[3]); break;
case VEC4uiv: m_pSerialiser->DebugPrint("value: {%u, %u, %u, %u}\n", v.u[0], v.u[1], v.u[2], v.u[3]); break;
case VEC4dv: m_pSerialiser->DebugPrint("value: {%f, %f, %f, %f}\n", (float)v.d[0], (float)v.d[1], (float)v.d[2], (float)v.d[3]); break;
default:
RDCERR("Unexpected uniform type to Serialise_glProgramUniformVector: %d", Type);
}
@@ -338,167 +144,6 @@ bool WrappedOpenGL::Serialise_glProgramUniformVector(GLuint program, GLint locat
return true;
}
void WrappedOpenGL::glProgramUniform1i(GLuint program, GLint location, GLint v0)
{
m_Real.glProgramUniform1i(program, location, v0);
if(m_State > WRITING)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(program, location, 1, &v0, VEC1IV);
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(scope.Get());
}
else
{
// TODO grab this at capture time as initial state for program resources
GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program));
RDCASSERT(record);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glProgramUniform1iv(GLuint program, GLint location, GLsizei count, const GLint *value)
{
m_Real.glProgramUniform1iv(program, location, count, value);
if(m_State > WRITING)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(program, location, count, value, VEC1IV);
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(scope.Get());
}
else
{
// TODO grab this at capture time as initial state for program resources
GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program));
RDCASSERT(record);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glProgramUniform1fv(GLuint program, GLint location, GLsizei count, const GLfloat *value)
{
m_Real.glProgramUniform1fv(program, location, count, value);
if(m_State > WRITING)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(program, location, count, value, VEC1FV);
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(scope.Get());
}
else
{
// TODO grab this at capture time as initial state for program resources
GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program));
RDCASSERT(record);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glProgramUniform1uiv(GLuint program, GLint location, GLsizei count, const GLuint *value)
{
m_Real.glProgramUniform1uiv(program, location, count, value);
if(m_State > WRITING)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(program, location, count, value, VEC1UIV);
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(scope.Get());
}
else
{
// TODO grab this at capture time as initial state for program resources
GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program));
RDCASSERT(record);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glProgramUniform2fv(GLuint program, GLint location, GLsizei count, const GLfloat *value)
{
m_Real.glProgramUniform2fv(program, location, count, value);
if(m_State > WRITING)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(program, location, count, value, VEC2FV);
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(scope.Get());
}
else
{
// TODO grab this at capture time as initial state for program resources
GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program));
RDCASSERT(record);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glProgramUniform3fv(GLuint program, GLint location, GLsizei count, const GLfloat *value)
{
m_Real.glProgramUniform3fv(program, location, count, value);
if(m_State > WRITING)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(program, location, count, value, VEC3FV);
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(scope.Get());
}
else
{
// TODO grab this at capture time as initial state for program resources
GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program));
RDCASSERT(record);
record->AddChunk(scope.Get());
}
}
}
void WrappedOpenGL::glProgramUniform4fv(GLuint program, GLint location, GLsizei count, const GLfloat *value)
{
m_Real.glProgramUniform4fv(program, location, count, value);
if(m_State > WRITING)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR);
Serialise_glProgramUniformVector(program, location, count, value, VEC4FV);
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(scope.Get());
}
else
{
// TODO grab this at capture time as initial state for program resources
GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program));
RDCASSERT(record);
record->AddChunk(scope.Get());
}
}
}
bool WrappedOpenGL::Serialise_glProgramUniformMatrix(GLuint program, GLint location, GLsizei count, GLboolean transpose, const void *value, UniformType type)
{
SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(ProgramRes(GetCtx(), program)));
@@ -508,27 +153,82 @@ bool WrappedOpenGL::Serialise_glProgramUniformMatrix(GLuint program, GLint locat
SERIALISE_ELEMENT(uint8_t, Transpose, transpose);
size_t elemsPerMat = 0;
size_t elemSize = sizeof(float);
switch(Type)
{
case MAT4FV: elemsPerMat = 16; break;
case MAT2fv:
case MAT2dv:
elemsPerMat = 2*2; break;
case MAT2x3fv:
case MAT2x3dv:
case MAT3x2fv:
case MAT3x2dv:
elemsPerMat = 2*3; break;
case MAT2x4fv:
case MAT4x2fv:
elemsPerMat = 2*4; break;
case MAT3fv:
elemsPerMat = 3*3; break;
case MAT3x4fv:
case MAT4x3fv:
elemsPerMat = 3*4; break;
case MAT4fv:
elemsPerMat = 4*4; break;
default:
RDCERR("Unexpected uniform type to Serialise_glProgramUniformMatrix: %d", Type);
}
bool isDouble = false;
switch(Type)
{
case MAT2dv:
case MAT2x3dv:
case MAT2x4dv:
case MAT3dv:
case MAT3x2dv:
case MAT3x4dv:
case MAT4dv:
case MAT4x2dv:
case MAT4x3dv:
elemSize = sizeof(double);
isDouble = true;
break;
default:
break;
}
if(m_State >= WRITING)
{
m_pSerialiser->RawWriteBytes(value, sizeof(float)*elemsPerMat*Count);
m_pSerialiser->RawWriteBytes(value, elemSize*elemsPerMat*Count);
}
else if(m_State <= EXECUTING)
{
value = m_pSerialiser->RawReadBytes(sizeof(float)*elemsPerMat*Count);
value = m_pSerialiser->RawReadBytes(elemSize*elemsPerMat*Count);
GLuint live = GetResourceManager()->GetLiveResource(id).name;
switch(Type)
{
case MAT4FV: m_Real.glProgramUniformMatrix4fv(live, Loc, Count, Transpose, (const GLfloat *)value); break;
case MAT2fv: m_Real.glProgramUniformMatrix2fv (live, Loc, Count, Transpose, (const GLfloat *)value); break;
case MAT2x3fv: m_Real.glProgramUniformMatrix2x3fv(live, Loc, Count, Transpose, (const GLfloat *)value); break;
case MAT2x4fv: m_Real.glProgramUniformMatrix2x4fv(live, Loc, Count, Transpose, (const GLfloat *)value); break;
case MAT3fv: m_Real.glProgramUniformMatrix3fv (live, Loc, Count, Transpose, (const GLfloat *)value); break;
case MAT3x2fv: m_Real.glProgramUniformMatrix3x2fv(live, Loc, Count, Transpose, (const GLfloat *)value); break;
case MAT3x4fv: m_Real.glProgramUniformMatrix3x4fv(live, Loc, Count, Transpose, (const GLfloat *)value); break;
case MAT4fv: m_Real.glProgramUniformMatrix4fv (live, Loc, Count, Transpose, (const GLfloat *)value); break;
case MAT4x2fv: m_Real.glProgramUniformMatrix4x2fv(live, Loc, Count, Transpose, (const GLfloat *)value); break;
case MAT4x3fv: m_Real.glProgramUniformMatrix4x3fv(live, Loc, Count, Transpose, (const GLfloat *)value); break;
case MAT2dv: m_Real.glProgramUniformMatrix2dv (live, Loc, Count, Transpose, (const GLdouble *)value); break;
case MAT2x3dv: m_Real.glProgramUniformMatrix2x3dv(live, Loc, Count, Transpose, (const GLdouble *)value); break;
case MAT2x4dv: m_Real.glProgramUniformMatrix2x4dv(live, Loc, Count, Transpose, (const GLdouble *)value); break;
case MAT3dv: m_Real.glProgramUniformMatrix3dv (live, Loc, Count, Transpose, (const GLdouble *)value); break;
case MAT3x2dv: m_Real.glProgramUniformMatrix3x2dv(live, Loc, Count, Transpose, (const GLdouble *)value); break;
case MAT3x4dv: m_Real.glProgramUniformMatrix3x4dv(live, Loc, Count, Transpose, (const GLdouble *)value); break;
case MAT4dv: m_Real.glProgramUniformMatrix4dv (live, Loc, Count, Transpose, (const GLdouble *)value); break;
case MAT4x2dv: m_Real.glProgramUniformMatrix4x2dv(live, Loc, Count, Transpose, (const GLdouble *)value); break;
case MAT4x3dv: m_Real.glProgramUniformMatrix4x3dv(live, Loc, Count, Transpose, (const GLdouble *)value); break;
default:
RDCERR("Unexpected uniform type to Serialise_glProgramUniformMatrix: %d", Type);
}
@@ -536,54 +236,286 @@ bool WrappedOpenGL::Serialise_glProgramUniformMatrix(GLuint program, GLint locat
if(m_pSerialiser->GetDebugText())
{
switch(Type)
float *fv = (float *)value;
double *dv = (double *)value;
m_pSerialiser->DebugPrint("value: {");
for(size_t i=0; i < elemsPerMat; i++)
{
case MAT4FV:
{
float *f = (float *)value;
if(Transpose)
{
m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[0], f[4], f[8], f[12]);
m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[1], f[5], f[9], f[13]);
m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[2], f[6], f[10], f[14]);
m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[3], f[7], f[11], f[15]);
}
else
{
m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[0], f[1], f[2], f[3]);
m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[4], f[5], f[6], f[7]);
m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[8], f[9], f[10], f[11]);
m_pSerialiser->DebugPrint("value: {%f %f %f %f}\n", f[12], f[13], f[14], f[15]);
}
break;
}
default:
RDCERR("Unexpected uniform type to Serialise_glProgramUniformMatrix: %d", Type);
if(i == 0)
m_pSerialiser->DebugPrint("%f", isDouble ? (float)dv[i] : fv[i]);
else
m_pSerialiser->DebugPrint(", %f", isDouble ? (float)dv[i] : fv[i]);
}
m_pSerialiser->DebugPrint("}\n");
}
return true;
}
void WrappedOpenGL::glProgramUniformMatrix4fv(GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
{
m_Real.glProgramUniformMatrix4fv(program, location, count, transpose, value);
if(m_State > WRITING)
{
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_MATRIX);
Serialise_glProgramUniformMatrix(program, location, count, transpose, value, MAT4FV);
if(m_State == WRITING_CAPFRAME)
{
m_ContextRecord->AddChunk(scope.Get());
}
else
{
// TODO grab this at capture time as initial state for program resources
GLResourceRecord *record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), program));
RDCASSERT(record);
record->AddChunk(scope.Get());
}
}
#define UNIFORM_FUNC(count, suffix, paramtype, ...) \
void WrappedOpenGL::CONCAT(CONCAT(FUNCNAME, count), suffix)(FUNCPARAMS, __VA_ARGS__) \
{ \
m_Real.CONCAT(CONCAT(FUNCNAME, count), suffix)(FUNCARGPASS, ARRAYLIST); \
\
if(m_State >= WRITING) \
{ \
GLResourceRecord *record = m_ContextRecord; \
\
/* TODO grab this at capture time as initial state for program resources */ \
if(m_State == WRITING_IDLE) \
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), PROGRAM)); \
\
if(record) \
{ \
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); \
const paramtype vals[] = { ARRAYLIST }; \
Serialise_glProgramUniformVector(PROGRAM, location, 1, vals, CONCAT(CONCAT(VEC, count), CONCAT(suffix, v))); \
\
record->AddChunk(scope.Get()); \
} \
} \
}
#define FUNCNAME glUniform
#define FUNCPARAMS GLint location
#define FUNCARGPASS location
#define PROGRAM m_Program
#define ARRAYLIST v0
UNIFORM_FUNC(1, f, GLfloat, GLfloat v0)
UNIFORM_FUNC(1, i, GLint, GLint v0)
UNIFORM_FUNC(1, ui, GLuint, GLuint v0)
UNIFORM_FUNC(1, d, GLdouble, GLdouble v0)
#undef ARRAYLIST
#define ARRAYLIST v0, v1
UNIFORM_FUNC(2, f, GLfloat, GLfloat v0, GLfloat v1)
UNIFORM_FUNC(2, i, GLint, GLint v0, GLint v1)
UNIFORM_FUNC(2, ui, GLuint, GLuint v0, GLuint v1)
UNIFORM_FUNC(2, d, GLdouble, GLdouble v0, GLdouble v1)
#undef ARRAYLIST
#define ARRAYLIST v0, v1, v2
UNIFORM_FUNC(3, f, GLfloat, GLfloat v0, GLfloat v1, GLfloat v2)
UNIFORM_FUNC(3, i, GLint, GLint v0, GLint v1, GLint v2)
UNIFORM_FUNC(3, ui, GLuint, GLuint v0, GLuint v1, GLuint v2)
UNIFORM_FUNC(3, d, GLdouble, GLdouble v0, GLdouble v1, GLdouble v2)
#undef ARRAYLIST
#define ARRAYLIST v0, v1, v2, v3
UNIFORM_FUNC(4, f, GLfloat, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
UNIFORM_FUNC(4, i, GLint, GLint v0, GLint v1, GLint v2, GLint v3)
UNIFORM_FUNC(4, ui, GLuint, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
UNIFORM_FUNC(4, d, GLdouble, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3)
#undef FUNCNAME
#undef FUNCPARAMS
#undef FUNCARGPASS
#undef PROGRAM
#define FUNCNAME glProgramUniform
#define FUNCPARAMS GLuint program, GLint location
#define FUNCARGPASS program, location
#define PROGRAM program
#undef ARRAYLIST
#define ARRAYLIST v0
UNIFORM_FUNC(1, f, GLfloat, GLfloat v0)
UNIFORM_FUNC(1, i, GLint, GLint v0)
UNIFORM_FUNC(1, ui, GLuint, GLuint v0)
UNIFORM_FUNC(1, d, GLdouble, GLdouble v0)
#undef ARRAYLIST
#define ARRAYLIST v0, v1
UNIFORM_FUNC(2, f, GLfloat, GLfloat v0, GLfloat v1)
UNIFORM_FUNC(2, i, GLint, GLint v0, GLint v1)
UNIFORM_FUNC(2, ui, GLuint, GLuint v0, GLuint v1)
UNIFORM_FUNC(2, d, GLdouble, GLdouble v0, GLdouble v1)
#undef ARRAYLIST
#define ARRAYLIST v0, v1, v2
UNIFORM_FUNC(3, f, GLfloat, GLfloat v0, GLfloat v1, GLfloat v2)
UNIFORM_FUNC(3, i, GLint, GLint v0, GLint v1, GLint v2)
UNIFORM_FUNC(3, ui, GLuint, GLuint v0, GLuint v1, GLuint v2)
UNIFORM_FUNC(3, d, GLdouble, GLdouble v0, GLdouble v1, GLdouble v2)
#undef ARRAYLIST
#define ARRAYLIST v0, v1, v2, v3
UNIFORM_FUNC(4, f, GLfloat, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3)
UNIFORM_FUNC(4, i, GLint, GLint v0, GLint v1, GLint v2, GLint v3)
UNIFORM_FUNC(4, ui, GLuint, GLuint v0, GLuint v1, GLuint v2, GLuint v3)
UNIFORM_FUNC(4, d, GLdouble, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3)
#undef ARRAYLIST
#undef UNIFORM_FUNC
#define UNIFORM_FUNC(unicount, suffix, paramtype) \
void WrappedOpenGL::CONCAT(CONCAT(FUNCNAME, unicount), CONCAT(suffix, v))(FUNCPARAMS, GLsizei count, const paramtype *value) \
{ \
m_Real.CONCAT(CONCAT(FUNCNAME, unicount), CONCAT(suffix, v))(FUNCARGPASS, count, value); \
\
if(m_State >= WRITING) \
{ \
GLResourceRecord *record = m_ContextRecord; \
\
/* TODO grab this at capture time as initial state for program resources */ \
if(m_State == WRITING_IDLE) \
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), PROGRAM)); \
\
if(record) \
{ \
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_VECTOR); \
Serialise_glProgramUniformVector(PROGRAM, location, count, value, CONCAT(CONCAT(VEC, unicount), CONCAT(suffix, v))); \
\
record->AddChunk(scope.Get()); \
} \
} \
}
#undef FUNCNAME
#undef FUNCPARAMS
#undef FUNCARGPASS
#undef PROGRAM
#define FUNCNAME glUniform
#define FUNCPARAMS GLint location
#define FUNCARGPASS location
#define PROGRAM m_Program
UNIFORM_FUNC(1, f, GLfloat)
UNIFORM_FUNC(1, i, GLint)
UNIFORM_FUNC(1, ui, GLuint)
UNIFORM_FUNC(1, d, GLdouble)
UNIFORM_FUNC(2, f, GLfloat)
UNIFORM_FUNC(2, i, GLint)
UNIFORM_FUNC(2, ui, GLuint)
UNIFORM_FUNC(2, d, GLdouble)
UNIFORM_FUNC(3, f, GLfloat)
UNIFORM_FUNC(3, i, GLint)
UNIFORM_FUNC(3, ui, GLuint)
UNIFORM_FUNC(3, d, GLdouble)
UNIFORM_FUNC(4, f, GLfloat)
UNIFORM_FUNC(4, i, GLint)
UNIFORM_FUNC(4, ui, GLuint)
UNIFORM_FUNC(4, d, GLdouble)
#undef FUNCNAME
#undef FUNCPARAMS
#undef FUNCARGPASS
#undef PROGRAM
#define FUNCNAME glProgramUniform
#define FUNCPARAMS GLuint program, GLint location
#define FUNCARGPASS program, location
#define PROGRAM program
UNIFORM_FUNC(1, f, GLfloat)
UNIFORM_FUNC(1, i, GLint)
UNIFORM_FUNC(1, ui, GLuint)
UNIFORM_FUNC(1, d, GLdouble)
UNIFORM_FUNC(2, f, GLfloat)
UNIFORM_FUNC(2, i, GLint)
UNIFORM_FUNC(2, ui, GLuint)
UNIFORM_FUNC(2, d, GLdouble)
UNIFORM_FUNC(3, f, GLfloat)
UNIFORM_FUNC(3, i, GLint)
UNIFORM_FUNC(3, ui, GLuint)
UNIFORM_FUNC(3, d, GLdouble)
UNIFORM_FUNC(4, f, GLfloat)
UNIFORM_FUNC(4, i, GLint)
UNIFORM_FUNC(4, ui, GLuint)
UNIFORM_FUNC(4, d, GLdouble)
#undef UNIFORM_FUNC
#define UNIFORM_FUNC(dim, suffix, paramtype) \
void WrappedOpenGL::CONCAT(CONCAT(FUNCNAME, dim), suffix)(FUNCPARAMS, GLsizei count, GLboolean transpose, const paramtype *value) \
{ \
m_Real.CONCAT(CONCAT(FUNCNAME, dim), suffix)(FUNCARGPASS, count, transpose, value); \
\
if(m_State >= WRITING) \
{ \
GLResourceRecord *record = m_ContextRecord; \
\
/* TODO grab this at capture time as initial state for program resources */ \
if(m_State == WRITING_IDLE) \
record = GetResourceManager()->GetResourceRecord(ProgramRes(GetCtx(), PROGRAM)); \
\
if(record) \
{ \
SCOPED_SERIALISE_CONTEXT(PROGRAMUNIFORM_MATRIX); \
Serialise_glProgramUniformMatrix(PROGRAM, location, count, transpose, value, CONCAT(CONCAT(MAT, dim), suffix)); \
\
record->AddChunk(scope.Get()); \
} \
} \
}
#undef FUNCNAME
#undef FUNCPARAMS
#undef FUNCARGPASS
#undef PROGRAM
#define FUNCNAME glUniformMatrix
#define FUNCPARAMS GLint location
#define FUNCARGPASS location
#define PROGRAM m_Program
UNIFORM_FUNC(2, fv, GLfloat)
UNIFORM_FUNC(2x3, fv, GLfloat)
UNIFORM_FUNC(2x4, fv, GLfloat)
UNIFORM_FUNC(3, fv, GLfloat)
UNIFORM_FUNC(3x2, fv, GLfloat)
UNIFORM_FUNC(3x4, fv, GLfloat)
UNIFORM_FUNC(4, fv, GLfloat)
UNIFORM_FUNC(4x2, fv, GLfloat)
UNIFORM_FUNC(4x3, fv, GLfloat)
UNIFORM_FUNC(2, dv, GLdouble)
UNIFORM_FUNC(2x3, dv, GLdouble)
UNIFORM_FUNC(2x4, dv, GLdouble)
UNIFORM_FUNC(3, dv, GLdouble)
UNIFORM_FUNC(3x2, dv, GLdouble)
UNIFORM_FUNC(3x4, dv, GLdouble)
UNIFORM_FUNC(4, dv, GLdouble)
UNIFORM_FUNC(4x2, dv, GLdouble)
UNIFORM_FUNC(4x3, dv, GLdouble)
#undef FUNCNAME
#undef FUNCPARAMS
#undef FUNCARGPASS
#undef PROGRAM
#define FUNCNAME glProgramUniformMatrix
#define FUNCPARAMS GLuint program, GLint location
#define FUNCARGPASS program, location
#define PROGRAM program
UNIFORM_FUNC(2, fv, GLfloat)
UNIFORM_FUNC(2x3, fv, GLfloat)
UNIFORM_FUNC(2x4, fv, GLfloat)
UNIFORM_FUNC(3, fv, GLfloat)
UNIFORM_FUNC(3x2, fv, GLfloat)
UNIFORM_FUNC(3x4, fv, GLfloat)
UNIFORM_FUNC(4, fv, GLfloat)
UNIFORM_FUNC(4x2, fv, GLfloat)
UNIFORM_FUNC(4x3, fv, GLfloat)
UNIFORM_FUNC(2, dv, GLdouble)
UNIFORM_FUNC(2x3, dv, GLdouble)
UNIFORM_FUNC(2x4, dv, GLdouble)
UNIFORM_FUNC(3, dv, GLdouble)
UNIFORM_FUNC(3x2, dv, GLdouble)
UNIFORM_FUNC(3x4, dv, GLdouble)
UNIFORM_FUNC(4, dv, GLdouble)
UNIFORM_FUNC(4x2, dv, GLdouble)
UNIFORM_FUNC(4x3, dv, GLdouble)