Clean up Citro3D implementation

This commit is contained in:
Anders Jenbo 2025-06-27 21:37:09 +02:00
parent 8a039a81f6
commit 4aceebaf64
2 changed files with 8 additions and 29 deletions

View File

@ -30,7 +30,6 @@ static shaderProgram_s program;
static int uLoc_projection; static int uLoc_projection;
static int uLoc_modelView; static int uLoc_modelView;
static int uLoc_meshColor; static int uLoc_meshColor;
C3D_RenderTarget* target;
typedef struct { typedef struct {
float position[3]; float position[3];
@ -59,8 +58,8 @@ Citro3DRenderer::Citro3DRenderer(DWORD width, DWORD height)
consoleInit(GFX_BOTTOM, nullptr); consoleInit(GFX_BOTTOM, nullptr);
C3D_Init(C3D_DEFAULT_CMDBUF_SIZE); C3D_Init(C3D_DEFAULT_CMDBUF_SIZE);
target = C3D_RenderTargetCreate(m_height, m_width, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8); m_renderTarget = C3D_RenderTargetCreate(m_height, m_width, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8);
C3D_RenderTargetSetOutput(target, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS); C3D_RenderTargetSetOutput(m_renderTarget, GFX_TOP, GFX_LEFT, DISPLAY_TRANSFER_FLAGS);
vshader_dvlb = DVLB_ParseFile((u32*) vshader_shbin, vshader_shbin_size); vshader_dvlb = DVLB_ParseFile((u32*) vshader_shbin, vshader_shbin_size);
shaderProgramInit(&program); shaderProgramInit(&program);
@ -329,13 +328,13 @@ const char* Citro3DRenderer::GetName()
return "Citro3D"; return "Citro3D";
} }
void StartFrame() void Citro3DRenderer::StartFrame()
{ {
if (g_rendering) { if (g_rendering) {
return; return;
} }
C3D_FrameBegin(C3D_FRAME_SYNCDRAW); C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
C3D_FrameDrawOn(target); C3D_FrameDrawOn(m_renderTarget);
} }
HRESULT Citro3DRenderer::BeginFrame() HRESULT Citro3DRenderer::BeginFrame()
@ -407,7 +406,7 @@ void Citro3DRenderer::Clear(float r, float g, float b)
{ {
u32 color = u32 color =
(static_cast<u32>(r * 255) << 24) | (static_cast<u32>(g * 255) << 16) | (static_cast<u32>(b * 255) << 8) | 255; (static_cast<u32>(r * 255) << 24) | (static_cast<u32>(g * 255) << 16) | (static_cast<u32>(b * 255) << 8) | 255;
C3D_RenderTargetClear(target, C3D_CLEAR_ALL, color, 0); C3D_RenderTargetClear(m_renderTarget, C3D_CLEAR_ALL, color, 0);
} }
void Citro3DRenderer::Flip() void Citro3DRenderer::Flip()

View File

@ -23,16 +23,7 @@ struct C3DMeshCacheEntry {
const MeshGroup* meshGroup = nullptr; const MeshGroup* meshGroup = nullptr;
Uint32 version = 0; Uint32 version = 0;
bool flat = false; bool flat = false;
void* vbo = nullptr;
C3D_AttrInfo attrInfo;
C3D_BufInfo bufInfo;
// CPU-side vertex data
std::vector<D3DRMVERTEX> vertices;
std::vector<D3DVECTOR> positions;
std::vector<D3DVECTOR> normals;
std::vector<TexCoord> texcoords; // Only if you have textures
std::vector<uint16_t> indices; // Indices for indexed drawing
}; };
class Citro3DRenderer : public Direct3DRMRenderer { class Citro3DRenderer : public Direct3DRMRenderer {
@ -65,26 +56,15 @@ class Citro3DRenderer : public Direct3DRMRenderer {
void Download(SDL_Surface* target) override; void Download(SDL_Surface* target) override;
private: private:
C3DMeshCacheEntry UploadMesh(const MeshGroup& meshGroup);
void AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture); void AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture);
void AddMeshDestroyCallback(Uint32 id, IDirect3DRMMesh* mesh); void StartFrame();
D3DRMMATRIX4D m_projection; D3DRMMATRIX4D m_projection;
C3D_Mtx m_projectionMatrix;
SDL_Surface* m_renderedImage; SDL_Surface* m_renderedImage;
C3D_RenderTarget* m_renderTarget; C3D_RenderTarget* m_renderTarget;
int m_projectionShaderUniformLocation;
std::vector<C3DTextureCacheEntry> m_textures; std::vector<C3DTextureCacheEntry> m_textures;
std::vector<C3DMeshCacheEntry> m_meshs; std::vector<C3DMeshCacheEntry> m_meshs;
ViewportTransform m_viewportTransform; 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) inline static void Citro3DRenderer_EnumDevice(LPD3DENUMDEVICESCALLBACK cb, void* ctx)