static void dumpBlendState(StateWriter &writer, ID3D10Device *pDevice) { com_ptr<ID3D10BlendState> pBlendState; FLOAT BlendFactor[4]; UINT SampleMask; pDevice->OMGetBlendState(&pBlendState, BlendFactor, &SampleMask); writer.beginMember("BlendState"); dumpStateObjectDesc(writer, pBlendState); writer.endMember(); // BlendState writer.beginMember("BlendFactor"); writer.beginArray(); writer.writeFloat(BlendFactor[0]); writer.writeFloat(BlendFactor[1]); writer.writeFloat(BlendFactor[2]); writer.writeFloat(BlendFactor[3]); writer.endArray(); writer.endMember(); // BlendFactor writer.writeIntMember("SampleMask", SampleMask); }
static inline void dumpArbProgramUniforms(StateWriter &writer, Context &context, GLenum target, const char *prefix) { if (context.ES || context.core || !glIsEnabled(target)) { return; } GLint program_parameters = 0; glGetProgramivARB(target, GL_PROGRAM_PARAMETERS_ARB, &program_parameters); if (!program_parameters) { return; } GLint max_program_local_parameters = 0; glGetProgramivARB(target, GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB, &max_program_local_parameters); for (GLint index = 0; index < max_program_local_parameters; ++index) { GLdouble params[4] = {0, 0, 0, 0}; glGetProgramLocalParameterdvARB(target, index, params); if (!params[0] && !params[1] && !params[2] && !params[3]) { continue; } char name[256]; snprintf(name, sizeof name, "%sprogram.local[%i]", prefix, index); writer.beginMember(name); writer.beginArray(); writer.writeFloat(params[0]); writer.writeFloat(params[1]); writer.writeFloat(params[2]); writer.writeFloat(params[3]); writer.endArray(); writer.endMember(); } GLint max_program_env_parameters = 0; glGetProgramivARB(target, GL_MAX_PROGRAM_ENV_PARAMETERS_ARB, &max_program_env_parameters); for (GLint index = 0; index < max_program_env_parameters; ++index) { GLdouble params[4] = {0, 0, 0, 0}; glGetProgramEnvParameterdvARB(target, index, params); if (!params[0] && !params[1] && !params[2] && !params[3]) { continue; } char name[256]; snprintf(name, sizeof name, "%sprogram.env[%i]", prefix, index); writer.beginMember(name); writer.beginArray(); writer.writeFloat(params[0]); writer.writeFloat(params[1]); writer.writeFloat(params[2]); writer.writeFloat(params[3]); writer.endArray(); writer.endMember(); } }
static void dumpAttrib(StateWriter &writer, const AttribDesc &desc, const GLbyte *data) { assert(desc); if (desc.numRows > 1) { writer.beginArray(); } for (GLint row = 0; row < desc.numRows; ++row) { if (desc.numCols > 1) { writer.beginArray(); } for (GLint col = 0; col < desc.numCols; ++col) { union { const GLbyte *rawvalue; const GLfloat *fvalue; const GLdouble *dvalue; const GLint *ivalue; const GLuint *uivalue; const GLint64 *i64value; const GLuint64 *ui64value; } u; u.rawvalue = data + row*desc.rowStride + col*desc.colStride; switch (desc.elemType) { case GL_FLOAT: writer.writeFloat(*u.fvalue); break; case GL_DOUBLE: writer.writeFloat(*u.dvalue); break; case GL_INT: writer.writeInt(*u.ivalue); break; case GL_UNSIGNED_INT: writer.writeInt(*u.uivalue); break; case GL_INT64_ARB: writer.writeInt(*u.i64value); break; case GL_UNSIGNED_INT64_ARB: writer.writeInt(*u.ui64value); break; case GL_BOOL: writer.writeBool(*u.uivalue); break; default: assert(0); writer.writeNull(); break; } } if (desc.numCols > 1) { writer.endArray(); } } if (desc.numRows > 1) { writer.endArray(); } }