Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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;
    }
}