static void dumpProgramUniformsStage(JSONWriter &json, GLint program, const char *stage) { if (program) { json.beginMember(stage); json.beginObject(); dumpProgramUniforms(json, program); json.endObject(); json.endMember(); } }
static void dumpProgramUniformsStage(StateWriter &writer, GLint program, const char *stage) { if (program <= 0) { return; } writer.beginMember(stage); writer.beginObject(); dumpProgramUniforms(writer, program); writer.endObject(); writer.endMember(); }
void dumpShadersUniforms(StateWriter &writer, Context &context) { GLint pipeline = 0; GLint vertex_program = 0; GLint fragment_program = 0; GLint geometry_program = 0; GLint tess_control_program = 0; GLint tess_evaluation_program = 0; GLint compute_program = 0; if (!context.ES) { glGetIntegerv(GL_PROGRAM_PIPELINE_BINDING, &pipeline); if (pipeline) { glGetProgramPipelineiv(pipeline, GL_VERTEX_SHADER, &vertex_program); glGetProgramPipelineiv(pipeline, GL_FRAGMENT_SHADER, &fragment_program); glGetProgramPipelineiv(pipeline, GL_GEOMETRY_SHADER, &geometry_program); glGetProgramPipelineiv(pipeline, GL_TESS_CONTROL_SHADER, &tess_control_program); glGetProgramPipelineiv(pipeline, GL_TESS_EVALUATION_SHADER, &tess_evaluation_program); glGetProgramPipelineiv(pipeline, GL_COMPUTE_SHADER, &compute_program); } } GLint program = 0; if (!pipeline) { glGetIntegerv(GL_CURRENT_PROGRAM, &program); } writer.beginMember("shaders"); writer.beginObject(); if (pipeline) { dumpProgram(writer, context, vertex_program); dumpProgram(writer, context, fragment_program); dumpProgram(writer, context, geometry_program); dumpProgram(writer, context, tess_control_program); dumpProgram(writer, context, tess_evaluation_program); dumpProgram(writer, context, compute_program); } else if (program) { dumpProgram(writer, context, program); } else { dumpArbProgram(writer, context, GL_FRAGMENT_PROGRAM_ARB); dumpArbProgram(writer, context, GL_VERTEX_PROGRAM_ARB); } writer.endObject(); writer.endMember(); // shaders writer.beginMember("uniforms"); writer.beginObject(); if (pipeline) { dumpProgramUniformsStage(writer, vertex_program, "GL_VERTEX_SHADER"); dumpProgramUniformsStage(writer, fragment_program, "GL_FRAGMENT_SHADER"); dumpProgramUniformsStage(writer, geometry_program, "GL_GEOMETRY_SHADER"); dumpProgramUniformsStage(writer, tess_control_program, "GL_TESS_CONTROL_SHADER"); dumpProgramUniformsStage(writer, tess_evaluation_program, "GL_TESS_EVALUATION_SHADER"); dumpProgramUniformsStage(writer, compute_program, "GL_COMPUTE_SHADER"); } else if (program) { dumpProgramUniforms(writer, program); } else { dumpArbProgramUniforms(writer, context, GL_FRAGMENT_PROGRAM_ARB, "fp."); dumpArbProgramUniforms(writer, context, GL_VERTEX_PROGRAM_ARB, "vp."); } writer.endObject(); writer.endMember(); // uniforms writer.beginMember("buffers"); writer.beginObject(); if (!context.ES) { if (pipeline) { dumpVertexAttributes(writer, context, vertex_program); } else { dumpVertexAttributes(writer, context, program); } if (program) { dumpTransformFeedback(writer, program); } } writer.endObject(); writer.endMember(); // buffers }