- 3ds backend
   -probably i forgot to apply the changes of moving Gfx backends to the PD namespace to the 3ds backend :/
This commit is contained in:
2025-08-15 22:14:33 +02:00
parent 310b44caf5
commit da87c0f7c2
2 changed files with 17 additions and 20 deletions

View File

@ -59,7 +59,7 @@ class GfxC3D : public GfxDriver {
PD::Li::Texture::Filter filter = PD::Li::Texture::Filter filter =
PD::Li::Texture::Filter::LINEAR) override; PD::Li::Texture::Filter::LINEAR) override;
Vec<Vertex, LinearAlloc<Vertex>> VertexBuffer; Vec<Li::Vertex, LinearAlloc<Li::Vertex>> VertexBuffer;
Vec<u16, LinearAlloc<u16>> IndexBuffer; Vec<u16, LinearAlloc<u16>> IndexBuffer;
int pLocProjection = 0; int pLocProjection = 0;
DVLB_s* ShaderCode; DVLB_s* ShaderCode;

View File

@ -73,21 +73,21 @@ unsigned char li_shader[] = {
size_t li_shader_size = 0x124; size_t li_shader_size = 0x124;
namespace PD { namespace PD {
GPU_TEXCOLOR GetTexFmt(Texture::Type type) { GPU_TEXCOLOR GetTexFmt(Li::Texture::Type type) {
if (type == Texture::RGBA32) if (type == Li::Texture::RGBA32)
return GPU_RGBA8; return GPU_RGBA8;
else if (type == Texture::RGB24) else if (type == Li::Texture::RGB24)
return GPU_RGB8; return GPU_RGB8;
else if (type == Texture::A8) else if (type == Li::Texture::A8)
return GPU_A8; return GPU_A8;
return GPU_RGBA8; // Default return GPU_RGBA8; // Default
} }
int GetBPP(Texture::Type type) { int GetBPP(Li::Texture::Type type) {
if (type == Texture::RGBA32) if (type == Li::Texture::RGBA32)
return 4; return 4;
else if (type == Texture::RGB24) else if (type == Li::Texture::RGB24)
return 3; return 3;
else if (type == Texture::A8) else if (type == Li::Texture::A8)
return 1; return 1;
return 0; // Error return 0; // Error
} }
@ -121,10 +121,9 @@ void GfxC3D::NewFrame() {
CurrentIndex = 0; CurrentIndex = 0;
CurrentVertex = 0; CurrentVertex = 0;
FrameCounter++; FrameCounter++;
VertexCounter = NumVtx; /** Probably completly incorrect but just do it like that */
IndexCounter = NumIdx; VertexCounter = CurrentVertex;
NumVtx = 0; IndexCounter = CurrentIndex;
NumIdx = 0;
} }
void GfxC3D::BindTex(PD::Li::TexAddress addr) { void GfxC3D::BindTex(PD::Li::TexAddress addr) {
@ -161,11 +160,9 @@ void GfxC3D::RenderDrawData(const std::vector<PD::Li::Command::Ref>& Commands) {
Commands[index]->ScissorRect == ScissorRect) { Commands[index]->ScissorRect == ScissorRect) {
auto c = Commands[index].get(); auto c = Commands[index].get();
for (size_t i = 0; i < c->IndexBuffer.Size(); i++) { for (size_t i = 0; i < c->IndexBuffer.Size(); i++) {
NumIdx++;
IndexBuffer[CurrentIndex++] = CurrentVertex + c->IndexBuffer.At(i); IndexBuffer[CurrentIndex++] = CurrentVertex + c->IndexBuffer.At(i);
} }
for (size_t i = 0; i < c->VertexBuffer.Size(); i++) { for (size_t i = 0; i < c->VertexBuffer.Size(); i++) {
NumVtx++;
VertexBuffer[CurrentVertex++] = c->VertexBuffer.At(i); VertexBuffer[CurrentVertex++] = c->VertexBuffer.At(i);
} }
index++; index++;
@ -182,7 +179,7 @@ void GfxC3D::RenderDrawData(const std::vector<PD::Li::Command::Ref>& Commands) {
BindTex(Tex->Address); BindTex(Tex->Address);
auto bufInfo = C3D_GetBufInfo(); auto bufInfo = C3D_GetBufInfo();
BufInfo_Init(bufInfo); BufInfo_Init(bufInfo);
BufInfo_Add(bufInfo, VertexBuffer.Data(), sizeof(Vertex), 3, 0x210); BufInfo_Add(bufInfo, VertexBuffer.Data(), sizeof(Li::Vertex), 3, 0x210);
C3D_DrawElements(GPU_TRIANGLES, CurrentIndex - StartIndex, C3D_DrawElements(GPU_TRIANGLES, CurrentIndex - StartIndex,
C3D_UNSIGNED_SHORT, IndexBuffer.Data() + StartIndex); C3D_UNSIGNED_SHORT, IndexBuffer.Data() + StartIndex);
@ -213,7 +210,7 @@ PD::Li::Texture::Ref GfxC3D::LoadTex(const std::vector<PD::u8>& pixels, int w,
1.0 - ((float)h / (float)tex_size.y)); 1.0 - ((float)h / (float)tex_size.y));
// Texture Setup // Texture Setup
auto fltr = (filter == Texture::NEAREST ? GPU_NEAREST : GPU_LINEAR); auto fltr = (filter == Li::Texture::NEAREST ? GPU_NEAREST : GPU_LINEAR);
auto tex_fmt = GetTexFmt(type); auto tex_fmt = GetTexFmt(type);
auto tex = new C3D_Tex; auto tex = new C3D_Tex;
C3D_TexInit(tex, (u16)tex_size.x, (u16)tex_size.y, tex_fmt); C3D_TexInit(tex, (u16)tex_size.x, (u16)tex_size.y, tex_fmt);
@ -245,9 +242,9 @@ PD::Li::Texture::Ref GfxC3D::LoadTex(const std::vector<PD::u8>& pixels, int w,
tex->border = 0x00000000; tex->border = 0x00000000;
C3D_TexSetWrap(tex, GPU_REPEAT, GPU_REPEAT); C3D_TexSetWrap(tex, GPU_REPEAT, GPU_REPEAT);
res->Address = (TexAddress)tex; res->Address = (Li::TexAddress)tex;
std::cout << std::format("Tex {:#08x} Addr {:#08X}", (TexAddress)res.get(), std::cout << std::format("Tex {:#08x} Addr {:#08X}",
res->Address) (Li::TexAddress)res.get(), res->Address)
<< std::endl; << std::endl;
return res; return res;
} }