tessalation started
This commit is contained in:
@@ -30,7 +30,9 @@ void HydraDeferredPipeline::Initialise()
|
||||
_CreateOutputActor();
|
||||
_CreateFrameBuffer();
|
||||
_CreateColourRenderStage();
|
||||
_CreateLandscapeRenderStage();
|
||||
_CreateOutputRenderStage();
|
||||
|
||||
//_CreateTextureDebugOutputStage();
|
||||
}
|
||||
|
||||
@@ -120,8 +122,8 @@ void HydraDeferredPipeline::_CreateFrameBuffer()
|
||||
HydraEngine* engine = GetEngine();
|
||||
HydraTextureBufferManager* tex_buffer_manager = engine->TextureBufferManager();
|
||||
HydraRenderSettings render_settings = engine->RenderSettings();
|
||||
glGenFramebuffers(1, &m_frame_buffer_id);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, m_frame_buffer_id);
|
||||
glGenFramebuffers(1, &m_frame_buffer_id);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, m_frame_buffer_id);
|
||||
|
||||
HydraOutputActor* actor = static_cast<HydraOutputActor*>(GetEngine()->ActorManager()->GetActor(m_output_actor_id));
|
||||
|
||||
@@ -207,7 +209,7 @@ void HydraDeferredPipeline::_CreateColourRenderStage()
|
||||
std::vector<uint32_t> textures;
|
||||
|
||||
render_stage->Initialise(shader_path + "deferred_shader.vert",
|
||||
shader_path + "deferred_shader.frag", "",
|
||||
shader_path + "deferred_shader.frag", "", "", "",
|
||||
shader_binding,
|
||||
m_frame_buffer_id,
|
||||
textures,
|
||||
@@ -218,6 +220,54 @@ void HydraDeferredPipeline::_CreateColourRenderStage()
|
||||
m_render_stages.push_back(render_stage);
|
||||
}
|
||||
|
||||
void HydraDeferredPipeline::_CreateLandscapeRenderStage()
|
||||
{
|
||||
HydraRenderStage* render_stage = new HydraRenderStage();
|
||||
std::string shader_path = std::string(shader_base);
|
||||
HydraBufferManager* buffer_manager = GetEngine()->BufferManager();
|
||||
|
||||
HydraID pos_buffer_id = buffer_manager->FindBuffer("PositionsBuffer");
|
||||
HydraID mat_buffer_id = buffer_manager->FindBuffer("MaterialBuffer");
|
||||
HydraID tex_buffer_id = buffer_manager->FindBuffer("TextureBuffer");
|
||||
HydraID per_frame_buffer_id = buffer_manager->FindBuffer("DeferredPerFrameUBO");
|
||||
|
||||
HydraShaderBinding shader_binding = {};
|
||||
|
||||
shader_binding.block_name.push_back("positions_buffer");
|
||||
shader_binding.binding_point.push_back(1);
|
||||
shader_binding.buffer_id.push_back(pos_buffer_id);
|
||||
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
|
||||
|
||||
shader_binding.block_name.push_back("material_buffer");
|
||||
shader_binding.binding_point.push_back(2);
|
||||
shader_binding.buffer_id.push_back(mat_buffer_id);
|
||||
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
|
||||
|
||||
shader_binding.block_name.push_back("texture_buffer");
|
||||
shader_binding.binding_point.push_back(3);
|
||||
shader_binding.buffer_id.push_back(tex_buffer_id);
|
||||
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
|
||||
|
||||
shader_binding.block_name.push_back("uniform_per_frame");
|
||||
shader_binding.binding_point.push_back(0);
|
||||
shader_binding.buffer_id.push_back(per_frame_buffer_id);
|
||||
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER);
|
||||
std::vector<uint32_t> textures;
|
||||
|
||||
render_stage->Initialise(shader_path + "landscape_shader.vert",
|
||||
shader_path + "landscape_shader.frag",
|
||||
"",
|
||||
shader_path + "landscape_shader.tesc",
|
||||
shader_path + "landscape_shader.tese",
|
||||
shader_binding,
|
||||
m_frame_buffer_id,
|
||||
textures,
|
||||
true,
|
||||
GL_BACK,
|
||||
true,
|
||||
HYDRA_RENDERABLE_TYPE::HYDRA_LANDSCAPE);
|
||||
m_render_stages.push_back(render_stage);
|
||||
}
|
||||
|
||||
void HydraDeferredPipeline::_CreateOutputRenderStage()
|
||||
{
|
||||
@@ -283,7 +333,7 @@ void HydraDeferredPipeline::_CreateOutputRenderStage()
|
||||
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
|
||||
|
||||
render_stage->Initialise(shader_path + "deferred_output_shader.vert",
|
||||
shader_path + "deferred_output_shader.frag", "",
|
||||
shader_path + "deferred_output_shader.frag", "", "", "",
|
||||
shader_binding,
|
||||
0,
|
||||
textures,
|
||||
@@ -328,7 +378,7 @@ void HydraDeferredPipeline::_CreateTextureDebugOutputStage()
|
||||
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER);
|
||||
|
||||
render_stage->Initialise(shader_path + "texture_debug_shader.vert",
|
||||
shader_path + "texture_debug_shader.frag", "",
|
||||
shader_path + "texture_debug_shader.frag", "", "", "",
|
||||
shader_binding,
|
||||
0,
|
||||
textures,
|
||||
|
||||
@@ -32,7 +32,7 @@ class HydraDeferredPipeline : public HydraPipeline
|
||||
|
||||
void _UpdateUBO();
|
||||
void _CreateFrameBuffer();
|
||||
|
||||
void _CreateLandscapeRenderStage();
|
||||
void _CreateColourRenderStage();
|
||||
void _CreateOutputRenderStage();
|
||||
void _CreateOutputActor();
|
||||
|
||||
@@ -36,7 +36,7 @@ void HydraForwardPipeline::Initialise()
|
||||
std::vector<uint32_t> textures;
|
||||
std::vector<uint32_t> rb_attachments;
|
||||
|
||||
render_stage->Initialise(shader_path + "forward_shader.vert", shader_path + "forward_shader.frag", "", shader_binding, 0, textures, true, GL_BACK, true, HYDRA_RENDERABLE_TYPE::HYDRA_COLOUR);
|
||||
render_stage->Initialise(shader_path + "forward_shader.vert", shader_path + "forward_shader.frag", "", "", "", shader_binding, 0, textures, true, GL_BACK, true, HYDRA_RENDERABLE_TYPE::HYDRA_COLOUR);
|
||||
m_render_stages.push_back(render_stage);
|
||||
|
||||
m_per_frame_ubo = buffer_manager->CreateGPUBuffer("PerFrameUBO",
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
void HydraRenderStage::Initialise(std::string vertex_shader_file,
|
||||
std::string fragment_shader_file,
|
||||
std::string geometry_shader_file,
|
||||
std::string tess_control_shader_file,
|
||||
std::string tess_evaluation_shader_file,
|
||||
HydraShaderBinding shader_binding,
|
||||
uint32_t framebuffer_id,
|
||||
std::vector<uint32_t> textures,
|
||||
@@ -46,6 +48,16 @@ void HydraRenderStage::Initialise(std::string vertex_shader_file,
|
||||
m_geometry_shader = _LoadShader(geometry_shader_file, GL_GEOMETRY_SHADER);
|
||||
glAttachShader(m_program, m_geometry_shader);
|
||||
}
|
||||
if (tess_control_shader_file.length() > 0)
|
||||
{
|
||||
m_tess_control_shader = _LoadShader(tess_control_shader_file, GL_TESS_CONTROL_SHADER);
|
||||
glAttachShader(m_program, m_tess_control_shader);
|
||||
}
|
||||
if (tess_evaluation_shader_file.length() > 0)
|
||||
{
|
||||
m_tess_evaluation_shader = _LoadShader(tess_evaluation_shader_file, GL_TESS_EVALUATION_SHADER);
|
||||
glAttachShader(m_program, m_tess_evaluation_shader);
|
||||
}
|
||||
glLinkProgram(m_program);
|
||||
|
||||
int success;
|
||||
@@ -123,12 +135,12 @@ void HydraRenderStage::Render(std::set<HydraID> &entities, uint32_t framebuffer_
|
||||
HydraVertexBuffer &vertex_buffer = vert_buffer_mananger->GetVertexBuffer(mesh_comp.vertex_buffer_id);
|
||||
|
||||
glBindVertexArray(vertex_buffer.vao);
|
||||
glDrawElements(GL_TRIANGLES, vertex_buffer.triangle_count, GL_UNSIGNED_INT, (void *)0);
|
||||
glDrawElements(GL_TRIANGLES, vertex_buffer.triangle_count, GL_UNSIGNED_INT, (void *)0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
glBindVertexArray(0);
|
||||
glBindVertexArray(0);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
}
|
||||
|
||||
@@ -180,19 +192,18 @@ void HydraRenderStage::_BindBuffers()
|
||||
for (uint32_t bind_idx = 0; bind_idx < m_shader_binding.block_name.size(); bind_idx++)
|
||||
{
|
||||
HydraBuffer buffer = buffer_manager->GetBuffer(m_shader_binding.buffer_id[bind_idx]);
|
||||
|
||||
switch (m_shader_binding.buffer_type[bind_idx])
|
||||
{
|
||||
case HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER:
|
||||
{
|
||||
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, m_shader_binding.binding_point[bind_idx], buffer.gpu_buffer_id);
|
||||
break;
|
||||
}
|
||||
case HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER:
|
||||
{
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, m_shader_binding.binding_point[bind_idx], buffer.gpu_buffer_id);
|
||||
break;
|
||||
}
|
||||
case HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER:
|
||||
{
|
||||
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, m_shader_binding.binding_point[bind_idx], buffer.gpu_buffer_id);
|
||||
break;
|
||||
}
|
||||
case HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER:
|
||||
{
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, m_shader_binding.binding_point[bind_idx], buffer.gpu_buffer_id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ class HydraRenderStage : public HydraObject
|
||||
void Initialise(std::string vertex_shader_file,
|
||||
std::string fragment_shader_file,
|
||||
std::string geometry_shader_file,
|
||||
std::string tess_control_shader_file,
|
||||
std::string tess_evaluation_shader_file,
|
||||
HydraShaderBinding shader_binding,
|
||||
uint32_t framebuffer_id,
|
||||
std::vector<uint32_t> textures,
|
||||
@@ -32,6 +34,8 @@ class HydraRenderStage : public HydraObject
|
||||
uint32_t m_vertex_shader = GL_INVALID_VALUE;
|
||||
uint32_t m_fragment_shader = GL_INVALID_VALUE;
|
||||
uint32_t m_geometry_shader = GL_INVALID_VALUE;
|
||||
uint32_t m_tess_control_shader = GL_INVALID_VALUE;
|
||||
uint32_t m_tess_evaluation_shader = GL_INVALID_VALUE;
|
||||
uint32_t m_program = GL_INVALID_VALUE;
|
||||
uint32_t m_renderable_type;
|
||||
uint32_t m_framebuffer_id = 0;
|
||||
|
||||
@@ -158,6 +158,7 @@ void HydraShadowPipeline::_CreatePointRenderStage()
|
||||
render_stage->Initialise(shader_path + "shadow_point_shader.vert",
|
||||
shader_path + "shadow_point_shader.frag",
|
||||
shader_path + "shadow_point_shader.geom",
|
||||
"", "",
|
||||
shader_binding,
|
||||
0,
|
||||
textures,
|
||||
@@ -212,6 +213,7 @@ void HydraShadowPipeline::_CreateDirectionalRenderStage()
|
||||
render_stage->Initialise(shader_path + "shadow_cascade_shader.vert",
|
||||
shader_path + "shadow_cascade_shader.frag",
|
||||
shader_path + "shadow_cascade_shader.geom",
|
||||
"","",
|
||||
shader_binding,
|
||||
0,
|
||||
textures,
|
||||
@@ -265,7 +267,7 @@ void HydraShadowPipeline::_CreateSpotRenderStage()
|
||||
|
||||
render_stage->Initialise(shader_path + "shadow_spot_shader.vert",
|
||||
shader_path + "shadow_spot_shader.frag",
|
||||
"",
|
||||
"", "", "",
|
||||
shader_binding,
|
||||
0,
|
||||
textures,
|
||||
|
||||
Reference in New Issue
Block a user