Files
palladium/include/pd/lithium/command.hpp
T

75 lines
1.8 KiB
C++
Raw Normal View History

2025-04-24 16:39:24 +02:00
#pragma once
2026-03-16 17:33:46 +01:00
#include <cstddef>
2026-03-16 06:37:51 +01:00
#include <pd/core/pool.hpp>
2026-03-16 17:33:46 +01:00
#include <pd/lithium/pools.hpp>
2025-04-24 16:39:24 +02:00
#include <pd/lithium/vertex.hpp>
namespace PD {
2025-06-22 21:05:09 +02:00
namespace Li {
class Command {
2025-04-24 16:39:24 +02:00
public:
2026-03-16 17:33:46 +01:00
Command() { Reset(); }
2026-03-16 06:37:51 +01:00
~Command() {}
2025-04-24 16:39:24 +02:00
2026-03-16 17:33:46 +01:00
void Reserve(size_t vtx, size_t idx) {
if (!FirstVertex) {
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 {
ExpandVertices(idx, (PD::ptr)this);
IndexCountMax += idx;
}
2026-03-16 17:33:46 +01:00
}
void Reset() {
Layer = 0;
Tex = 0;
FirstIndex = 0;
FirstVertex = 0;
2026-03-16 17:33:46 +01:00
IndexCount = 0;
VertexCount = 0;
VertexCountMax = 0;
IndexCountMax = 0;
2026-03-16 17:33:46 +01:00
}
Command& Add(const Vertex& vtx) {
if (VertexCount <= VertexCountMax)
PutVertex(FirstVertex + VertexCount++, vtx, (PD::ptr)this);
2026-03-16 17:33:46 +01:00
return *this;
}
Command& Add(u16 idx) {
if (IndexCount <= IndexCountMax)
PutIndex(FirstIndex + IndexCount++, VertexCount + idx, (PD::ptr)this);
2026-03-16 17:33:46 +01:00
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;
}
2026-03-16 17:33:46 +01:00
return *this;
}
2026-01-16 12:13:48 +01:00
int Layer = 0;
2026-03-16 06:37:51 +01:00
ptr Tex = 0;
size_t FirstVertex = 0;
size_t FirstIndex = 0;
2026-03-16 17:33:46 +01:00
size_t VertexCount = 0;
size_t IndexCount = 0;
// Todo: implement
size_t VertexCountMax = 0;
size_t IndexCountMax = 0;
2026-01-16 12:13:48 +01:00
};
2025-06-22 21:05:09 +02:00
} // namespace Li
2025-02-22 00:23:48 +01:00
} // namespace PD