77 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <math/vec2.hpp>
 | |
| #include <math/vec4.hpp>
 | |
| #include <renderer/programs/renderer_program.hpp>
 | |
| #include <span>
 | |
| 
 | |
| namespace lt {
 | |
| 
 | |
| class Shader;
 | |
| class VertexBuffer;
 | |
| class IndexBuffer;
 | |
| class VertexLayout;
 | |
| class OrthographicCamera;
 | |
| class SharedContext;
 | |
| 
 | |
| class TintedTextureRendererProgram: RendererProgram
 | |
| {
 | |
| public:
 | |
| 	~TintedTextureRendererProgram() override = default;
 | |
| 	struct TintedTextureVertexData
 | |
| 	{
 | |
| 		math::vec4 position;
 | |
| 
 | |
| 		math::vec4 tint;
 | |
| 
 | |
| 		math::vec2 texcoord;
 | |
| 	};
 | |
| 
 | |
| 	TintedTextureRendererProgram(
 | |
| 	    unsigned int max_vertices,
 | |
| 	    const Ref<SharedContext> &shared_context,
 | |
| 	    Ref<Shader> shader
 | |
| 	);
 | |
| 
 | |
| 	auto advance() -> bool;
 | |
| 
 | |
| 	void map() override;
 | |
| 
 | |
| 	void un_map() override;
 | |
| 
 | |
| 	void bind() override;
 | |
| 
 | |
| 	auto get_map_current() -> TintedTextureVertexData *
 | |
| 	{
 | |
| 		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(TintedTextureVertexData);
 | |
| 	}
 | |
| 
 | |
| private:
 | |
| 	Ref<Shader> m_shader;
 | |
| 
 | |
| 	Ref<VertexBuffer> m_vertex_buffer;
 | |
| 
 | |
| 	Ref<IndexBuffer> m_index_buffer;
 | |
| 
 | |
| 	Ref<VertexLayout> m_vertex_layout;
 | |
| 
 | |
| 	std::span<TintedTextureVertexData> m_map;
 | |
| 
 | |
| 	size_t m_idx {};
 | |
| 
 | |
| 	unsigned int m_quad_count { 0u };
 | |
| 
 | |
| 	unsigned int m_max_vertices;
 | |
| };
 | |
| 
 | |
| } // namespace lt
 |