mirror of
https://github.com/libretro/Play-.git
synced 2025-02-08 18:16:12 +00:00
Frame Debugger: Allow the framebuffer's size/format to be changed by the user.
This commit is contained in:
parent
544f287499
commit
3fe421e13e
@ -40,9 +40,11 @@ CFrameDebugger::CFrameDebugger()
|
||||
m_tab = std::make_unique<CTabHost>(*m_mainSplitter, GetClientRect());
|
||||
|
||||
m_gsContextView0 = std::make_unique<CGsContextView>(*m_tab, GetClientRect(), m_gs.get(), 0);
|
||||
m_gsContextView0->SetFbDisplayMode(m_fbDisplayMode);
|
||||
m_gsContextView0->Show(SW_HIDE);
|
||||
|
||||
m_gsContextView1 = std::make_unique<CGsContextView>(*m_tab, GetClientRect(), m_gs.get(), 1);
|
||||
m_gsContextView1->SetFbDisplayMode(m_fbDisplayMode);
|
||||
m_gsContextView1->Show(SW_HIDE);
|
||||
|
||||
m_gsInputStateView = std::make_unique<CGsInputStateView>(*m_tab, GetClientRect());
|
||||
@ -112,6 +114,15 @@ long CFrameDebugger::OnCommand(unsigned short id, unsigned short msg, HWND hwndF
|
||||
case ID_FD_SETTINGS_ALPHABLEND:
|
||||
ToggleAlphaBlending();
|
||||
break;
|
||||
case ID_FD_SETTINGS_FB_RAW:
|
||||
SetFbDisplayMode(CGsContextView::FB_DISPLAY_MODE_RAW);
|
||||
break;
|
||||
case ID_FD_SETTINGS_FB_448I:
|
||||
SetFbDisplayMode(CGsContextView::FB_DISPLAY_MODE_448I);
|
||||
break;
|
||||
case ID_FD_SETTINGS_FB_448P:
|
||||
SetFbDisplayMode(CGsContextView::FB_DISPLAY_MODE_448P);
|
||||
break;
|
||||
case ID_FD_VU1_STEP:
|
||||
StepVu1();
|
||||
break;
|
||||
@ -190,6 +201,21 @@ void CFrameDebugger::UpdateMenus()
|
||||
assert(!alphaBlendMenuItem.IsEmpty());
|
||||
alphaBlendMenuItem.Check(m_gs->GetAlphaBlendingEnabled());
|
||||
}
|
||||
{
|
||||
auto fbDisplayModeRawMenuItem = Framework::Win32::CMenuItem::FindById(GetMenu(m_hWnd), ID_FD_SETTINGS_FB_RAW);
|
||||
assert(!fbDisplayModeRawMenuItem.IsEmpty());
|
||||
fbDisplayModeRawMenuItem.Check(m_fbDisplayMode == CGsContextView::FB_DISPLAY_MODE_RAW);
|
||||
}
|
||||
{
|
||||
auto fbDisplayMode448iMenuItem = Framework::Win32::CMenuItem::FindById(GetMenu(m_hWnd), ID_FD_SETTINGS_FB_448I);
|
||||
assert(!fbDisplayMode448iMenuItem.IsEmpty());
|
||||
fbDisplayMode448iMenuItem.Check(m_fbDisplayMode == CGsContextView::FB_DISPLAY_MODE_448I);
|
||||
}
|
||||
{
|
||||
auto fbDisplayMode448pMenuItem = Framework::Win32::CMenuItem::FindById(GetMenu(m_hWnd), ID_FD_SETTINGS_FB_448P);
|
||||
assert(!fbDisplayMode448pMenuItem.IsEmpty());
|
||||
fbDisplayMode448pMenuItem.Check(m_fbDisplayMode == CGsContextView::FB_DISPLAY_MODE_448P);
|
||||
}
|
||||
}
|
||||
|
||||
void CFrameDebugger::UpdateDisplay(int32 targetCmdIndex)
|
||||
@ -321,6 +347,14 @@ void CFrameDebugger::ToggleAlphaBlending()
|
||||
UpdateMenus();
|
||||
}
|
||||
|
||||
void CFrameDebugger::SetFbDisplayMode(CGsContextView::FB_DISPLAY_MODE fbDisplayMode)
|
||||
{
|
||||
m_gsContextView0->SetFbDisplayMode(fbDisplayMode);
|
||||
m_gsContextView1->SetFbDisplayMode(fbDisplayMode);
|
||||
m_fbDisplayMode = fbDisplayMode;
|
||||
UpdateMenus();
|
||||
}
|
||||
|
||||
void CFrameDebugger::StepVu1()
|
||||
{
|
||||
#ifdef DEBUGGER_INCLUDED
|
||||
|
@ -43,11 +43,13 @@ private:
|
||||
void ToggleAlphaTest();
|
||||
void ToggleDepthTest();
|
||||
void ToggleAlphaBlending();
|
||||
void SetFbDisplayMode(CGsContextView::FB_DISPLAY_MODE);
|
||||
void StepVu1();
|
||||
|
||||
std::unique_ptr<CGSH_Direct3D9> m_gs;
|
||||
CGsPacketMetadata m_currentMetadata;
|
||||
DRAWINGKICK_INFO m_currentDrawingKick;
|
||||
CGsContextView::FB_DISPLAY_MODE m_fbDisplayMode = CGsContextView::FB_DISPLAY_MODE_RAW;
|
||||
CFrameDump m_frameDump;
|
||||
CVu1Vm m_vu1vm;
|
||||
|
||||
|
@ -35,6 +35,12 @@ CGsContextView::~CGsContextView()
|
||||
|
||||
}
|
||||
|
||||
void CGsContextView::SetFbDisplayMode(FB_DISPLAY_MODE fbDisplayMode)
|
||||
{
|
||||
m_fbDisplayMode = fbDisplayMode;
|
||||
UpdateBufferView();
|
||||
}
|
||||
|
||||
void CGsContextView::UpdateState(CGSHandler* gs, CGsPacketMetadata*, DRAWINGKICK_INFO* drawingKick)
|
||||
{
|
||||
assert(gs == m_gs);
|
||||
@ -52,6 +58,15 @@ void CGsContextView::UpdateBufferView()
|
||||
if(!framebuffer.IsEmpty())
|
||||
{
|
||||
RenderDrawKick(framebuffer);
|
||||
if(m_fbDisplayMode == FB_DISPLAY_MODE_448P)
|
||||
{
|
||||
framebuffer = framebuffer.ResizeCanvas(640, 448);
|
||||
}
|
||||
else if(m_fbDisplayMode == FB_DISPLAY_MODE_448I)
|
||||
{
|
||||
framebuffer = framebuffer.ResizeCanvas(640, 224);
|
||||
framebuffer = framebuffer.Resize(640, 448);
|
||||
}
|
||||
}
|
||||
m_bufferView->SetBitmap(framebuffer);
|
||||
}
|
||||
|
@ -12,9 +12,18 @@
|
||||
class CGsContextView : public Framework::Win32::CWindow, public IFrameDebuggerTab
|
||||
{
|
||||
public:
|
||||
enum FB_DISPLAY_MODE
|
||||
{
|
||||
FB_DISPLAY_MODE_RAW,
|
||||
FB_DISPLAY_MODE_448P,
|
||||
FB_DISPLAY_MODE_448I
|
||||
};
|
||||
|
||||
CGsContextView(HWND, const RECT&, CGSHandler*, unsigned int);
|
||||
virtual ~CGsContextView();
|
||||
|
||||
void SetFbDisplayMode(FB_DISPLAY_MODE);
|
||||
|
||||
void UpdateState(CGSHandler*, CGsPacketMetadata*, DRAWINGKICK_INFO*) override;
|
||||
|
||||
protected:
|
||||
@ -33,5 +42,6 @@ private:
|
||||
|
||||
unsigned int m_contextId = 0;
|
||||
CGSHandler* m_gs = nullptr;
|
||||
FB_DISPLAY_MODE m_fbDisplayMode = FB_DISPLAY_MODE_RAW;
|
||||
DRAWINGKICK_INFO m_drawingKick;
|
||||
};
|
||||
|
@ -951,10 +951,8 @@ void CGSH_Direct3D9::SetupFramebuffer(uint64 frameReg)
|
||||
//Any framebuffer selected at this point can be used as a texture
|
||||
framebuffer->m_canBeUsedAsTexture = true;
|
||||
|
||||
bool halfHeight = GetCrtIsInterlaced() && GetCrtIsFrameMode();
|
||||
|
||||
float projWidth = static_cast<float>(framebuffer->m_width);
|
||||
float projHeight = static_cast<float>(halfHeight ? (framebuffer->m_height / 2) : framebuffer->m_height);
|
||||
float projHeight = static_cast<float>(framebuffer->m_height);
|
||||
|
||||
HRESULT result = S_OK;
|
||||
Framework::Win32::CComPtr<IDirect3DSurface9> renderSurface;
|
||||
|
@ -25,10 +25,6 @@ CGSH_Direct3D9::TEXTURE_INFO CGSH_Direct3D9::LoadTexture(const TEX0& tex0, const
|
||||
float scaleRatioX = static_cast<float>(tex0.GetWidth()) / static_cast<float>(candidateFramebuffer->m_width);
|
||||
float scaleRatioY = static_cast<float>(tex0.GetHeight()) / static_cast<float>(candidateFramebuffer->m_height);
|
||||
|
||||
//If we're currently in interlaced mode, framebuffer will have twice the height
|
||||
bool halfHeight = GetCrtIsInterlaced() && GetCrtIsFrameMode();
|
||||
if(halfHeight) scaleRatioY *= 2.0f;
|
||||
|
||||
{
|
||||
D3DXMATRIX textureMatrix;
|
||||
D3DXMatrixIdentity(&textureMatrix);
|
||||
|
@ -197,6 +197,12 @@ BEGIN
|
||||
MENUITEM "Alpha Test Enabled", ID_FD_SETTINGS_ALPHATEST
|
||||
MENUITEM "Depth Test Enabled", ID_FD_SETTINGS_DEPTHTEST
|
||||
MENUITEM "Alpha Blend Enabled", ID_FD_SETTINGS_ALPHABLEND
|
||||
POPUP "Framebuffer Display Mode"
|
||||
BEGIN
|
||||
MENUITEM "&Raw", ID_FD_SETTINGS_FB_RAW
|
||||
MENUITEM "640x448 Non-Interlaced", ID_FD_SETTINGS_FB_448P
|
||||
MENUITEM "640x448 Interlaced", ID_FD_SETTINGS_FB_448I
|
||||
END
|
||||
END
|
||||
END
|
||||
|
||||
|
@ -110,13 +110,16 @@
|
||||
#define ID_FD_VU1_STEP 40178
|
||||
#define ID_FD_SETTINGS_ALPHABLEND 40181
|
||||
#define ID_FD_SETTINGS_ALPHATEST 40183
|
||||
#define ID_FD_SETTINGS_FB_RAW 40188
|
||||
#define ID_FD_SETTINGS_FB_448P 40192
|
||||
#define ID_FD_SETTINGS_FB_448I 40193
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 119
|
||||
#define _APS_NEXT_COMMAND_VALUE 40184
|
||||
#define _APS_NEXT_COMMAND_VALUE 40194
|
||||
#define _APS_NEXT_CONTROL_VALUE 1002
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user