Add a tab to show matrices as well.

This commit is contained in:
Unknown W. Brackets 2014-02-08 23:27:05 -08:00
parent e7eca477b0
commit 9e8e9ec62f
6 changed files with 248 additions and 4 deletions

View File

@ -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();
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
};

View File

@ -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"

View File

@ -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