move global pools into gfx driver
prevents double copy problems saves memory (needs to be optimized...)
This commit is contained in:
+1
-1
@@ -48,10 +48,10 @@ set(PD_SOURCES
|
|||||||
source/drivers/hid.cpp
|
source/drivers/hid.cpp
|
||||||
|
|
||||||
# Lithium
|
# Lithium
|
||||||
|
source/lithium/command.cpp
|
||||||
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
|
|
||||||
|
|
||||||
# Ultra
|
# Ultra
|
||||||
source/ultra/canvas.cpp
|
source/ultra/canvas.cpp
|
||||||
|
|||||||
@@ -95,11 +95,11 @@ void GfxOpenGL2::Submit(size_t count, size_t start) {
|
|||||||
glUseProgram(pShader);
|
glUseProgram(pShader);
|
||||||
glUniformMatrix4fv(pLocProjection, 1, GL_FALSE, Projection.m.data());
|
glUniformMatrix4fv(pLocProjection, 1, GL_FALSE, Projection.m.data());
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
glBufferData(GL_ARRAY_BUFFER, CurrentVertex * sizeof(PD::Li::Vertex),
|
glBufferData(GL_ARRAY_BUFFER, GetVertexPoolSize() * sizeof(PD::Li::Vertex),
|
||||||
GetVertexBufPtr(0), GL_DYNAMIC_DRAW);
|
GetVertexBufPtr(0), GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, CurrentIndex * sizeof(PD::u16),
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, GetIndexPoolSize() * sizeof(u16),
|
||||||
GetIndexBufPtr(0), GL_DYNAMIC_DRAW);
|
GetIndexBufPtr(0), GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
pSetupShaderAttribs(pShader);
|
pSetupShaderAttribs(pShader);
|
||||||
|
|||||||
@@ -67,11 +67,11 @@ void GfxOpenGL3::Submit(size_t count, size_t start) {
|
|||||||
glUniformMatrix4fv(pLocProjection, 1, GL_FALSE, Projection.m.data());
|
glUniformMatrix4fv(pLocProjection, 1, GL_FALSE, Projection.m.data());
|
||||||
glBindVertexArray(VAO);
|
glBindVertexArray(VAO);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
glBufferData(GL_ARRAY_BUFFER, CurrentVertex * sizeof(PD::Li::Vertex),
|
glBufferData(GL_ARRAY_BUFFER, GetVertexPoolSize() * sizeof(PD::Li::Vertex),
|
||||||
GetVertexBufPtr(0), GL_DYNAMIC_DRAW);
|
GetVertexBufPtr(0), GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IBO);
|
||||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, CurrentIndex * sizeof(u16),
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, GetIndexPoolSize() * sizeof(u16),
|
||||||
GetIndexBufPtr(0), GL_DYNAMIC_DRAW);
|
GetIndexBufPtr(0), GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_SHORT,
|
glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_SHORT,
|
||||||
|
|||||||
+92
-16
@@ -3,7 +3,6 @@
|
|||||||
#include <pd/core/mat.hpp>
|
#include <pd/core/mat.hpp>
|
||||||
#include <pd/drivers/interface.hpp>
|
#include <pd/drivers/interface.hpp>
|
||||||
#include <pd/lithium/command.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;
|
||||||
@@ -47,6 +46,17 @@ class PD_API GfxDriver : public DriverInterface {
|
|||||||
size_t GetNumDrawcalls() const { return CountDrawcalls; }
|
size_t GetNumDrawcalls() const { return CountDrawcalls; }
|
||||||
size_t GetNumCommands() const { return CountCommands; }
|
size_t GetNumCommands() const { return CountCommands; }
|
||||||
|
|
||||||
|
// Global Pool Interface
|
||||||
|
virtual size_t AllocateVertices(size_t count, PD::ptr accessor) = 0;
|
||||||
|
virtual size_t AllocateIndices(size_t count, PD::ptr accessor) = 0;
|
||||||
|
virtual bool ExpandVertices(size_t count, PD::ptr accessor) = 0;
|
||||||
|
virtual bool ExpandIndices(size_t count, PD::ptr accessor) = 0;
|
||||||
|
virtual void PutVertex(size_t loc, const Li::Vertex& vtx,
|
||||||
|
PD::ptr accessor) = 0;
|
||||||
|
virtual void PutIndex(size_t loc, u16 idx, PD::ptr accessor) = 0;
|
||||||
|
virtual const Li::Vertex& GetVertex(size_t loc) const = 0;
|
||||||
|
virtual const u16& GetIndex(size_t loc) const = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void SysDeinit() {}
|
virtual void SysDeinit() {}
|
||||||
virtual void SysInit() {}
|
virtual void SysInit() {}
|
||||||
@@ -105,41 +115,76 @@ class GfxDriverBase : public GfxDriver {
|
|||||||
if (!CurrentTex) {
|
if (!CurrentTex) {
|
||||||
CurrentTex = pWhite.GetID();
|
CurrentTex = pWhite.GetID();
|
||||||
}
|
}
|
||||||
size_t startidx = CurrentIndex;
|
size_t startidx = commands[index].FirstIndex;
|
||||||
|
size_t num_indices = 0;
|
||||||
while (index < commands.size() &&
|
while (index < commands.size() &&
|
||||||
(CurrentTex == commands[index].Tex ||
|
(CurrentTex == commands[index].Tex ||
|
||||||
(CurrentTex == pWhite.GetID() && commands[index].Tex == 0))) {
|
(CurrentTex == pWhite.GetID() && commands[index].Tex == 0))) {
|
||||||
const auto& c = commands[index];
|
num_indices += commands[index].IndexCount;
|
||||||
auto pIdx = pIdxPool.Allocate(c.IndexCount);
|
|
||||||
auto pVtx = pVtxPool.Allocate(c.VertexCount);
|
|
||||||
for (size_t i = 0; i < c.IndexCount; i++) {
|
|
||||||
pIdx[i] = CurrentVertex + Li::GetIndex(c.FirstIndex + i);
|
|
||||||
}
|
|
||||||
CurrentIndex += c.IndexCount;
|
|
||||||
CurrentVertex += c.VertexCount;
|
|
||||||
for (size_t i = 0; i < c.VertexCount; i++) {
|
|
||||||
pVtx[i] = Li::GetVertex(c.FirstVertex + i);
|
|
||||||
}
|
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
Submit(CurrentIndex - startidx, startidx);
|
Submit(num_indices, startidx);
|
||||||
pCountDrawcalls++;
|
pCountDrawcalls++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t AllocateVertices(size_t count, PD::ptr accessor) override {
|
||||||
|
pVertexAccessor = accessor;
|
||||||
|
size_t loc = pVtxPool.size();
|
||||||
|
pVtxPool.Allocate(count);
|
||||||
|
return loc;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t AllocateIndices(size_t count, PD::ptr accessor) override {
|
||||||
|
pIndexAccessor = accessor;
|
||||||
|
size_t loc = pIdxPool.size();
|
||||||
|
pIdxPool.Allocate(count);
|
||||||
|
return loc;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ExpandVertices(size_t count, PD::ptr accessor) override {
|
||||||
|
if (pVertexAccessor != accessor) return false;
|
||||||
|
pVtxPool.Allocate(count);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ExpandIndices(size_t count, PD::ptr accessor) override {
|
||||||
|
if (pIndexAccessor != accessor) return false;
|
||||||
|
pIdxPool.Allocate(count);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PutVertex(size_t loc, const Li::Vertex& vtx, PD::ptr accessor) override {
|
||||||
|
if (pVertexAccessor != accessor) return;
|
||||||
|
pVtxPool.Put(loc, vtx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PutIndex(size_t loc, u16 idx, PD::ptr accessor) override {
|
||||||
|
if (pIndexAccessor != accessor) return;
|
||||||
|
pIdxPool.Put(loc, idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
const Li::Vertex& GetVertex(size_t loc) const override {
|
||||||
|
return pVtxPool[loc];
|
||||||
|
}
|
||||||
|
|
||||||
|
const u16& GetIndex(size_t loc) const override { return pIdxPool[loc]; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
u16* GetIndexBufPtr(size_t start) { return &pIdxPool[start]; }
|
u16* GetIndexBufPtr(size_t start) { return &pIdxPool[start]; }
|
||||||
Li::Vertex* GetVertexBufPtr(size_t start) { return &pVtxPool[start]; }
|
Li::Vertex* GetVertexBufPtr(size_t start) { return &pVtxPool[start]; }
|
||||||
size_t GetVertexPoolSize() const { return pVtxPool.size(); }
|
size_t GetVertexPoolSize() const { return pVtxPool.size(); }
|
||||||
size_t GetIndexPoolSize() const { return pIdxPool.size(); }
|
size_t GetIndexPoolSize() const { return pIdxPool.size(); }
|
||||||
void ResetPools() override {
|
void ResetPools() override {
|
||||||
pVtxPool.ResetFast();
|
pVtxPool.NoReset();
|
||||||
pIdxPool.ResetFast();
|
pIdxPool.NoReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
VtxPool pVtxPool;
|
VtxPool pVtxPool;
|
||||||
IdxPool pIdxPool;
|
IdxPool pIdxPool;
|
||||||
|
PD::ptr pVertexAccessor = 0;
|
||||||
|
PD::ptr pIndexAccessor = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class PD_API Gfx {
|
class PD_API Gfx {
|
||||||
@@ -183,6 +228,37 @@ class PD_API Gfx {
|
|||||||
static size_t GetNumDrawcalls() { return driver->GetNumDrawcalls(); }
|
static size_t GetNumDrawcalls() { return driver->GetNumDrawcalls(); }
|
||||||
static size_t GetNumCommands() { return driver->GetNumCommands(); }
|
static size_t GetNumCommands() { return driver->GetNumCommands(); }
|
||||||
|
|
||||||
|
// Gloabal Pool Interface
|
||||||
|
static size_t AllocateVertices(size_t count, PD::ptr accessor) {
|
||||||
|
return driver->AllocateVertices(count, accessor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t AllocateIndices(size_t count, PD::ptr accessor) {
|
||||||
|
return driver->AllocateIndices(count, accessor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool ExpandVertices(size_t count, PD::ptr accessor) {
|
||||||
|
return driver->ExpandVertices(count, accessor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool ExpandIndices(size_t count, PD::ptr accessor) {
|
||||||
|
return driver->ExpandIndices(count, accessor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void PutVertex(size_t loc, const Li::Vertex& vtx, PD::ptr accessor) {
|
||||||
|
driver->PutVertex(loc, vtx, accessor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void PutIndex(size_t loc, u16 idx, PD::ptr accessor) {
|
||||||
|
driver->PutIndex(loc, idx, accessor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const Li::Vertex& GetVertex(size_t loc) {
|
||||||
|
return driver->GetVertex(loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const u16& GetIndex(size_t loc) { return driver->GetIndex(loc); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static std::unique_ptr<GfxDriver> driver;
|
static std::unique_ptr<GfxDriver> driver;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <pd/core/pool.hpp>
|
#include <pd/core/pool.hpp>
|
||||||
#include <pd/lithium/pools.hpp>
|
|
||||||
#include <pd/lithium/vertex.hpp>
|
#include <pd/lithium/vertex.hpp>
|
||||||
|
|
||||||
namespace PD {
|
namespace PD {
|
||||||
@@ -12,54 +11,12 @@ class Command {
|
|||||||
Command() { Reset(); }
|
Command() { Reset(); }
|
||||||
~Command() {}
|
~Command() {}
|
||||||
|
|
||||||
void Reserve(size_t vtx, size_t idx) {
|
void Reserve(size_t vtx, size_t idx);
|
||||||
if (!FirstVertex) {
|
void Reset();
|
||||||
FirstVertex = AllocateVertices(vtx, (PD::ptr)this);
|
|
||||||
VertexCountMax = vtx;
|
|
||||||
} else {
|
|
||||||
ExpandVertices(vtx, (PD::ptr)this);
|
|
||||||
VertexCountMax += vtx;
|
|
||||||
}
|
|
||||||
if (!FirstIndex) {
|
|
||||||
FirstIndex = AllocateIndices(idx, (PD::ptr)this);
|
|
||||||
IndexCountMax = idx;
|
|
||||||
} else {
|
|
||||||
ExpandIndices(idx, (PD::ptr)this);
|
|
||||||
IndexCountMax += idx;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Reset() {
|
Command& Add(const Vertex& vtx);
|
||||||
Layer = 0;
|
Command& Add(u16 idx);
|
||||||
Tex = 0;
|
Command& Add(u16 a, u16 b, u16 c);
|
||||||
FirstIndex = 0;
|
|
||||||
FirstVertex = 0;
|
|
||||||
IndexCount = 0;
|
|
||||||
VertexCount = 0;
|
|
||||||
VertexCountMax = 0;
|
|
||||||
IndexCountMax = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Command& Add(const Vertex& vtx) {
|
|
||||||
if (VertexCount <= VertexCountMax)
|
|
||||||
PutVertex(FirstVertex + VertexCount++, vtx, (PD::ptr)this);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
Command& Add(u16 idx) {
|
|
||||||
if (IndexCount <= IndexCountMax)
|
|
||||||
PutIndex(FirstIndex + IndexCount++, VertexCount + idx, (PD::ptr)this);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
Command& Add(u16 a, u16 b, u16 c) {
|
|
||||||
if (IndexCount + 3 <= IndexCountMax) {
|
|
||||||
size_t idx = FirstIndex + IndexCount;
|
|
||||||
PutIndex(idx + 0, VertexCount + a, (PD::ptr)this);
|
|
||||||
PutIndex(idx + 1, VertexCount + b, (PD::ptr)this);
|
|
||||||
PutIndex(idx + 2, VertexCount + c, (PD::ptr)this);
|
|
||||||
IndexCount += 3;
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Layer = 0;
|
int Layer = 0;
|
||||||
ptr Tex = 0;
|
ptr Tex = 0;
|
||||||
|
|||||||
@@ -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,26 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <cstddef>
|
|
||||||
#include <pd/lithium/vertex.hpp>
|
|
||||||
|
|
||||||
namespace PD {
|
|
||||||
namespace Li {
|
|
||||||
/**
|
|
||||||
* Allocate an amount of vertices
|
|
||||||
* returns the index of the first vertex
|
|
||||||
*/
|
|
||||||
PD_API size_t AllocateVertices(size_t count, PD::ptr accessor);
|
|
||||||
/**
|
|
||||||
* Allocate an amount of indices
|
|
||||||
* returns the index of the first elem
|
|
||||||
*/
|
|
||||||
PD_API size_t AllocateIndices(size_t count, PD::ptr accessor);
|
|
||||||
PD_API bool ExpandVertices(size_t count, PD::ptr accessor);
|
|
||||||
PD_API bool ExpandIndices(size_t count, PD::ptr accessor);
|
|
||||||
PD_API void PutVertex(size_t loc, const Vertex& vtx, PD::ptr accessor);
|
|
||||||
PD_API void PutIndex(size_t loc, u16 idx, PD::ptr accessor);
|
|
||||||
PD_API const Vertex& GetVertex(size_t loc);
|
|
||||||
PD_API const u16& GetIndex(size_t loc);
|
|
||||||
PD_API void ResetPools();
|
|
||||||
} // namespace Li
|
|
||||||
} // namespace PD
|
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
#include <pd/drivers/gfx.hpp>
|
||||||
|
#include <pd/lithium/command.hpp>
|
||||||
|
|
||||||
|
namespace PD {
|
||||||
|
namespace Li {
|
||||||
|
|
||||||
|
void Command::Reserve(size_t vtx, size_t idx) {
|
||||||
|
if (VertexCountMax == 0) {
|
||||||
|
FirstVertex = Gfx::AllocateVertices(vtx, (PD::ptr)this);
|
||||||
|
VertexCountMax = vtx;
|
||||||
|
} else {
|
||||||
|
Gfx::ExpandVertices(vtx, (PD::ptr)this);
|
||||||
|
VertexCountMax += vtx;
|
||||||
|
}
|
||||||
|
if (IndexCountMax == 0) {
|
||||||
|
FirstIndex = Gfx::AllocateIndices(idx, (PD::ptr)this);
|
||||||
|
IndexCountMax = idx;
|
||||||
|
} else {
|
||||||
|
Gfx::ExpandIndices(idx, (PD::ptr)this);
|
||||||
|
IndexCountMax += idx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Command::Reset() {
|
||||||
|
Layer = 0;
|
||||||
|
Tex = 0;
|
||||||
|
FirstIndex = 0;
|
||||||
|
FirstVertex = 0;
|
||||||
|
IndexCount = 0;
|
||||||
|
VertexCount = 0;
|
||||||
|
VertexCountMax = 0;
|
||||||
|
IndexCountMax = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Command& Command::Add(const Vertex& vtx) {
|
||||||
|
if (VertexCount <= VertexCountMax)
|
||||||
|
Gfx::PutVertex(FirstVertex + VertexCount++, vtx, (PD::ptr)this);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
Command& Command::Add(u16 idx) {
|
||||||
|
if (IndexCount <= IndexCountMax)
|
||||||
|
Gfx::PutIndex(FirstIndex + IndexCount++, FirstVertex + VertexCount + idx,
|
||||||
|
(PD::ptr)this);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
Command& Command::Add(u16 a, u16 b, u16 c) {
|
||||||
|
if (IndexCount + 3 <= IndexCountMax) {
|
||||||
|
size_t idx = FirstIndex + IndexCount;
|
||||||
|
Gfx::PutIndex(idx + 0, FirstVertex + VertexCount + a, (PD::ptr)this);
|
||||||
|
Gfx::PutIndex(idx + 1, FirstVertex + VertexCount + b, (PD::ptr)this);
|
||||||
|
Gfx::PutIndex(idx + 2, FirstVertex + VertexCount + c, (PD::ptr)this);
|
||||||
|
IndexCount += 3;
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Li
|
||||||
|
} // namespace PD
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
#include <pd/core/core.hpp>
|
|
||||||
#include <pd/lithium/pools.hpp>
|
|
||||||
|
|
||||||
namespace PD {
|
|
||||||
namespace Li {
|
|
||||||
PD::Pool<Vertex> pVtxPool;
|
|
||||||
PD::Pool<u16> pIdxPool;
|
|
||||||
PD::ptr pVertexAccessor = 0;
|
|
||||||
PD::ptr pIndexAccessor = 0;
|
|
||||||
|
|
||||||
PD_API size_t AllocateVertices(size_t count, PD::ptr accessor) {
|
|
||||||
pVertexAccessor = accessor;
|
|
||||||
int loc = pVtxPool.size();
|
|
||||||
pVtxPool.Allocate(count);
|
|
||||||
return loc;
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API size_t AllocateIndices(size_t count, PD::ptr accessor) {
|
|
||||||
pIndexAccessor = accessor;
|
|
||||||
int loc = pIdxPool.size();
|
|
||||||
pIdxPool.Allocate(count);
|
|
||||||
return loc;
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API bool ExpandVertices(size_t count, PD::ptr accessor) {
|
|
||||||
if (pVertexAccessor != accessor) return false;
|
|
||||||
pVtxPool.Allocate(count);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API bool ExpandIndices(size_t count, PD::ptr accessor) {
|
|
||||||
if (pIndexAccessor != accessor) return false;
|
|
||||||
pIdxPool.Allocate(count);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API void PutVertex(size_t loc, const Vertex& vtx, PD::ptr accessor) {
|
|
||||||
if (pVertexAccessor != accessor) return;
|
|
||||||
pVtxPool.Put(loc, vtx);
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API void PutIndex(size_t loc, u16 idx, PD::ptr accessor) {
|
|
||||||
if (pIndexAccessor != accessor) return;
|
|
||||||
pIdxPool.Put(loc, idx);
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API const Vertex& GetVertex(size_t loc) {
|
|
||||||
if (loc < pVtxPool.size()) return pVtxPool[loc];
|
|
||||||
static Vertex pErrVtx;
|
|
||||||
return pErrVtx;
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API const u16& GetIndex(size_t loc) {
|
|
||||||
if (loc < pIdxPool.size()) return pIdxPool[loc];
|
|
||||||
static u16 pErrIdx = 0;
|
|
||||||
return pErrIdx;
|
|
||||||
}
|
|
||||||
|
|
||||||
PD_API void ResetPools() {
|
|
||||||
pVtxPool.NoReset();
|
|
||||||
pIdxPool.NoReset();
|
|
||||||
}
|
|
||||||
} // namespace Li
|
|
||||||
} // namespace PD
|
|
||||||
@@ -199,8 +199,8 @@ int main(int argc, char** argv) {
|
|||||||
RightStick.pColor = "#00ffff";
|
RightStick.pColor = "#00ffff";
|
||||||
while (pOs->Mainloop()) {
|
while (pOs->Mainloop()) {
|
||||||
PD::Hid::Update();
|
PD::Hid::Update();
|
||||||
|
PD::Gfx::Reset(); // needs to be on top now
|
||||||
pOs->ClearViewPort();
|
pOs->ClearViewPort();
|
||||||
PD::Li::ResetPools(); // Move to other place (or refactor this)
|
|
||||||
app.Update(pOs->GetViewport(), pList);
|
app.Update(pOs->GetViewport(), pList);
|
||||||
pList.SetFontscale(0.7);
|
pList.SetFontscale(0.7);
|
||||||
if (PD::Hid::IsEvent(PD::Hid::Event::Down, PD::Hid::Gamepad::CPLeft |
|
if (PD::Hid::IsEvent(PD::Hid::Event::Down, PD::Hid::Gamepad::CPLeft |
|
||||||
@@ -263,7 +263,6 @@ int main(int argc, char** argv) {
|
|||||||
pList.PathAdd(PD::fvec2(1000, 360));
|
pList.PathAdd(PD::fvec2(1000, 360));
|
||||||
|
|
||||||
pList.PathStroke("#ff00ff", 10, LiDrawFlags_AA);
|
pList.PathStroke("#ff00ff", 10, LiDrawFlags_AA);
|
||||||
PD::Gfx::Reset();
|
|
||||||
PD::Gfx::Draw(pList);
|
PD::Gfx::Draw(pList);
|
||||||
pList.Clear();
|
pList.Clear();
|
||||||
pOs->SwapBuffers();
|
pOs->SwapBuffers();
|
||||||
|
|||||||
Reference in New Issue
Block a user