Compare commits
85
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39e91b588f
|
||
|
|
7bb1406365
|
||
|
|
438584e4f2
|
||
|
|
acc4fd11eb
|
||
|
|
72bb76dcbc
|
||
|
|
272b66f7f0
|
||
|
|
6637a3692b
|
||
|
|
feeb3b1ba8
|
||
|
|
5a56bf3986
|
||
|
|
1dfc538ae3
|
||
|
|
36c05a9138
|
||
|
|
a8d841c63c
|
||
|
|
8983371806
|
||
|
|
2b4c4bacd6
|
||
|
|
859a4c96ae
|
||
|
|
0e0d576954
|
||
|
|
4a29cb4330
|
||
|
|
e0b86ee3f6
|
||
|
|
b121001db7
|
||
|
|
2059772ad1
|
||
|
|
81aa08485b
|
||
|
|
ecadf0a44c
|
||
|
|
6dfc04378a
|
||
|
|
e3ffcbb596
|
||
|
|
469cd535fd
|
||
|
|
b594e09bdb
|
||
|
|
41b25e4476
|
||
|
|
25607b865c
|
||
|
|
1bf103c894
|
||
|
|
11a480136b
|
||
|
|
e6fcfe0650
|
||
|
|
a8a80cfa47
|
||
|
|
b7f1037b18
|
||
|
|
de51a35734
|
||
|
|
13152a317a
|
||
|
|
5dd5907c43
|
||
|
|
673e53935a
|
||
|
|
dda8258064
|
||
|
|
0c55291f9c
|
||
|
|
c5f6f0cb33
|
||
|
|
391eea100a
|
||
|
|
d70a9970e9
|
||
|
|
0f044538cc
|
||
|
|
546940aa77
|
||
|
|
dc365bc658
|
||
|
|
1ccc7075fa
|
||
|
|
b069f10841
|
||
|
|
bf3eef8d28
|
||
|
|
6298d4c816
|
||
|
|
212ba0c617
|
||
|
|
b4a7260cf2
|
||
|
|
5cf9ff0109
|
||
|
|
69b5e74d91
|
||
|
|
9b69d78118
|
||
|
|
e573523511
|
||
|
|
1317599475
|
||
|
|
1876ab9365
|
||
|
|
ce2dc94121
|
||
|
|
bef8ced350
|
||
|
|
dd038883a0
|
||
|
|
7ad2b8b0c5
|
||
|
|
63fb09189d
|
||
|
|
306ddfed53
|
||
|
|
c2b0fa01db
|
||
|
|
594cf5cca4
|
||
|
|
191bca26d5
|
||
|
|
85a92f8371
|
||
|
|
f3d326c237
|
||
|
|
fda39b3d36
|
||
|
|
8e09025c40
|
||
|
|
2a57b7c08c
|
||
|
|
9d0565f60c
|
||
|
|
4691d158a9
|
||
|
|
57c376a822
|
||
|
|
d72c447875
|
||
|
|
518015afb1
|
||
|
|
e6a60e90d1
|
||
|
|
9d63a17700
|
||
|
|
fd498c5ea2
|
||
|
|
0cc886315d
|
||
|
|
1b9876f64b
|
||
|
|
cd904ea544
|
||
|
|
e43cb41377
|
||
|
|
b2d3d203a2
|
||
|
|
f1a63fe383
|
@@ -29,7 +29,6 @@ class GfxCitro3D : public GfxDriverBase<GfxCitro3DConfig> {
|
|||||||
TextureFilter filter = TextureFilter::Linear) override;
|
TextureFilter filter = TextureFilter::Linear) override;
|
||||||
void DeleteTexture(const Li::Texture& tex) override;
|
void DeleteTexture(const Li::Texture& tex) override;
|
||||||
void UploadPools() override;
|
void UploadPools() override;
|
||||||
void ClipRect() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct Impl;
|
struct Impl;
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ class GfxDirectX9 : public GfxDriverBase<GfxDirectX9Config> {
|
|||||||
TextureFilter filter = TextureFilter::Linear) override;
|
TextureFilter filter = TextureFilter::Linear) override;
|
||||||
void DeleteTexture(const Li::Texture& tex) override;
|
void DeleteTexture(const Li::Texture& tex) override;
|
||||||
void UploadPools() override;
|
void UploadPools() override;
|
||||||
void ClipRect() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct Impl;
|
struct Impl;
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ class GfxOpenGL2 : public GfxDriverBase<GfxOpenGL2Config> {
|
|||||||
TextureFilter filter = TextureFilter::Linear) override;
|
TextureFilter filter = TextureFilter::Linear) override;
|
||||||
void DeleteTexture(const Li::Texture& tex) override;
|
void DeleteTexture(const Li::Texture& tex) override;
|
||||||
void UploadPools() override;
|
void UploadPools() override;
|
||||||
void ClipRect() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void pSetupShaderAttribs(u32 shader);
|
void pSetupShaderAttribs(u32 shader);
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ class GfxOpenGL3 : public GfxDriverBase<GfxOpenGL3Config> {
|
|||||||
TextureFilter filter = TextureFilter::Linear) override;
|
TextureFilter filter = TextureFilter::Linear) override;
|
||||||
void DeleteTexture(const Li::Texture& tex) override;
|
void DeleteTexture(const Li::Texture& tex) override;
|
||||||
void UploadPools() override;
|
void UploadPools() override;
|
||||||
void ClipRect() override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u32 pShader = 0;
|
u32 pShader = 0;
|
||||||
|
|||||||
@@ -141,9 +141,6 @@ void GfxCitro3D::SysInit() {
|
|||||||
PDLOG("GfxCitro3D::SysInit();");
|
PDLOG("GfxCitro3D::SysInit();");
|
||||||
impl = new Impl();
|
impl = new Impl();
|
||||||
Flags |= PDGfxBackendFlags_FlipUV_Y;
|
Flags |= PDGfxBackendFlags_FlipUV_Y;
|
||||||
Flags |= PDGfxBackendFlags_HasClipRect;
|
|
||||||
Flags |= PDGfxBackendFlags_ReqPow2;
|
|
||||||
Flags |= PDGfxBackendFlags_ApproxSDF;
|
|
||||||
impl->pShaderRaw = Pica::AssembleCode(LIShaderCTR);
|
impl->pShaderRaw = Pica::AssembleCode(LIShaderCTR);
|
||||||
impl->pCode = DVLB_ParseFile((uint32_t*)impl->pShaderRaw.data(),
|
impl->pCode = DVLB_ParseFile((uint32_t*)impl->pShaderRaw.data(),
|
||||||
impl->pShaderRaw.size());
|
impl->pShaderRaw.size());
|
||||||
@@ -267,14 +264,6 @@ void GfxCitro3D::UploadPools() {
|
|||||||
BufInfo_Init(buf);
|
BufInfo_Init(buf);
|
||||||
BufInfo_Add(buf, GetVertexBufPtr(0), sizeof(Li::Vertex), 3, 0x210);
|
BufInfo_Add(buf, GetVertexBufPtr(0), sizeof(Li::Vertex), 3, 0x210);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GfxCitro3D::ClipRect() {
|
|
||||||
// This is so cursed but it works
|
|
||||||
C3D_SetScissor(CurrentHasClip ? GPU_SCISSOR_NORMAL : GPU_SCISSOR_DISABLE,
|
|
||||||
ViewPort.y - CurrentClip.w - CurrentClip.y,
|
|
||||||
ViewPort.x - CurrentClip.z - CurrentClip.x,
|
|
||||||
ViewPort.y - CurrentClip.y, ViewPort.x - CurrentClip.x);
|
|
||||||
}
|
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
#else
|
#else
|
||||||
namespace PD {
|
namespace PD {
|
||||||
@@ -294,6 +283,5 @@ Li::Texture GfxCitro3D::LoadTexture(const std::vector<PD::u8>& pixels, int w,
|
|||||||
}
|
}
|
||||||
void GfxCitro3D::DeleteTexture(const Li::Texture& tex) {}
|
void GfxCitro3D::DeleteTexture(const Li::Texture& tex) {}
|
||||||
void GfxCitro3D::UploadPools() {}
|
void GfxCitro3D::UploadPools() {}
|
||||||
void GfxCitro3D::ClipRect() {}
|
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
#endif
|
#endif
|
||||||
@@ -112,7 +112,6 @@ void GfxDirectX9::SysInit() {
|
|||||||
}
|
}
|
||||||
if (psBlob) psBlob->Release();
|
if (psBlob) psBlob->Release();
|
||||||
if (errBlob) errBlob->Release();
|
if (errBlob) errBlob->Release();
|
||||||
Flags |= PDGfxBackendFlags_HasClipRect;
|
|
||||||
} else {
|
} else {
|
||||||
PDERR(
|
PDERR(
|
||||||
"GfxDirectX9::SysInit Error: pDevice is not set!\nYOu need to include "
|
"GfxDirectX9::SysInit Error: pDevice is not set!\nYOu need to include "
|
||||||
@@ -286,21 +285,6 @@ void GfxDirectX9::UploadPools() {
|
|||||||
memcpy(iptr, GetIndexBufPtr(0), GetIndexPoolSize() * sizeof(u16));
|
memcpy(iptr, GetIndexBufPtr(0), GetIndexPoolSize() * sizeof(u16));
|
||||||
impl->IBO->Unlock();
|
impl->IBO->Unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GfxDirectX9::ClipRect() {
|
|
||||||
if (CurrentHasClip) {
|
|
||||||
RECT r;
|
|
||||||
r.left = CurrentClip.x;
|
|
||||||
r.top = CurrentClip.y;
|
|
||||||
r.right = CurrentClip.x + CurrentClip.z;
|
|
||||||
r.bottom = CurrentClip.y + CurrentClip.w;
|
|
||||||
|
|
||||||
impl->Device->SetScissorRect(&r);
|
|
||||||
impl->Device->SetRenderState(D3DRS_SCISSORTESTENABLE, TRUE);
|
|
||||||
} else {
|
|
||||||
impl->Device->SetRenderState(D3DRS_SCISSORTESTENABLE, FALSE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
#else
|
#else
|
||||||
namespace PD {
|
namespace PD {
|
||||||
@@ -320,6 +304,5 @@ Li::Texture GfxDirectX9::LoadTexture(const std::vector<PD::u8>& pixels, int w,
|
|||||||
}
|
}
|
||||||
void GfxDirectX9::DeleteTexture(const Li::Texture& tex) {}
|
void GfxDirectX9::DeleteTexture(const Li::Texture& tex) {}
|
||||||
void GfxDirectX9::UploadPools() {}
|
void GfxDirectX9::UploadPools() {}
|
||||||
void GfxDirectX9::ClipRect() {}
|
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
#endif
|
#endif
|
||||||
@@ -73,7 +73,6 @@ void GfxOpenGL2::pSetupShaderAttribs(u32 shader) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GfxOpenGL2::SysInit() {
|
void GfxOpenGL2::SysInit() {
|
||||||
Flags |= PDGfxBackendFlags_HasClipRect;
|
|
||||||
pShader = CreateShaderProgram(pVertCode, pFragCode);
|
pShader = CreateShaderProgram(pVertCode, pFragCode);
|
||||||
glUseProgram(pShader);
|
glUseProgram(pShader);
|
||||||
glGenBuffers(1, &VBO);
|
glGenBuffers(1, &VBO);
|
||||||
@@ -184,16 +183,6 @@ void GfxOpenGL2::UploadPools() {
|
|||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, GetIndexPoolSize() * sizeof(u16),
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, GetIndexPoolSize() * sizeof(u16),
|
||||||
GetIndexBufPtr(0), GL_DYNAMIC_DRAW);
|
GetIndexBufPtr(0), GL_DYNAMIC_DRAW);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GfxOpenGL2::ClipRect() {
|
|
||||||
if (CurrentHasClip) {
|
|
||||||
glEnable(GL_SCISSOR_TEST);
|
|
||||||
glScissor(CurrentClip.x, ViewPort.y - (CurrentClip.y + CurrentClip.w),
|
|
||||||
CurrentClip.z, CurrentClip.w);
|
|
||||||
} else {
|
|
||||||
glDisable(GL_SCISSOR_TEST);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
#else
|
#else
|
||||||
namespace PD {
|
namespace PD {
|
||||||
@@ -214,6 +203,5 @@ Li::Texture GfxOpenGL2::LoadTexture(const std::vector<PD::u8>& pixels, int w,
|
|||||||
void GfxOpenGL2::DeleteTexture(const Li::Texture& tex) {}
|
void GfxOpenGL2::DeleteTexture(const Li::Texture& tex) {}
|
||||||
void GfxOpenGL2::pSetupShaderAttribs(u32 shader) {}
|
void GfxOpenGL2::pSetupShaderAttribs(u32 shader) {}
|
||||||
void GfxOpenGL2::UploadPools() {}
|
void GfxOpenGL2::UploadPools() {}
|
||||||
void GfxOpenGL2::ClipRect() {}
|
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
#endif
|
#endif
|
||||||
@@ -11,7 +11,6 @@
|
|||||||
|
|
||||||
namespace PD {
|
namespace PD {
|
||||||
void GfxOpenGL3::SysInit() {
|
void GfxOpenGL3::SysInit() {
|
||||||
Flags |= PDGfxBackendFlags_HasClipRect;
|
|
||||||
std::string vcode = SpirvHelper::SPV2GLSL(
|
std::string vcode = SpirvHelper::SPV2GLSL(
|
||||||
std::vector<unsigned int>(
|
std::vector<unsigned int>(
|
||||||
Shaders::VertexShader,
|
Shaders::VertexShader,
|
||||||
@@ -160,16 +159,6 @@ void GfxOpenGL3::UploadPools() {
|
|||||||
|
|
||||||
glBindVertexArray(0);
|
glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GfxOpenGL3::ClipRect() {
|
|
||||||
if (CurrentHasClip) {
|
|
||||||
glEnable(GL_SCISSOR_TEST);
|
|
||||||
glScissor(CurrentClip.x, ViewPort.y - (CurrentClip.y + CurrentClip.w),
|
|
||||||
CurrentClip.z, CurrentClip.w);
|
|
||||||
} else {
|
|
||||||
glDisable(GL_SCISSOR_TEST);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
#else
|
#else
|
||||||
namespace PD {
|
namespace PD {
|
||||||
@@ -189,6 +178,5 @@ Li::Texture GfxOpenGL3::LoadTexture(const std::vector<PD::u8>& pixels, int w,
|
|||||||
}
|
}
|
||||||
void GfxOpenGL3::DeleteTexture(const Li::Texture& tex) {}
|
void GfxOpenGL3::DeleteTexture(const Li::Texture& tex) {}
|
||||||
void GfxOpenGL3::UploadPools() {}
|
void GfxOpenGL3::UploadPools() {}
|
||||||
void GfxOpenGL3::ClipRect() {}
|
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
#endif
|
#endif
|
||||||
+23
-2
@@ -56,9 +56,21 @@ struct PD_API Mat4 {
|
|||||||
constexpr float* Ptr() { return m.data(); }
|
constexpr float* Ptr() { return m.data(); }
|
||||||
constexpr const float* Ptr() const { return m.data(); }
|
constexpr const float* Ptr() const { return m.data(); }
|
||||||
|
|
||||||
constexpr float& operator()(int row, int col) { return m[col * 4 + row]; }
|
constexpr float& operator()(int row, int col) {
|
||||||
constexpr float operator()(int row, int col) const {
|
#ifdef __3DS__
|
||||||
|
// 3ds is full reverse order iirc
|
||||||
|
return m[row * 4 + (3 - col)];
|
||||||
|
#else
|
||||||
return m[col * 4 + row];
|
return m[col * 4 + row];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
constexpr float operator()(int row, int col) const {
|
||||||
|
#ifdef __3DS__
|
||||||
|
// 3ds is full reverse order iirc
|
||||||
|
return m[row * 4 + (3 - col)];
|
||||||
|
#else
|
||||||
|
return m[col * 4 + row];
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr Mat4 operator*(const Mat4& v) const {
|
constexpr Mat4 operator*(const Mat4& v) const {
|
||||||
@@ -110,12 +122,21 @@ struct PD_API Mat4 {
|
|||||||
constexpr static Mat4 Ortho(float l, float r, float b, float t, float n,
|
constexpr static Mat4 Ortho(float l, float r, float b, float t, float n,
|
||||||
float f) {
|
float f) {
|
||||||
Mat4 ret;
|
Mat4 ret;
|
||||||
|
#ifdef __3DS__ // Patch to rotate the Matrix correctly
|
||||||
|
ret(0, 1) = 2.f / (t - b);
|
||||||
|
ret(0, 3) = (b + t) / (b - t);
|
||||||
|
ret(1, 0) = 2.f / (l - r);
|
||||||
|
ret(1, 3) = (l + r) / (r - l);
|
||||||
|
ret(2, 2) = 1.f / (n - f);
|
||||||
|
ret(2, 3) = 0.5f * (n + f) / (n - f) - 0.5f;
|
||||||
|
#else
|
||||||
ret(0, 0) = 2.0f / (r - l);
|
ret(0, 0) = 2.0f / (r - l);
|
||||||
ret(0, 3) = -(r + l) / (r - l);
|
ret(0, 3) = -(r + l) / (r - l);
|
||||||
ret(1, 1) = 2.0f / (t - b);
|
ret(1, 1) = 2.0f / (t - b);
|
||||||
ret(1, 3) = -(t + b) / (t - b);
|
ret(1, 3) = -(t + b) / (t - b);
|
||||||
ret(2, 2) = -2.0f / (f - n);
|
ret(2, 2) = -2.0f / (f - n);
|
||||||
ret(2, 3) = -(f + n) / (f - n);
|
ret(2, 3) = -(f + n) / (f - n);
|
||||||
|
#endif
|
||||||
ret(3, 3) = 1.f;
|
ret(3, 3) = 1.f;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,11 +9,8 @@
|
|||||||
using PDGfxBackendFlags = PD::u32;
|
using PDGfxBackendFlags = PD::u32;
|
||||||
enum PDGfxBackendFlags_ {
|
enum PDGfxBackendFlags_ {
|
||||||
PDGfxBackendFlags_None = 0,
|
PDGfxBackendFlags_None = 0,
|
||||||
PDGfxBackendFlags_FlipUV_Y = 1 << 0, // Essential for font loading
|
PDGfxBackendFlags_FlipUV_Y = 1 << 0, // Essential for font loading
|
||||||
PDGfxBackendFlags_WindingCW = 1 << 1, // Use CW instead of CCW winding
|
PDGfxBackendFlags_WindingCW = 1 << 0, // Use CW instead of CCW winding
|
||||||
PDGfxBackendFlags_HasClipRect = 1 << 2, // Clip rects supported
|
|
||||||
PDGfxBackendFlags_ReqPow2 = 1 << 3, // Tex size must be pow of 2
|
|
||||||
PDGfxBackendFlags_ApproxSDF = 1 << 4, // Fake SDF for non smoothstep systems
|
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace PD {
|
namespace PD {
|
||||||
@@ -68,7 +65,6 @@ class PD_API GfxDriver : public DriverInterface {
|
|||||||
virtual void SysReset() {}
|
virtual void SysReset() {}
|
||||||
virtual void Submit(size_t count, size_t start) {}
|
virtual void Submit(size_t count, size_t start) {}
|
||||||
virtual void UploadPools() {} // not every driver requires it
|
virtual void UploadPools() {} // not every driver requires it
|
||||||
virtual void ClipRect() {}
|
|
||||||
void RegisterTexture(const Li::Texture& tex);
|
void RegisterTexture(const Li::Texture& tex);
|
||||||
void UnregisterTexture(const Li::Texture& tex);
|
void UnregisterTexture(const Li::Texture& tex);
|
||||||
|
|
||||||
@@ -84,8 +80,6 @@ class PD_API GfxDriver : public DriverInterface {
|
|||||||
// State Variables oder so
|
// State Variables oder so
|
||||||
TextureID CurrentTex = 0;
|
TextureID CurrentTex = 0;
|
||||||
bool CurrentTexIsSDF = false;
|
bool CurrentTexIsSDF = false;
|
||||||
bool CurrentHasClip = false;
|
|
||||||
fvec4 CurrentClip = 0;
|
|
||||||
Mat4 Projection;
|
Mat4 Projection;
|
||||||
ivec2 ViewPort;
|
ivec2 ViewPort;
|
||||||
std::unordered_map<TextureID, Li::Texture> pTextureRegestry;
|
std::unordered_map<TextureID, Li::Texture> pTextureRegestry;
|
||||||
@@ -142,7 +136,7 @@ class GfxDriverBase : public GfxDriver {
|
|||||||
for (size_t i = 0; i < commands.size(); i++) {
|
for (size_t i = 0; i < commands.size(); i++) {
|
||||||
const auto& cmd = commands[i];
|
const auto& cmd = commands[i];
|
||||||
if (cmd.VertexCount > 0) {
|
if (cmd.VertexCount > 0) {
|
||||||
std::memcpy(reinterpret_cast<void*>(pVtxPool.begin() + current_vtx),
|
std::memcpy(pVtxPool.begin() + current_vtx,
|
||||||
vpool.begin() + cmd.FirstVertex,
|
vpool.begin() + cmd.FirstVertex,
|
||||||
cmd.VertexCount * sizeof(Li::Vertex));
|
cmd.VertexCount * sizeof(Li::Vertex));
|
||||||
}
|
}
|
||||||
@@ -162,19 +156,14 @@ class GfxDriverBase : public GfxDriver {
|
|||||||
while (index < commands.size()) {
|
while (index < commands.size()) {
|
||||||
CurrentTex = commands[index].Tex;
|
CurrentTex = commands[index].Tex;
|
||||||
CurrentTexIsSDF = commands[index].SDF;
|
CurrentTexIsSDF = commands[index].SDF;
|
||||||
CurrentHasClip = commands[index].ClipRectUsed;
|
|
||||||
CurrentClip = commands[index].ClipRect;
|
|
||||||
if (!CurrentTex) {
|
if (!CurrentTex) {
|
||||||
CurrentTex = pWhite.GetID();
|
CurrentTex = pWhite.GetID();
|
||||||
}
|
}
|
||||||
size_t num_indices = 0;
|
size_t num_indices = 0;
|
||||||
ClipRect();
|
|
||||||
while (index < commands.size() &&
|
while (index < commands.size() &&
|
||||||
CurrentTexIsSDF == commands[index].SDF &&
|
CurrentTexIsSDF == commands[index].SDF &&
|
||||||
(CurrentTex == commands[index].Tex ||
|
(CurrentTex == commands[index].Tex ||
|
||||||
(CurrentTex == pWhite.GetID() && commands[index].Tex == 0)) &&
|
(CurrentTex == pWhite.GetID() && commands[index].Tex == 0))) {
|
||||||
CurrentClip == commands[index].ClipRect &&
|
|
||||||
CurrentHasClip == commands[index].ClipRectUsed) {
|
|
||||||
num_indices += commands[index].IndexCount;
|
num_indices += commands[index].IndexCount;
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,9 +28,6 @@ class Command {
|
|||||||
// Todo: implement
|
// Todo: implement
|
||||||
size_t VertexCountMax = 0;
|
size_t VertexCountMax = 0;
|
||||||
size_t IndexCountMax = 0;
|
size_t IndexCountMax = 0;
|
||||||
// ClipRect
|
|
||||||
PD::fvec4 ClipRect;
|
|
||||||
bool ClipRectUsed = false;
|
|
||||||
};
|
};
|
||||||
} // namespace Li
|
} // namespace Li
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
@@ -128,18 +128,13 @@ class PD_API Drawlist {
|
|||||||
void PrimTriangle(Command& cmd, const fvec2& a, const fvec2& b,
|
void PrimTriangle(Command& cmd, const fvec2& a, const fvec2& b,
|
||||||
const fvec2& c, const PD::Color& color);
|
const fvec2& c, const PD::Color& color);
|
||||||
|
|
||||||
void PushClipRect(const fvec4& r) { pClipRects.push_back(r); }
|
|
||||||
void PopClipRect() {
|
|
||||||
if (!pClipRects.empty()) pClipRects.pop_back();
|
|
||||||
}
|
|
||||||
bool HasClipRect() { return !pClipRects.empty(); }
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Texture pCurrentTexture;
|
Texture pCurrentTexture;
|
||||||
int pCurrentLayer = 0;
|
int pCurrentLayer = 0;
|
||||||
Pool<Command> pCommands;
|
Pool<Command> pCommands;
|
||||||
Pool<fvec2> pPath;
|
Pool<fvec2> pPath;
|
||||||
std::vector<fvec4> pClipRects;
|
Pool<Vertex> pVertices;
|
||||||
|
Pool<u16> pIndices;
|
||||||
Font* pFont = nullptr;
|
Font* pFont = nullptr;
|
||||||
float pFontScale = 1.f;
|
float pFontScale = 1.f;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -56,6 +56,12 @@ class PD_API Font {
|
|||||||
*/
|
*/
|
||||||
void LoadTTF(const std::vector<u8>& data, int px_height = 32,
|
void LoadTTF(const std::vector<u8>& data, int px_height = 32,
|
||||||
LiFontFlags flags = LiFontFlags_None);
|
LiFontFlags flags = LiFontFlags_None);
|
||||||
|
/**
|
||||||
|
* Function that loads a default integrated font...
|
||||||
|
* This will only work if PD_LI_INCLUDE_FONTS was set
|
||||||
|
* on lithium build cause otherwise the font data is not included
|
||||||
|
*/
|
||||||
|
void LoadDefaultFont(int id = 0, int pixel_height = 32);
|
||||||
/**
|
/**
|
||||||
* Getter for Codepoint reference
|
* Getter for Codepoint reference
|
||||||
* @return codepoint dataholder reference
|
* @return codepoint dataholder reference
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ class PD_API Container {
|
|||||||
*/
|
*/
|
||||||
Container(const fvec4& box)
|
Container(const fvec4& box)
|
||||||
: pos(fvec2(box.x, box.y)), size(fvec2(box.z - box.x, box.w - box.y)) {}
|
: pos(fvec2(box.x, box.y)), size(fvec2(box.z - box.x, box.w - box.y)) {}
|
||||||
virtual ~Container() = default;
|
~Container() = default;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Init Function Required by every Object that uses
|
* Init Function Required by every Object that uses
|
||||||
|
|||||||
@@ -87,8 +87,6 @@ enum UI7LytAdd_ {
|
|||||||
UI7LytAdd_NoCursorUpdate = 1 << 0, ///< Add without cursor alignment
|
UI7LytAdd_NoCursorUpdate = 1 << 0, ///< Add without cursor alignment
|
||||||
UI7LytAdd_NoScrollHandle = 1 << 1, ///< Skip HandleScrolling
|
UI7LytAdd_NoScrollHandle = 1 << 1, ///< Skip HandleScrolling
|
||||||
UI7LytAdd_Front = 1 << 2, ///< Add in front of the list
|
UI7LytAdd_Front = 1 << 2, ///< Add in front of the list
|
||||||
UI7LytAdd_NoGlobalClipping = 1 << 3, ///< Dont use global Layout clip rect
|
|
||||||
UI7LytAdd_NoClipTitlebar = 1 << 4, ///< Dont clip content behind the titlebar
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -85,8 +85,13 @@ PD_API Mat4 Mat4::Perspective(float fov, float aspect, float n, float f) {
|
|||||||
Mat4 ret;
|
Mat4 ret;
|
||||||
ret(0, 0) = 1.f / (aspect * _fov);
|
ret(0, 0) = 1.f / (aspect * _fov);
|
||||||
ret(1, 1) = 1.f / _fov;
|
ret(1, 1) = 1.f / _fov;
|
||||||
|
#ifdef __3DS__
|
||||||
|
ret(2, 3) = f * n / (n - f);
|
||||||
|
ret(2, 2) = -(-1.f) * n / (n - f);
|
||||||
|
#else
|
||||||
ret(2, 2) = -(f + n) / (f - n);
|
ret(2, 2) = -(f + n) / (f - n);
|
||||||
ret(2, 3) = -(2.f * f * n) / (f - n);
|
ret(2, 3) = -(2.f * f * n) / (f - n);
|
||||||
|
#endif
|
||||||
ret(3, 2) = -1.f;
|
ret(3, 2) = -1.f;
|
||||||
ret(3, 3) = 0.0f;
|
ret(3, 3) = 0.0f;
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -56,8 +56,6 @@ void Command::Reset() {
|
|||||||
VertexCount = 0;
|
VertexCount = 0;
|
||||||
VertexCountMax = 0;
|
VertexCountMax = 0;
|
||||||
IndexCountMax = 0;
|
IndexCountMax = 0;
|
||||||
ClipRect = 0.f;
|
|
||||||
ClipRectUsed = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Command& Command::Add(const Vertex& vtx) {
|
Command& Command::Add(const Vertex& vtx) {
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ PD_API void Drawlist::Clear() {
|
|||||||
pPath.ResetFast();
|
pPath.ResetFast();
|
||||||
pCommands.NoReset();
|
pCommands.NoReset();
|
||||||
pCurrentLayer = 0;
|
pCurrentLayer = 0;
|
||||||
pClipRects.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Command Allocation */
|
/** Command Allocation */
|
||||||
@@ -52,10 +51,6 @@ PD_API Command& Drawlist::NewCommand() {
|
|||||||
cmd->Reset();
|
cmd->Reset();
|
||||||
cmd->Layer = pCurrentLayer;
|
cmd->Layer = pCurrentLayer;
|
||||||
cmd->Tex = pCurrentTexture.GetID();
|
cmd->Tex = pCurrentTexture.GetID();
|
||||||
if (HasClipRect()) {
|
|
||||||
cmd->ClipRectUsed = HasClipRect();
|
|
||||||
cmd->ClipRect = pClipRects.back();
|
|
||||||
}
|
|
||||||
return *cmd;
|
return *cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -195,6 +195,8 @@ PD_API void Font::LoadTTF(const std::vector<u8>& data, int px_height,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PD_API void Font::LoadDefaultFont(int id, int pixel_height) {}
|
||||||
|
|
||||||
PD_API Font::Codepoint& Font::GetCodepoint(u32 c) {
|
PD_API Font::Codepoint& Font::GetCodepoint(u32 c) {
|
||||||
if (c < 128) {
|
if (c < 128) {
|
||||||
// Direct Access (~11% improvement)
|
// Direct Access (~11% improvement)
|
||||||
|
|||||||
@@ -44,13 +44,13 @@ PD_API void Container::HandleInternalInput() {
|
|||||||
/** Internal function */
|
/** Internal function */
|
||||||
PD_API void Container::PreDraw() {
|
PD_API void Container::PreDraw() {
|
||||||
if (pCLipRectUsed) {
|
if (pCLipRectUsed) {
|
||||||
list->PushClipRect(pClipRect);
|
// list->PushClipRect(pClipRect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/** Internal function */
|
/** Internal function */
|
||||||
PD_API void Container::PostDraw() {
|
PD_API void Container::PostDraw() {
|
||||||
if (pCLipRectUsed) {
|
if (pCLipRectUsed) {
|
||||||
list->PopClipRect();
|
// list->PopClipRect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // namespace UI7
|
} // namespace UI7
|
||||||
|
|||||||
+1
-1
@@ -28,7 +28,7 @@ SOFTWARE.
|
|||||||
|
|
||||||
namespace PD {
|
namespace PD {
|
||||||
|
|
||||||
PD_API UI7::IO::IO() : CurrentViewPort("", 0), DeltaStats(60) {
|
PD_API UI7::IO::IO() : DeltaStats(60), CurrentViewPort("", 0) {
|
||||||
/** Probably not the best solution i guess */
|
/** Probably not the best solution i guess */
|
||||||
// CurrentViewPort =
|
// CurrentViewPort =
|
||||||
// ViewPort::New("Default", ivec4(ivec2(0, 0), pCtx.Gfx()->ViewPort));
|
// ViewPort::New("Default", ivec4(ivec2(0, 0), pCtx.Gfx()->ViewPort));
|
||||||
|
|||||||
+4
-14
@@ -77,10 +77,6 @@ PD_API void Layout::AddObject(Container* obj) {
|
|||||||
obj->Update();
|
obj->Update();
|
||||||
CursorMove(obj->GetSize());
|
CursorMove(obj->GetSize());
|
||||||
obj->HandleScrolling(ScrollOffset, WorkRect);
|
obj->HandleScrolling(ScrollOffset, WorkRect);
|
||||||
if (Flags & UI7LayoutFlags_UseClipRect) {
|
|
||||||
obj->SetClipRect(
|
|
||||||
fvec4(Pos.x, Pos.y + WorkRect.y, Size.x, Size.y - WorkRect.y));
|
|
||||||
}
|
|
||||||
Objects.push_back(obj);
|
Objects.push_back(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,15 +93,6 @@ PD_API void Layout::AddObjectEx(Container* obj, u32 flags) {
|
|||||||
if (!(flags & UI7LytAdd_NoScrollHandle)) {
|
if (!(flags & UI7LytAdd_NoScrollHandle)) {
|
||||||
obj->HandleScrolling(ScrollOffset, WorkRect);
|
obj->HandleScrolling(ScrollOffset, WorkRect);
|
||||||
}
|
}
|
||||||
if (Flags & UI7LayoutFlags_UseClipRect &&
|
|
||||||
!(flags & UI7LytAdd_NoGlobalClipping)) {
|
|
||||||
if (flags & UI7LytAdd_NoClipTitlebar) {
|
|
||||||
obj->SetClipRect(fvec4(Pos.x, Pos.y, Size.x, Size.y));
|
|
||||||
} else {
|
|
||||||
obj->SetClipRect(
|
|
||||||
fvec4(Pos.x, Pos.y + WorkRect.y, Size.x, Size.y - WorkRect.y));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (flags & UI7LytAdd_Front) {
|
if (flags & UI7LytAdd_Front) {
|
||||||
Objects.push_front(obj);
|
Objects.push_front(obj);
|
||||||
} else {
|
} else {
|
||||||
@@ -184,6 +171,9 @@ PD_API void Layout::Update() {
|
|||||||
it->SetPos(it->GetPos() + Pos);
|
it->SetPos(it->GetPos() + Pos);
|
||||||
it->HandleInput();
|
it->HandleInput();
|
||||||
it->UnlockInput();
|
it->UnlockInput();
|
||||||
|
if (Flags & UI7LayoutFlags_UseClipRect) {
|
||||||
|
it->SetClipRect(fvec4(Pos, Size));
|
||||||
|
}
|
||||||
it->PreDraw();
|
it->PreDraw();
|
||||||
it->Draw();
|
it->Draw();
|
||||||
it->PostDraw();
|
it->PostDraw();
|
||||||
@@ -211,7 +201,7 @@ PD_API void Layout::Label(const std::string& label) {
|
|||||||
// Layout API
|
// Layout API
|
||||||
auto r = IO.LabelPool.Allocate();
|
auto r = IO.LabelPool.Allocate();
|
||||||
*r = UI7::Label(label, IO);
|
*r = UI7::Label(label, IO);
|
||||||
// r->SetClipRect(fvec4(GetPosition(), GetSize()));
|
r->SetClipRect(fvec4(GetPosition(), GetPosition() + GetSize()));
|
||||||
AddObject(r);
|
AddObject(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Executable → Regular
+6
-10
@@ -27,7 +27,7 @@ SOFTWARE.
|
|||||||
|
|
||||||
namespace PD {
|
namespace PD {
|
||||||
namespace UI7 {
|
namespace UI7 {
|
||||||
Menu::Menu(const ID& id, IO& io) : pLayout(id, io), pIO(io), pID(id) {
|
Menu::Menu(const ID& id, IO& io) : pIO(io), pID(id), pLayout(id, io) {
|
||||||
TitleBarHeight = pIO.FontScale * pIO.Font->PixelHeight + pIO.MenuPadding.y;
|
TitleBarHeight = pIO.FontScale * pIO.Font->PixelHeight + pIO.MenuPadding.y;
|
||||||
pLayout.WorkRect.y += TitleBarHeight;
|
pLayout.WorkRect.y += TitleBarHeight;
|
||||||
pLayout.Flags |= UI7LayoutFlags_UseClipRect;
|
pLayout.Flags |= UI7LayoutFlags_UseClipRect;
|
||||||
@@ -219,7 +219,7 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
if (!(Flags & UI7MenuFlags_NoResize)) {
|
if (!(Flags & UI7MenuFlags_NoResize)) {
|
||||||
DynObj* r = pIO.DynObjPool.Allocate();
|
DynObj* r = pIO.DynObjPool.Allocate();
|
||||||
*r = UI7::DynObj([](IO* io, Li::Drawlist* l, UI7::Container* self) {
|
*r = UI7::DynObj([](IO* io, Li::Drawlist* l, UI7::Container* self) {
|
||||||
l->SetLayer(21);
|
l->SetLayer(1);
|
||||||
l->PathAdd(self->FinalPos() + self->GetSize() - fvec2(0, 20));
|
l->PathAdd(self->FinalPos() + self->GetSize() - fvec2(0, 20));
|
||||||
l->PathAdd(self->FinalPos() + self->GetSize());
|
l->PathAdd(self->FinalPos() + self->GetSize());
|
||||||
l->PathAdd(self->FinalPos() + self->GetSize() - fvec2(20, 0));
|
l->PathAdd(self->FinalPos() + self->GetSize() - fvec2(20, 0));
|
||||||
@@ -248,7 +248,7 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
fvec2(pLayout.GetSize().x, pLayout.GetSize().y - TitleBarHeight));
|
fvec2(pLayout.GetSize().x, pLayout.GetSize().y - TitleBarHeight));
|
||||||
r->SetPos(fvec2(0, TitleBarHeight));
|
r->SetPos(fvec2(0, TitleBarHeight));
|
||||||
pLayout.AddObjectEx(r, UI7LytAdd_NoCursorUpdate | UI7LytAdd_NoScrollHandle |
|
pLayout.AddObjectEx(r, UI7LytAdd_NoCursorUpdate | UI7LytAdd_NoScrollHandle |
|
||||||
UI7LytAdd_Front | UI7LytAdd_NoClipTitlebar);
|
UI7LytAdd_Front);
|
||||||
}
|
}
|
||||||
if (!(Flags & UI7MenuFlags_NoTitlebar)) {
|
if (!(Flags & UI7MenuFlags_NoTitlebar)) {
|
||||||
DynObj* r = pIO.DynObjPool.Allocate();
|
DynObj* r = pIO.DynObjPool.Allocate();
|
||||||
@@ -273,8 +273,7 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
});
|
});
|
||||||
r->SetSize(fvec2(pLayout.GetSize().x, TitleBarHeight));
|
r->SetSize(fvec2(pLayout.GetSize().x, TitleBarHeight));
|
||||||
r->SetPos(0);
|
r->SetPos(0);
|
||||||
pLayout.AddObjectEx(r, UI7LytAdd_NoCursorUpdate | UI7LytAdd_NoScrollHandle |
|
pLayout.AddObjectEx(r, UI7LytAdd_NoCursorUpdate | UI7LytAdd_NoScrollHandle);
|
||||||
UI7LytAdd_NoClipTitlebar);
|
|
||||||
|
|
||||||
/** Collapse Sym */
|
/** Collapse Sym */
|
||||||
if (!(Flags & UI7MenuFlags_NoCollapse)) {
|
if (!(Flags & UI7MenuFlags_NoCollapse)) {
|
||||||
@@ -297,9 +296,8 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
});
|
});
|
||||||
r->SetSize(TitleBarHeight - pIO.FramePadding.y * 2);
|
r->SetSize(TitleBarHeight - pIO.FramePadding.y * 2);
|
||||||
r->SetPos(pIO.FramePadding);
|
r->SetPos(pIO.FramePadding);
|
||||||
pLayout.AddObjectEx(r, UI7LytAdd_NoCursorUpdate |
|
pLayout.AddObjectEx(r,
|
||||||
UI7LytAdd_NoScrollHandle |
|
UI7LytAdd_NoCursorUpdate | UI7LytAdd_NoScrollHandle);
|
||||||
UI7LytAdd_NoClipTitlebar);
|
|
||||||
}
|
}
|
||||||
/** Close Sym (only shown if pIsShown is not nullptr) */
|
/** Close Sym (only shown if pIsShown is not nullptr) */
|
||||||
if (!(Flags & UI7MenuFlags_NoClose) && pIsShown) {
|
if (!(Flags & UI7MenuFlags_NoClose) && pIsShown) {
|
||||||
@@ -312,13 +310,11 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
fvec2 cpos =
|
fvec2 cpos =
|
||||||
fvec2(pLayout.Pos.x + pLayout.Size.x - size.x - pIO.FramePadding.x,
|
fvec2(pLayout.Pos.x + pLayout.Size.x - size.x - pIO.FramePadding.x,
|
||||||
pLayout.Pos.y + pIO.FramePadding.y);
|
pLayout.Pos.y + pIO.FramePadding.y);
|
||||||
pLayout.DrawList.SetLayer(21);
|
|
||||||
pLayout.DrawList.DrawLine(cpos, cpos + size,
|
pLayout.DrawList.DrawLine(cpos, cpos + size,
|
||||||
pIO.Theme.Get(UI7Color_FrameBackground), 2);
|
pIO.Theme.Get(UI7Color_FrameBackground), 2);
|
||||||
pLayout.DrawList.DrawLine(cpos + fvec2(0, size.y),
|
pLayout.DrawList.DrawLine(cpos + fvec2(0, size.y),
|
||||||
cpos + fvec2(size.x, 0),
|
cpos + fvec2(size.x, 0),
|
||||||
pIO.Theme.Get(UI7Color_FrameBackground), 2);
|
pIO.Theme.Get(UI7Color_FrameBackground), 2);
|
||||||
pLayout.DrawList.SetLayer(0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-12
@@ -158,7 +158,7 @@ PD_API void Context::AboutMenu(bool* show) {
|
|||||||
if (auto m = BeginMenu("About UI7", UI7MenuFlags_Scrolling, show)) {
|
if (auto m = BeginMenu("About UI7", UI7MenuFlags_Scrolling, show)) {
|
||||||
m->Label("Palladium UI7 " + GetVersion());
|
m->Label("Palladium UI7 " + GetVersion());
|
||||||
m->Separator();
|
m->Separator();
|
||||||
m->Label("(c) 2023-2026 René Amthor");
|
m->Label("(c) 2023-2025 René Amthor");
|
||||||
m->Label("UI7 is licensed under the MIT License.");
|
m->Label("UI7 is licensed under the MIT License.");
|
||||||
m->Label("See LICENSE for more information.");
|
m->Label("See LICENSE for more information.");
|
||||||
static bool show_build;
|
static bool show_build;
|
||||||
@@ -207,17 +207,7 @@ PD_API void Context::MetricsMenu(bool* show) {
|
|||||||
}
|
}
|
||||||
m->SeparatorText("Palladium Info");
|
m->SeparatorText("Palladium Info");
|
||||||
m->Label("Os Driver: {}", PD::Os::GetDriverName());
|
m->Label("Os Driver: {}", PD::Os::GetDriverName());
|
||||||
if (m->BeginTreeNode(
|
m->Label("Renderer: {}", PD::Gfx::GetDriverName());
|
||||||
std::format("Gfx Driver: {}", PD::Gfx::GetDriverName()))) {
|
|
||||||
m->SeparatorText("Features");
|
|
||||||
if (PD::Gfx::GetFlags() & PDGfxBackendFlags_HasClipRect)
|
|
||||||
m->Label("ClipRects");
|
|
||||||
if (PD::Gfx::GetFlags() & PDGfxBackendFlags_ReqPow2)
|
|
||||||
m->Label("Texture As Pow of 2");
|
|
||||||
if (PD::Gfx::GetFlags() & PDGfxBackendFlags_ApproxSDF)
|
|
||||||
m->Label("SDF Approximation");
|
|
||||||
m->EndTreeNode();
|
|
||||||
}
|
|
||||||
if (m->BeginTreeNode(
|
if (m->BeginTreeNode(
|
||||||
std::string(std::string("Input: ") + PD::Hid::GetDriverName()))) {
|
std::string(std::string("Input: ") + PD::Hid::GetDriverName()))) {
|
||||||
/* if (pIO.pCtx.Hid()->Flags & PD::HidDriver::Flags_HasKeyboard) {
|
/* if (pIO.pCtx.Hid()->Flags & PD::HidDriver::Flags_HasKeyboard) {
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 3.22)
|
|
||||||
|
|
||||||
project(test)
|
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED true)
|
|
||||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
|
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS true)
|
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
|
|
||||||
if(${PD_BUILD_SHARED})
|
|
||||||
message(ERROR "3DS Only supports Static libraries")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_subdirectory(../ palladium)
|
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
|
|
||||||
add_subdirectory(../backends/3ds pd-3ds)
|
|
||||||
else()
|
|
||||||
add_subdirectory(../backends/desktop pd-desktop)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_executable(test source/main.cpp
|
|
||||||
${BKND_SRC})
|
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
|
|
||||||
target_link_libraries(test PUBLIC pd-3ds palladium)
|
|
||||||
else()
|
|
||||||
target_link_libraries(test PUBLIC pd-desktop palladium)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
|
|
||||||
target_compile_options(palladium PRIVATE
|
|
||||||
$<$<COMPILE_LANGUAGE:C>:-Wall>
|
|
||||||
$<$<COMPILE_LANGUAGE:C>:-Wno-psabi>
|
|
||||||
$<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions>
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
||||||
target_compile_options(palladium PRIVATE
|
|
||||||
$<$<CONFIG:Debug>:-O0 -g>
|
|
||||||
$<$<CONFIG:Release>:-O3>
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# set(RC_FILES
|
|
||||||
# testassets/ComicNeue.ttf
|
|
||||||
# testassets/logo.png
|
|
||||||
# testassets/test.png)
|
|
||||||
# install(FILES ${RC_FILES} DESTINATION ".")
|
|
||||||
# else()
|
|
||||||
# target_link_libraries(test PUBLIC pd-backend-3ds ctru citro3d)
|
|
||||||
# endif()
|
|
||||||
@@ -20,26 +20,9 @@ bool ColorTests() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IDTests() {
|
|
||||||
std::cout << std::format("HashID32(\"1234\") -> {:016X}",
|
|
||||||
PD::HashID32("1234").Get())
|
|
||||||
<< std::endl;
|
|
||||||
std::cout << std::format("HashID32(\"1235\") -> {:016X}",
|
|
||||||
PD::HashID32("1235").Get())
|
|
||||||
<< std::endl;
|
|
||||||
std::cout << std::format("HashID64(\"1234\") -> {:016X}",
|
|
||||||
PD::HashID64("1234").Get())
|
|
||||||
<< std::endl;
|
|
||||||
std::cout << std::format("HashID64(\"1235\") -> {:016X}",
|
|
||||||
PD::HashID64("1235").Get())
|
|
||||||
<< std::endl;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
PD::Os::UseDriver<PD::OsDriver>();
|
PD::Os::UseDriver<PD::OsDriver>();
|
||||||
ColorTests();
|
ColorTests();
|
||||||
IDTests();
|
|
||||||
std::cout << PD::Os::GetTime() << std::endl;
|
std::cout << PD::Os::GetTime() << std::endl;
|
||||||
PD::Pool<int> pool;
|
PD::Pool<int> pool;
|
||||||
pool.Init(90);
|
pool.Init(90);
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ class OsCtx {
|
|||||||
virtual bool Mainloop() { return false; }
|
virtual bool Mainloop() { return false; }
|
||||||
virtual void ClearViewPort() {}
|
virtual void ClearViewPort() {}
|
||||||
virtual void SwapBuffers() {}
|
virtual void SwapBuffers() {}
|
||||||
virtual int GetScreenCount() { return 1; }
|
|
||||||
virtual void DrawOnScreen(int s = 0) {}
|
|
||||||
PD::fvec2 PositionTranslate(PD::fvec2 in) {
|
PD::fvec2 PositionTranslate(PD::fvec2 in) {
|
||||||
return fvec2(in.x * pViewPort.x, in.y * pViewPort.y);
|
return fvec2(in.x * pViewPort.x, in.y * pViewPort.y);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,6 @@ class HorizonCtr : public PD::OsCtx {
|
|||||||
bool Mainloop() override;
|
bool Mainloop() override;
|
||||||
void ClearViewPort() override;
|
void ClearViewPort() override;
|
||||||
void SwapBuffers() override;
|
void SwapBuffers() override;
|
||||||
int GetScreenCount() override { return 2; }
|
|
||||||
void DrawOnScreen(int s) override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct Impl;
|
struct Impl;
|
||||||
|
|||||||
@@ -208,17 +208,10 @@ int main(int argc, char** argv) {
|
|||||||
RightStick.pColor = "#00ffff";
|
RightStick.pColor = "#00ffff";
|
||||||
PD::UI7::Context ui7;
|
PD::UI7::Context ui7;
|
||||||
ui7.GetIO().Font = &font;
|
ui7.GetIO().Font = &font;
|
||||||
#ifdef __3DS__
|
|
||||||
ui7.AddViewPort("Default", PD::ivec4(0, 0, 320, 240));
|
|
||||||
ui7.GetIO().FontScale = 0.5f;
|
|
||||||
#else
|
|
||||||
ui7.AddViewPort("Default", PD::ivec4(0, 0, 1280, 720));
|
ui7.AddViewPort("Default", PD::ivec4(0, 0, 1280, 720));
|
||||||
#endif
|
|
||||||
ui7.UseViewPort("Default");
|
ui7.UseViewPort("Default");
|
||||||
bool pMetricsWin = true;
|
|
||||||
while (pOs->Mainloop()) {
|
while (pOs->Mainloop()) {
|
||||||
PD::TT::End("OSCTX::MainLoop");
|
PD::TT::End("OSCTX::MainLoop");
|
||||||
pOs->DrawOnScreen(0);
|
|
||||||
pOs->ClearViewPort();
|
pOs->ClearViewPort();
|
||||||
PD::TT::Scope __st("MainLoop");
|
PD::TT::Scope __st("MainLoop");
|
||||||
PD::TT::Beg("MainRaw");
|
PD::TT::Beg("MainRaw");
|
||||||
@@ -308,7 +301,6 @@ int main(int argc, char** argv) {
|
|||||||
PD::TT::Beg("BuildUI7Menus");
|
PD::TT::Beg("BuildUI7Menus");
|
||||||
if (auto m = ui7.BeginMenu("Test")) {
|
if (auto m = ui7.BeginMenu("Test")) {
|
||||||
m->Label("Hello World!");
|
m->Label("Hello World!");
|
||||||
m->Image(pTex, 128.f);
|
|
||||||
ui7.EndMenu();
|
ui7.EndMenu();
|
||||||
}
|
}
|
||||||
if (auto m = ui7.BeginMenu("LI DBG INFO")) {
|
if (auto m = ui7.BeginMenu("LI DBG INFO")) {
|
||||||
@@ -323,18 +315,14 @@ int main(int argc, char** argv) {
|
|||||||
m->PopFont();
|
m->PopFont();
|
||||||
ui7.EndMenu();
|
ui7.EndMenu();
|
||||||
}
|
}
|
||||||
ui7.MetricsMenu(&pMetricsWin);
|
ui7.MetricsMenu();
|
||||||
ui7.StyleEditor();
|
|
||||||
PD::TT::End("BuildUI7Menus");
|
PD::TT::End("BuildUI7Menus");
|
||||||
PD::TT::Beg("UI7::Context::Update");
|
PD::TT::Beg("UI7::Context::Update");
|
||||||
ui7.Update();
|
ui7.Update();
|
||||||
PD::TT::End("UI7::Context::Update");
|
PD::TT::End("UI7::Context::Update");
|
||||||
PD::Gfx::Reset();
|
PD::Gfx::Reset();
|
||||||
PD::TT::Beg("PD::Gfx::Draw");
|
PD::TT::Beg("PD::Gfx::Draw");
|
||||||
pOs->DrawOnScreen(1);
|
|
||||||
pOs->ClearViewPort();
|
|
||||||
PD::Gfx::Draw(ui7.GetDrawData());
|
PD::Gfx::Draw(ui7.GetDrawData());
|
||||||
pOs->DrawOnScreen(0);
|
|
||||||
PD::Gfx::Draw(pList);
|
PD::Gfx::Draw(pList);
|
||||||
PD::TT::End("PD::Gfx::Draw");
|
PD::TT::End("PD::Gfx::Draw");
|
||||||
pList.Clear();
|
pList.Clear();
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ struct HorizonCtr::Impl {
|
|||||||
C3D_RenderTarget* Top = nullptr;
|
C3D_RenderTarget* Top = nullptr;
|
||||||
C3D_RenderTarget* Bottom = nullptr;
|
C3D_RenderTarget* Bottom = nullptr;
|
||||||
uint32_t* pSocBuf = nullptr;
|
uint32_t* pSocBuf = nullptr;
|
||||||
int CurrentScreen = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void HorizonCtr::Init() {
|
void HorizonCtr::Init() {
|
||||||
@@ -64,25 +63,13 @@ bool HorizonCtr::Mainloop() {
|
|||||||
pViewPort = ivec2(400, 240);
|
pViewPort = ivec2(400, 240);
|
||||||
bool _kill = hidKeysUp() & KEY_START;
|
bool _kill = hidKeysUp() & KEY_START;
|
||||||
C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
|
C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
|
||||||
impl->CurrentScreen = 0;
|
|
||||||
return aptMainLoop() && !_kill;
|
return aptMainLoop() && !_kill;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HorizonCtr::ClearViewPort() {
|
void HorizonCtr::ClearViewPort() {
|
||||||
C3D_RenderTargetClear(impl->CurrentScreen ? impl->Bottom : impl->Top,
|
|
||||||
C3D_CLEAR_ALL, PD::Color(25, 25, 25, 25), 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void HorizonCtr::DrawOnScreen(int s) {
|
|
||||||
impl->CurrentScreen = s;
|
|
||||||
if (s == 0) {
|
|
||||||
C3D_FrameDrawOn(impl->Top);
|
|
||||||
pViewPort = PD::ivec2(400, 240);
|
|
||||||
} else if (s == 1) {
|
|
||||||
C3D_FrameDrawOn(impl->Bottom);
|
|
||||||
pViewPort = PD::ivec2(320, 240);
|
|
||||||
}
|
|
||||||
PD::Gfx::SetViewPort(pViewPort);
|
PD::Gfx::SetViewPort(pViewPort);
|
||||||
|
C3D_FrameDrawOn(impl->Top);
|
||||||
|
C3D_RenderTargetClear(impl->Top, C3D_CLEAR_ALL, PD::Color(25, 25, 25, 25), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HorizonCtr::SwapBuffers() { C3D_FrameEnd(0); }
|
void HorizonCtr::SwapBuffers() { C3D_FrameEnd(0); }
|
||||||
|
|||||||
Reference in New Issue
Block a user