53 lines
1.4 KiB
C++
53 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <array>
|
|
#include <cstdint>
|
|
#include <memory>
|
|
#include <mutex>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
namespace boundard {
|
|
|
|
// 渲染组件:描述 Actor 的几何形状、颜色和可选 PNG 纹理。
|
|
class Mesh {
|
|
public:
|
|
struct Vertex {
|
|
std::array<float, 2> position;
|
|
std::array<float, 4> color;
|
|
std::array<float, 2> uv;
|
|
};
|
|
|
|
std::vector<Vertex> vertices;
|
|
std::vector<uint32_t> indices;
|
|
std::string texture; // PNG 纹理路径;为空时使用白色纹理。
|
|
|
|
std::array<float, 4> color() const {
|
|
std::lock_guard<std::mutex> lock(*color_mutex_);
|
|
return color_;
|
|
}
|
|
|
|
void set_color(std::array<float, 4> color) {
|
|
std::lock_guard<std::mutex> lock(*color_mutex_);
|
|
color_ = color;
|
|
}
|
|
|
|
static Mesh quad() {
|
|
Mesh mesh;
|
|
mesh.vertices = {
|
|
{{-1.0F, -1.0F}, {1.0F, 1.0F, 1.0F, 1.0F}, {0.0F, 0.0F}},
|
|
{{1.0F, -1.0F}, {1.0F, 1.0F, 1.0F, 1.0F}, {1.0F, 0.0F}},
|
|
{{1.0F, 1.0F}, {1.0F, 1.0F, 1.0F, 1.0F}, {1.0F, 1.0F}},
|
|
{{-1.0F, 1.0F}, {1.0F, 1.0F, 1.0F, 1.0F}, {0.0F, 1.0F}},
|
|
};
|
|
mesh.indices = {0, 1, 2, 2, 3, 0};
|
|
return mesh;
|
|
}
|
|
|
|
private:
|
|
std::unique_ptr<std::mutex> color_mutex_ = std::make_unique<std::mutex>();
|
|
std::array<float, 4> color_{1.0F, 1.0F, 1.0F, 1.0F};
|
|
};
|
|
|
|
} // namespace boundard
|