Example of Rendering UI done.
This commit is contained in:
		@@ -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;
 | 
			
		||||
}
 | 
			
		||||
@@ -14,6 +14,8 @@ namespace Dawn {
 | 
			
		||||
    public IRenderableComponent
 | 
			
		||||
  {
 | 
			
		||||
    protected:
 | 
			
		||||
      std::shared_ptr<Mesh> mesh;
 | 
			
		||||
 | 
			
		||||
      virtual void onInit() override;
 | 
			
		||||
      virtual void onDispose() override;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user