static inline void dumpCurrentProgram(JSONWriter &json) { GLint program = 0; glGetIntegerv(GL_CURRENT_PROGRAM, &program); if (!program) { return; } GLint attached_shaders = 0; glGetProgramiv(program, GL_ATTACHED_SHADERS, &attached_shaders); if (!attached_shaders) { return; } GLuint *shaders = new GLuint[attached_shaders]; GLsizei count = 0; glGetAttachedShaders(program, attached_shaders, &count, shaders); for (GLsizei i = 0; i < count; ++ i) { dumpShader(json, shaders[i]); } delete [] shaders; }
HRESULT RSManager::redirectCreateVertexShader(CONST DWORD* pFunction, IDirect3DVertexShader9** ppShader) { bool shouldDump = Settings::get().getEnableShaderDumping(); bool shouldOverride = Settings::get().getEnableShaderOverride(); LPD3DXBUFFER pAssemblerBuffer = nullptr; LPD3DXBUFFER pFunctionBuffer = nullptr; UINT32 hash; if (shouldDump || shouldOverride) { if (disassembleShader(pFunction, &pAssemblerBuffer)) { hash = SuperFastHash(static_cast<char *>(pAssemblerBuffer->GetBufferPointer()), pAssemblerBuffer->GetBufferSize()); } else { shouldDump = false; shouldOverride = false; } } if (shouldDump) { dumpShader(hash, VERTEX_SHADER_DUMP_DIR, pAssemblerBuffer); } if (shouldOverride) { if (getOverrideShader(hash, VERTEX_SHADER_OVERRIDE_DIR, &pFunctionBuffer)) { pFunction = static_cast<DWORD *>(pFunctionBuffer->GetBufferPointer()); } } HRESULT result = d3ddev->CreateVertexShader(pFunction, ppShader); if (shouldDump || shouldOverride) { SDLOG(1, "Created vertex shader for hash %08x: 0x%p\n", hash, *ppShader); } SAFERELEASE(pAssemblerBuffer); SAFERELEASE(pFunctionBuffer); return result; }
void fsDebugMgr::checkSpecialCommand() { u8 cmd_no = 0; if (fsInputMgr::isOn(fsInputMgr::KEY_D)) { if (fsInputMgr::isPressed(fsInputMgr::KEY_1)) { cmd_no = 1; } else if (fsInputMgr::isPressed(fsInputMgr::KEY_2)) { cmd_no = 2; } else if (fsInputMgr::isPressed(fsInputMgr::KEY_3)) { cmd_no = 3; } else if (fsInputMgr::isPressed(fsInputMgr::KEY_4)) { cmd_no = 4; } else if (fsInputMgr::isPressed(fsInputMgr::KEY_5)) { cmd_no = 5; } else if (fsInputMgr::isPressed(fsInputMgr::KEY_6)) { cmd_no = 6; } else if (fsInputMgr::isPressed(fsInputMgr::KEY_7)) { cmd_no = 7; } else if (fsInputMgr::isPressed(fsInputMgr::KEY_8)) { cmd_no = 8; } else if (fsInputMgr::isPressed(fsInputMgr::KEY_PAGEUP)) { cmd_no = 100; } else if (fsInputMgr::isPressed(fsInputMgr::KEY_PAGEDOWN)) { cmd_no = 101; } } if (fsInputMgr::isPressed(fsInputMgr::KEY_LBUTTON)) { r32 mouse_x = m_dbg_mode_scr->framebufferXToScreenX(fsInputMgr::getMouseX()); r32 mouse_y = m_dbg_mode_scr->framebufferYToScreenY(fsInputMgr::getMouseY()); if (mouse_x > 0.0f && mouse_y > 0.0f) { if (m_dbg_mode_tap_cntr < 2) { m_dbg_mode_tap_cntr++; } else if (m_dbg_mode_tap_cntr > 2) { m_dbg_mode_tap_cntr = 1; } } else if ((m_dbg_mode_tap_cntr >= 2 && m_dbg_mode_tap_cntr <= 3 && mouse_x < 0.0f && mouse_y > 0.0f) || // (m_dbg_mode_tap_cntr >= 4 && m_dbg_mode_tap_cntr <= 5 && mouse_x < 0.0f && mouse_y < 0.0f) || // (m_dbg_mode_tap_cntr >= 6 && m_dbg_mode_tap_cntr <= 7 && mouse_x > 0.0f && mouse_y < 0.0f)) { m_dbg_mode_tap_cntr++; } else { m_dbg_mode_tap_cntr = 0; } if (m_dbg_mode_tap_cntr == 8) { cmd_no = 1; m_dbg_mode_tap_cntr = 0; m_dbg_dump_tap_cntr = 0; m_scroll_hold_cntr = 0; } if (m_dbg_mode.getType() == MODE_CONSOLE) { if (mouse_x > 0.0f && mouse_y > 0.0f) { if (m_dbg_dump_tap_cntr >= 3 && m_dbg_dump_tap_cntr < 100) { cmd_no = m_dbg_dump_tap_cntr - 1; m_dbg_mode_tap_cntr = 0; m_scroll_hold_cntr = 0; } m_dbg_dump_tap_cntr = 1; } else if (mouse_x < 0.0f && mouse_y < 0.0f) { m_dbg_dump_tap_cntr++; } else { m_dbg_dump_tap_cntr = 0; } } } if (m_dbg_mode.getType() == MODE_CONSOLE) { r32 mouse_y = m_dbg_mode_scr->framebufferYToScreenY(fsInputMgr::getMouseY()); if (fsInputMgr::isOn(fsInputMgr::KEY_LBUTTON)) { if (mouse_y > 0.0f) { m_scroll_hold_cntr++; } else { m_scroll_hold_cntr--; } if (fsMath::abs(m_scroll_hold_cntr) >= fsTaskMgr::getAimFPS()) { cmd_no = (m_scroll_hold_cntr > 0) ? 100 : 101; m_dbg_mode_tap_cntr = 0; m_dbg_dump_tap_cntr = 0; m_scroll_hold_cntr = 0; } } else { m_scroll_hold_cntr = 0; } } switch (cmd_no) { case 1: if (m_dbg_mode.getType() == MODE_OFF) { setDebugMode(MODE_MONITOR); } else if (m_dbg_mode.getType() == MODE_MONITOR) { setDebugMode(MODE_CONSOLE); } else { setDebugMode(MODE_OFF); } break; case 2: dumpMemory(); break; case 3: dumpTask(); break; case 4: dumpResource(); break; case 5: dumpConfig(); break; case 6: dumpScreen(); break; case 7: dumpTexture(); break; case 8: dumpShader(); break; case 100: pageUpConsole(); break; case 101: pageDownConsole(); break; default: break; } }