mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-18 21:31:16 +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_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()
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user