2025-07-10 13:29:03 +03:30
|
|
|
#include <camera/camera.hpp>
|
|
|
|
#include <renderer/buffers.hpp>
|
2025-07-11 01:04:37 +03:30
|
|
|
#include <renderer/programs/texture.hpp>
|
2025-07-10 13:29:03 +03:30
|
|
|
#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
|
|
|
|
|
|
|
TextureRendererProgram::TextureRendererProgram(
|
2025-07-07 15:13:05 +03:30
|
|
|
unsigned int max_vertices,
|
2025-07-10 13:29:03 +03:30
|
|
|
const Ref<SharedContext> &shared_context,
|
|
|
|
Ref<Shader> shader
|
2025-07-05 13:28:41 +03:30
|
|
|
)
|
2025-07-10 13:29:03 +03:30
|
|
|
: m_shader(std::move(shader))
|
2025-07-05 14:23:01 +03:30
|
|
|
, 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
|
|
|
{
|
|
|
|
// #todo: don't use relative path
|
2025-07-10 13:29:03 +03:30
|
|
|
// AssetManager::load_shader(
|
|
|
|
// "LT_ENGINE_RESOURCES_TEXTURE_SHADER",
|
|
|
|
// "data/assets/shaders/texture/vs.asset",
|
|
|
|
// "data/assets/shaders/texture/ps.asset"
|
|
|
|
// );
|
|
|
|
//
|
|
|
|
// AssetManager::load_shader(
|
|
|
|
// "LT_ENGINE_RESOURCES_TINTED_TEXTURE_SHADER",
|
|
|
|
// "data/assets/shaders/tinted_texture/vs.asset",
|
|
|
|
// "data/assets/shaders/tinted_texture/ps.asset"
|
|
|
|
// );
|
|
|
|
//
|
|
|
|
// AssetManager::load_shader(
|
|
|
|
// "LT_ENGINE_RESOURCES_QUAD_SHADER",
|
|
|
|
// "data/assets/shaders/quads/vs.asset",
|
|
|
|
// "data/assets/shaders/quads/ps.asset"
|
|
|
|
// );
|
|
|
|
//
|
|
|
|
// m_shader = AssetManager::get_shader("LT_ENGINE_RESOURCES_TEXTURE_SHADER");
|
|
|
|
// m_shader = AssetManager::get_shader("LT_ENGINE_RESOURCES_TINTED_TEXTURE_SHADER");
|
|
|
|
// m_shader = AssetManager::get_shader("LT_ENGINE_RESOURCES_QUAD_SHADER");
|
|
|
|
|
2025-07-05 13:28:41 +03:30
|
|
|
|
2025-07-05 14:23:01 +03:30
|
|
|
m_vertex_buffer = Ref<VertexBuffer>(
|
2025-07-07 15:13:05 +03:30
|
|
|
VertexBuffer::create(nullptr, sizeof(TextureVertexData), max_vertices, shared_context)
|
2025-07-05 13:28:41 +03:30
|
|
|
);
|
2025-07-05 14:23:01 +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
|
|
|
);
|
2025-07-05 15:36:53 +03:30
|
|
|
m_vertex_layout = Ref<VertexLayout>(VertexLayout::create(
|
2025-07-05 14:23:01 +03:30
|
|
|
m_vertex_buffer,
|
|
|
|
m_shader,
|
2025-07-05 13:28:41 +03:30
|
|
|
{ { "POSITION", 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 TextureRendererProgram::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;
|
|
|
|
}
|
|
|
|
|
2025-07-05 14:23:01 +03:30
|
|
|
m_quad_count++;
|
2025-07-05 13:28:41 +03:30
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2025-07-05 15:36:53 +03:30
|
|
|
void TextureRendererProgram::map()
|
2025-07-05 13:28:41 +03:30
|
|
|
{
|
2025-07-07 15:13:05 +03:30
|
|
|
m_map = std::span<TextureVertexData> {
|
|
|
|
static_cast<TextureVertexData *>(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
|
|
|
}
|
|
|
|
|
2025-07-05 15:36:53 +03:30
|
|
|
void TextureRendererProgram::un_map()
|
2025-07-05 13:28:41 +03:30
|
|
|
{
|
2025-07-05 15:36:53 +03:30
|
|
|
m_vertex_buffer->un_map();
|
2025-07-05 13:28:41 +03:30
|
|
|
}
|
|
|
|
|
2025-07-05 15:36:53 +03:30
|
|
|
void TextureRendererProgram::bind()
|
2025-07-05 13:28:41 +03:30
|
|
|
{
|
2025-07-05 15:36:53 +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
|