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_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<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()

View File

@ -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<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
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<C3DTextureCacheEntry> m_textures;
std::vector<C3DMeshCacheEntry> 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)