light/modules/renderer/include/renderer/programs/tinted_texture.hpp

77 lines
1.3 KiB
C++
Raw Normal View History

2022-03-08 21:19:19 +03:30
#pragma once
#include <glm/glm.hpp>
2025-07-11 01:04:37 +03:30
#include <renderer/programs/renderer_program.hpp>
2025-07-12 19:24:11 +03:30
#include <span>
2022-03-08 21:19:19 +03:30
2025-07-11 00:05:48 +03:30
namespace lt {
2022-03-08 21:19:19 +03:30
class Shader;
class VertexBuffer;
class IndexBuffer;
class VertexLayout;
class OrthographicCamera;
class SharedContext;
class TintedTextureRendererProgram: RendererProgram
{
public:
2025-07-07 15:13:05 +03:30
virtual ~TintedTextureRendererProgram() = default;
2022-03-08 21:19:19 +03:30
struct TintedTextureVertexData
{
glm::vec4 position;
2025-07-06 14:02:50 +03:30
2022-03-08 21:19:19 +03:30
glm::vec4 tint;
2025-07-06 14:02:50 +03:30
2022-03-08 21:19:19 +03:30
glm::vec2 texcoord;
};
TintedTextureRendererProgram(
unsigned int maxVertices,
const Ref<SharedContext> &sharedContext,
Ref<Shader> shader
);
2022-03-08 21:19:19 +03:30
2025-07-06 14:02:50 +03:30
auto advance() -> bool;
2022-03-08 21:19:19 +03:30
void map() override;
2025-07-06 14:02:50 +03:30
void un_map() override;
2022-03-08 21:19:19 +03:30
void bind() override;
2022-03-08 21:19:19 +03:30
2025-07-06 14:02:50 +03:30
auto get_map_current() -> TintedTextureVertexData *
2025-07-05 13:28:41 +03:30
{
2025-07-07 15:13:05 +03:30
return &m_map[m_idx];
2025-07-05 13:28:41 +03:30
}
2022-03-08 21:19:19 +03:30
2025-07-06 16:52:50 +03:30
[[nodiscard]] auto get_quad_count() const -> unsigned int
2025-07-05 13:28:41 +03:30
{
return m_quad_count;
2025-07-05 13:28:41 +03:30
}
2022-03-08 21:19:19 +03:30
2025-07-06 16:52:50 +03:30
[[nodiscard]] constexpr auto get_vertex_size() const -> unsigned int
2025-07-05 13:28:41 +03:30
{
return sizeof(TintedTextureVertexData);
}
2025-07-05 16:07:51 +03:30
private:
Ref<Shader> m_shader;
Ref<VertexBuffer> m_vertex_buffer;
Ref<IndexBuffer> m_index_buffer;
Ref<VertexLayout> m_vertex_layout;
2025-07-07 15:13:05 +03:30
std::span<TintedTextureVertexData> m_map;
2025-07-05 16:07:51 +03:30
2025-07-07 15:13:05 +03:30
size_t m_idx {};
2025-07-05 16:07:51 +03:30
2025-07-07 15:13:05 +03:30
unsigned int m_quad_count { 0u };
2025-07-05 16:07:51 +03:30
unsigned int m_max_vertices;
2022-03-08 21:19:19 +03:30
};
2025-07-11 00:05:48 +03:30
} // namespace lt