Compare commits
69
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a5a86459b
|
||
|
|
0f25a70901
|
||
|
|
6a22b26a3d
|
||
|
|
245cc0f314
|
||
|
|
cb437d41a0
|
||
|
|
322ce785b9
|
||
|
|
b29e298d55
|
||
|
|
2801b876e6
|
||
|
|
f1540f0098
|
||
|
|
54584728c3
|
||
|
|
daaf473af7
|
||
|
|
9ed3ed233d
|
||
|
|
dd97aab749
|
||
|
|
0746295013
|
||
|
|
2984354884
|
||
|
|
4d2470b0c6
|
||
|
|
cfb6a9b3dd
|
||
|
|
799e779fe6
|
||
|
|
7f708a565e
|
||
|
|
280ce524bf
|
||
|
|
b99fc39444
|
||
|
|
6dbf5a4812
|
||
|
|
ff3b241dd2
|
||
|
|
7a1751589e
|
||
|
|
8a4b3c119d
|
||
|
|
1f7d96a455
|
||
|
|
c9768010f2
|
||
|
|
679de3ae94
|
||
|
|
af7fc026df
|
||
|
|
5bc8046ebe
|
||
|
|
8215baac99
|
||
|
|
a776addf11
|
||
|
|
1cf3b6f8e6
|
||
|
|
b5321ca1a1
|
||
|
|
4498c2c0fb
|
||
|
|
818b086f08
|
||
|
|
e560496512
|
||
|
|
7b6e611f12
|
||
|
|
72deaad28d
|
||
|
|
2e652a3c24
|
||
|
|
784421fa6c
|
||
|
|
bc06a3fee8
|
||
|
|
d2ab60c824
|
||
|
|
a8fe58ef0f
|
||
|
|
eea0e9844f
|
||
|
|
4777c85f9a
|
||
|
|
b49c0bd3dc
|
||
|
|
4db5d98cb2
|
||
|
|
794e06b890
|
||
|
|
d8efcd41b1
|
||
|
|
4dab1987d1
|
||
|
|
6fab4a07a9
|
||
|
|
baad2ce15c
|
||
|
|
a86c13b9a3
|
||
|
|
3b0b103eb3
|
||
|
|
6beef97cdf
|
||
|
|
afe30a5dbd
|
||
|
|
e6cd8b7d24
|
||
|
|
66602a79e0
|
||
|
|
a28b7318d2
|
||
|
|
71563e8979
|
||
|
|
7d89ab1c47
|
||
|
|
186fce803e
|
||
|
|
66412ca8e0
|
||
|
|
e04046720b
|
||
|
|
d4c59e5b61
|
||
|
|
fe9194b907
|
||
|
|
4924d86bc0
|
||
|
|
41b612ec0a
|
@@ -52,7 +52,6 @@ set(PD_SOURCES
|
|||||||
source/lithium/drawlist.cpp
|
source/lithium/drawlist.cpp
|
||||||
source/lithium/font.cpp
|
source/lithium/font.cpp
|
||||||
source/lithium/math.cpp
|
source/lithium/math.cpp
|
||||||
source/lithium/pools.cpp
|
|
||||||
|
|
||||||
# UI7
|
# UI7
|
||||||
source/ui7/io.cpp
|
source/ui7/io.cpp
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ option(PD_ENABLE_CITRO3D "Enable Citro3D Support (3DS)" OFF)
|
|||||||
option(PD_ENABLE_VULKAN "Not implemented yet" OFF)
|
option(PD_ENABLE_VULKAN "Not implemented yet" OFF)
|
||||||
option(PD_ENABLE_HID_GLFW "Enable GLFW Input Driver" ON)
|
option(PD_ENABLE_HID_GLFW "Enable GLFW Input Driver" ON)
|
||||||
option(PD_ENABLE_HID_NX "Enable NX Input Driver" OFF)
|
option(PD_ENABLE_HID_NX "Enable NX Input Driver" OFF)
|
||||||
option(PD_ENABLE_HID3DS "Enable 3ds Input Driver" OFF)
|
|
||||||
|
|
||||||
if(NOT WIN32) # cause we are not on windows...
|
if(NOT WIN32) # cause we are not on windows...
|
||||||
set(PD_ENABLE_DIRECTX9 OFF)
|
set(PD_ENABLE_DIRECTX9 OFF)
|
||||||
@@ -22,7 +21,6 @@ if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
|
|||||||
set(PD_ENABLE_CITRO3D ON)
|
set(PD_ENABLE_CITRO3D ON)
|
||||||
set(PD_ENABLE_HID_GLFW OFF)
|
set(PD_ENABLE_HID_GLFW OFF)
|
||||||
set(PD_ENABLE_HID_NX OFF)
|
set(PD_ENABLE_HID_NX OFF)
|
||||||
set(PD_ENABLE_HID3DS ON)
|
|
||||||
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "NintendoSwitch")
|
elseif(${CMAKE_SYSTEM_NAME} STREQUAL "NintendoSwitch")
|
||||||
set(PD_ENABLE_OPENGL2 OFF)
|
set(PD_ENABLE_OPENGL2 OFF)
|
||||||
set(PD_ENABLE_OPENGL3 ON)
|
set(PD_ENABLE_OPENGL3 ON)
|
||||||
@@ -38,7 +36,6 @@ add_library(pd-system STATIC
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_opengl3.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_opengl3.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_directx9.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_directx9.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_citro3d.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/source/gfx_citro3d.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_3ds.cpp
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_glfw.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_glfw.cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_nx.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/source/hid_nx.cpp
|
||||||
)
|
)
|
||||||
@@ -67,7 +64,6 @@ target_compile_definitions(pd-system
|
|||||||
$<$<BOOL:${PD_ENABLE_CITRO3D}>:PD_ENABLE_CITRO3D>
|
$<$<BOOL:${PD_ENABLE_CITRO3D}>:PD_ENABLE_CITRO3D>
|
||||||
$<$<BOOL:${PD_ENABLE_HID_GLFW}>:PD_ENABLE_HID_GLFW>
|
$<$<BOOL:${PD_ENABLE_HID_GLFW}>:PD_ENABLE_HID_GLFW>
|
||||||
$<$<BOOL:${PD_ENABLE_HID_NX}>:PD_ENABLE_HID_NX>
|
$<$<BOOL:${PD_ENABLE_HID_NX}>:PD_ENABLE_HID_NX>
|
||||||
$<$<BOOL:${PD_ENABLE_HID3DS}>:PD_ENABLE_HID3DS>
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Palladium
|
# Palladium
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <pd/drivers/hid.hpp>
|
|
||||||
|
|
||||||
namespace PD {
|
|
||||||
class Hid3DS : public HidDriver {
|
|
||||||
public:
|
|
||||||
Hid3DS();
|
|
||||||
~Hid3DS();
|
|
||||||
|
|
||||||
void Update() override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
struct Impl;
|
|
||||||
Impl* impl;
|
|
||||||
};
|
|
||||||
} // namespace PD
|
|
||||||
@@ -7,5 +7,4 @@
|
|||||||
#include <pd_system/gfx_opengl3.hpp>
|
#include <pd_system/gfx_opengl3.hpp>
|
||||||
|
|
||||||
// Hid
|
// Hid
|
||||||
#include <pd_system/hid_3ds.hpp>
|
|
||||||
#include <pd_system/hid_glfw.hpp>
|
#include <pd_system/hid_glfw.hpp>
|
||||||
@@ -175,10 +175,6 @@ void GfxDirectX9::SysReset() {
|
|||||||
impl->Device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
|
impl->Device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
|
||||||
impl->Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
|
impl->Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
|
||||||
impl->Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
|
impl->Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
|
||||||
|
|
||||||
impl->Device->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
|
|
||||||
impl->Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
|
|
||||||
impl->Device->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Li::Texture GfxDirectX9::LoadTexture(const std::vector<PD::u8>& pixels, int w,
|
Li::Texture GfxDirectX9::LoadTexture(const std::vector<PD::u8>& pixels, int w,
|
||||||
@@ -261,27 +257,27 @@ void GfxDirectX9::UploadPools() {
|
|||||||
if (!impl->VBO || impl->VertexBufferSize != GetVertexPoolSize()) {
|
if (!impl->VBO || impl->VertexBufferSize != GetVertexPoolSize()) {
|
||||||
if (impl->VBO) impl->VBO->Release();
|
if (impl->VBO) impl->VBO->Release();
|
||||||
impl->Device->CreateVertexBuffer(GetVertexPoolSize() * sizeof(Li::Vertex),
|
impl->Device->CreateVertexBuffer(GetVertexPoolSize() * sizeof(Li::Vertex),
|
||||||
D3DUSAGE_WRITEONLY, 0, D3DPOOL_MANAGED,
|
D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY, 0,
|
||||||
&impl->VBO, nullptr);
|
D3DPOOL_DEFAULT, &impl->VBO, nullptr);
|
||||||
impl->VertexBufferSize = GetVertexPoolSize();
|
impl->VertexBufferSize = GetVertexPoolSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!impl->IBO || impl->IndexBufferSize != GetIndexPoolSize()) {
|
if (!impl->IBO || impl->IndexBufferSize != GetIndexPoolSize()) {
|
||||||
if (impl->IBO) impl->IBO->Release();
|
if (impl->IBO) impl->IBO->Release();
|
||||||
impl->Device->CreateIndexBuffer(GetIndexPoolSize() * sizeof(u16),
|
impl->Device->CreateIndexBuffer(
|
||||||
D3DUSAGE_WRITEONLY, D3DFMT_INDEX16,
|
GetIndexPoolSize() * sizeof(u16), D3DUSAGE_DYNAMIC | D3DUSAGE_WRITEONLY,
|
||||||
D3DPOOL_MANAGED, &impl->IBO, nullptr);
|
D3DFMT_INDEX16, D3DPOOL_DEFAULT, &impl->IBO, nullptr);
|
||||||
impl->IndexBufferSize = GetIndexPoolSize();
|
impl->IndexBufferSize = GetIndexPoolSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void* vptr;
|
void* vptr;
|
||||||
impl->VBO->Lock(0, 0, &vptr, 0);
|
impl->VBO->Lock(0, 0, &vptr, D3DLOCK_DISCARD);
|
||||||
memcpy(vptr, GetVertexBufPtr(0),
|
memcpy(vptr, GetVertexBufPtr(0),
|
||||||
GetVertexPoolSize() * sizeof(PD::Li::Vertex));
|
GetVertexPoolSize() * sizeof(PD::Li::Vertex));
|
||||||
impl->VBO->Unlock();
|
impl->VBO->Unlock();
|
||||||
|
|
||||||
void* iptr;
|
void* iptr;
|
||||||
impl->IBO->Lock(0, 0, &iptr, 0);
|
impl->IBO->Lock(0, 0, &iptr, D3DLOCK_DISCARD);
|
||||||
memcpy(iptr, GetIndexBufPtr(0), GetIndexPoolSize() * sizeof(u16));
|
memcpy(iptr, GetIndexBufPtr(0), GetIndexPoolSize() * sizeof(u16));
|
||||||
impl->IBO->Unlock();
|
impl->IBO->Unlock();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,82 +0,0 @@
|
|||||||
#include <pd_system/hid_3ds.hpp>
|
|
||||||
#if defined(PD_ENABLE_HID3DS) && defined(__3DS__)
|
|
||||||
#include <3ds.h>
|
|
||||||
namespace PD {
|
|
||||||
struct Hid3DS::Impl {
|
|
||||||
std::string* Text;
|
|
||||||
bool InTextMode = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
Hid3DS::Hid3DS() : HidDriver("Hid3DS") {
|
|
||||||
impl = new Impl;
|
|
||||||
|
|
||||||
pFlags |= PDHidBackendFlags_HasGamepad;
|
|
||||||
pFlags |= PDHidBackendFlags_HasTouch;
|
|
||||||
|
|
||||||
pGamepad[KEY_A] = HidInternal::Gamepad::A;
|
|
||||||
pGamepad[KEY_B] = HidInternal::Gamepad::B;
|
|
||||||
pGamepad[KEY_X] = HidInternal::Gamepad::X;
|
|
||||||
pGamepad[KEY_Y] = HidInternal::Gamepad::Y;
|
|
||||||
pGamepad[KEY_START] = HidInternal::Gamepad::Start;
|
|
||||||
pGamepad[KEY_SELECT] = HidInternal::Gamepad::Select;
|
|
||||||
pGamepad[KEY_L] = HidInternal::Gamepad::L;
|
|
||||||
pGamepad[KEY_R] = HidInternal::Gamepad::R;
|
|
||||||
pGamepad[KEY_DUP] = HidInternal::Gamepad::DUp;
|
|
||||||
pGamepad[KEY_DDOWN] = HidInternal::Gamepad::DDown;
|
|
||||||
pGamepad[KEY_DLEFT] = HidInternal::Gamepad::DLeft;
|
|
||||||
pGamepad[KEY_DRIGHT] = HidInternal::Gamepad::DRight;
|
|
||||||
pGamepad[KEY_CPAD_UP] = HidInternal::Gamepad::CPUp;
|
|
||||||
pGamepad[KEY_CPAD_DOWN] = HidInternal::Gamepad::CPDown;
|
|
||||||
pGamepad[KEY_CPAD_LEFT] = HidInternal::Gamepad::CPLeft;
|
|
||||||
pGamepad[KEY_CPAD_RIGHT] = HidInternal::Gamepad::CPRight;
|
|
||||||
pGamepad[KEY_CSTICK_UP] = HidInternal::Gamepad::CSUp;
|
|
||||||
pGamepad[KEY_CSTICK_DOWN] = HidInternal::Gamepad::CSDown;
|
|
||||||
pGamepad[KEY_CSTICK_LEFT] = HidInternal::Gamepad::CSLeft;
|
|
||||||
pGamepad[KEY_CSTICK_RIGHT] = HidInternal::Gamepad::CSRight;
|
|
||||||
pGamepad[KEY_ZL] = HidInternal::Gamepad::ZL;
|
|
||||||
pGamepad[KEY_ZR] = HidInternal::Gamepad::ZR;
|
|
||||||
pGamepad[KEY_TOUCH] = HidInternal::Gamepad::Touch;
|
|
||||||
}
|
|
||||||
|
|
||||||
Hid3DS::~Hid3DS() { delete impl; }
|
|
||||||
|
|
||||||
void Hid3DS::Update() {
|
|
||||||
HidDriver::Update(); // clear stats
|
|
||||||
hidScanInput();
|
|
||||||
u32 kd = hidKeysDown();
|
|
||||||
u32 kh = hidKeysHeld();
|
|
||||||
u32 ku = hidKeysUp();
|
|
||||||
|
|
||||||
for (const auto& b : pGamepad) {
|
|
||||||
if (b.first & kd) {
|
|
||||||
pGamepadEvents[0][Event::Down] |= b.second;
|
|
||||||
}
|
|
||||||
if (b.first & kh) {
|
|
||||||
pGamepadEvents[0][Event::Held] |= b.second;
|
|
||||||
}
|
|
||||||
if (b.first & ku) {
|
|
||||||
pGamepadEvents[0][Event::Up] |= b.second;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*if (pLocked) {
|
|
||||||
SwapTab();
|
|
||||||
}*/
|
|
||||||
touchPosition t;
|
|
||||||
hidTouchRead(&t);
|
|
||||||
pMouse[0] = fvec2(t.px, t.py);
|
|
||||||
}
|
|
||||||
} // namespace PD
|
|
||||||
#else
|
|
||||||
struct GLFWgamepadstate {};
|
|
||||||
namespace PD {
|
|
||||||
|
|
||||||
Hid3DS::Hid3DS() : HidDriver("Hid3DS") {}
|
|
||||||
|
|
||||||
Hid3DS::~Hid3DS() {}
|
|
||||||
|
|
||||||
void Hid3DS::Update() {
|
|
||||||
HidDriver::Update(); // clear stats
|
|
||||||
}
|
|
||||||
} // namespace PD
|
|
||||||
#endif
|
|
||||||
@@ -65,7 +65,7 @@ HidGlfw::HidGlfw(GLFWwindow* win) : HidDriver("HidGlfw") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HidGlfw::~HidGlfw() { delete impl; }
|
HidGlfw::~HidGlfw() {}
|
||||||
|
|
||||||
void HidGlfw::Update() {
|
void HidGlfw::Update() {
|
||||||
HidDriver::Update(); // clear stats
|
HidDriver::Update(); // clear stats
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ struct HidNX::Impl {
|
|||||||
|
|
||||||
HidNX::HidNX() : HidDriver("HidNX") { impl = new Impl; }
|
HidNX::HidNX() : HidDriver("HidNX") { impl = new Impl; }
|
||||||
|
|
||||||
HidNX::~HidNX() { delete impl; }
|
HidNX::~HidNX() {}
|
||||||
|
|
||||||
void HidNX::Update() {
|
void HidNX::Update() {
|
||||||
HidDriver::Update(); // clear stats
|
HidDriver::Update(); // clear stats
|
||||||
|
|||||||
+10
-49
@@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
#include <pd/core/mat.hpp>
|
#include <pd/core/mat.hpp>
|
||||||
#include <pd/drivers/interface.hpp>
|
#include <pd/drivers/interface.hpp>
|
||||||
#include <pd/lithium/drawlist.hpp>
|
#include <pd/lithium/command.hpp>
|
||||||
#include <pd/lithium/pools.hpp>
|
|
||||||
#include <pd/lithium/texture.hpp>
|
#include <pd/lithium/texture.hpp>
|
||||||
|
|
||||||
using PDGfxBackendFlags = PD::u32;
|
using PDGfxBackendFlags = PD::u32;
|
||||||
@@ -38,7 +37,7 @@ class PD_API GfxDriver : public DriverInterface {
|
|||||||
return Li::Texture();
|
return Li::Texture();
|
||||||
}
|
}
|
||||||
virtual void DeleteTexture(const Li::Texture& tex) {}
|
virtual void DeleteTexture(const Li::Texture& tex) {}
|
||||||
virtual void Draw(const Li::Drawlist& commands) {}
|
virtual void Draw(const Pool<Li::Command>& commands) {}
|
||||||
Li::Texture::Ptr GetWhiteTexture() { return &pWhite; }
|
Li::Texture::Ptr GetWhiteTexture() { return &pWhite; }
|
||||||
PDGfxBackendFlags GetFlags() { return Flags; }
|
PDGfxBackendFlags GetFlags() { return Flags; }
|
||||||
|
|
||||||
@@ -111,54 +110,17 @@ class GfxDriverBase : public GfxDriver {
|
|||||||
pWhite = LoadTexture(img, 16, 16);
|
pWhite = LoadTexture(img, 16, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Draw(const Li::Drawlist& dl) override {
|
void Draw(const Pool<Li::Command>& commands) override {
|
||||||
const auto& commands = dl.Data();
|
|
||||||
if (commands.size() == 0) return;
|
|
||||||
pCountCommands += commands.size();
|
pCountCommands += commands.size();
|
||||||
|
|
||||||
size_t vtotal = dl.GetNumVertices();
|
|
||||||
size_t itotal = dl.GetNumIndices();
|
|
||||||
|
|
||||||
size_t start_vtx = pVtxPool.size();
|
|
||||||
pVtxPool.Allocate(vtotal);
|
|
||||||
CurrentVertex += vtotal;
|
|
||||||
|
|
||||||
size_t start_idx = pIdxPool.size();
|
|
||||||
pIdxPool.Allocate(itotal);
|
|
||||||
CurrentIndex += itotal;
|
|
||||||
|
|
||||||
size_t current_vtx = start_vtx;
|
|
||||||
size_t current_idx = start_idx;
|
|
||||||
|
|
||||||
const auto& vpool = Li::GetVertexPool();
|
|
||||||
const auto& ipool = Li::GetIndexPool();
|
|
||||||
/** Build Pools */
|
|
||||||
for (size_t i = 0; i < commands.size(); i++) {
|
|
||||||
const auto& cmd = commands[i];
|
|
||||||
if (cmd.VertexCount > 0) {
|
|
||||||
std::memcpy(pVtxPool.begin() + current_vtx,
|
|
||||||
vpool.begin() + cmd.FirstVertex,
|
|
||||||
cmd.VertexCount * sizeof(Li::Vertex));
|
|
||||||
}
|
|
||||||
for (size_t idx = 0; idx < cmd.IndexCount; idx++) {
|
|
||||||
u16 local_idx = ipool[cmd.FirstIndex + idx];
|
|
||||||
pIdxPool[current_idx + idx] = static_cast<u16>(current_vtx + local_idx);
|
|
||||||
}
|
|
||||||
current_vtx += cmd.VertexCount;
|
|
||||||
current_idx += cmd.IndexCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
UploadPools();
|
|
||||||
|
|
||||||
size_t index = 0;
|
size_t index = 0;
|
||||||
size_t ioff = start_idx;
|
UploadPools();
|
||||||
|
|
||||||
while (index < commands.size()) {
|
while (index < commands.size()) {
|
||||||
CurrentTex = commands[index].Tex;
|
CurrentTex = commands[index].Tex;
|
||||||
CurrentTexIsSDF = commands[index].SDF;
|
CurrentTexIsSDF = commands[index].SDF;
|
||||||
if (!CurrentTex) {
|
if (!CurrentTex) {
|
||||||
CurrentTex = pWhite.GetID();
|
CurrentTex = pWhite.GetID();
|
||||||
}
|
}
|
||||||
|
size_t startidx = commands[index].FirstIndex;
|
||||||
size_t num_indices = 0;
|
size_t num_indices = 0;
|
||||||
while (index < commands.size() &&
|
while (index < commands.size() &&
|
||||||
CurrentTexIsSDF == commands[index].SDF &&
|
CurrentTexIsSDF == commands[index].SDF &&
|
||||||
@@ -167,11 +129,8 @@ class GfxDriverBase : public GfxDriver {
|
|||||||
num_indices += commands[index].IndexCount;
|
num_indices += commands[index].IndexCount;
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
if (num_indices > 0) {
|
Submit(num_indices, startidx);
|
||||||
Submit(num_indices, ioff);
|
pCountDrawcalls++;
|
||||||
ioff += num_indices;
|
|
||||||
pCountDrawcalls++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,7 +210,9 @@ class PD_API Gfx {
|
|||||||
static void SetViewPort(const ivec2& vp) { driver->SetViewPort(vp); }
|
static void SetViewPort(const ivec2& vp) { driver->SetViewPort(vp); }
|
||||||
static void SetViewPort(int w, int h) { driver->SetViewPort(w, h); }
|
static void SetViewPort(int w, int h) { driver->SetViewPort(w, h); }
|
||||||
static void Reset() { driver->Reset(); }
|
static void Reset() { driver->Reset(); }
|
||||||
static void Draw(const Li::Drawlist& dl) { driver->Draw(dl); }
|
static void Draw(const Pool<Li::Command>& commands) {
|
||||||
|
driver->Draw(commands);
|
||||||
|
}
|
||||||
static Li::Texture LoadTexture(const std::vector<PD::u8>& pixels, int w,
|
static Li::Texture LoadTexture(const std::vector<PD::u8>& pixels, int w,
|
||||||
int h,
|
int h,
|
||||||
TextureFormat type = TextureFormat::RGBA32,
|
TextureFormat type = TextureFormat::RGBA32,
|
||||||
|
|||||||
@@ -42,22 +42,6 @@ class PD_API Drawlist {
|
|||||||
void Copy(Drawlist& other);
|
void Copy(Drawlist& other);
|
||||||
void Optimize();
|
void Optimize();
|
||||||
void Clear();
|
void Clear();
|
||||||
void SetLayer(int layer) { pCurrentLayer = layer; }
|
|
||||||
void LayerUp() { pCurrentLayer++; }
|
|
||||||
void LayerDown() { pCurrentLayer--; }
|
|
||||||
int GetLayer() const { return pCurrentLayer; }
|
|
||||||
|
|
||||||
size_t GetNumVertices() const {
|
|
||||||
size_t count = 0;
|
|
||||||
for (const auto& cmd : pCommands) count += cmd.VertexCount;
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t GetNumIndices() const {
|
|
||||||
size_t count = 0;
|
|
||||||
for (const auto& cmd : pCommands) count += cmd.IndexCount;
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Command Allocation */
|
/** Command Allocation */
|
||||||
Command& NewCommand();
|
Command& NewCommand();
|
||||||
@@ -130,7 +114,6 @@ class PD_API Drawlist {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Texture pCurrentTexture;
|
Texture pCurrentTexture;
|
||||||
int pCurrentLayer = 0;
|
|
||||||
Pool<Command> pCommands;
|
Pool<Command> pCommands;
|
||||||
Pool<fvec2> pPath;
|
Pool<fvec2> pPath;
|
||||||
Pool<Vertex> pVertices;
|
Pool<Vertex> pVertices;
|
||||||
|
|||||||
@@ -4,5 +4,4 @@
|
|||||||
#include <pd/lithium/drawlist.hpp>
|
#include <pd/lithium/drawlist.hpp>
|
||||||
#include <pd/lithium/font.hpp>
|
#include <pd/lithium/font.hpp>
|
||||||
#include <pd/lithium/math.hpp>
|
#include <pd/lithium/math.hpp>
|
||||||
#include <pd/lithium/pools.hpp>
|
|
||||||
#include <pd/lithium/vertex.hpp>
|
#include <pd/lithium/vertex.hpp>
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <pd/core/core.hpp>
|
|
||||||
#include <pd/lithium/vertex.hpp>
|
|
||||||
|
|
||||||
namespace PD {
|
|
||||||
namespace Li {
|
|
||||||
PD_API PD::Pool<Vertex>& GetVertexPool();
|
|
||||||
PD_API PD::Pool<u16>& GetIndexPool();
|
|
||||||
PD_API void ResetPools();
|
|
||||||
} // namespace Li
|
|
||||||
} // namespace PD
|
|
||||||
@@ -47,9 +47,7 @@ class PD_API ColorEdit : public Container {
|
|||||||
this->initial_color = *color;
|
this->initial_color = *color;
|
||||||
this->tdim = io.Font->GetTextBounds(label.c_str(), io.FontScale);
|
this->tdim = io.Font->GetTextBounds(label.c_str(), io.FontScale);
|
||||||
}
|
}
|
||||||
~ColorEdit() {
|
~ColorEdit() = default;
|
||||||
if (layout) delete layout;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Override for the Input Handler
|
* Override for the Input Handler
|
||||||
@@ -70,7 +68,7 @@ class PD_API ColorEdit : public Container {
|
|||||||
u32* color_ref = nullptr; ///< Color Reference
|
u32* color_ref = nullptr; ///< Color Reference
|
||||||
u32 initial_color; ///< Initial Color
|
u32 initial_color; ///< Initial Color
|
||||||
std::string label; ///< Label of the Button
|
std::string label; ///< Label of the Button
|
||||||
Layout* layout = nullptr; ///< Layout to open
|
Layout* layout; ///< Layout to open
|
||||||
bool is_shown = false; ///< AHow Layout Editor
|
bool is_shown = false; ///< AHow Layout Editor
|
||||||
};
|
};
|
||||||
} // namespace UI7
|
} // namespace UI7
|
||||||
|
|||||||
@@ -59,7 +59,6 @@ class PD_API Container {
|
|||||||
void Init(UI7::IO* io, Li::Drawlist* l) {
|
void Init(UI7::IO* io, Li::Drawlist* l) {
|
||||||
list = l;
|
list = l;
|
||||||
this->io = io;
|
this->io = io;
|
||||||
pFont = io->Font;
|
|
||||||
// this->screen = io->Ren->CurrentScreen();
|
// this->screen = io->Ren->CurrentScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +75,6 @@ class PD_API Container {
|
|||||||
fvec2 GetPos() { return pos; }
|
fvec2 GetPos() { return pos; }
|
||||||
/** Getter for Size */
|
/** Getter for Size */
|
||||||
fvec2 GetSize() { return size; }
|
fvec2 GetSize() { return size; }
|
||||||
Li::Font* GetFont() { return pFont; }
|
|
||||||
/**
|
/**
|
||||||
* Get the Containers Final Position
|
* Get the Containers Final Position
|
||||||
* for Rendering and Input (if it has a parent Object)
|
* for Rendering and Input (if it has a parent Object)
|
||||||
@@ -113,25 +111,6 @@ class PD_API Container {
|
|||||||
virtual void Draw() {}
|
virtual void Draw() {}
|
||||||
/** Template function to update internal data (if needed) */
|
/** Template function to update internal data (if needed) */
|
||||||
virtual void Update() {}
|
virtual void Update() {}
|
||||||
/** Template as well as base func for Pool based Containers */
|
|
||||||
virtual void Reset() {
|
|
||||||
pos = 0;
|
|
||||||
size = 0;
|
|
||||||
parent = nullptr;
|
|
||||||
id = 0;
|
|
||||||
pFlags = 0;
|
|
||||||
skippable = false;
|
|
||||||
rem = false;
|
|
||||||
inp_done = false;
|
|
||||||
pSelected = false;
|
|
||||||
pPressed = false;
|
|
||||||
pPressedTwice = false;
|
|
||||||
pCLipRectUsed = false;
|
|
||||||
pClipRect = 0;
|
|
||||||
io = nullptr;
|
|
||||||
list = nullptr;
|
|
||||||
last_use = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Internal function */
|
/** Internal function */
|
||||||
void PreDraw();
|
void PreDraw();
|
||||||
@@ -176,11 +155,11 @@ class PD_API Container {
|
|||||||
/** Container Size*/
|
/** Container Size*/
|
||||||
fvec2 size;
|
fvec2 size;
|
||||||
/** Reference to the Drawlist to Draw to*/
|
/** Reference to the Drawlist to Draw to*/
|
||||||
Li::Drawlist* list = nullptr;
|
Li::Drawlist* list;
|
||||||
/** IO Reference for Renderer and Theme */
|
/** IO Reference for Renderer and Theme */
|
||||||
UI7::IO* io = nullptr;
|
UI7::IO* io;
|
||||||
/** Reference to the parent container*/
|
/** Reference to the parent container*/
|
||||||
Container* parent = nullptr;
|
Container* parent;
|
||||||
/** Object ID (0 if unused)*/
|
/** Object ID (0 if unused)*/
|
||||||
u32 id = 0;
|
u32 id = 0;
|
||||||
/** Internal Flags */
|
/** Internal Flags */
|
||||||
@@ -195,7 +174,6 @@ class PD_API Container {
|
|||||||
fvec4 pClipRect;
|
fvec4 pClipRect;
|
||||||
/** Clip Rect used */
|
/** Clip Rect used */
|
||||||
bool pCLipRectUsed = false;
|
bool pCLipRectUsed = false;
|
||||||
Li::Font* pFont = nullptr;
|
|
||||||
};
|
};
|
||||||
} // namespace UI7
|
} // namespace UI7
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <functional>
|
|
||||||
#include <pd/ui7/container/container.hpp>
|
#include <pd/ui7/container/container.hpp>
|
||||||
#include <pd/ui7/io.hpp>
|
#include <pd/ui7/io.hpp>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
namespace PD {
|
namespace PD {
|
||||||
namespace UI7 {
|
namespace UI7 {
|
||||||
@@ -38,7 +38,6 @@ namespace UI7 {
|
|||||||
*/
|
*/
|
||||||
class PD_API DynObj : public Container {
|
class PD_API DynObj : public Container {
|
||||||
public:
|
public:
|
||||||
DynObj() {}
|
|
||||||
/**
|
/**
|
||||||
* Button Object constructor
|
* Button Object constructor
|
||||||
* @param label Label of the Button
|
* @param label Label of the Button
|
||||||
@@ -70,14 +69,6 @@ class PD_API DynObj : public Container {
|
|||||||
/** Function to Update Size if framepadding changes */
|
/** Function to Update Size if framepadding changes */
|
||||||
void Update() override;
|
void Update() override;
|
||||||
|
|
||||||
void Reset() override {
|
|
||||||
Container::Reset();
|
|
||||||
color = UI7Color_Button;
|
|
||||||
pressed = false;
|
|
||||||
pRenFun = nullptr;
|
|
||||||
pInp = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UI7Color color = UI7Color_Button; ///< current button color
|
UI7Color color = UI7Color_Button; ///< current button color
|
||||||
bool pressed = false; ///< ispressed value
|
bool pressed = false; ///< ispressed value
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ namespace UI7 {
|
|||||||
*/
|
*/
|
||||||
class PD_API Image : public Container {
|
class PD_API Image : public Container {
|
||||||
public:
|
public:
|
||||||
Image() {}
|
|
||||||
/**
|
/**
|
||||||
* Constructor for the Image Object
|
* Constructor for the Image Object
|
||||||
* @param img Image Texture Reference
|
* @param img Image Texture Reference
|
||||||
@@ -58,13 +57,6 @@ class PD_API Image : public Container {
|
|||||||
* */
|
* */
|
||||||
void Draw() override;
|
void Draw() override;
|
||||||
|
|
||||||
void Reset() override {
|
|
||||||
Container::Reset();
|
|
||||||
img = Li::Texture();
|
|
||||||
newsize = 0.f;
|
|
||||||
cuv = Li::Rect();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Li::Texture img; ///< Texture
|
Li::Texture img; ///< Texture
|
||||||
fvec2 newsize = 0.f; ///< New Size
|
fvec2 newsize = 0.f; ///< New Size
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ namespace UI7 {
|
|||||||
*/
|
*/
|
||||||
class PD_API Label : public Container {
|
class PD_API Label : public Container {
|
||||||
public:
|
public:
|
||||||
Label() {}
|
|
||||||
/**
|
/**
|
||||||
* Constructor for Label Object
|
* Constructor for Label Object
|
||||||
* @param label Label [Text] to Draw
|
* @param label Label [Text] to Draw
|
||||||
@@ -55,13 +54,6 @@ class PD_API Label : public Container {
|
|||||||
*/
|
*/
|
||||||
void Update() override;
|
void Update() override;
|
||||||
|
|
||||||
void Reset() override {
|
|
||||||
Container::Reset();
|
|
||||||
tdim = 0;
|
|
||||||
color = UI7Color_Text;
|
|
||||||
label.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
fvec2 tdim; ///< Text Size
|
fvec2 tdim; ///< Text Size
|
||||||
UI7Color color = UI7Color_Text; ///< Color
|
UI7Color color = UI7Color_Text; ///< Color
|
||||||
|
|||||||
@@ -58,8 +58,6 @@ enum UI7MenuFlags_ {
|
|||||||
enum UI7LayoutFlags_ {
|
enum UI7LayoutFlags_ {
|
||||||
UI7LayoutFlags_None = 0, ///< No Flags used
|
UI7LayoutFlags_None = 0, ///< No Flags used
|
||||||
UI7LayoutFlags_UseClipRect = 1 << 0, ///< Enable ClipRect
|
UI7LayoutFlags_UseClipRect = 1 << 0, ///< Enable ClipRect
|
||||||
UI7LayoutFlags_HzScrolling = 1 << 1, ///< Scrolling Horizontal
|
|
||||||
UI7LayoutFlags_VtScrolling = 1 << 2, ///< Scrolling Vertical
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/** UI7 Context Flags */
|
/** UI7 Context Flags */
|
||||||
|
|||||||
+7
-23
@@ -31,14 +31,16 @@ SOFTWARE.
|
|||||||
#include <pd/ui7/viewport.hpp>
|
#include <pd/ui7/viewport.hpp>
|
||||||
|
|
||||||
namespace PD {
|
namespace PD {
|
||||||
|
class Context;
|
||||||
namespace UI7 {
|
namespace UI7 {
|
||||||
class Label;
|
|
||||||
class Image;
|
|
||||||
class DynObj;
|
|
||||||
class PD_API IO {
|
class PD_API IO {
|
||||||
public:
|
public:
|
||||||
IO();
|
IO() : DeltaStats(60), CurrentViewPort("", 0) {
|
||||||
~IO();
|
/** Probably not the best solution i guess */
|
||||||
|
// CurrentViewPort =
|
||||||
|
// ViewPort::New("Default", ivec4(ivec2(0, 0), pCtx.Gfx()->ViewPort));
|
||||||
|
}
|
||||||
|
~IO() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* IO Update Internal Variables
|
* IO Update Internal Variables
|
||||||
@@ -81,12 +83,6 @@ class PD_API IO {
|
|||||||
u32 NumVertices = 0; ///< Debug Vertices Num
|
u32 NumVertices = 0; ///< Debug Vertices Num
|
||||||
u32 NumIndices = 0; ///< Debug Indices Num
|
u32 NumIndices = 0; ///< Debug Indices Num
|
||||||
std::vector<u32> MenuOrder;
|
std::vector<u32> MenuOrder;
|
||||||
std::vector<Li::Font*> FontStack;
|
|
||||||
|
|
||||||
// Pools
|
|
||||||
PD::Pool<UI7::Label> LabelPool;
|
|
||||||
PD::Pool<UI7::Image> ImagePool;
|
|
||||||
PD::Pool<UI7::DynObj> DynObjPool;
|
|
||||||
|
|
||||||
// DrawlistApi
|
// DrawlistApi
|
||||||
void RegisterDrawlist(const UI7::ID& id, Li::Drawlist* v) {
|
void RegisterDrawlist(const UI7::ID& id, Li::Drawlist* v) {
|
||||||
@@ -108,18 +104,6 @@ class PD_API IO {
|
|||||||
return ViewPorts[id.RawID()];
|
return ViewPorts[id.RawID()];
|
||||||
}
|
}
|
||||||
|
|
||||||
void PushFont(Li::Font* f) {
|
|
||||||
FontStack.push_back(Font);
|
|
||||||
Font = f;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PopFont() {
|
|
||||||
if (!FontStack.empty()) {
|
|
||||||
Font = FontStack.back();
|
|
||||||
FontStack.pop_back();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
UI7::InputHandler InputHandler;
|
UI7::InputHandler InputHandler;
|
||||||
};
|
};
|
||||||
} // namespace UI7
|
} // namespace UI7
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class PD_API Layout {
|
|||||||
Size = 0;
|
Size = 0;
|
||||||
WorkRect = fvec4(IO.MenuPadding, Size - (fvec2(2) * IO.MenuPadding));
|
WorkRect = fvec4(IO.MenuPadding, Size - (fvec2(2) * IO.MenuPadding));
|
||||||
}
|
}
|
||||||
~Layout();
|
~Layout() = default;
|
||||||
|
|
||||||
/** SECTION CONTAINERS */
|
/** SECTION CONTAINERS */
|
||||||
/**
|
/**
|
||||||
@@ -127,8 +127,6 @@ class PD_API Layout {
|
|||||||
void CursorInit();
|
void CursorInit();
|
||||||
void SameLine();
|
void SameLine();
|
||||||
void CursorMove(const fvec2& size);
|
void CursorMove(const fvec2& size);
|
||||||
void PushFont(Li::Font* f) { IO.PushFont(f); }
|
|
||||||
void PopFont() { IO.PopFont(); }
|
|
||||||
|
|
||||||
bool ObjectWorkPos(fvec2& movpos);
|
bool ObjectWorkPos(fvec2& movpos);
|
||||||
|
|
||||||
@@ -165,8 +163,6 @@ class PD_API Layout {
|
|||||||
void SetAlign(UI7Align a) { Alignment = a; }
|
void SetAlign(UI7Align a) { Alignment = a; }
|
||||||
void NextAlign(UI7Align a) { TempAlign = a; }
|
void NextAlign(UI7Align a) { TempAlign = a; }
|
||||||
|
|
||||||
void HandleScrolling();
|
|
||||||
|
|
||||||
void Update();
|
void Update();
|
||||||
|
|
||||||
fvec2 DbgScrollOffset() { return ScrollOffset; }
|
fvec2 DbgScrollOffset() { return ScrollOffset; }
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ class PD_API Menu {
|
|||||||
Container* r = pLayout.FindObject(id);
|
Container* r = pLayout.FindObject(id);
|
||||||
if (!r) {
|
if (!r) {
|
||||||
r = new UI7::DragData<T>(label, data, num_elms, pIO, min, max, step,
|
r = new UI7::DragData<T>(label, data, num_elms, pIO, min, max, step,
|
||||||
precision);
|
precision);
|
||||||
// Isnt This exactly the same line???
|
// Isnt This exactly the same line???
|
||||||
// r = UI7::DragData<T>::New(label, data, num_elms, pIO, min, max, step,
|
// r = UI7::DragData<T>::New(label, data, num_elms, pIO, min, max, step,
|
||||||
// precision);
|
// precision);
|
||||||
@@ -110,6 +110,7 @@ class PD_API Menu {
|
|||||||
void EndTreeNode();
|
void EndTreeNode();
|
||||||
|
|
||||||
void HandleFocus();
|
void HandleFocus();
|
||||||
|
void HandleScrolling();
|
||||||
void HandleTitlebarActions();
|
void HandleTitlebarActions();
|
||||||
void DrawBaseLayout();
|
void DrawBaseLayout();
|
||||||
|
|
||||||
@@ -119,9 +120,6 @@ class PD_API Menu {
|
|||||||
}
|
}
|
||||||
Container* FindObject(u32 id) { return pLayout.FindObject(id); }
|
Container* FindObject(u32 id) { return pLayout.FindObject(id); }
|
||||||
|
|
||||||
void PushFont(Li::Font* f) { pIO.PushFont(f); }
|
|
||||||
void PopFont() { pIO.PopFont(); }
|
|
||||||
|
|
||||||
void Update();
|
void Update();
|
||||||
|
|
||||||
void SetSize(PD::fvec2 size) { pLayout.SetSize(size); }
|
void SetSize(PD::fvec2 size) { pLayout.SetSize(size); }
|
||||||
|
|||||||
@@ -56,7 +56,8 @@ class PD_API Context {
|
|||||||
void AddViewPort(const ID& id, const ivec4& vp);
|
void AddViewPort(const ID& id, const ivec4& vp);
|
||||||
void UseViewPort(const ID& id);
|
void UseViewPort(const ID& id);
|
||||||
void Update();
|
void Update();
|
||||||
Menu* BeginMenu(const ID& id, UI7MenuFlags flags = 0, bool* pShow = nullptr);
|
Menu* BeginMenu(const ID& id, UI7MenuFlags flags = 0,
|
||||||
|
bool* pShow = nullptr);
|
||||||
Menu* CurrentMenu() { return pCurrent; }
|
Menu* CurrentMenu() { return pCurrent; }
|
||||||
void EndMenu();
|
void EndMenu();
|
||||||
void AboutMenu(bool* show = nullptr);
|
void AboutMenu(bool* show = nullptr);
|
||||||
|
|||||||
+14
-42
@@ -1,48 +1,23 @@
|
|||||||
#include <pd/drivers/gfx.hpp>
|
#include <pd/drivers/gfx.hpp>
|
||||||
#include <pd/lithium/command.hpp>
|
#include <pd/lithium/command.hpp>
|
||||||
#include <pd/lithium/pools.hpp>
|
|
||||||
|
|
||||||
namespace PD {
|
namespace PD {
|
||||||
namespace Li {
|
namespace Li {
|
||||||
|
|
||||||
void Command::Reserve(size_t vtx, size_t idx) {
|
void Command::Reserve(size_t vtx, size_t idx) {
|
||||||
auto& vpool = GetVertexPool();
|
|
||||||
auto& ipool = GetIndexPool();
|
|
||||||
if (VertexCountMax == 0) {
|
if (VertexCountMax == 0) {
|
||||||
FirstVertex = vpool.size();
|
FirstVertex = Gfx::AllocateVertices(vtx, (PD::ptr)this);
|
||||||
vpool.Allocate(vtx);
|
|
||||||
VertexCountMax = vtx;
|
VertexCountMax = vtx;
|
||||||
} else {
|
} else {
|
||||||
if (vpool.size() == FirstVertex + VertexCountMax) {
|
Gfx::ExpandVertices(vtx, (PD::ptr)this);
|
||||||
vpool.Allocate(vtx);
|
VertexCountMax += vtx;
|
||||||
VertexCountMax += vtx;
|
|
||||||
} else {
|
|
||||||
size_t tmp = FirstVertex;
|
|
||||||
FirstVertex = vpool.size();
|
|
||||||
vpool.Allocate(VertexCountMax + vtx);
|
|
||||||
for (size_t i = 0; i < VertexCount; i++) {
|
|
||||||
vpool[FirstVertex + i] = vpool[tmp + i];
|
|
||||||
}
|
|
||||||
VertexCountMax += vtx;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (IndexCountMax == 0) {
|
if (IndexCountMax == 0) {
|
||||||
FirstIndex = ipool.size();
|
FirstIndex = Gfx::AllocateIndices(idx, (PD::ptr)this);
|
||||||
ipool.Allocate(idx);
|
|
||||||
IndexCountMax = idx;
|
IndexCountMax = idx;
|
||||||
} else {
|
} else {
|
||||||
if (ipool.size() == FirstIndex + IndexCountMax) {
|
Gfx::ExpandIndices(idx, (PD::ptr)this);
|
||||||
ipool.Allocate(idx);
|
IndexCountMax += idx;
|
||||||
IndexCountMax += idx;
|
|
||||||
} else {
|
|
||||||
size_t tmp = FirstIndex;
|
|
||||||
FirstIndex = ipool.size();
|
|
||||||
ipool.Allocate(IndexCountMax + idx);
|
|
||||||
for (size_t i = 0; i < IndexCount; i++) {
|
|
||||||
ipool[FirstIndex + i] = ipool[tmp + i];
|
|
||||||
}
|
|
||||||
IndexCountMax += idx;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,25 +34,22 @@ void Command::Reset() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Command& Command::Add(const Vertex& vtx) {
|
Command& Command::Add(const Vertex& vtx) {
|
||||||
if (VertexCount < VertexCountMax) {
|
if (VertexCount <= VertexCountMax)
|
||||||
GetVertexPool()[FirstVertex + VertexCount++] = vtx;
|
Gfx::PutVertex(FirstVertex + VertexCount++, vtx, (PD::ptr)this);
|
||||||
}
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
Command& Command::Add(u16 idx) {
|
Command& Command::Add(u16 idx) {
|
||||||
if (IndexCount < IndexCountMax) {
|
if (IndexCount <= IndexCountMax)
|
||||||
GetIndexPool()[FirstIndex + IndexCount++] =
|
Gfx::PutIndex(FirstIndex + IndexCount++, FirstVertex + VertexCount + idx,
|
||||||
static_cast<u16>(VertexCount + idx);
|
(PD::ptr)this);
|
||||||
}
|
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
Command& Command::Add(u16 a, u16 b, u16 c) {
|
Command& Command::Add(u16 a, u16 b, u16 c) {
|
||||||
if (IndexCount + 3 <= IndexCountMax) {
|
if (IndexCount + 3 <= IndexCountMax) {
|
||||||
auto& ip = GetIndexPool();
|
|
||||||
size_t idx = FirstIndex + IndexCount;
|
size_t idx = FirstIndex + IndexCount;
|
||||||
ip[idx + 0] = static_cast<u16>(VertexCount + a);
|
Gfx::PutIndex(idx + 0, FirstVertex + VertexCount + a, (PD::ptr)this);
|
||||||
ip[idx + 1] = static_cast<u16>(VertexCount + b);
|
Gfx::PutIndex(idx + 1, FirstVertex + VertexCount + b, (PD::ptr)this);
|
||||||
ip[idx + 2] = static_cast<u16>(VertexCount + c);
|
Gfx::PutIndex(idx + 2, FirstVertex + VertexCount + c, (PD::ptr)this);
|
||||||
IndexCount += 3;
|
IndexCount += 3;
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
#include <algorithm>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <pd/drivers/gfx.hpp>
|
#include <pd/drivers/gfx.hpp>
|
||||||
#include <pd/lithium/drawlist.hpp>
|
#include <pd/lithium/drawlist.hpp>
|
||||||
@@ -12,44 +11,27 @@ PD_API Drawlist::Drawlist() { Clear(); }
|
|||||||
PD_API Drawlist::~Drawlist() { Clear(); }
|
PD_API Drawlist::~Drawlist() { Clear(); }
|
||||||
|
|
||||||
PD_API void Drawlist::Merge(Drawlist& other) {
|
PD_API void Drawlist::Merge(Drawlist& other) {
|
||||||
size_t start = pCommands.size();
|
|
||||||
pCommands.AppendMove(other.pCommands);
|
pCommands.AppendMove(other.pCommands);
|
||||||
for (size_t i = start; i < pCommands.size(); i++) {
|
|
||||||
pCommands[i].Layer += this->pCurrentLayer;
|
|
||||||
}
|
|
||||||
other.Clear();
|
other.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
PD_API void Drawlist::Copy(Drawlist& other) {
|
PD_API void Drawlist::Copy(Drawlist& other) {
|
||||||
int start = pCommands.size();
|
|
||||||
pCommands.AppendCopy(other.pCommands);
|
pCommands.AppendCopy(other.pCommands);
|
||||||
for (size_t i = start; i < pCommands.size(); i++) {
|
|
||||||
pCommands[i].Layer += this->pCurrentLayer;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PD_API void Drawlist::Optimize() {
|
PD_API void Drawlist::Optimize() {}
|
||||||
if (pCommands.size() <= 1) return;
|
|
||||||
std::stable_sort(pCommands.begin(), pCommands.end(),
|
|
||||||
[](const Command& a, const Command& b) {
|
|
||||||
if (a.Layer != b.Layer) return a.Layer < b.Layer;
|
|
||||||
if (a.SDF != b.SDF) return a.SDF < b.SDF;
|
|
||||||
return a.Tex < b.Tex;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API void Drawlist::Clear() {
|
PD_API void Drawlist::Clear() {
|
||||||
UnbindTexture();
|
UnbindTexture();
|
||||||
pPath.ResetFast();
|
pPath.ResetFast();
|
||||||
pCommands.NoReset();
|
pVertices.ResetFast();
|
||||||
pCurrentLayer = 0;
|
pIndices.ResetFast();
|
||||||
|
pCommands.ResetFast();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Command Allocation */
|
/** Command Allocation */
|
||||||
PD_API Command& Drawlist::NewCommand() {
|
PD_API Command& Drawlist::NewCommand() {
|
||||||
auto cmd = pCommands.Allocate(1);
|
auto cmd = pCommands.Allocate(1);
|
||||||
cmd->Reset();
|
|
||||||
cmd->Layer = pCurrentLayer;
|
|
||||||
cmd->Tex = pCurrentTexture.GetID();
|
cmd->Tex = pCurrentTexture.GetID();
|
||||||
return *cmd;
|
return *cmd;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -288,8 +288,7 @@ PD_API void Font::CmdTextEx(Drawlist& dl, const fvec2& pos, u32 color,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cp.Size.x > 0 && cp.Size.y > 0) {
|
if (cp.Size.x > 0 && cp.Size.y > 0) {
|
||||||
if (cmd == nullptr || cmd->Tex != Textures[cp.Tex] ||
|
if (cmd == nullptr || cmd->Tex != Textures[cp.Tex]) {
|
||||||
cmd->Layer != dl.GetLayer()) {
|
|
||||||
if (cp.Tex >= Textures.size()) continue;
|
if (cp.Tex >= Textures.size()) continue;
|
||||||
cmd = &dl.NewCommand();
|
cmd = &dl.NewCommand();
|
||||||
cmd->Tex = Textures[cp.Tex];
|
cmd->Tex = Textures[cp.Tex];
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
#include <pd/lithium/pools.hpp>
|
|
||||||
|
|
||||||
namespace PD {
|
|
||||||
namespace Li {
|
|
||||||
static PD::Pool<Vertex> gVertexPool;
|
|
||||||
static PD::Pool<u16> gIndexPool;
|
|
||||||
|
|
||||||
PD_API PD::Pool<Vertex>& GetVertexPool() { return gVertexPool; }
|
|
||||||
PD_API PD::Pool<u16>& GetIndexPool() { return gIndexPool; }
|
|
||||||
|
|
||||||
PD_API void ResetPools() {
|
|
||||||
gVertexPool.NoReset();
|
|
||||||
gIndexPool.NoReset();
|
|
||||||
}
|
|
||||||
} // namespace Li
|
|
||||||
} // namespace PD
|
|
||||||
@@ -49,13 +49,12 @@ PD_API void Button::HandleInput() {
|
|||||||
PD_API void Button::Draw() {
|
PD_API void Button::Draw() {
|
||||||
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
|
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
|
||||||
// io->Ren->OnScreen(screen);
|
// io->Ren->OnScreen(screen);
|
||||||
list->SetFont(GetFont());
|
|
||||||
list->PathRect(FinalPos(), FinalPos() + size, io->FrameRounding);
|
list->PathRect(FinalPos(), FinalPos() + size, io->FrameRounding);
|
||||||
list->PathFill(io->Theme.Get(color));
|
list->PathFill(io->Theme.Get(color));
|
||||||
list->LayerUp();
|
// list->LayerUp();
|
||||||
list->DrawText(FinalPos() + size * 0.5 - tdim * 0.5, label.c_str(),
|
list->DrawText(FinalPos() + size * 0.5 - tdim * 0.5, label.c_str(),
|
||||||
io->Theme.Get(UI7Color_Text));
|
io->Theme.Get(UI7Color_Text));
|
||||||
list->LayerDown();
|
// list->LayerDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
PD_API void Button::Update() {
|
PD_API void Button::Update() {
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ PD_API void Checkbox::HandleInput() {
|
|||||||
PD_API void Checkbox::Draw() {
|
PD_API void Checkbox::Draw() {
|
||||||
// Assert(list.get() && io.get(), "Did you run Container::Init correctly?");
|
// Assert(list.get() && io.get(), "Did you run Container::Init correctly?");
|
||||||
// io->Ren->OnScreen(screen);
|
// io->Ren->OnScreen(screen);
|
||||||
list->SetFont(GetFont());
|
|
||||||
list->PathRect(FinalPos(), FinalPos() + cbs, io->FrameRounding);
|
list->PathRect(FinalPos(), FinalPos() + cbs, io->FrameRounding);
|
||||||
list->PathFill(io->Theme.Get(color));
|
list->PathFill(io->Theme.Get(color));
|
||||||
if (usr_ref) {
|
if (usr_ref) {
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ PD_API void ColorEdit::HandleInput() {
|
|||||||
}
|
}
|
||||||
// Assert(screen.get(), "Screen is not set up!");
|
// Assert(screen.get(), "Screen is not set up!");
|
||||||
// if (screen->ScreenType() == Screen::Bottom) {
|
// if (screen->ScreenType() == Screen::Bottom) {
|
||||||
if (io->InputHandler.DragObject(this->GetID() + 2, fvec4(FinalPos(), size))) {
|
if (io->InputHandler.DragObject(this->GetID() + 2,
|
||||||
|
fvec4(FinalPos(), size))) {
|
||||||
if (io->InputHandler.DragReleasedAW) {
|
if (io->InputHandler.DragReleasedAW) {
|
||||||
is_shown = !is_shown;
|
is_shown = !is_shown;
|
||||||
}
|
}
|
||||||
@@ -44,7 +45,6 @@ PD_API void ColorEdit::HandleInput() {
|
|||||||
PD_API void ColorEdit::Draw() {
|
PD_API void ColorEdit::Draw() {
|
||||||
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
|
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
|
||||||
// io->Ren->OnScreen(screen);
|
// io->Ren->OnScreen(screen);
|
||||||
list->SetFont(GetFont());
|
|
||||||
list->PathRect(FinalPos(), FinalPos() + io->ItemRowHeight, io->FrameRounding);
|
list->PathRect(FinalPos(), FinalPos() + io->ItemRowHeight, io->FrameRounding);
|
||||||
list->PathFill(*color_ref);
|
list->PathFill(*color_ref);
|
||||||
list->DrawText(FinalPos() + fvec2(io->ItemSpace.x + io->ItemRowHeight, 0),
|
list->DrawText(FinalPos() + fvec2(io->ItemSpace.x + io->ItemRowHeight, 0),
|
||||||
@@ -54,30 +54,27 @@ PD_API void ColorEdit::Draw() {
|
|||||||
layout = new UI7::Layout(GetID(), *io);
|
layout = new UI7::Layout(GetID(), *io);
|
||||||
}
|
}
|
||||||
layout->SetPosition(FinalPos());
|
layout->SetPosition(FinalPos());
|
||||||
DynObj* r = io->DynObjPool.Allocate();
|
layout->AddObjectEx(
|
||||||
*r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l, Container* thiz) {
|
new DynObj(
|
||||||
list->SetFont(thiz->GetFont());
|
[=, this](UI7::IO* io, Li::Drawlist* l, Container* thiz) {
|
||||||
thiz->SetSize(layout->GetSize());
|
thiz->SetSize(layout->GetSize());
|
||||||
// l->Layer(30);
|
// l->Layer(30);
|
||||||
l->PathRect(thiz->GetPos(), thiz->GetPos() + thiz->GetSize(),
|
l->PathRect(thiz->GetPos(), thiz->GetPos() + thiz->GetSize(),
|
||||||
io->FrameRounding);
|
io->FrameRounding);
|
||||||
l->PathFill(io->Theme.Get(UI7Color_FrameBackground));
|
l->PathFill(io->Theme.Get(UI7Color_FrameBackground));
|
||||||
l->SetLayer(0);
|
}),
|
||||||
});
|
UI7LytAdd_Front | UI7LytAdd_NoCursorUpdate | UI7LytAdd_NoScrollHandle);
|
||||||
layout->AddObjectEx(r, UI7LytAdd_Front | UI7LytAdd_NoCursorUpdate |
|
auto obj = new DynObj(
|
||||||
UI7LytAdd_NoScrollHandle);
|
[=, this](UI7::IO* io, Li::Drawlist* l, Container* thiz) {
|
||||||
r = io->DynObjPool.Allocate();
|
l->PathRect(thiz->FinalPos(), thiz->FinalPos() + io->ItemRowHeight,
|
||||||
*r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l, Container* thiz) {
|
io->FrameRounding);
|
||||||
list->SetFont(thiz->GetFont());
|
l->PathFill(*color_ref);
|
||||||
l->PathRect(thiz->FinalPos(), thiz->FinalPos() + io->ItemRowHeight,
|
l->DrawText(
|
||||||
io->FrameRounding);
|
thiz->FinalPos() + fvec2(io->ItemSpace.x + io->ItemRowHeight, 0),
|
||||||
l->PathFill(*color_ref);
|
label.c_str(), io->Theme.Get(UI7Color_Text));
|
||||||
l->DrawText(
|
});
|
||||||
thiz->FinalPos() + fvec2(io->ItemSpace.x + io->ItemRowHeight, 0),
|
obj->SetSize(PD::fvec2(200, io->ItemRowHeight));
|
||||||
label.c_str(), io->Theme.Get(UI7Color_Text));
|
layout->AddObject(obj);
|
||||||
});
|
|
||||||
r->SetSize(PD::fvec2(200, io->ItemRowHeight));
|
|
||||||
layout->AddObject(r);
|
|
||||||
layout->Label("RGBA: ({}, {}, {}, {})", *((u8*)color_ref),
|
layout->Label("RGBA: ({}, {}, {}, {})", *((u8*)color_ref),
|
||||||
*(((u8*)color_ref) + 1), *(((u8*)color_ref) + 2),
|
*(((u8*)color_ref) + 1), *(((u8*)color_ref) + 2),
|
||||||
*(((u8*)color_ref) + 3));
|
*(((u8*)color_ref) + 3));
|
||||||
@@ -88,9 +85,7 @@ PD_API void ColorEdit::Draw() {
|
|||||||
layout->Slider<u8>("B", ((u8*)color_ref) + 2);
|
layout->Slider<u8>("B", ((u8*)color_ref) + 2);
|
||||||
layout->Slider<u8>("A", ((u8*)color_ref) + 3);
|
layout->Slider<u8>("A", ((u8*)color_ref) + 3);
|
||||||
layout->Update();
|
layout->Update();
|
||||||
list->SetLayer(50);
|
|
||||||
list->Merge(layout->GetDrawList());
|
list->Merge(layout->GetDrawList());
|
||||||
list->SetLayer(0);
|
|
||||||
// io->RegisterDrawList(GetID(), layout->GetDrawList());
|
// io->RegisterDrawList(GetID(), layout->GetDrawList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,10 +31,10 @@ PD_API void Container::HandleScrolling(fvec2 scrolling, fvec4 viewport) {
|
|||||||
}
|
}
|
||||||
last_use = PD::Os::GetTime();
|
last_use = PD::Os::GetTime();
|
||||||
pos -= fvec2(0, scrolling.y);
|
pos -= fvec2(0, scrolling.y);
|
||||||
skippable =
|
skippable = !Li::Math::InBounds(
|
||||||
!Li::Math::InBounds(pos, size,
|
pos, size,
|
||||||
fvec4(viewport.x, viewport.y, viewport.x + viewport.z,
|
fvec4(viewport.x, viewport.y, viewport.x + viewport.z,
|
||||||
viewport.y + viewport.w));
|
viewport.y + viewport.w));
|
||||||
}
|
}
|
||||||
|
|
||||||
PD_API void Container::HandleInternalInput() {
|
PD_API void Container::HandleInternalInput() {
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <pd/ui7/container/dragdata.hpp>
|
#include <pd/ui7/container/dragdata.hpp>
|
||||||
#include <pd/ui7/container/label.hpp>
|
#include <pd/ui7/container/label.hpp>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
@@ -86,22 +85,21 @@ PD_API void DragData<T>::Draw() {
|
|||||||
FinalPos() + fvec2(off_x, 0) + td + io->FramePadding,
|
FinalPos() + fvec2(off_x, 0) + td + io->FramePadding,
|
||||||
io->FrameRounding);
|
io->FrameRounding);
|
||||||
list->PathFill(io->Theme.Get(UI7Color_Button));
|
list->PathFill(io->Theme.Get(UI7Color_Button));
|
||||||
list->LayerUp();
|
// list->LayerUp();
|
||||||
list->DrawTextEx(FinalPos() + fvec2(off_x, 0), p.c_str(),
|
list->DrawTextEx(FinalPos() + fvec2(off_x, 0), p.c_str(),
|
||||||
io->Theme.Get(UI7Color_Text), LiTextFlags_AlignMid,
|
io->Theme.Get(UI7Color_Text), LiTextFlags_AlignMid,
|
||||||
td + io->FramePadding);
|
td + io->FramePadding);
|
||||||
list->LayerDown();
|
// list->LayerDown();
|
||||||
off_x += td.x + io->ItemSpace.x + io->FramePadding.x;
|
off_x += td.x + io->ItemSpace.x + io->FramePadding.x;
|
||||||
}
|
}
|
||||||
list->DrawText(FinalPos() + fvec2(off_x, io->FramePadding.y * 0.5),
|
list->DrawText(FinalPos() + fvec2(off_x, io->FramePadding.y * 0.5), label.c_str(),
|
||||||
label.c_str(), io->Theme.Get(UI7Color_Text));
|
io->Theme.Get(UI7Color_Text));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
PD_API void DragData<T>::Update() {
|
PD_API void DragData<T>::Update() {
|
||||||
// Assert(io.get(), "Did you run Container::Init correctly?");
|
// Assert(io.get(), "Did you run Container::Init correctly?");
|
||||||
// Probably need to find a faster solution (caching sizes calculated here)
|
// Probably need to find a faster solution (caching sizes calculated here)
|
||||||
list->SetFont(GetFont());
|
|
||||||
float off_x = 0;
|
float off_x = 0;
|
||||||
for (size_t i = 0; i < elm_count; i++) {
|
for (size_t i = 0; i < elm_count; i++) {
|
||||||
std::string p;
|
std::string p;
|
||||||
|
|||||||
@@ -29,11 +29,11 @@ PD_API void Image::Draw() {
|
|||||||
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
|
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
|
||||||
// Assert(img.get(), "Image is nullptr!");
|
// Assert(img.get(), "Image is nullptr!");
|
||||||
// io->Ren->OnScreen(screen);
|
// io->Ren->OnScreen(screen);
|
||||||
list->LayerUp();
|
// list->LayerUp();
|
||||||
list->BindTexture(img);
|
list->BindTexture(img);
|
||||||
list->DrawRectFilled(FinalPos(), newsize, 0xffffffff);
|
list->DrawRectFilled(FinalPos(), newsize, 0xffffffff);
|
||||||
list->UnbindTexture();
|
list->UnbindTexture();
|
||||||
list->LayerDown();
|
//list->LayerDown();
|
||||||
}
|
}
|
||||||
} // namespace UI7
|
} // namespace UI7
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
@@ -28,7 +28,6 @@ namespace UI7 {
|
|||||||
PD_API void Label::Draw() {
|
PD_API void Label::Draw() {
|
||||||
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
|
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
|
||||||
// io->Ren->OnScreen(screen);
|
// io->Ren->OnScreen(screen);
|
||||||
list->SetFont(GetFont());
|
|
||||||
list->DrawTextEx(FinalPos(), label.c_str(), io->Theme.Get(UI7Color_Text),
|
list->DrawTextEx(FinalPos(), label.c_str(), io->Theme.Get(UI7Color_Text),
|
||||||
LiTextFlags_NoOOS,
|
LiTextFlags_NoOOS,
|
||||||
PD::fvec2(0, io->CurrentViewPort.pSize.w));
|
PD::fvec2(0, io->CurrentViewPort.pSize.w));
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <pd/ui7/container/label.hpp>
|
#include <pd/ui7/container/label.hpp>
|
||||||
#include <pd/ui7/container/slider.hpp>
|
#include <pd/ui7/container/slider.hpp>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
@@ -57,9 +56,9 @@ PD_API void Slider<T>::HandleInput() {
|
|||||||
fvec4(FinalPos() + fvec2(2, 0), fvec2(width, GetSize().y)))) {
|
fvec4(FinalPos() + fvec2(2, 0), fvec2(width, GetSize().y)))) {
|
||||||
if (!io->InputHandler.DragReleasedAW) {
|
if (!io->InputHandler.DragReleasedAW) {
|
||||||
*data = std::clamp(
|
*data = std::clamp(
|
||||||
T(max *
|
T(max * (std::clamp(io->InputHandler.DragLastPosition.x - xps, 0.f,
|
||||||
(std::clamp(io->InputHandler.DragLastPosition.x - xps, 0.f, width) /
|
width) /
|
||||||
width)),
|
width)),
|
||||||
this->min, this->max);
|
this->min, this->max);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -70,7 +69,6 @@ template <typename T>
|
|||||||
PD_API void Slider<T>::Draw() {
|
PD_API void Slider<T>::Draw() {
|
||||||
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
|
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
|
||||||
// io->Ren->OnScreen(screen);
|
// io->Ren->OnScreen(screen);
|
||||||
list->SetFont(GetFont());
|
|
||||||
std::string p;
|
std::string p;
|
||||||
if constexpr (std::is_floating_point_v<T>) {
|
if constexpr (std::is_floating_point_v<T>) {
|
||||||
p = std::format("{:.{}f}", *data, precision);
|
p = std::format("{:.{}f}", *data, precision);
|
||||||
@@ -85,10 +83,10 @@ PD_API void Slider<T>::Draw() {
|
|||||||
FinalPos() + fvec2(slp + slw - 2, td.y - 2) + io->FramePadding,
|
FinalPos() + fvec2(slp + slw - 2, td.y - 2) + io->FramePadding,
|
||||||
io->FrameRounding);
|
io->FrameRounding);
|
||||||
list->PathFill(io->Theme.Get(UI7Color_ButtonActive));
|
list->PathFill(io->Theme.Get(UI7Color_ButtonActive));
|
||||||
list->LayerUp();
|
// list->LayerUp();
|
||||||
list->DrawTextEx(FinalPos(), p.c_str(), io->Theme.Get(UI7Color_Text),
|
list->DrawTextEx(FinalPos(), p.c_str(), io->Theme.Get(UI7Color_Text),
|
||||||
LiTextFlags_AlignMid, fvec2(width, td.y) + io->FramePadding);
|
LiTextFlags_AlignMid, fvec2(width, td.y) + io->FramePadding);
|
||||||
list->LayerDown();
|
// list->LayerDown();
|
||||||
list->DrawText(FinalPos() + fvec2(width + io->FramePadding.x * 2.f,
|
list->DrawText(FinalPos() + fvec2(width + io->FramePadding.x * 2.f,
|
||||||
io->FramePadding.y * 0.5),
|
io->FramePadding.y * 0.5),
|
||||||
label.c_str(), io->Theme.Get(UI7Color_Text));
|
label.c_str(), io->Theme.Get(UI7Color_Text));
|
||||||
|
|||||||
+3
-19
@@ -22,23 +22,10 @@ SOFTWARE.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <pd/core/core.hpp>
|
#include <pd/core/core.hpp>
|
||||||
#include <pd/drivers/drivers.hpp>
|
|
||||||
#include <pd/ui7/containers.hpp>
|
|
||||||
#include <pd/ui7/io.hpp>
|
#include <pd/ui7/io.hpp>
|
||||||
|
#include <pd/drivers/drivers.hpp>
|
||||||
|
|
||||||
namespace PD {
|
namespace PD {
|
||||||
|
|
||||||
PD_API UI7::IO::IO() : DeltaStats(60), CurrentViewPort("", 0) {
|
|
||||||
/** Probably not the best solution i guess */
|
|
||||||
// CurrentViewPort =
|
|
||||||
// ViewPort::New("Default", ivec4(ivec2(0, 0), pCtx.Gfx()->ViewPort));
|
|
||||||
// Start a little larger on these
|
|
||||||
LabelPool.Init(512);
|
|
||||||
DynObjPool.Init(512);
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API UI7::IO::~IO() {}
|
|
||||||
|
|
||||||
PD_API void UI7::IO::Update() {
|
PD_API void UI7::IO::Update() {
|
||||||
/** Todo: find out if we even still use the Drawlist regestry */
|
/** Todo: find out if we even still use the Drawlist regestry */
|
||||||
u64 current = PD::Os::GetTimeNano();
|
u64 current = PD::Os::GetTimeNano();
|
||||||
@@ -52,10 +39,7 @@ PD_API void UI7::IO::Update() {
|
|||||||
DrawlistRegestry.push_front(std::make_pair("CtxBackList", &Back));
|
DrawlistRegestry.push_front(std::make_pair("CtxBackList", &Back));
|
||||||
if (Font) ItemRowHeight = FontScale * Font->PixelHeight;
|
if (Font) ItemRowHeight = FontScale * Font->PixelHeight;
|
||||||
// RegisterDrawList("CtxBackList", Back);
|
// RegisterDrawList("CtxBackList", Back);
|
||||||
NumIndices = FDL.GetNumIndices();
|
NumIndices = 0;//FDL.pNumIndices;
|
||||||
NumVertices = FDL.GetNumVertices();
|
NumVertices = 0;//FDL.pNumVertices;
|
||||||
LabelPool.ResetFast();
|
|
||||||
DynObjPool.ResetFast();
|
|
||||||
ImagePool.ResetFast();
|
|
||||||
}
|
}
|
||||||
} // namespace PD
|
} // namespace PD
|
||||||
+2
-52
@@ -21,21 +21,11 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <pd/ui7/containers.hpp>
|
#include <pd/ui7/containers.hpp>
|
||||||
#include <pd/ui7/layout.hpp>
|
#include <pd/ui7/layout.hpp>
|
||||||
|
|
||||||
namespace PD {
|
namespace PD {
|
||||||
namespace UI7 {
|
namespace UI7 {
|
||||||
|
|
||||||
PD_API Layout::~Layout() {
|
|
||||||
// We all love managing memory i guess
|
|
||||||
for (Container* obj : IDObjects) {
|
|
||||||
delete obj;
|
|
||||||
}
|
|
||||||
IDObjects.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API void Layout::CursorInit() { Cursor = fvec2(WorkRect.x, WorkRect.y); }
|
PD_API void Layout::CursorInit() { Cursor = fvec2(WorkRect.x, WorkRect.y); }
|
||||||
|
|
||||||
PD_API void Layout::SameLine() {
|
PD_API void Layout::SameLine() {
|
||||||
@@ -123,42 +113,6 @@ PD_API fvec2 Layout::AlignPosition(fvec2 pos, fvec2 size, fvec4 area,
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
PD_API void Layout::HandleScrolling() {
|
|
||||||
if (Flags & UI7LayoutFlags_VtScrolling) {
|
|
||||||
bool allowed = MaxPosition.y > WorkRect.w;
|
|
||||||
if (allowed) {
|
|
||||||
if (PD::Hid::IsEvent(Hid::Event::Down, PD::Hid::Gamepad::Touch) ||
|
|
||||||
PD::Hid::IsEvent(Hid::Event::Down, PD::Hid::Keyboard::MouseLeft)) {
|
|
||||||
ScrollStart = ScrollOffset;
|
|
||||||
}
|
|
||||||
if (IO.InputHandler.DragObject(UI7::ID("sbg" + ID.GetName()),
|
|
||||||
fvec4(Pos, fvec2(0.f)) + WorkRect)) {
|
|
||||||
if (!IO.InputHandler.DragReleasedAW) {
|
|
||||||
ScrollOffset.y =
|
|
||||||
std::clamp(ScrollStart.y + IO.InputHandler.DragSourcePos.y -
|
|
||||||
IO.InputHandler.DragPosition.y,
|
|
||||||
-20.f, MaxPosition.y - WorkRect.w + 20.f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ScrollOffset.y = 0.f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ScrollOffset.y > MaxPosition.y - WorkRect.w) {
|
|
||||||
ScrollOffset.y -= 1.5f;
|
|
||||||
if (ScrollOffset.y < MaxPosition.y - WorkRect.w) {
|
|
||||||
ScrollOffset.y = MaxPosition.y - WorkRect.w;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (ScrollOffset.y < 0) {
|
|
||||||
ScrollOffset.y += 1.5f;
|
|
||||||
if (ScrollOffset.y > 0) {
|
|
||||||
ScrollOffset.y = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API void Layout::Update() {
|
PD_API void Layout::Update() {
|
||||||
if (Size == fvec2(0.f)) {
|
if (Size == fvec2(0.f)) {
|
||||||
Size = fvec2(MaxPosition) + IO.MenuPadding * 2;
|
Size = fvec2(MaxPosition) + IO.MenuPadding * 2;
|
||||||
@@ -182,7 +136,6 @@ PD_API void Layout::Update() {
|
|||||||
|
|
||||||
for (auto it = IDObjects.begin(); it != IDObjects.end();) {
|
for (auto it = IDObjects.begin(); it != IDObjects.end();) {
|
||||||
if ((*it)->Removable()) {
|
if ((*it)->Removable()) {
|
||||||
delete *it;
|
|
||||||
it = IDObjects.erase(it);
|
it = IDObjects.erase(it);
|
||||||
} else {
|
} else {
|
||||||
it++;
|
it++;
|
||||||
@@ -192,15 +145,13 @@ PD_API void Layout::Update() {
|
|||||||
Objects.clear();
|
Objects.clear();
|
||||||
WorkRect = fvec4(fvec2(WorkRect.x, WorkRect.y), Size - IO.MenuPadding);
|
WorkRect = fvec4(fvec2(WorkRect.x, WorkRect.y), Size - IO.MenuPadding);
|
||||||
CursorInit();
|
CursorInit();
|
||||||
HandleScrolling();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** SECTION CONTAINERS (STOLEN FROM FORMER MENU) */
|
/** SECTION CONTAINERS (STOLEN FROM FORMER MENU) */
|
||||||
|
|
||||||
PD_API void Layout::Label(const std::string& label) {
|
PD_API void Layout::Label(const std::string& label) {
|
||||||
// Layout API
|
// Layout API
|
||||||
auto r = IO.LabelPool.Allocate();
|
auto r = new UI7::Label(label, IO);
|
||||||
*r = UI7::Label(label, IO);
|
|
||||||
r->SetClipRect(fvec4(GetPosition(), GetPosition() + GetSize()));
|
r->SetClipRect(fvec4(GetPosition(), GetPosition() + GetSize()));
|
||||||
AddObject(r);
|
AddObject(r);
|
||||||
}
|
}
|
||||||
@@ -231,8 +182,7 @@ PD_API void Layout::Checkbox(const std::string& label, bool& v) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PD_API void Layout::Image(Li::Texture img, fvec2 size, Li::Rect uv) {
|
PD_API void Layout::Image(Li::Texture img, fvec2 size, Li::Rect uv) {
|
||||||
auto r = IO.ImagePool.Allocate();
|
Container* r = new UI7::Image(img, size, uv);
|
||||||
*r = UI7::Image(img, size, uv);
|
|
||||||
AddObject(r);
|
AddObject(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+77
-52
@@ -21,7 +21,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
#include <pd/ui7/containers.hpp>
|
#include <pd/ui7/containers.hpp>
|
||||||
#include <pd/ui7/menu.hpp>
|
#include <pd/ui7/menu.hpp>
|
||||||
|
|
||||||
@@ -36,8 +35,7 @@ Menu::Menu(const ID& id, IO& io) : pIO(io), pID(id), pLayout(id, io) {
|
|||||||
|
|
||||||
PD_API void Menu::Label(const std::string& label) {
|
PD_API void Menu::Label(const std::string& label) {
|
||||||
// Layout API
|
// Layout API
|
||||||
auto r = pIO.LabelPool.Allocate();
|
auto r = new UI7::Label(label, pIO);
|
||||||
*r = UI7::Label(label, pIO);
|
|
||||||
pLayout.AddObject(r);
|
pLayout.AddObject(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,8 +67,7 @@ PD_API void Menu::Checkbox(const std::string& label, bool& v) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
PD_API void Menu::Image(Li::Texture img, fvec2 size, Li::Rect uv) {
|
PD_API void Menu::Image(Li::Texture img, fvec2 size, Li::Rect uv) {
|
||||||
auto r = pIO.ImagePool.Allocate();
|
Container* r = new UI7::Image(img, size, uv);
|
||||||
*r = UI7::Image(img, size, uv);
|
|
||||||
pLayout.AddObject(r);
|
pLayout.AddObject(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,8 +83,7 @@ PD_API void Menu::ColorEdit(const std::string& label, u32& clr) {
|
|||||||
|
|
||||||
PD_API void Menu::Separator() {
|
PD_API void Menu::Separator() {
|
||||||
// Dynamic Objects are very simple...
|
// Dynamic Objects are very simple...
|
||||||
DynObj* r = pIO.DynObjPool.Allocate();
|
Container* r = new DynObj(
|
||||||
*r = UI7::DynObj(
|
|
||||||
[=, this](UI7::IO* io, Li::Drawlist* l, UI7::Container* self) {
|
[=, this](UI7::IO* io, Li::Drawlist* l, UI7::Container* self) {
|
||||||
l->DrawRectFilled(self->FinalPos(), self->GetSize(),
|
l->DrawRectFilled(self->FinalPos(), self->GetSize(),
|
||||||
pIO.Theme.Get(UI7Color_TextDead));
|
pIO.Theme.Get(UI7Color_TextDead));
|
||||||
@@ -101,10 +97,8 @@ PD_API void Menu::Separator() {
|
|||||||
|
|
||||||
PD_API void Menu::SeparatorText(const std::string& label) {
|
PD_API void Menu::SeparatorText(const std::string& label) {
|
||||||
// Also note to use [=] instead of [&] to not undefined access label
|
// Also note to use [=] instead of [&] to not undefined access label
|
||||||
DynObj* r = pIO.DynObjPool.Allocate();
|
Container* r = new DynObj([=, this](UI7::IO* io, Li::Drawlist* l,
|
||||||
*r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l,
|
UI7::Container* self) {
|
||||||
UI7::Container* self) {
|
|
||||||
l->SetFont(self->GetFont());
|
|
||||||
fvec2 size = self->GetSize();
|
fvec2 size = self->GetSize();
|
||||||
fvec2 tdim = io->Font->GetTextBounds(label.c_str(), io->FontScale);
|
fvec2 tdim = io->Font->GetTextBounds(label.c_str(), io->FontScale);
|
||||||
fvec2 pos = self->FinalPos();
|
fvec2 pos = self->FinalPos();
|
||||||
@@ -140,7 +134,7 @@ PD_API void Menu::HandleFocus() {
|
|||||||
PD::Hid::IsEvent(Hid::Event::Down, Hid::Keyboard::MouseLeft)) &&
|
PD::Hid::IsEvent(Hid::Event::Down, Hid::Keyboard::MouseLeft)) &&
|
||||||
Li::Math::InBounds(PD::Hid::MousePos(), newarea) &&
|
Li::Math::InBounds(PD::Hid::MousePos(), newarea) &&
|
||||||
!Li::Math::InBounds(PD::Hid::MousePos(),
|
!Li::Math::InBounds(PD::Hid::MousePos(),
|
||||||
pIO.InputHandler.FocusedMenuRect)) {
|
pIO.InputHandler.FocusedMenuRect)) {
|
||||||
pIO.InputHandler.FocusedMenu = pID;
|
pIO.InputHandler.FocusedMenu = pID;
|
||||||
}
|
}
|
||||||
if (pIO.InputHandler.FocusedMenu == pID) {
|
if (pIO.InputHandler.FocusedMenu == pID) {
|
||||||
@@ -148,13 +142,52 @@ PD_API void Menu::HandleFocus() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Todo: (func name is self describing) */
|
||||||
|
PD_API void Menu::HandleScrolling() {
|
||||||
|
if (Flags & UI7MenuFlags_VtScrolling) {
|
||||||
|
bool allowed =
|
||||||
|
pLayout.MaxPosition.y > (pLayout.WorkRect.w - pLayout.WorkRect.y);
|
||||||
|
if (allowed) {
|
||||||
|
if (PD::Hid::IsEvent(Hid::Event::Down, PD::Hid::Gamepad::Touch)) {
|
||||||
|
pLayout.ScrollStart = pLayout.ScrollOffset;
|
||||||
|
}
|
||||||
|
if (pIO.InputHandler.DragObject(
|
||||||
|
"sbg" + pID.GetName(),
|
||||||
|
fvec4(pLayout.Pos, fvec2(0.f)) + pLayout.WorkRect)) {
|
||||||
|
if (pIO.InputHandler.DragReleasedAW) {
|
||||||
|
} else {
|
||||||
|
pLayout.ScrollOffset.y = std::clamp(
|
||||||
|
pLayout.ScrollStart.y + pIO.InputHandler.DragSourcePos.y -
|
||||||
|
pIO.InputHandler.DragPosition.y,
|
||||||
|
-20.f, pLayout.MaxPosition.y - 220);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pLayout.ScrollOffset.y = 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pLayout.ScrollOffset.y > pLayout.MaxPosition.y - 240) {
|
||||||
|
pLayout.ScrollOffset.y -= 1.5;
|
||||||
|
if (pLayout.ScrollOffset.y < pLayout.MaxPosition.y - 240) {
|
||||||
|
pLayout.ScrollOffset.y = pLayout.MaxPosition.y - 240;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pLayout.ScrollOffset.y < 0) {
|
||||||
|
pLayout.ScrollOffset.y += 1.5;
|
||||||
|
if (pLayout.ScrollOffset.y > 0) {
|
||||||
|
pLayout.ScrollOffset.y = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PD_API void Menu::HandleTitlebarActions() {
|
PD_API void Menu::HandleTitlebarActions() {
|
||||||
// Collapse
|
// Collapse
|
||||||
if (!(Flags & UI7MenuFlags_NoCollapse)) {
|
if (!(Flags & UI7MenuFlags_NoCollapse)) {
|
||||||
vec2 cpos = pLayout.Pos + pIO.FramePadding;
|
vec2 cpos = pLayout.Pos + pIO.FramePadding;
|
||||||
// clr_collapse_tri = UI7Color_FrameBackground;
|
// clr_collapse_tri = UI7Color_FrameBackground;
|
||||||
if (pIO.InputHandler.DragObject(UI7::ID(pID.GetName() + "clbse"),
|
if (pIO.InputHandler.DragObject(UI7::ID(pID.GetName() + "clbse"),
|
||||||
fvec4(cpos, fvec2(18, TitleBarHeight)))) {
|
fvec4(cpos, fvec2(18, TitleBarHeight)))) {
|
||||||
if (pIO.InputHandler.DragReleased) {
|
if (pIO.InputHandler.DragReleased) {
|
||||||
pIsOpen = !pIsOpen;
|
pIsOpen = !pIsOpen;
|
||||||
}
|
}
|
||||||
@@ -170,7 +203,7 @@ PD_API void Menu::HandleTitlebarActions() {
|
|||||||
|
|
||||||
// clr_close_btn = UI7Color_FrameBackground;
|
// clr_close_btn = UI7Color_FrameBackground;
|
||||||
if (pIO.InputHandler.DragObject(UI7::ID(pID.GetName() + "clse"),
|
if (pIO.InputHandler.DragObject(UI7::ID(pID.GetName() + "clse"),
|
||||||
fvec4(cpos, size))) {
|
fvec4(cpos, size))) {
|
||||||
if (pIO.InputHandler.DragReleased) {
|
if (pIO.InputHandler.DragReleased) {
|
||||||
*pIsShown = !(*pIsShown);
|
*pIsShown = !(*pIsShown);
|
||||||
}
|
}
|
||||||
@@ -183,7 +216,7 @@ PD_API void Menu::HandleTitlebarActions() {
|
|||||||
|
|
||||||
// clr_close_btn = UI7Color_FrameBackground;
|
// clr_close_btn = UI7Color_FrameBackground;
|
||||||
if (pIO.InputHandler.DragObject(UI7::ID(pID.GetName() + "rszs"),
|
if (pIO.InputHandler.DragObject(UI7::ID(pID.GetName() + "rszs"),
|
||||||
fvec4(cpos, fvec2(20)))) {
|
fvec4(cpos, fvec2(20)))) {
|
||||||
fvec2 szs = pLayout.Size + (pIO.InputHandler.DragPosition -
|
fvec2 szs = pLayout.Size + (pIO.InputHandler.DragPosition -
|
||||||
pIO.InputHandler.DragLastPosition);
|
pIO.InputHandler.DragLastPosition);
|
||||||
if (szs.x < 30) szs.x = 30;
|
if (szs.x < 30) szs.x = 30;
|
||||||
@@ -217,15 +250,14 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
if (pIsOpen) {
|
if (pIsOpen) {
|
||||||
/** Resize Sym (Render on Top of Everything) */
|
/** Resize Sym (Render on Top of Everything) */
|
||||||
if (!(Flags & UI7MenuFlags_NoResize)) {
|
if (!(Flags & UI7MenuFlags_NoResize)) {
|
||||||
DynObj* r = pIO.DynObjPool.Allocate();
|
Container* r =
|
||||||
*r = UI7::DynObj([](IO* io, Li::Drawlist* l, UI7::Container* self) {
|
new DynObj([](IO* io, Li::Drawlist* l, UI7::Container* self) {
|
||||||
l->SetLayer(1);
|
// //l->Layer(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));
|
||||||
l->PathFill(io->Theme.Get(UI7Color_Button));
|
l->PathFill(io->Theme.Get(UI7Color_Button));
|
||||||
l->SetLayer(0);
|
});
|
||||||
});
|
|
||||||
r->SetSize(
|
r->SetSize(
|
||||||
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));
|
||||||
@@ -234,9 +266,9 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Background */
|
/** Background */
|
||||||
DynObj* r = pIO.DynObjPool.Allocate();
|
Container* r = new DynObj([](IO* io, Li::Drawlist* l,
|
||||||
*r = UI7::DynObj([](IO* io, Li::Drawlist* l, UI7::Container* self) {
|
UI7::Container* self) {
|
||||||
l->SetLayer(0);
|
//l->Layer(0);
|
||||||
l->PathRectEx(self->FinalPos(), self->FinalPos() + self->GetSize(), 10.f,
|
l->PathRectEx(self->FinalPos(), self->FinalPos() + self->GetSize(), 10.f,
|
||||||
LiPathRectFlags_KeepTop | LiPathRectFlags_KeepBot);
|
LiPathRectFlags_KeepTop | LiPathRectFlags_KeepBot);
|
||||||
l->PathFill(io->Theme.Get(UI7Color_Background));
|
l->PathFill(io->Theme.Get(UI7Color_Background));
|
||||||
@@ -251,15 +283,13 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
UI7LytAdd_Front);
|
UI7LytAdd_Front);
|
||||||
}
|
}
|
||||||
if (!(Flags & UI7MenuFlags_NoTitlebar)) {
|
if (!(Flags & UI7MenuFlags_NoTitlebar)) {
|
||||||
DynObj* r = pIO.DynObjPool.Allocate();
|
Container* r = new DynObj(
|
||||||
*r = UI7::DynObj(
|
|
||||||
[=, this](UI7::IO* io, Li::Drawlist* l, UI7::Container* self) {
|
[=, this](UI7::IO* io, Li::Drawlist* l, UI7::Container* self) {
|
||||||
l->SetFont(self->GetFont());
|
//l->Layer(20);
|
||||||
l->SetLayer(20);
|
|
||||||
/** Header Bar */
|
/** Header Bar */
|
||||||
l->DrawRectFilled(self->FinalPos(), self->GetSize(),
|
l->DrawRectFilled(self->FinalPos(), self->GetSize(),
|
||||||
io->Theme.Get(UI7Color_Header));
|
io->Theme.Get(UI7Color_Header));
|
||||||
l->SetLayer(21);
|
//l->Layer(21);
|
||||||
/** Inline if statement to shift the Text if collapse sym is shown */
|
/** Inline if statement to shift the Text if collapse sym is shown */
|
||||||
/** What the hell is this code btw (didn't found a better way) */
|
/** What the hell is this code btw (didn't found a better way) */
|
||||||
l->DrawText(self->FinalPos() +
|
l->DrawText(self->FinalPos() +
|
||||||
@@ -269,7 +299,6 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
(io->FramePadding.x * 2)),
|
(io->FramePadding.x * 2)),
|
||||||
2),
|
2),
|
||||||
pID.GetName().c_str(), io->Theme.Get(UI7Color_Text));
|
pID.GetName().c_str(), io->Theme.Get(UI7Color_Text));
|
||||||
l->SetLayer(0);
|
|
||||||
});
|
});
|
||||||
r->SetSize(fvec2(pLayout.GetSize().x, TitleBarHeight));
|
r->SetSize(fvec2(pLayout.GetSize().x, TitleBarHeight));
|
||||||
r->SetPos(0);
|
r->SetPos(0);
|
||||||
@@ -277,11 +306,10 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
|
|
||||||
/** Collapse Sym */
|
/** Collapse Sym */
|
||||||
if (!(Flags & UI7MenuFlags_NoCollapse)) {
|
if (!(Flags & UI7MenuFlags_NoCollapse)) {
|
||||||
DynObj* r = pIO.DynObjPool.Allocate();
|
r = new DynObj([=, this](UI7::IO* io, Li::Drawlist* l,
|
||||||
*r = UI7::DynObj([=, this](UI7::IO* io, Li::Drawlist* l,
|
UI7::Container* self) {
|
||||||
UI7::Container* self) {
|
|
||||||
/** This sym actually requires layer 21 (i dont know why) */
|
/** This sym actually requires layer 21 (i dont know why) */
|
||||||
l->SetLayer(21);
|
//l->Layer(21);
|
||||||
/**
|
/**
|
||||||
* Symbol (Position Swapping set by pIsOpen ? openpos : closepos;)
|
* Symbol (Position Swapping set by pIsOpen ? openpos : closepos;)
|
||||||
*/
|
*/
|
||||||
@@ -292,7 +320,6 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
self->FinalPos() +
|
self->FinalPos() +
|
||||||
fvec2(pIsOpen ? self->GetSize().x * 0.5 : 0, self->GetSize().y),
|
fvec2(pIsOpen ? self->GetSize().x * 0.5 : 0, self->GetSize().y),
|
||||||
io->Theme.Get(UI7Color_FrameBackground));
|
io->Theme.Get(UI7Color_FrameBackground));
|
||||||
l->SetLayer(0);
|
|
||||||
});
|
});
|
||||||
r->SetSize(TitleBarHeight - pIO.FramePadding.y * 2);
|
r->SetSize(TitleBarHeight - pIO.FramePadding.y * 2);
|
||||||
r->SetPos(pIO.FramePadding);
|
r->SetPos(pIO.FramePadding);
|
||||||
@@ -311,10 +338,10 @@ PD_API void Menu::DrawBaseLayout() {
|
|||||||
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.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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -324,10 +351,6 @@ PD_API void Menu::Update() {
|
|||||||
if (pLayout.Size == fvec2(0.f) || Flags & UI7MenuFlags_AlwaysAutoSize) {
|
if (pLayout.Size == fvec2(0.f) || Flags & UI7MenuFlags_AlwaysAutoSize) {
|
||||||
pLayout.Size = fvec2(pLayout.MaxPosition) + pIO.MenuPadding * 2;
|
pLayout.Size = fvec2(pLayout.MaxPosition) + pIO.MenuPadding * 2;
|
||||||
}
|
}
|
||||||
if (Flags & UI7MenuFlags_VtScrolling)
|
|
||||||
pLayout.Flags |= UI7LayoutFlags_VtScrolling;
|
|
||||||
if (Flags & UI7MenuFlags_HzScrolling)
|
|
||||||
pLayout.Flags |= UI7LayoutFlags_HzScrolling;
|
|
||||||
if (!(Flags & UI7MenuFlags_NoTitlebar)) {
|
if (!(Flags & UI7MenuFlags_NoTitlebar)) {
|
||||||
TitleBarHeight = pIO.FontScale * pIO.Font->PixelHeight + pIO.MenuPadding.y;
|
TitleBarHeight = pIO.FontScale * pIO.Font->PixelHeight + pIO.MenuPadding.y;
|
||||||
pLayout.WorkRect.y = 5.f + TitleBarHeight;
|
pLayout.WorkRect.y = 5.f + TitleBarHeight;
|
||||||
@@ -338,6 +361,9 @@ PD_API void Menu::Update() {
|
|||||||
}
|
}
|
||||||
DrawBaseLayout();
|
DrawBaseLayout();
|
||||||
pLayout.Update();
|
pLayout.Update();
|
||||||
|
if (Flags & UI7MenuFlags_VtScrolling || Flags & UI7MenuFlags_HzScrolling) {
|
||||||
|
HandleScrolling();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PD_API bool Menu::BeginTreeNode(const ID& id) {
|
PD_API bool Menu::BeginTreeNode(const ID& id) {
|
||||||
@@ -356,9 +382,7 @@ PD_API bool Menu::BeginTreeNode(const ID& id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Object
|
// Object
|
||||||
DynObj* r = pIO.DynObjPool.Allocate();
|
auto r = new DynObj([=, this](IO* io, Li::Drawlist* l, Container* self) {
|
||||||
*r = UI7::DynObj([=, this](IO* io, Li::Drawlist* l, Container* self) {
|
|
||||||
l->SetFont(self->GetFont());
|
|
||||||
fvec2 ts = self->FinalPos() + fvec2(0, 7);
|
fvec2 ts = self->FinalPos() + fvec2(0, 7);
|
||||||
fvec2 pl[2] = {fvec2(10, 5), fvec2(0, 10)};
|
fvec2 pl[2] = {fvec2(10, 5), fvec2(0, 10)};
|
||||||
if (n->second) {
|
if (n->second) {
|
||||||
@@ -369,13 +393,14 @@ PD_API bool Menu::BeginTreeNode(const ID& id) {
|
|||||||
l->DrawTriangleFilled(ts, ts + pl[0], ts + pl[1],
|
l->DrawTriangleFilled(ts, ts + pl[0], ts + pl[1],
|
||||||
io->Theme.Get(UI7Color_FrameBackground));
|
io->Theme.Get(UI7Color_FrameBackground));
|
||||||
|
|
||||||
l->DrawText(self->FinalPos() + fvec2(10 + io->ItemSpace.x, 0),
|
l->DrawText(self->FinalPos() + fvec2(10 + io->ItemSpace.x, 0), id.GetName().c_str(),
|
||||||
id.GetName().c_str(), io->Theme.Get(UI7Color_Text));
|
io->Theme.Get(UI7Color_Text));
|
||||||
});
|
});
|
||||||
/** Yes this new function handler was created for tree nodes */
|
/** Yes this new function handler was created for tree nodes */
|
||||||
r->AddInputHandler([=, this](IO* io, Container* self) {
|
r->AddInputHandler([=, this](IO* io, Container* self) {
|
||||||
if (io->InputHandler.DragObject(ID(pID.GetName() + id.GetName()),
|
if (io->InputHandler.DragObject(
|
||||||
fvec4(self->FinalPos(), self->GetSize()))) {
|
ID(pID.GetName() + id.GetName()),
|
||||||
|
fvec4(self->FinalPos(), self->GetSize()))) {
|
||||||
if (io->InputHandler.DragReleased) {
|
if (io->InputHandler.DragReleased) {
|
||||||
n->second = !n->second;
|
n->second = !n->second;
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-19
@@ -51,14 +51,15 @@ PD_API void Context::UseViewPort(const ID& id) {
|
|||||||
pIO.CurrentViewPort = pIO.ViewPorts[id.RawID()];
|
pIO.CurrentViewPort = pIO.ViewPorts[id.RawID()];
|
||||||
}
|
}
|
||||||
|
|
||||||
PD_API Menu* Context::BeginMenu(const ID& id, UI7MenuFlags flags, bool* pShow) {
|
PD_API Menu* Context::BeginMenu(const ID& id, UI7MenuFlags flags,
|
||||||
|
bool* pShow) {
|
||||||
if (pCurrent) {
|
if (pCurrent) {
|
||||||
PDERR("UI7: You are already in {} Menu!", pCurrent->pID.GetName());
|
PDERR("UI7: You are already in {} Menu!", pCurrent->pID.GetName());
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (std::find(pCurrentMenus.begin(), pCurrentMenus.end(), (u32)id) !=
|
if (std::find(pCurrentMenus.begin(), pCurrentMenus.end(), (u32)id) !=
|
||||||
pCurrentMenus.end()) {
|
pCurrentMenus.end()) {
|
||||||
PDERR("UI7: Menu {} already exists!", id.GetName());
|
PDERR("UI7: Menu {} already exists!", id.GetName());
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
pCurrent = pGetOrCreateMenu(id);
|
pCurrent = pGetOrCreateMenu(id);
|
||||||
@@ -143,11 +144,8 @@ PD_API void Context::Update() {
|
|||||||
pMenus[it]->Update(); /** Render */
|
pMenus[it]->Update(); /** Render */
|
||||||
this->pIO.InputHandler.CurrentMenu = 0;
|
this->pIO.InputHandler.CurrentMenu = 0;
|
||||||
}
|
}
|
||||||
int base_layer = 0;
|
|
||||||
for (int i = (int)FinalList.size() - 1; i >= 0; i--) {
|
for (int i = (int)FinalList.size() - 1; i >= 0; i--) {
|
||||||
pIO.FDL.SetLayer(base_layer);
|
|
||||||
pIO.FDL.Merge(pMenus[FinalList[i]]->pLayout.GetDrawList());
|
pIO.FDL.Merge(pMenus[FinalList[i]]->pLayout.GetDrawList());
|
||||||
base_layer += 100;
|
|
||||||
}
|
}
|
||||||
pCurrentMenus.clear();
|
pCurrentMenus.clear();
|
||||||
pIO.Update();
|
pIO.Update();
|
||||||
@@ -210,18 +208,18 @@ PD_API void Context::MetricsMenu(bool* show) {
|
|||||||
m->Label("Renderer: {}", PD::Gfx::GetDriverName());
|
m->Label("Renderer: {}", PD::Gfx::GetDriverName());
|
||||||
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) {
|
||||||
m->Label("- Keyboard Supported");
|
m->Label("- Keyboard Supported");
|
||||||
}
|
}
|
||||||
if (pIO.pCtx.Hid()->Flags & PD::HidDriver::Flags_HasMouse) {
|
if (pIO.pCtx.Hid()->Flags & PD::HidDriver::Flags_HasMouse) {
|
||||||
m->Label("- Mouse Supported");
|
m->Label("- Mouse Supported");
|
||||||
}
|
}
|
||||||
if (pIO.pCtx.Hid()->Flags & PD::HidDriver::Flags_HasTouch) {
|
if (pIO.pCtx.Hid()->Flags & PD::HidDriver::Flags_HasTouch) {
|
||||||
m->Label("- Touch Supported");
|
m->Label("- Touch Supported");
|
||||||
}
|
}
|
||||||
if (pIO.pCtx.Hid()->Flags & PD::HidDriver::FLags_HasGamepad) {
|
if (pIO.pCtx.Hid()->Flags & PD::HidDriver::FLags_HasGamepad) {
|
||||||
m->Label("- Gamepad Supported");
|
m->Label("- Gamepad Supported");
|
||||||
}*/
|
}*/
|
||||||
m->EndTreeNode();
|
m->EndTreeNode();
|
||||||
}
|
}
|
||||||
/** Section IO */
|
/** Section IO */
|
||||||
@@ -258,7 +256,8 @@ PD_API void Context::MetricsMenu(bool* show) {
|
|||||||
m->Label(std::format("Cursor: {}", pMenus[it]->pLayout.Cursor));
|
m->Label(std::format("Cursor: {}", pMenus[it]->pLayout.Cursor));
|
||||||
if (m->BeginTreeNode(
|
if (m->BeginTreeNode(
|
||||||
"ID Objects (" +
|
"ID Objects (" +
|
||||||
std::to_string(pMenus[it]->pLayout.IDObjects.size()) + ")")) {
|
std::to_string(pMenus[it]->pLayout.IDObjects.size()) +
|
||||||
|
")")) {
|
||||||
for (auto& jt : pMenus[it]->pLayout.IDObjects) {
|
for (auto& jt : pMenus[it]->pLayout.IDObjects) {
|
||||||
m->Label(std::format("{:08X}", jt->GetID()));
|
m->Label(std::format("{:08X}", jt->GetID()));
|
||||||
}
|
}
|
||||||
@@ -322,7 +321,7 @@ PD_API void UI7::Context::StyleEditor(bool* show) {
|
|||||||
}
|
}
|
||||||
/// Small trick to print without prefix
|
/// Small trick to print without prefix
|
||||||
#define ts(x) m->ColorEdit(std::string(#x).substr(9), pIO.Theme.GetRef(x));
|
#define ts(x) m->ColorEdit(std::string(#x).substr(9), pIO.Theme.GetRef(x));
|
||||||
#define ts2(x) \
|
#define ts2(x) \
|
||||||
m->DragData(std::string(#x).substr(9), (u8*)&pIO.Theme.GetRef(x), 4, (u8)0, \
|
m->DragData(std::string(#x).substr(9), (u8*)&pIO.Theme.GetRef(x), 4, (u8)0, \
|
||||||
(u8)255);
|
(u8)255);
|
||||||
ts(UI7Color_Background);
|
ts(UI7Color_Background);
|
||||||
|
|||||||
@@ -198,9 +198,9 @@ int main(int argc, char** argv) {
|
|||||||
auto pTex = PD::Gfx::LoadTexture(img, img.Width(), img.Height());
|
auto pTex = PD::Gfx::LoadTexture(img, img.Width(), img.Height());
|
||||||
PD::Li::Font font;
|
PD::Li::Font font;
|
||||||
PD::Li::Font debug_font;
|
PD::Li::Font debug_font;
|
||||||
font.LoadTTF(ResourcePath("default.ttf"), 32, LiFontFlags_SDF);
|
font.LoadTTF(ResourcePath("default.ttf"), 32, LiFontFlags_SDF);
|
||||||
debug_font.LoadTTF(ResourcePath("JetBrainsMono-Medium.ttf"), 32,
|
debug_font.LoadTTF(ResourcePath("JetBrainsMono-Medium.ttf"), 32,
|
||||||
LiFontFlags_SDF | LiFontFlags_Monospace);
|
LiFontFlags_SDF | LiFontFlags_Monospace);
|
||||||
pList.SetFont(&font);
|
pList.SetFont(&font);
|
||||||
App app(font);
|
App app(font);
|
||||||
Cursor LeftStick;
|
Cursor LeftStick;
|
||||||
@@ -211,15 +211,16 @@ int main(int argc, char** argv) {
|
|||||||
ui7.AddViewPort("Default", PD::ivec4(0, 0, 1280, 720));
|
ui7.AddViewPort("Default", PD::ivec4(0, 0, 1280, 720));
|
||||||
ui7.UseViewPort("Default");
|
ui7.UseViewPort("Default");
|
||||||
while (pOs->Mainloop()) {
|
while (pOs->Mainloop()) {
|
||||||
PD::TT::End("OSCTX::MainLoop");
|
|
||||||
pOs->ClearViewPort();
|
|
||||||
PD::TT::Scope __st("MainLoop");
|
PD::TT::Scope __st("MainLoop");
|
||||||
PD::TT::Beg("MainRaw");
|
|
||||||
PD::Hid::Update();
|
PD::Hid::Update();
|
||||||
PD::Gfx::NewFrame();
|
PD::Gfx::NewFrame();
|
||||||
PD::Li::ResetPools();
|
pOs->ClearViewPort();
|
||||||
// app.Update(pOs->GetViewport(), pList);
|
// app.Update(pOs->GetViewport(), pList);
|
||||||
pList.SetFontscale(0.7);
|
pList.SetFontscale(0.7);
|
||||||
|
if (auto m = ui7.BeginMenu("Test")) {
|
||||||
|
m->Label("Hello World!");
|
||||||
|
ui7.EndMenu();
|
||||||
|
}
|
||||||
if (PD::Hid::IsEvent(PD::Hid::Event::Down, PD::Hid::Gamepad::CPLeft |
|
if (PD::Hid::IsEvent(PD::Hid::Event::Down, PD::Hid::Gamepad::CPLeft |
|
||||||
PD::Hid::Gamepad::CPRight)) {
|
PD::Hid::Gamepad::CPRight)) {
|
||||||
LeftStick.pPos.x += PD::Hid::GetLeftStick().x * 15;
|
LeftStick.pPos.x += PD::Hid::GetLeftStick().x * 15;
|
||||||
@@ -298,40 +299,19 @@ int main(int argc, char** argv) {
|
|||||||
"#ff00ff");
|
"#ff00ff");
|
||||||
}
|
}
|
||||||
pList.SetFont(&font);
|
pList.SetFont(&font);
|
||||||
PD::TT::Beg("BuildUI7Menus");
|
|
||||||
if (auto m = ui7.BeginMenu("Test")) {
|
|
||||||
m->Label("Hello World!");
|
|
||||||
ui7.EndMenu();
|
|
||||||
}
|
|
||||||
if (auto m = ui7.BeginMenu("LI DBG INFO")) {
|
|
||||||
m->PushFont(&debug_font);
|
|
||||||
m->Label("Gfx Driver: {}", PD::Gfx::GetDriverName());
|
|
||||||
m->Separator();
|
|
||||||
m->Label("LI Draw Comamnds: {}", PD::Gfx::GetNumCommands());
|
|
||||||
m->Label("GFX Draw Calls: {}", PD::Gfx::GetNumDrawcalls());
|
|
||||||
m->Label("GFX Vertices: {}", PD::Gfx::GetNumVertices());
|
|
||||||
m->Label("GFX Triangles: {}", PD::Gfx::GetNumVertices() / 3);
|
|
||||||
m->Label("GFX Indices: {}", PD::Gfx::GetNumIndices());
|
|
||||||
m->PopFont();
|
|
||||||
ui7.EndMenu();
|
|
||||||
}
|
|
||||||
ui7.MetricsMenu();
|
ui7.MetricsMenu();
|
||||||
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");
|
||||||
PD::Gfx::Draw(ui7.GetDrawData());
|
|
||||||
PD::Gfx::Draw(pList);
|
PD::Gfx::Draw(pList);
|
||||||
|
PD::Gfx::Draw(ui7.GetDrawData());
|
||||||
PD::TT::End("PD::Gfx::Draw");
|
PD::TT::End("PD::Gfx::Draw");
|
||||||
pList.Clear();
|
pList.Clear();
|
||||||
PD::TT::End("MainRaw");
|
|
||||||
pOs->SwapBuffers();
|
pOs->SwapBuffers();
|
||||||
PD::TT::Beg("OSCTX::MainLoop");
|
|
||||||
}
|
}
|
||||||
font.Delete();
|
font.Delete();
|
||||||
debug_font.Delete();
|
|
||||||
PD::Gfx::DeleteTexture(pTex);
|
PD::Gfx::DeleteTexture(pTex);
|
||||||
PD::Gfx::Deinit();
|
PD::Gfx::Deinit();
|
||||||
pOs->Deinit();
|
pOs->Deinit();
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ struct DesktopOS::Impl {
|
|||||||
#if WIN32
|
#if WIN32
|
||||||
IDirect3D9* d3d = nullptr;
|
IDirect3D9* d3d = nullptr;
|
||||||
IDirect3DDevice9* dx9_device = nullptr;
|
IDirect3DDevice9* dx9_device = nullptr;
|
||||||
D3DPRESENT_PARAMETERS d3dpp = {};
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -57,18 +56,17 @@ void DesktopOS::Init() {
|
|||||||
if (pDriver == Driver::DirectX9) {
|
if (pDriver == Driver::DirectX9) {
|
||||||
impl->d3d = Direct3DCreate9(D3D_SDK_VERSION);
|
impl->d3d = Direct3DCreate9(D3D_SDK_VERSION);
|
||||||
auto hwnd = glfwGetWin32Window(impl->win);
|
auto hwnd = glfwGetWin32Window(impl->win);
|
||||||
|
D3DPRESENT_PARAMETERS d3dpp = {};
|
||||||
impl->d3dpp = D3DPRESENT_PARAMETERS{};
|
d3dpp.Windowed = TRUE;
|
||||||
impl->d3dpp.Windowed = TRUE;
|
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
|
||||||
impl->d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
|
d3dpp.hDeviceWindow = hwnd;
|
||||||
impl->d3dpp.hDeviceWindow = hwnd;
|
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
|
||||||
impl->d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
|
d3dpp.EnableAutoDepthStencil = TRUE;
|
||||||
impl->d3dpp.EnableAutoDepthStencil = TRUE;
|
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
|
||||||
impl->d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
|
|
||||||
|
|
||||||
HRESULT hr = impl->d3d->CreateDevice(
|
HRESULT hr = impl->d3d->CreateDevice(
|
||||||
D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
|
D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
|
||||||
D3DCREATE_HARDWARE_VERTEXPROCESSING, &impl->d3dpp, &impl->dx9_device);
|
D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &impl->dx9_device);
|
||||||
if (FAILED(hr)) {
|
if (FAILED(hr)) {
|
||||||
MessageBoxW(nullptr, L"Failed to create D3D9 device", L"Error", MB_OK);
|
MessageBoxW(nullptr, L"Failed to create D3D9 device", L"Error", MB_OK);
|
||||||
std::abort();
|
std::abort();
|
||||||
@@ -102,15 +100,7 @@ void DesktopOS::ClearViewPort() {
|
|||||||
glViewport(0, 0, pViewPort.x, pViewPort.y);
|
glViewport(0, 0, pViewPort.x, pViewPort.y);
|
||||||
} else if (pDriver == Driver::DirectX9) {
|
} else if (pDriver == Driver::DirectX9) {
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// Resize the swapchain to match the window size
|
if (impl->dx9_device) {
|
||||||
if (impl->dx9_device && pViewPort.x > 0 && pViewPort.y > 0) {
|
|
||||||
if (impl->d3dpp.BackBufferWidth != (UINT)pViewPort.x ||
|
|
||||||
impl->d3dpp.BackBufferHeight != (UINT)pViewPort.y) {
|
|
||||||
impl->d3dpp.BackBufferWidth = pViewPort.x;
|
|
||||||
impl->d3dpp.BackBufferHeight = pViewPort.y;
|
|
||||||
impl->dx9_device->Reset(&impl->d3dpp);
|
|
||||||
}
|
|
||||||
|
|
||||||
impl->dx9_device->Clear(0, nullptr, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
|
impl->dx9_device->Clear(0, nullptr, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
|
||||||
D3DCOLOR_XRGB(25, 25, 25), 1.0f, 0);
|
D3DCOLOR_XRGB(25, 25, 25), 1.0f, 0);
|
||||||
impl->dx9_device->BeginScene();
|
impl->dx9_device->BeginScene();
|
||||||
@@ -122,8 +112,7 @@ void DesktopOS::ClearViewPort() {
|
|||||||
void DesktopOS::SwapBuffers() {
|
void DesktopOS::SwapBuffers() {
|
||||||
if (pDriver == Driver::DirectX9) {
|
if (pDriver == Driver::DirectX9) {
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// yes we schould use some safetey checks
|
if (impl->dx9_device) {
|
||||||
if (impl->dx9_device && pViewPort.x > 0 && pViewPort.y > 0) {
|
|
||||||
impl->dx9_device->EndScene();
|
impl->dx9_device->EndScene();
|
||||||
impl->dx9_device->Present(nullptr, nullptr, nullptr, nullptr);
|
impl->dx9_device->Present(nullptr, nullptr, nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ void HorizonCtr::Init() {
|
|||||||
romfsInit();
|
romfsInit();
|
||||||
osSetSpeedupEnable(true);
|
osSetSpeedupEnable(true);
|
||||||
gfxInitDefault();
|
gfxInitDefault();
|
||||||
// consoleInit(GFX_BOTTOM, nullptr);
|
consoleInit(GFX_BOTTOM, nullptr);
|
||||||
C3D_Init(C3D_DEFAULT_CMDBUF_SIZE);
|
C3D_Init(C3D_DEFAULT_CMDBUF_SIZE);
|
||||||
impl->Top =
|
impl->Top =
|
||||||
C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8);
|
C3D_RenderTargetCreate(240, 400, GPU_RB_RGBA8, GPU_RB_DEPTH24_STENCIL8);
|
||||||
@@ -43,7 +43,7 @@ void HorizonCtr::Init() {
|
|||||||
C3D_RenderTargetSetOutput(impl->Bottom, GFX_BOTTOM, GFX_LEFT,
|
C3D_RenderTargetSetOutput(impl->Bottom, GFX_BOTTOM, GFX_LEFT,
|
||||||
DisplayTransferFlags);
|
DisplayTransferFlags);
|
||||||
PD::Gfx::UseDriver<PD::GfxCitro3D>();
|
PD::Gfx::UseDriver<PD::GfxCitro3D>();
|
||||||
PD::Hid::UseDriver<PD::Hid3DS>();
|
PD::Hid::UseDriver<PD::HidDriver>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void HorizonCtr::Deinit() {
|
void HorizonCtr::Deinit() {
|
||||||
@@ -61,13 +61,14 @@ void HorizonCtr::Deinit() {
|
|||||||
|
|
||||||
bool HorizonCtr::Mainloop() {
|
bool HorizonCtr::Mainloop() {
|
||||||
pViewPort = ivec2(400, 240);
|
pViewPort = ivec2(400, 240);
|
||||||
|
hidScanInput();
|
||||||
bool _kill = hidKeysUp() & KEY_START;
|
bool _kill = hidKeysUp() & KEY_START;
|
||||||
C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
|
|
||||||
return aptMainLoop() && !_kill;
|
return aptMainLoop() && !_kill;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HorizonCtr::ClearViewPort() {
|
void HorizonCtr::ClearViewPort() {
|
||||||
PD::Gfx::SetViewPort(pViewPort);
|
PD::Gfx::SetViewPort(pViewPort);
|
||||||
|
C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
|
||||||
C3D_FrameDrawOn(impl->Top);
|
C3D_FrameDrawOn(impl->Top);
|
||||||
C3D_RenderTargetClear(impl->Top, C3D_CLEAR_ALL, PD::Color(25, 25, 25, 25), 0);
|
C3D_RenderTargetClear(impl->Top, C3D_CLEAR_ALL, PD::Color(25, 25, 25, 25), 0);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user