std::string VertexProgramDecompiler::BuildCode() { std::string main_body; for (uint i = 0, lvl = 1; i < m_instr_count; i++) { lvl -= m_instructions[i].close_scopes; if (lvl < 1) lvl = 1; //assert(lvl >= 1); for (int j = 0; j < m_instructions[i].put_close_scopes; ++j) { --lvl; if (lvl < 1) lvl = 1; main_body.append(lvl, '\t') += "}\n"; } for (int j = 0; j < m_instructions[i].do_count; ++j) { main_body.append(lvl, '\t') += "do\n"; main_body.append(lvl, '\t') += "{\n"; lvl++; } for (uint j = 0; j < m_instructions[i].body.size(); ++j) { main_body.append(lvl, '\t') += m_instructions[i].body[j] + "\n"; } lvl += m_instructions[i].open_scopes; } std::stringstream OS; insertHeader(OS); insertInputs(OS, m_parr.params[PF_PARAM_IN]); OS << std::endl; insertOutputs(OS, m_parr.params[PF_PARAM_NONE]); OS << std::endl; insertConstants(OS, m_parr.params[PF_PARAM_UNIFORM]); OS << std::endl; insertMainStart(OS); OS << main_body.c_str() << std::endl; insertMainEnd(OS); return OS.str(); }
std::string FragmentProgramDecompiler::BuildCode() { //main += fmt::format("\tgl_FragColor = %c0;\n", m_ctrl & 0x40 ? 'r' : 'h'); std::stringstream OS; insertHeader(OS); OS << std::endl; insertConstants(OS); OS << std::endl; insertIntputs(OS); OS << std::endl; insertOutputs(OS); OS << std::endl; insertMainStart(OS); OS << main << std::endl; insertMainEnd(OS); return OS.str(); }