light/modules/renderer/private/programs/tinted_texture.cpp

74 lines
1.7 KiB
C++
Raw Normal View History

#include <camera/camera.hpp>
#include <renderer/buffers.hpp>
2025-07-11 01:04:37 +03:30
#include <renderer/programs/tinted_texture.hpp>
#include <renderer/shader.hpp>
#include <renderer/vertex_layout.hpp>
2025-07-05 13:28:41 +03:30
2025-07-11 00:05:48 +03:30
namespace lt {
2025-07-05 13:28:41 +03:30
TintedTextureRendererProgram::TintedTextureRendererProgram(
2025-07-07 15:13:05 +03:30
unsigned int max_vertices,
const Ref<SharedContext> &shared_context,
Ref<Shader> shader
2025-07-05 13:28:41 +03:30
)
: m_shader(std::move(shader))
, m_index_buffer(nullptr)
, m_vertex_layout(nullptr)
2025-07-07 15:13:05 +03:30
, m_max_vertices(max_vertices)
2025-07-05 13:28:41 +03:30
{
m_vertex_buffer = Ref<VertexBuffer>(
2025-07-07 15:13:05 +03:30
VertexBuffer::create(nullptr, sizeof(TintedTextureVertexData), max_vertices, shared_context)
2025-07-05 13:28:41 +03:30
);
m_index_buffer = Ref<IndexBuffer>(
2025-07-07 15:13:05 +03:30
IndexBuffer::create(nullptr, (max_vertices / 4) * 6, shared_context)
2025-07-05 13:28:41 +03:30
);
m_vertex_layout = Ref<VertexLayout>(VertexLayout::create(
m_vertex_buffer,
m_shader,
2025-07-05 13:28:41 +03:30
{ { "POSITION", VertexElementType::Float4 },
{ "TINT", VertexElementType::Float4 },
{ "TEXCOORD", VertexElementType::Float2 } },
2025-07-07 15:13:05 +03:30
shared_context
2025-07-05 13:28:41 +03:30
));
}
2025-07-06 14:02:50 +03:30
auto TintedTextureRendererProgram::advance() -> bool
2025-07-05 13:28:41 +03:30
{
2025-07-07 15:13:05 +03:30
m_idx += 4;
if (m_idx >= m_map.size())
2025-07-05 13:28:41 +03:30
{
2025-07-06 16:30:38 +03:30
log_wrn("'VertexBuffer' map went beyond 'MaxVertices': {}", m_max_vertices);
2025-07-05 13:28:41 +03:30
return false;
}
m_quad_count++;
2025-07-05 13:28:41 +03:30
return true;
}
void TintedTextureRendererProgram::map()
2025-07-05 13:28:41 +03:30
{
2025-07-07 15:13:05 +03:30
m_map = std::span<TintedTextureVertexData> {
static_cast<TintedTextureVertexData *>(m_vertex_buffer->map()),
m_max_vertices,
};
2025-07-05 13:28:41 +03:30
2025-07-07 15:13:05 +03:30
m_quad_count = 0u;
m_idx = {};
2025-07-05 13:28:41 +03:30
}
void TintedTextureRendererProgram::un_map()
2025-07-05 13:28:41 +03:30
{
m_vertex_buffer->un_map();
2025-07-05 13:28:41 +03:30
}
void TintedTextureRendererProgram::bind()
2025-07-05 13:28:41 +03:30
{
m_shader->bind();
m_vertex_layout->bind();
m_vertex_buffer->bind();
m_index_buffer->bind();
2025-07-05 13:28:41 +03:30
}
2025-07-11 00:05:48 +03:30
} // namespace lt