From 4aceebaf64d2a9dd1a994145f30efd820e93eee3 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Fri, 27 Jun 2025 21:37:09 +0200 Subject: [PATCH] Clean up Citro3D implementation --- .../src/d3drm/backends/citro3d/renderer.cpp | 11 ++++---- miniwin/src/internal/d3drmrenderer_citro3d.h | 26 +++---------------- 2 files changed, 8 insertions(+), 29 deletions(-) diff --git a/miniwin/src/d3drm/backends/citro3d/renderer.cpp b/miniwin/src/d3drm/backends/citro3d/renderer.cpp index 4620a85b..708e8bc2 100644 --- a/miniwin/src/d3drm/backends/citro3d/renderer.cpp +++ b/miniwin/src/d3drm/backends/citro3d/renderer.cpp @@ -30,7 +30,6 @@ static shaderProgram_s program; static int uLoc_projection; static int uLoc_modelView; static int uLoc_meshColor; -C3D_RenderTarget* target; typedef struct { float position[3]; @@ -59,8 +58,8 @@ Citro3DRenderer::Citro3DRenderer(DWORD width, DWORD height) consoleInit(GFX_BOTTOM, nullptr); C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); - target = C3D_RenderTargetCreate(m_height, m_width, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); - C3D_RenderTargetSetOutput(target, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); + m_renderTarget = C3D_RenderTargetCreate(m_height, m_width, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); + C3D_RenderTargetSetOutput(m_renderTarget, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); vshader_dvlb = DVLB_ParseFile((u32*) vshader_shbin, vshader_shbin_size); shaderProgramInit(&program); @@ -329,13 +328,13 @@ const char* Citro3DRenderer::GetName() return "Citro3D"; } -void StartFrame() +void Citro3DRenderer::StartFrame() { if (g_rendering) { return; } C3D_FrameBegin(C3D_FRAME_SYNCDRAW); - C3D_FrameDrawOn(target); + C3D_FrameDrawOn(m_renderTarget); } HRESULT Citro3DRenderer::BeginFrame() @@ -407,7 +406,7 @@ void Citro3DRenderer::Clear(float r, float g, float b) { u32 color = (static_cast(r * 255) << 24) | (static_cast(g * 255) << 16) | (static_cast(b * 255) << 8) | 255; - C3D_RenderTargetClear(target, C3D_CLEAR_ALL, color, 0); + C3D_RenderTargetClear(m_renderTarget, C3D_CLEAR_ALL, color, 0); } void Citro3DRenderer::Flip() diff --git a/miniwin/src/internal/d3drmrenderer_citro3d.h b/miniwin/src/internal/d3drmrenderer_citro3d.h index 4320ee0e..406e2fcb 100644 --- a/miniwin/src/internal/d3drmrenderer_citro3d.h +++ b/miniwin/src/internal/d3drmrenderer_citro3d.h @@ -23,16 +23,7 @@ struct C3DMeshCacheEntry { const MeshGroup* meshGroup = nullptr; Uint32 version = 0; bool flat = false; - - C3D_AttrInfo attrInfo; - C3D_BufInfo bufInfo; - - // CPU-side vertex data - std::vector vertices; - std::vector positions; - std::vector normals; - std::vector texcoords; // Only if you have textures - std::vector indices; // Indices for indexed drawing + void* vbo = nullptr; }; class Citro3DRenderer : public Direct3DRMRenderer { @@ -65,26 +56,15 @@ class Citro3DRenderer : public Direct3DRMRenderer { void Download(SDL_Surface* target) override; private: - C3DMeshCacheEntry UploadMesh(const MeshGroup& meshGroup); void AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture); - void AddMeshDestroyCallback(Uint32 id, IDirect3DRMMesh* mesh); + void StartFrame(); + D3DRMMATRIX4D m_projection; - C3D_Mtx m_projectionMatrix; SDL_Surface* m_renderedImage; C3D_RenderTarget* m_renderTarget; - int m_projectionShaderUniformLocation; std::vector m_textures; std::vector m_meshs; ViewportTransform m_viewportTransform; - - // TODO: All these flags can likely be cleaned up - bool m_flipVertFlag; - bool m_outTiledFlag; - bool m_rawCopyFlag; - GX_TRANSFER_FORMAT m_transferInputFormatFlag; - GX_TRANSFER_FORMAT m_transferOutputFormatFlag; - GX_TRANSFER_SCALE m_transferScaleFlag; - u32 m_transferFlags; }; inline static void Citro3DRenderer_EnumDevice(LPD3DENUMDEVICESCALLBACK cb, void* ctx)