Example of Rendering UI done.

This commit is contained in:
2023-12-12 13:40:50 -06:00
parent 5798698ae8
commit e5a151a1f6
15 changed files with 218 additions and 118 deletions

View File

@ -12,52 +12,66 @@
using namespace Dawn;
void UICanvas::onInit() {
mesh = std::make_shared<Mesh>();
mesh->createBuffers(
QUAD_VERTICE_COUNT * UI_SHADER_QUAD_COUNT,
QUAD_INDICE_COUNT * UI_SHADER_QUAD_COUNT
);
for(int32_t i = 0; i < UI_SHADER_QUAD_COUNT; i++) {
QuadMesh::bufferWithIndex(
mesh,
glm::vec4(0, 0, 1, 1),
glm::vec4(0, 0, 1, 1),
i * QUAD_VERTICE_COUNT,
i * QUAD_INDICE_COUNT,
i * QUAD_VERTICE_COUNT
);
}
}
void UICanvas::onDispose() {
mesh = nullptr;
}
std::vector<std::shared_ptr<IRenderPass>> UICanvas::getPasses(
struct RenderPassContext &ctx
) {
std::vector<std::shared_ptr<IRenderPass>> passes;
auto selfTransform = this->getItem()->getWorldTransform();
auto mesh = std::make_shared<Mesh>();
mesh->createBuffers(QUAD_VERTICE_COUNT, QUAD_INDICE_COUNT);
QuadMesh::buffer(mesh, glm::vec4(0, 0, 32, 32), glm::vec4(0, 0, 1, 1), 0, 0);
std::unordered_map<shadertexturebinding_t, std::shared_ptr<Texture>> textures;
UIShaderData data = {
.projection = ctx.camera->getProjection(),
.view = ctx.camera->getItem()->getWorldTransform(),
.model = selfTransform
.model = this->getItem()->getWorldTransform()
};
data.test.first = COLOR_RED;
data.test.random = glm::vec3(0, 1, 0);
data.test.second = COLOR_BLUE;
auto pass = createRenderPass<UIShader, UIShaderData>(
std::ref(*this),
data,
std::unordered_map<shadertexturebinding_t, std::shared_ptr<Texture>>(),
mesh,
MeshDrawMode::TRIANGLES,
0, -1
);
passes.push_back(pass);
size_t quadCount = 0;
auto itComponents = components.begin();
while(itComponents != components.end()) {
auto component = *itComponents;
// Get this components' quads.
auto quads = component->getQuads(selfTransform);
auto quads = component->getQuads(glm::mat4(1.0));
for(auto quad : quads) {
data.quads[quadCount++] = quad;
assertTrue(quadCount <= UI_SHADER_QUAD_COUNT, "Too many UI quads!");
}
++itComponents;
}
// No render passes if no quads.
if(quadCount == 0) return passes;
auto pass = createRenderPass<UIShader, UIShaderData>(
std::ref(*this),
data,
textures,
mesh,
MeshDrawMode::TRIANGLES,
0, quadCount * QUAD_INDICE_COUNT
);
passes.push_back(pass);
return passes;
}

View File

@ -14,6 +14,8 @@ namespace Dawn {
public IRenderableComponent
{
protected:
std::shared_ptr<Mesh> mesh;
virtual void onInit() override;
virtual void onDispose() override;