Initial engine repository

This commit is contained in:
2026-06-08 19:58:35 +08:00
commit 7a925c3736
137 changed files with 162421 additions and 0 deletions
@@ -0,0 +1,68 @@
#pragma once
#include <frostbite2D/graphics/types.h>
#include <frostbite2D/graphics/texture.h>
#include <frostbite2D/graphics/shader.h>
#include <frostbite2D/types/type_alias.h>
namespace frostbite2D {
struct BatchKey {
uint32_t shaderID;
uint32_t textureID;
uint32_t blendMode;
bool operator<(const BatchKey& other) const {
if (shaderID != other.shaderID) return shaderID < other.shaderID;
if (textureID != other.textureID) return textureID < other.textureID;
return blendMode < other.blendMode;
}
};
class Batch {
public:
static constexpr int MAX_QUADS = 2048;
static constexpr int MAX_VERTICES = MAX_QUADS * 4;
static constexpr int MAX_INDICES = MAX_QUADS * 6;
Batch();
~Batch();
bool init();
void shutdown();
void begin();
void end();
void submitQuad(const Quad& quad, const Transform2D& transform,
Ptr<Texture> texture, Shader* shader,
BlendMode blendMode = BlendMode::Normal);
void flush();
void flushIfNeeded(const BatchKey& newKey, Shader* shader, Ptr<Texture> texture);
uint32 drawCallCount() const { return drawCallCount_; }
private:
void setupMesh();
void flushCurrentBatch();
struct BatchData {
std::vector<Vertex> vertices;
std::vector<uint16> indices;
BatchKey key;
Shader* shader = nullptr;
Ptr<Texture> texture;
};
uint32_t vao_ = 0;
uint32_t vbo_ = 0;
uint32_t ibo_ = 0;
BatchData currentBatch_;
std::vector<BatchData> batches_;
bool begun_ = false;
uint32 drawCallCount_ = 0;
};
}