#pragma once #include #include #include namespace lt { class Shader; class VertexBuffer; class IndexBuffer; class VertexLayout; class OrthographicCamera; class SharedContext; class TextureRendererProgram: RendererProgram { public: ~TextureRendererProgram() override = default; struct TextureVertexData { math::vec4 position; math::vec2 texcoord; }; TextureRendererProgram( unsigned int max_vertices, const Ref &shared_context, Ref shader ); auto advance() -> bool; void map() override; void un_map() override; void bind() override; auto get_map_current() -> TextureVertexData * { return &m_map[m_idx]; } [[nodiscard]] auto get_quad_count() const -> unsigned int { return m_quad_count; } [[nodiscard]] constexpr auto get_vertex_size() const -> unsigned int { return sizeof(TextureVertexData); } private: Ref m_shader; Ref m_vertex_buffer; Ref m_index_buffer; Ref m_vertex_layout; std::span m_map; size_t m_idx {}; unsigned int m_quad_count { 0u }; unsigned int m_max_vertices; }; } // namespace lt