int main() { akaiImage *img = new akaiImage("/akai.iso"); dumpPartitions(img); if (img) { akaiSample *smp = img->getSample("A/01 VI LNG FF/VI LGFF G2-L"); if (smp) dumpSample(smp); akaiProgram *prgm = img->getProgram("A/01 VI LNG FF/VI LONG FF"); if (prgm) dumpProgram(prgm); if (prgm) delete prgm; if (smp) delete smp; delete img; } return 0; }
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 }
// convert statements to conjunctive normal form int convert2cnf() { if (!phases[EXPANDFILE] || !phases[PARSEFILE] || !phases[ADDEXTRAAXIOMS] || !phases[CONVERT2CNF]) { cout << endl; cout << "Skipping conversion to CNF ..." << endl; return(OK); } // clear program structure clearProgram(); clearClauses(); // loop over all expressions and convert ListIterator<Semantic * > ptreesIter(ptrees); for ( ; !ptreesIter.done(); ptreesIter++) { // convert biconditionals to implications if (ptreesIter()->removeBiconditionals() != OK) { ERROR("removeBiconditionals failed.", EINVAL); return(NOTOK); } // convert implications to ORs and NOTs if (ptreesIter()->removeConditionals() != OK) { ERROR("removeConditionals failed.", EINVAL); return(NOTOK); } // apply demorgan's laws to push negation down if (ptreesIter()->demorgans() != OK) { ERROR("demorgans failed.", EINVAL); return(NOTOK); } // rename all variables to unique names if (ptreesIter()->renameVariables() != OK) { ERROR("renameVariables failed.", EINVAL); return(NOTOK); } // remove existential quantifier with skolem functions if (ptreesIter()->skolemize() != OK) { ERROR("skolemize failed.", EINVAL); return(NOTOK); } // remove universal quantifiers if (ptreesIter()->removeUniversals() != OK) { ERROR("removeUniversals failed.", EINVAL); return(NOTOK); } // distribution law for ORs and ANDs. if (ptreesIter()->distribution() != OK) { ERROR("distribution failed.", EINVAL); return(NOTOK); } // get clauses in programs if (ptreesIter()->getClauses(program) != OK) { ERROR("getClauses failed.", EINVAL); return(NOTOK); } } // rename variables in clauses ListIterator<Semantic *> programIter(program); for ( ; !programIter.done(); programIter++) { // rename all variables to unique names if (programIter()->renameAgain() != OK) { ERROR("renameAgain failed.", EINVAL); return(NOTOK); } // get clauses as lists if (programIter()->getClausesAsLists(clauses) != OK) { ERROR("getClausesAsList failed.", EINVAL); return(NOTOK); } } // dump data if (verbose) { cout << endl; cout << "Dumping program ..." << endl; dumpProgram(); cout << endl; cout << "Dumping program clauses ..." << endl; dumpClauses(); } // all done return(OK); }