mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-02-03 12:31:15 +00:00
Clean up Citro3D implementation
This commit is contained in:
parent
8a039a81f6
commit
4aceebaf64
@ -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()
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user