mirror of
https://github.com/libretro/ppsspp.git
synced 2025-02-25 03:10:31 +00:00
Add a tab to show matrices as well.
This commit is contained in:
parent
e7eca477b0
commit
9e8e9ec62f
@ -106,6 +106,9 @@ CGEDebugger::CGEDebugger(HINSTANCE _hInstance, HWND _hParent)
|
||||
vertices = new TabVertices(_hInstance, m_hDlg);
|
||||
tabs->AddTabDialog(vertices, L"Vertices");
|
||||
|
||||
matrices = new TabMatrices(_hInstance, m_hDlg);
|
||||
tabs->AddTabDialog(matrices, L"Matrices");
|
||||
|
||||
lists = new TabDisplayLists(_hInstance, m_hDlg);
|
||||
tabs->AddTabDialog(lists, L"Lists");
|
||||
|
||||
@ -126,6 +129,7 @@ CGEDebugger::~CGEDebugger() {
|
||||
delete textureState;
|
||||
delete settings;
|
||||
delete vertices;
|
||||
delete matrices;
|
||||
delete lists;
|
||||
delete tabs;
|
||||
delete fbTabs;
|
||||
@ -233,6 +237,7 @@ void CGEDebugger::UpdatePreviews() {
|
||||
textureState->Update();
|
||||
settings->Update();
|
||||
vertices->Update();
|
||||
matrices->Update();
|
||||
lists->Update();
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,7 @@ class TabStateLighting;
|
||||
class TabStateTexture;
|
||||
class TabStateSettings;
|
||||
class TabVertices;
|
||||
class TabMatrices;
|
||||
|
||||
class CGEDebugger : public Dialog {
|
||||
public:
|
||||
@ -77,6 +78,7 @@ private:
|
||||
TabStateTexture *textureState;
|
||||
TabStateSettings *settings;
|
||||
TabVertices *vertices;
|
||||
TabMatrices *matrices;
|
||||
SimpleGLWindow *frameWindow;
|
||||
SimpleGLWindow *texWindow;
|
||||
TabControl *tabs;
|
||||
|
@ -43,6 +43,66 @@ enum VertexListCols {
|
||||
VERTEXLIST_COL_COLOR,
|
||||
};
|
||||
|
||||
static const GenericListViewColumn matrixListCols[] = {
|
||||
{ L"Name", 0.24f },
|
||||
{ L"0", 0.19f },
|
||||
{ L"1", 0.19f },
|
||||
{ L"2", 0.19f },
|
||||
{ L"3", 0.19f },
|
||||
};
|
||||
|
||||
enum MatrixListCols {
|
||||
MATRIXLIST_COL_NAME,
|
||||
MATRIXLIST_COL_0,
|
||||
MATRIXLIST_COL_1,
|
||||
MATRIXLIST_COL_2,
|
||||
MATRIXLIST_COL_3,
|
||||
|
||||
MATRIXLIST_COL_COUNT,
|
||||
};
|
||||
|
||||
enum MatrixListRows {
|
||||
MATRIXLIST_ROW_WORLD_0,
|
||||
MATRIXLIST_ROW_WORLD_1,
|
||||
MATRIXLIST_ROW_WORLD_2,
|
||||
MATRIXLIST_ROW_VIEW_0,
|
||||
MATRIXLIST_ROW_VIEW_1,
|
||||
MATRIXLIST_ROW_VIEW_2,
|
||||
MATRIXLIST_ROW_PROJ_0,
|
||||
MATRIXLIST_ROW_PROJ_1,
|
||||
MATRIXLIST_ROW_PROJ_2,
|
||||
MATRIXLIST_ROW_PROJ_3,
|
||||
MATRIXLIST_ROW_TGEN_0,
|
||||
MATRIXLIST_ROW_TGEN_1,
|
||||
MATRIXLIST_ROW_TGEN_2,
|
||||
MATRIXLIST_ROW_BONE_0_0,
|
||||
MATRIXLIST_ROW_BONE_0_1,
|
||||
MATRIXLIST_ROW_BONE_0_2,
|
||||
MATRIXLIST_ROW_BONE_1_0,
|
||||
MATRIXLIST_ROW_BONE_1_1,
|
||||
MATRIXLIST_ROW_BONE_1_2,
|
||||
MATRIXLIST_ROW_BONE_2_0,
|
||||
MATRIXLIST_ROW_BONE_2_1,
|
||||
MATRIXLIST_ROW_BONE_2_2,
|
||||
MATRIXLIST_ROW_BONE_3_0,
|
||||
MATRIXLIST_ROW_BONE_3_1,
|
||||
MATRIXLIST_ROW_BONE_3_2,
|
||||
MATRIXLIST_ROW_BONE_4_0,
|
||||
MATRIXLIST_ROW_BONE_4_1,
|
||||
MATRIXLIST_ROW_BONE_4_2,
|
||||
MATRIXLIST_ROW_BONE_5_0,
|
||||
MATRIXLIST_ROW_BONE_5_1,
|
||||
MATRIXLIST_ROW_BONE_5_2,
|
||||
MATRIXLIST_ROW_BONE_6_0,
|
||||
MATRIXLIST_ROW_BONE_6_1,
|
||||
MATRIXLIST_ROW_BONE_6_2,
|
||||
MATRIXLIST_ROW_BONE_7_0,
|
||||
MATRIXLIST_ROW_BONE_7_1,
|
||||
MATRIXLIST_ROW_BONE_7_2,
|
||||
|
||||
MATRIXLIST_ROW_COUNT,
|
||||
};
|
||||
|
||||
CtrlVertexList::CtrlVertexList(HWND hwnd)
|
||||
: GenericListControl(hwnd, vertexListCols, ARRAY_SIZE(vertexListCols)), raw_(false) {
|
||||
decoder = new VertexDecoder();
|
||||
@ -267,4 +327,143 @@ BOOL TabVertices::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) {
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
CtrlMatrixList::CtrlMatrixList(HWND hwnd)
|
||||
: GenericListControl(hwnd, matrixListCols, ARRAY_SIZE(matrixListCols)) {
|
||||
Update();
|
||||
}
|
||||
|
||||
void CtrlMatrixList::GetColumnText(wchar_t *dest, int row, int col) {
|
||||
if (row < 0 || row >= MATRIXLIST_ROW_COUNT || col < 0 || col >= MATRIXLIST_COL_COUNT) {
|
||||
wcscpy(dest, L"Invalid");
|
||||
return;
|
||||
}
|
||||
|
||||
auto state = gpuDebug->GetGState();
|
||||
|
||||
if (row >= MATRIXLIST_ROW_BONE_0_0) {
|
||||
int b = (row - MATRIXLIST_ROW_BONE_0_0) / 3;
|
||||
int r = (row - MATRIXLIST_ROW_BONE_0_0) % 3;
|
||||
int offset = (row - MATRIXLIST_ROW_BONE_0_0) * 4 + col - 1;
|
||||
|
||||
switch (col) {
|
||||
case MATRIXLIST_COL_NAME:
|
||||
swprintf(dest, L"Bone #%d row %d", b, r);
|
||||
break;
|
||||
|
||||
default:
|
||||
swprintf(dest, L"%f", state.boneMatrix[offset]);
|
||||
break;
|
||||
}
|
||||
} else if (row >= MATRIXLIST_ROW_TGEN_0) {
|
||||
int r = row - MATRIXLIST_ROW_TGEN_0;
|
||||
int offset = r * 4 + col - 1;
|
||||
|
||||
switch (col) {
|
||||
case MATRIXLIST_COL_NAME:
|
||||
swprintf(dest, L"Texgen %d", r);
|
||||
break;
|
||||
|
||||
default:
|
||||
swprintf(dest, L"%f", state.tgenMatrix[offset]);
|
||||
break;
|
||||
}
|
||||
} else if (row >= MATRIXLIST_ROW_PROJ_0) {
|
||||
int r = row - MATRIXLIST_ROW_PROJ_0;
|
||||
int offset = r * 4 + col - 1;
|
||||
|
||||
switch (col) {
|
||||
case MATRIXLIST_COL_NAME:
|
||||
swprintf(dest, L"Proj %d", r);
|
||||
break;
|
||||
|
||||
default:
|
||||
swprintf(dest, L"%f", state.projMatrix[offset]);
|
||||
break;
|
||||
}
|
||||
} else if (row >= MATRIXLIST_ROW_VIEW_0) {
|
||||
int r = row - MATRIXLIST_ROW_VIEW_0;
|
||||
int offset = r * 4 + col - 1;
|
||||
|
||||
switch (col) {
|
||||
case MATRIXLIST_COL_NAME:
|
||||
swprintf(dest, L"View %d", r);
|
||||
break;
|
||||
|
||||
default:
|
||||
swprintf(dest, L"%f", state.viewMatrix[offset]);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
int r = row - MATRIXLIST_ROW_WORLD_0;
|
||||
int offset = r * 4 + col - 1;
|
||||
|
||||
switch (col) {
|
||||
case MATRIXLIST_COL_NAME:
|
||||
swprintf(dest, L"View %d", r);
|
||||
break;
|
||||
|
||||
default:
|
||||
swprintf(dest, L"%f", state.worldMatrix[offset]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int CtrlMatrixList::GetRowCount() {
|
||||
if (!gpuDebug) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return MATRIXLIST_ROW_COUNT;
|
||||
}
|
||||
|
||||
TabMatrices::TabMatrices(HINSTANCE _hInstance, HWND _hParent)
|
||||
: Dialog((LPCSTR)IDD_GEDBG_TAB_MATRICES, _hInstance, _hParent) {
|
||||
values = new CtrlMatrixList(GetDlgItem(m_hDlg, IDC_GEDBG_MATRICES));
|
||||
}
|
||||
|
||||
TabMatrices::~TabMatrices() {
|
||||
delete values;
|
||||
}
|
||||
|
||||
void TabMatrices::UpdateSize(WORD width, WORD height) {
|
||||
struct Position {
|
||||
int x,y;
|
||||
int w,h;
|
||||
};
|
||||
|
||||
Position position;
|
||||
static const int borderMargin = 5;
|
||||
|
||||
position.x = borderMargin;
|
||||
position.y = borderMargin;
|
||||
position.w = width - 2 * borderMargin;
|
||||
position.h = height - 2 * borderMargin;
|
||||
|
||||
HWND handle = GetDlgItem(m_hDlg, IDC_GEDBG_MATRICES);
|
||||
MoveWindow(handle, position.x, position.y, position.w, position.h, TRUE);
|
||||
}
|
||||
|
||||
BOOL TabMatrices::DlgProc(UINT message, WPARAM wParam, LPARAM lParam) {
|
||||
switch (message) {
|
||||
case WM_INITDIALOG:
|
||||
return TRUE;
|
||||
|
||||
case WM_SIZE:
|
||||
UpdateSize(LOWORD(lParam), HIWORD(lParam));
|
||||
return TRUE;
|
||||
|
||||
case WM_NOTIFY:
|
||||
switch (wParam)
|
||||
{
|
||||
case IDC_GEDBG_MATRICES:
|
||||
values->HandleNotify(lParam);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -68,4 +68,32 @@ private:
|
||||
void UpdateSize(WORD width, WORD height);
|
||||
|
||||
CtrlVertexList *values;
|
||||
};
|
||||
};
|
||||
|
||||
class CtrlMatrixList: public GenericListControl {
|
||||
public:
|
||||
CtrlMatrixList(HWND hwnd);
|
||||
|
||||
protected:
|
||||
virtual bool WindowMessage(UINT msg, WPARAM wParam, LPARAM lParam, LRESULT& returnValue) { return false; };
|
||||
virtual void GetColumnText(wchar_t *dest, int row, int col);
|
||||
virtual int GetRowCount();
|
||||
};
|
||||
|
||||
class TabMatrices : public Dialog {
|
||||
public:
|
||||
TabMatrices(HINSTANCE _hInstance, HWND _hParent);
|
||||
~TabMatrices();
|
||||
|
||||
virtual void Update() {
|
||||
values->Update();
|
||||
}
|
||||
|
||||
protected:
|
||||
BOOL DlgProc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
private:
|
||||
void UpdateSize(WORD width, WORD height);
|
||||
|
||||
CtrlMatrixList *values;
|
||||
};
|
||||
|
@ -216,6 +216,14 @@ BEGIN
|
||||
CONTROL "",IDC_GEDBG_VERTICES,"SysListView32",LVS_ALIGNLEFT | LVS_SHOWSELALWAYS | LVS_REPORT | WS_BORDER | WS_TABSTOP,7,22,217,86
|
||||
END
|
||||
|
||||
IDD_GEDBG_TAB_MATRICES DIALOGEX 0, 0, 316, 183
|
||||
STYLE DS_SETFONT | WS_CHILD | DS_CONTROL
|
||||
CAPTION "Dialog"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
CONTROL "",IDC_GEDBG_MATRICES,"SysListView32",LVS_ALIGNLEFT | LVS_SHOWSELALWAYS | LVS_REPORT | WS_BORDER | WS_TABSTOP,7,7,217,86
|
||||
END
|
||||
|
||||
|
||||
#include "aboutbox.rc"
|
||||
|
||||
|
@ -80,6 +80,7 @@
|
||||
#define IDD_GEDBG_TAB_VALUES 252
|
||||
#define IDD_DUMPMEMORY 253
|
||||
#define IDD_GEDBG_TAB_VERTICES 254
|
||||
#define IDD_GEDBG_TAB_MATRICES 255
|
||||
|
||||
#define IDC_STOPGO 1001
|
||||
#define IDC_ADDRESS 1002
|
||||
@ -159,6 +160,7 @@
|
||||
#define IDC_GEDBG_FBTABS 1193
|
||||
#define IDC_GEDBG_VERTICES 1194
|
||||
#define IDC_GEDBG_RAWVERTS 1195
|
||||
#define IDC_GEDBG_MATRICES 1196
|
||||
|
||||
#define ID_SHADERS_BASE 5000
|
||||
|
||||
@ -315,9 +317,9 @@
|
||||
// Next default values for new objects
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 255
|
||||
#define _APS_NEXT_RESOURCE_VALUE 256
|
||||
#define _APS_NEXT_COMMAND_VALUE 40148
|
||||
#define _APS_NEXT_CONTROL_VALUE 1196
|
||||
#define _APS_NEXT_CONTROL_VALUE 1197
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user