mirror of
https://github.com/blawar/GLideN64.git
synced 2024-06-25 22:09:35 +00:00
Implement Debugger.
This commit is contained in:
parent
0f01e1e333
commit
c907c3013a
|
@ -276,6 +276,7 @@
|
|||
<ClCompile Include="..\..\src\convert.cpp" />
|
||||
<ClCompile Include="..\..\src\CRC_OPT.cpp" />
|
||||
<ClCompile Include="..\..\src\DebugDump.cpp" />
|
||||
<ClCompile Include="..\..\src\Debugger.cpp" />
|
||||
<ClCompile Include="..\..\src\DepthBuffer.cpp" />
|
||||
<ClCompile Include="..\..\src\DepthBufferRender\ClipPolygon.cpp" />
|
||||
<ClCompile Include="..\..\src\DepthBufferRender\DepthBufferRender.cpp" />
|
||||
|
@ -415,6 +416,7 @@
|
|||
<ClInclude Include="..\..\src\CRC.h" />
|
||||
<ClInclude Include="..\..\src\CRC32.h" />
|
||||
<ClInclude Include="..\..\src\DebugDump.h" />
|
||||
<ClInclude Include="..\..\src\Debugger.h" />
|
||||
<ClInclude Include="..\..\src\DepthBuffer.h" />
|
||||
<ClInclude Include="..\..\src\DepthBufferRender\ClipPolygon.h" />
|
||||
<ClInclude Include="..\..\src\DepthBufferRender\DepthBufferRender.h" />
|
||||
|
|
|
@ -359,6 +359,9 @@
|
|||
<ClCompile Include="..\..\src\DebugDump.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\Debugger.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\src\3DMath.h">
|
||||
|
@ -664,5 +667,8 @@
|
|||
<ClInclude Include="..\..\src\DebugDump.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\Debugger.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -15,6 +15,7 @@ set(GLideN64_SOURCES
|
|||
convert.cpp
|
||||
CRC32.cpp
|
||||
DebugDump.cpp
|
||||
Debugger.cpp
|
||||
DepthBuffer.cpp
|
||||
DisplayWindow.cpp
|
||||
F3D.cpp
|
||||
|
|
1271
src/Debugger.cpp
Normal file
1271
src/Debugger.cpp
Normal file
File diff suppressed because it is too large
Load Diff
187
src/Debugger.h
Normal file
187
src/Debugger.h
Normal file
|
@ -0,0 +1,187 @@
|
|||
#ifndef DEBUGGER_H
|
||||
|
||||
#include <set>
|
||||
#include <list>
|
||||
#include <array>
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include "Graphics/Context.h"
|
||||
#include "Graphics/Parameters.h"
|
||||
#include "gSP.h"
|
||||
#include "gDP.h"
|
||||
#include "Textures.h"
|
||||
|
||||
enum TriangleType {
|
||||
ttTriangle,
|
||||
ttTexrect,
|
||||
ttFillrect,
|
||||
ttBackground
|
||||
};
|
||||
|
||||
class Debugger
|
||||
{
|
||||
public:
|
||||
Debugger();
|
||||
~Debugger();
|
||||
|
||||
void checkDebugState();
|
||||
|
||||
void addTriangles(const graphics::Context::DrawTriangleParameters & _params);
|
||||
|
||||
void addRects(const graphics::Context::DrawRectParameters & _params);
|
||||
|
||||
bool isDebugMode() const { return m_bDebugMode; }
|
||||
|
||||
void draw();
|
||||
|
||||
private:
|
||||
struct TexInfo {
|
||||
f32 scales, scalet;
|
||||
const CachedTexture * texture;
|
||||
gDPLoadTileInfo texLoadInfo;
|
||||
};
|
||||
|
||||
struct Vertex {
|
||||
f32 x, y, z, w;
|
||||
f32 r, g, b, a;
|
||||
f32 s0, t0, s1, t1;
|
||||
u32 modify;
|
||||
|
||||
Vertex() = default;
|
||||
|
||||
Vertex(const SPVertex & _v)
|
||||
: x(_v.x)
|
||||
, y(_v.y)
|
||||
, z(_v.z)
|
||||
, w(_v.w)
|
||||
, r(_v.r)
|
||||
, g(_v.g)
|
||||
, b(_v.b)
|
||||
, a(_v.a)
|
||||
, s0(_v.s)
|
||||
, t0(_v.t)
|
||||
, modify(_v.modify)
|
||||
{}
|
||||
|
||||
Vertex(const RectVertex & _v)
|
||||
: x(_v.x)
|
||||
, y(_v.y)
|
||||
, z(_v.z)
|
||||
, w(_v.w)
|
||||
, s0(_v.s0)
|
||||
, t0(_v.t0)
|
||||
, s1(_v.s1)
|
||||
, t1(_v.t1)
|
||||
, modify(0)
|
||||
{}
|
||||
};
|
||||
|
||||
struct TriInfo {
|
||||
std::array<Vertex, 3> vertices;
|
||||
gDPCombine combine; // Combine mode at the time of rendering
|
||||
u32 cycle_type;
|
||||
gDPInfo::OtherMode otherMode;
|
||||
u32 geometryMode; // geometry mode flags
|
||||
u32 frameBufferAddress;
|
||||
u32 tri_n; // Triangle number
|
||||
|
||||
TriangleType type; // 0-normal, 1-texrect, 2-fillrect
|
||||
|
||||
gSPInfo::Viewport viewport;
|
||||
|
||||
// texture info
|
||||
std::array<std::unique_ptr<TexInfo>, 2> tex_info;
|
||||
|
||||
// colors
|
||||
gDPInfo::Color fog_color;
|
||||
gDPInfo::Color blend_color;
|
||||
gDPInfo::Color env_color;
|
||||
gDPInfo::FillColor fill_color;
|
||||
gDPInfo::PrimColor prim_color;
|
||||
|
||||
f32 getScreenX(const Vertex & _v) const;
|
||||
f32 getScreenY(const Vertex & _v) const;
|
||||
f32 getScreenZ(const Vertex & _v) const;
|
||||
f32 getModelX(const Vertex & _v) const;
|
||||
f32 getModelY(const Vertex & _v) const;
|
||||
f32 getModelZ(const Vertex & _v) const;
|
||||
|
||||
bool isInside(long x, long y) const;
|
||||
};
|
||||
|
||||
enum class Page {
|
||||
general,
|
||||
tex1,
|
||||
tex2,
|
||||
colors,
|
||||
blender,
|
||||
othermode_l,
|
||||
othermode_h,
|
||||
texcoords,
|
||||
coords,
|
||||
texinfo
|
||||
};
|
||||
|
||||
enum class TextureMode {
|
||||
texture,
|
||||
alpha,
|
||||
both
|
||||
};
|
||||
|
||||
void _fillTriInfo(TriInfo & _info);
|
||||
void _addTriangles(const graphics::Context::DrawTriangleParameters & _params);
|
||||
void _addTrianglesByElements(const graphics::Context::DrawTriangleParameters & _params);
|
||||
void _debugKeys();
|
||||
void _drawFrameBuffer(FrameBuffer * _pBuffer);
|
||||
void _drawDebugInfo(FrameBuffer * _pBuffer);
|
||||
void _setTextureCombiner();
|
||||
void _setLineCombiner();
|
||||
void _drawTextureFrame(const RectVertex * _rect);
|
||||
void _drawTextureCache();
|
||||
|
||||
void _drawGeneral(f32 _ulx, f32 _uly, f32 _yShift);
|
||||
void _drawTex(f32 _ulx, f32 _uly, f32 _yShift);
|
||||
void _drawColors(f32 _ulx, f32 _uly, f32 _yShift);
|
||||
void _drawBlender(f32 _ulx, f32 _uly, f32 _yShift);
|
||||
void _drawOthermodeL(f32 _ulx, f32 _uly, f32 _yShift);
|
||||
void _drawOthermodeH(f32 _ulx, f32 _uly, f32 _yShift);
|
||||
void _drawTexCoords(f32 _ulx, f32 _uly, f32 _yShift);
|
||||
void _drawVertexCoords(f32 _ulx, f32 _uly, f32 _yShift);
|
||||
void _drawTexture(f32 _ulx, f32 _uly, f32 _lrx, f32 _lry, f32 _yShift);
|
||||
void _drawTriangleFrame();
|
||||
void _drawMouseCursor();
|
||||
void _findSelected();
|
||||
|
||||
typedef std::list<TriInfo> Triangles;
|
||||
typedef std::list<const TexInfo*> TexInfos;
|
||||
typedef std::set<u32> FrameBufferAddrs;
|
||||
|
||||
Triangles m_triangles;
|
||||
Triangles::const_iterator m_triSel;
|
||||
const TexInfo * m_pCurTexInfo = nullptr;
|
||||
TextureMode m_textureMode = TextureMode::both;
|
||||
|
||||
FrameBufferAddrs m_fbAddrs;
|
||||
FrameBufferAddrs::const_iterator m_curFBAddr;
|
||||
|
||||
Page m_curPage = Page::general;
|
||||
bool m_bDebugMode = false;
|
||||
bool m_bCapture = false;
|
||||
|
||||
long m_clickX;
|
||||
long m_clickY;
|
||||
|
||||
u32 m_tmu;
|
||||
u32 m_startTexRow[2];
|
||||
TexInfos m_texturesToDisplay[2];
|
||||
struct {
|
||||
u32 row, col;
|
||||
} m_selectedTexPos[2];
|
||||
|
||||
const u32 m_cacheViewerRows = 4;
|
||||
const u32 m_cacheViewerCols = 16;
|
||||
};
|
||||
|
||||
extern Debugger g_debugger;
|
||||
|
||||
#endif // DEBUGGER_H
|
|
@ -13,6 +13,7 @@
|
|||
#include "Combiner.h"
|
||||
#include "Types.h"
|
||||
#include "Config.h"
|
||||
#include "Debugger.h"
|
||||
#include "DebugDump.h"
|
||||
#include "PostProcessor.h"
|
||||
#include "FrameBufferInfo.h"
|
||||
|
@ -986,6 +987,11 @@ void FrameBufferList::renderBuffer()
|
|||
if (VI.width == 0 || *REG.VI_WIDTH == 0 || *REG.VI_H_START == 0) // H width is zero. Don't draw
|
||||
return;
|
||||
|
||||
if (g_debugger.isDebugMode()) {
|
||||
g_debugger.draw();
|
||||
return;
|
||||
}
|
||||
|
||||
if (config.frameBufferEmulation.enable == 0) {
|
||||
_renderScreenSizeBuffer();
|
||||
return;
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "DepthBuffer.h"
|
||||
#include "FrameBufferInfo.h"
|
||||
#include "Config.h"
|
||||
#include "Debugger.h"
|
||||
#include "RSP.h"
|
||||
#include "RDP.h"
|
||||
#include "VI.h"
|
||||
|
@ -675,6 +676,7 @@ void GraphicsDrawer::drawTriangles()
|
|||
triParams.elements = triangles.elements.data();
|
||||
triParams.combiner = currentCombiner();
|
||||
gfxContext.drawTriangles(triParams);
|
||||
g_debugger.addTriangles(triParams);
|
||||
|
||||
if (config.frameBufferEmulation.enable != 0) {
|
||||
const f32 maxY = renderTriangles(triangles.vertices.data(), triangles.elements.data(), triangles.num);
|
||||
|
@ -715,6 +717,7 @@ void GraphicsDrawer::drawScreenSpaceTriangle(u32 _numVtx)
|
|||
triParams.vertices = m_dmaVertices.data();
|
||||
triParams.combiner = currentCombiner();
|
||||
gfxContext.drawTriangles(triParams);
|
||||
g_debugger.addTriangles(triParams);
|
||||
|
||||
frameBufferList().setBufferChanged(maxY);
|
||||
gSP.changed |= CHANGED_GEOMETRYMODE;
|
||||
|
@ -734,6 +737,7 @@ void GraphicsDrawer::drawDMATriangles(u32 _numVtx)
|
|||
triParams.vertices = m_dmaVertices.data();
|
||||
triParams.combiner = currentCombiner();
|
||||
gfxContext.drawTriangles(triParams);
|
||||
g_debugger.addTriangles(triParams);
|
||||
|
||||
if (config.frameBufferEmulation.enable != 0) {
|
||||
const f32 maxY = renderTriangles(m_dmaVertices.data(), nullptr, _numVtx);
|
||||
|
@ -908,6 +912,7 @@ void GraphicsDrawer::drawRect(int _ulx, int _uly, int _lrx, int _lry)
|
|||
rectParams.vertices = m_rect;
|
||||
rectParams.combiner = currentCombiner();
|
||||
gfxContext.drawRects(rectParams);
|
||||
g_debugger.addRects(rectParams);
|
||||
gSP.changed |= CHANGED_GEOMETRYMODE | CHANGED_VIEWPORT;
|
||||
}
|
||||
|
||||
|
@ -1248,6 +1253,7 @@ void GraphicsDrawer::drawTexturedRect(const TexturedRectParams & _params)
|
|||
rectParams.vertices = m_rect;
|
||||
rectParams.combiner = currentCombiner();
|
||||
gfxContext.drawRects(rectParams);
|
||||
g_debugger.addRects(rectParams);
|
||||
|
||||
gSP.changed |= CHANGED_GEOMETRYMODE | CHANGED_VIEWPORT;
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "FrameBufferInfo.h"
|
||||
#include "Config.h"
|
||||
#include "Performance.h"
|
||||
#include "Debugger.h"
|
||||
#include "DebugDump.h"
|
||||
#include "Keys.h"
|
||||
#include "DisplayWindow.h"
|
||||
|
@ -115,6 +116,7 @@ void VI_UpdateScreen()
|
|||
if (wnd.resizeWindow())
|
||||
return;
|
||||
wnd.saveScreenshot();
|
||||
g_debugger.checkDebugState();
|
||||
|
||||
if (isKeyPressed(G64_VK_G, 0x0001)) {
|
||||
SwitchDump(DEBUG_LOW|DEBUG_NORMAL);
|
||||
|
|
|
@ -442,7 +442,9 @@ void gDPLoadTile(u32 tile, u32 uls, u32 ult, u32 lrs, u32 lrt)
|
|||
info.texAddress = gDP.loadTile->imageAddress;
|
||||
info.uls = gDP.loadTile->uls;
|
||||
info.ult = gDP.loadTile->ult;
|
||||
info.width = gDP.loadTile->masks != 0 ? (u16)min(width, 1U<<gDP.loadTile->masks) : (u16)width;
|
||||
info.lrs = gDP.loadTile->lrs;
|
||||
info.lrt = gDP.loadTile->lrt;
|
||||
info.width = gDP.loadTile->masks != 0 ? (u16)min(width, 1U << gDP.loadTile->masks) : (u16)width;
|
||||
info.height = gDP.loadTile->maskt != 0 ? (u16)min(height, 1U<<gDP.loadTile->maskt) : (u16)height;
|
||||
info.texWidth = gDP.textureImage.width;
|
||||
info.size = gDP.textureImage.size;
|
||||
|
@ -556,6 +558,10 @@ void gDPLoadBlock(u32 tile, u32 uls, u32 ult, u32 lrs, u32 dxt)
|
|||
|
||||
gDPLoadTileInfo &info = gDP.loadInfo[gDP.loadTile->tmem];
|
||||
info.texAddress = gDP.loadTile->imageAddress;
|
||||
info.uls = gDP.loadTile->uls;
|
||||
info.ult = gDP.loadTile->ult;
|
||||
info.lrs = gDP.loadTile->lrs;
|
||||
info.lrt = gDP.loadTile->lrt;
|
||||
info.width = gDP.loadTile->lrs;
|
||||
info.dxt = dxt;
|
||||
info.size = gDP.textureImage.size;
|
||||
|
|
|
@ -101,6 +101,8 @@ struct gDPLoadTileInfo {
|
|||
u8 loadType;
|
||||
u16 uls;
|
||||
u16 ult;
|
||||
u16 lrs;
|
||||
u16 lrt;
|
||||
u16 width;
|
||||
u16 height;
|
||||
u16 texWidth;
|
||||
|
@ -117,7 +119,7 @@ struct gDPScissor
|
|||
|
||||
struct gDPInfo
|
||||
{
|
||||
struct
|
||||
struct OtherMode
|
||||
{
|
||||
union
|
||||
{
|
||||
|
@ -195,7 +197,7 @@ struct gDPInfo
|
|||
f32 r, g, b, a;
|
||||
} fogColor, blendColor, envColor, rectColor;
|
||||
|
||||
struct
|
||||
struct FillColor
|
||||
{
|
||||
f32 z, dz;
|
||||
u32 color;
|
||||
|
|
|
@ -99,7 +99,7 @@ struct gSPInfo
|
|||
|
||||
gDPTile *textureTile[2];
|
||||
|
||||
struct
|
||||
struct Viewport
|
||||
{
|
||||
f32 vscale[4];
|
||||
f32 vtrans[4];
|
||||
|
|
|
@ -2,3 +2,4 @@ SCRIPT_DIRECTORY=`dirname $0`
|
|||
rev=\"`git rev-parse --short HEAD`\"
|
||||
echo current revision $rev
|
||||
echo "#define PLUGIN_REVISION $rev" > $SCRIPT_DIRECTORY/Revision.h
|
||||
echo "#define PLUGIN_REVISION_W L$rev" >> $SCRIPT_DIRECTORY/Revision.h
|
||||
|
|
|
@ -25,6 +25,7 @@ MY_LOCAL_SRC_FILES := \
|
|||
$(SRCDIR)/convert.cpp \
|
||||
$(SRCDIR)/CRC_OPT.cpp \
|
||||
$(SRCDIR)/DebugDump.cpp \
|
||||
$(SRCDIR)/Debugger.cpp \
|
||||
$(SRCDIR)/DepthBuffer.cpp \
|
||||
$(SRCDIR)/DisplayWindow.cpp \
|
||||
$(SRCDIR)/F3D.cpp \
|
||||
|
|
Loading…
Reference in New Issue
Block a user