73 lines
2.0 KiB
C++
73 lines
2.0 KiB
C++
// Copyright (c) 2023 Dominic Masters
|
|
//
|
|
// This software is released under the MIT License.
|
|
// https://opensource.org/licenses/MIT
|
|
|
|
#pragma once
|
|
#include "scene/SceneItem.hpp"
|
|
#include "component/display/IRenderableComponent.hpp"
|
|
#include "display/shader/UIShader.hpp"
|
|
|
|
namespace Dawn {
|
|
class UIElement;
|
|
|
|
class UICanvas :
|
|
public SceneComponent,
|
|
public IRenderableComponent
|
|
{
|
|
private:
|
|
std::shared_ptr<Mesh> mesh;
|
|
UIShaderData data;
|
|
std::vector<std::shared_ptr<UIElement>> elements;
|
|
|
|
size_t quadCount = 0;
|
|
shadertexturebinding_t nextBinding = 0;
|
|
std::unordered_map<
|
|
shadertexturebinding_t, std::shared_ptr<Texture>
|
|
> textures;
|
|
std::map<
|
|
std::shared_ptr<Texture>, shadertexturebinding_t
|
|
> textureBindings;
|
|
|
|
std::vector<std::shared_ptr<IRenderPass>> passes;
|
|
|
|
protected:
|
|
virtual void onInit() override;
|
|
virtual void onDispose() override;
|
|
|
|
/**
|
|
* Flushes all pending quads to the render pass. This doesn't actually
|
|
* render anything, it just flushes the data buffer to a new pass.
|
|
*/
|
|
void flushPass();
|
|
|
|
public:
|
|
std::vector<std::shared_ptr<IRenderPass>> getPasses(
|
|
struct RenderPassContext &ctx
|
|
) override;
|
|
|
|
/**
|
|
* Adds a quad to the canvas and performs a flush if necessary.
|
|
*
|
|
* @param quad The quad to add.
|
|
* @param uvs The UVs to use for the quad.
|
|
* @param color The color to use for the quad.
|
|
* @param style Style that the quad should be rendered in.
|
|
* @param texture The texture to use for the quad, can be null.
|
|
*/
|
|
void addQuad(
|
|
const glm::vec4 quad,
|
|
const glm::vec4 uvs,
|
|
const struct Color color,
|
|
const enum UIShaderQuadStyle style,
|
|
const std::shared_ptr<Texture> texture = nullptr
|
|
);
|
|
|
|
/**
|
|
* Adds a component to the canvas.
|
|
*
|
|
* @param component The component to add.
|
|
*/
|
|
void addElement(const std::shared_ptr<UIElement> component);
|
|
};
|
|
} |