Shadow buffer

This commit is contained in:
Confideo-IOM
2026-07-28 19:02:45 +01:00
parent d48097c645
commit 299ad1d9c7
46 changed files with 693 additions and 603 deletions
@@ -8,8 +8,6 @@ const uint DIRECTIONAL_LIGHT = 1;
const uint POINT_LIGHT = 2; const uint POINT_LIGHT = 2;
const uint SPOT_LIGHT = 3; const uint SPOT_LIGHT = 3;
void main() void main()
{ {
@@ -8,15 +8,13 @@ struct ShadowMapSet
uint entity_id; uint entity_id;
uint cascade_count; uint cascade_count;
uint shadow_texture_id; uint shadow_texture_id;
uint padding0; uint frame_buffer_id;
float near_plane[8]; float near_plane[8];
float far_plane[8]; float far_plane[8];
mat4 light_space_proj[6]; mat4 light_space_proj[6];
mat4 light_space_view[6]; mat4 light_space_view[6];
}; };
//Push constants updated for each light //Push constants updated for each light
layout(binding = 0) uniform shadow_per_frame layout(binding = 0) uniform shadow_per_frame
{ {
@@ -24,8 +22,7 @@ layout(binding = 0) uniform shadow_per_frame
uint shadow_idxs; uint shadow_idxs;
}; };
layout(std430, binding = 5) readonly buffer ShadowMapSets
layout(std430, binding = 0) readonly buffer ShadowMapSets
{ {
ShadowMapSet shadows[10]; ShadowMapSet shadows[10];
}; };
@@ -34,7 +31,6 @@ void main()
{ {
for (int i = 0; i < 3; ++i) for (int i = 0; i < 3; ++i)
{ {
gl_Position = shadows[shadow_idxs].light_space_proj[gl_InvocationID] * gl_Position = shadows[shadow_idxs].light_space_proj[gl_InvocationID] *
shadows[shadow_idxs].light_space_view[gl_InvocationID] * shadows[shadow_idxs].light_space_view[gl_InvocationID] *
gl_in[i].gl_Position; gl_in[i].gl_Position;
@@ -22,30 +22,6 @@ void HydraBufferManager::Shutdown()
} }
} }
// HydraID HydraBufferManager::CreateGPUBuffer(std::string buffer_name,
// uint32_t buffer_size_bytes,
// uint32_t binding,
// HYDRA_BUFFER_TYPE buffer_type)
// {
// HydraID buffer_id = _GetBufferID();
// HydraBuffer buffer = {};
// buffer.buffer_id = buffer_id;
// buffer.size_bytes = buffer_size_bytes;
// buffer.buffer_name = buffer_name;
// buffer.buffer_type = buffer_type;
// uint32_t gl_buffer_type = _DecodeBufferType(buffer_type);
// //Create the buffer
// glGenBuffers(1, &buffer.gpu_buffer_id);
// glBindBuffer(gl_buffer_type, buffer.gpu_buffer_id);
// //Allocate storage
// glBufferData(gl_buffer_type, buffer.size_bytes, NULL, GL_DYNAMIC_DRAW);
// glBindBufferBase(gl_buffer_type, binding, buffer.gpu_buffer_id);
// glBindBuffer(gl_buffer_type, 0);
// m_buffers[buffer_id] = buffer;
// return buffer_id;
// }
HydraID HydraBufferManager::CreateGPUBuffer(std::string buffer_name, HydraID HydraBufferManager::CreateGPUBuffer(std::string buffer_name,
uint32_t buffer_size_bytes, uint32_t buffer_size_bytes,
uint32_t binding, uint32_t binding,
@@ -107,6 +107,44 @@ HydraID HydraTextureBufferManager::_GetTextureID()
return id; return id;
} }
HydraID HydraTextureBufferManager::CreateTextureArray(std::string texture_name,
uint32_t width,
uint32_t height,
uint32_t internal_format,
uint32_t min_filter,
uint32_t mag_filter,
uint32_t levels
)
{
uint32_t gl_tex_id = 0;
glCreateTextures(GL_TEXTURE_2D_ARRAY, 1, &gl_tex_id);
glBindTexture(GL_TEXTURE_2D_ARRAY, gl_tex_id);
glTextureStorage3D(gl_tex_id, 1, internal_format, width, height, levels);
glTextureParameteri(gl_tex_id, GL_TEXTURE_MIN_FILTER, min_filter);
glTextureParameteri(gl_tex_id, GL_TEXTURE_MAG_FILTER, mag_filter);
glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
HydraTextureBuffer texture_buffer = {};
HydraID texture_id = _GetTextureID();
texture_buffer.texture_id = texture_id;
texture_buffer.format = 0;
texture_buffer.internal_format = internal_format;
texture_buffer.width = width;
texture_buffer.height = height;
texture_buffer.gl_tex_id = gl_tex_id;
texture_buffer.mag_filter = mag_filter;
texture_buffer.min_filter = min_filter;
m_textures[texture_id] = texture_buffer;
m_texture_lookup.insert(std::pair<std::string, HydraID>(texture_name, texture_id));
return texture_id;
}
HydraID HydraTextureBufferManager::CreateTexture(std::string texture_name, HydraID HydraTextureBufferManager::CreateTexture(std::string texture_name,
uint32_t width, uint32_t width,
uint32_t height, uint32_t height,
@@ -162,7 +200,7 @@ HydraID HydraTextureBufferManager::CreateTexture(std::string texture_name,
return texture_id; return texture_id;
} }
void HydraTextureBufferManager::BindTexture(HydraID texture_id) void HydraTextureBufferManager::BindTexture(HydraID texture_id, uint32_t target)
{ {
if (texture_id >= MAX_TEXTURES) if (texture_id >= MAX_TEXTURES)
@@ -170,7 +208,7 @@ void HydraTextureBufferManager::BindTexture(HydraID texture_id)
return; return;
} }
HydraTextureBuffer texture = m_textures[texture_id]; HydraTextureBuffer texture = m_textures[texture_id];
glBindTexture(GL_TEXTURE_2D, texture.gl_tex_id); glBindTexture(target, texture.gl_tex_id);
glTextureParameteri(texture.gl_tex_id, GL_TEXTURE_WRAP_S, GL_REPEAT); glTextureParameteri(texture.gl_tex_id, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTextureParameteri(texture.gl_tex_id, GL_TEXTURE_WRAP_T, GL_REPEAT); glTextureParameteri(texture.gl_tex_id, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTextureParameteri(texture.gl_tex_id, GL_TEXTURE_MIN_FILTER, texture.min_filter); glTextureParameteri(texture.gl_tex_id, GL_TEXTURE_MIN_FILTER, texture.min_filter);
@@ -18,10 +18,19 @@ class HydraTextureBufferManager : public HydraObject
public: public:
void Intialise(); void Intialise();
void Shutdown(); void Shutdown();
HydraID CreateTexture(std::string texture_name, uint32_t width, uint32_t height, uint32_t internal_format, HydraID CreateTexture(std::string texture_name,
uint32_t width, uint32_t height, uint32_t internal_format,
uint32_t min_filter, uint32_t mag_filter, uint32_t levels, uint32_t min_filter, uint32_t mag_filter, uint32_t levels,
uint32_t format = GL_RGBA, uint32_t data_type = GL_UNSIGNED_BYTE, uint32_t mip_levels = 0, void* data = nullptr); uint32_t format = GL_RGBA, uint32_t data_type = GL_UNSIGNED_BYTE, uint32_t mip_levels = 0, void* data = nullptr);
void BindTexture(HydraID texture_id);
HydraID CreateTextureArray(std::string texture_name,
uint32_t width,
uint32_t height,
uint32_t internal_format,
uint32_t min_filter,
uint32_t mag_filter,
uint32_t levels);
void BindTexture(HydraID texture_id, uint32_t target);
void UnbindTexture(HydraID texture_id); void UnbindTexture(HydraID texture_id);
void DeleteTexture(HydraID texture_id); void DeleteTexture(HydraID texture_id);
HydraID LoadTexture(std::string texture_filename); HydraID LoadTexture(std::string texture_filename);
@@ -8,7 +8,7 @@ struct HydraShadowSourceComponent
uint32_t entity_id; uint32_t entity_id;
uint32_t cascade_count; uint32_t cascade_count;
uint32_t shadow_texture_id; uint32_t shadow_texture_id;
uint32_t padding0; uint32_t frame_buffer_id;
float near_plane[8]; float near_plane[8];
float far_plane[8]; float far_plane[8];
glm::mat4 light_space_proj[6]; glm::mat4 light_space_proj[6];
@@ -14,17 +14,16 @@
#include "../../task/buffer/HydraUpdateWholeGPUBufferTask.hpp" #include "../../task/buffer/HydraUpdateWholeGPUBufferTask.hpp"
#include "../../task/buffer/HydraUpdatePartialGPUBufferTask.hpp" #include "../../task/buffer/HydraUpdatePartialGPUBufferTask.hpp"
#include "../../task/buffer/HydraCreateUnBoundTextureTask.hpp" #include "../../task/buffer/HydraCreateUnBoundTextureTask.hpp"
#include "../../task/renderer/HydraCreateShadowFrameBuffer.hpp"
#include "../../actor/HydraActorManager.h" #include "../../actor/HydraActorManager.h"
void HydraShadowSourceSystem::Initialise() void HydraShadowSourceSystem::Initialise()
{ {
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler(); HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
HydraID create_gpu_buffer_task_id = task_scheduler->CreateTask<HydraCreateGPUBufferTask>(HydraThreadAffinity::Render); HydraID create_gpu_buffer_task_id = task_scheduler->CreateTask<HydraCreateGPUBufferTask>(HydraThreadAffinity::Render);
HydraCreateGPUBufferTask *task = static_cast<HydraCreateGPUBufferTask *>(task_scheduler->GetTask(create_gpu_buffer_task_id)); HydraCreateGPUBufferTask *task = static_cast<HydraCreateGPUBufferTask *>(task_scheduler->GetTask(create_gpu_buffer_task_id));
task->Intialise("ShadowBuffer", 1, MAX_SHADOWS * sizeof(HydraShadowBuffer), &m_shadow_buffer_id, HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER); task->Intialise("ShadowBuffer", 1, MAX_SHADOWS * sizeof(HydraShadowSourceComponent), &m_shadow_buffer_id, HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
task_scheduler->WaitForTask(create_gpu_buffer_task_id); task_scheduler->WaitForTask(create_gpu_buffer_task_id);
} }
@@ -39,7 +38,6 @@ void HydraShadowSourceSystem::InitialiseComponent(HydraID entity_id)
_InitialiseDirectionalLight(entity_id); _InitialiseDirectionalLight(entity_id);
break; break;
} }
} }
void HydraShadowSourceSystem::UpdateSystem(float delta_t_seconds) void HydraShadowSourceSystem::UpdateSystem(float delta_t_seconds)
@@ -71,7 +69,6 @@ void HydraShadowSourceSystem::_UpdateDirectionalLight(HydraID entity_id)
HydraPositionComponent pos_comp = ecs->GetComponent<HydraPositionComponent>(entity_id); HydraPositionComponent pos_comp = ecs->GetComponent<HydraPositionComponent>(entity_id);
HydraShadowSourceComponent &shad_comp = ecs->GetComponent<HydraShadowSourceComponent>(entity_id); HydraShadowSourceComponent &shad_comp = ecs->GetComponent<HydraShadowSourceComponent>(entity_id);
float view_size = 5.0f; float view_size = 5.0f;
float view_near = -5.0f; float view_near = -5.0f;
float view_far = 5.0f; float view_far = 5.0f;
@@ -87,6 +84,7 @@ void HydraShadowSourceSystem::_UpdateDirectionalLight(HydraID entity_id)
light_dir = light_rot * light_dir; light_dir = light_rot * light_dir;
light_dir = glm::normalize(light_dir); light_dir = glm::normalize(light_dir);
glm::vec3 camera_pos = GetEngine()->Camera()->GetPosition(); glm::vec3 camera_pos = GetEngine()->Camera()->GetPosition();
for (uint32_t i = 0; i < 6; i++) for (uint32_t i = 0; i < 6; i++)
{ {
glm::vec3 light_pos = camera_pos; // - (light_dir * light_distance); glm::vec3 light_pos = camera_pos; // - (light_dir * light_distance);
@@ -95,7 +93,6 @@ void HydraShadowSourceSystem::_UpdateDirectionalLight(HydraID entity_id)
glm::mat4 light_orient = glm::eulerAngleXYZ(light_euler.x, light_euler.y, light_euler.z); glm::mat4 light_orient = glm::eulerAngleXYZ(light_euler.x, light_euler.y, light_euler.z);
glm::mat4 view = light_orient * light_trans; glm::mat4 view = light_orient * light_trans;
glm::mat4 proj = glm::orthoRH<float>(view_size, -view_size, -view_size, view_size, -15000, 15000); glm::mat4 proj = glm::orthoRH<float>(view_size, -view_size, -view_size, view_size, -15000, 15000);
// glm::mat4 proj = glm::orthoRH<float>(view_size, -view_size, -view_size, view_size, view_near, view_far);
shad_comp.far_plane[i] = view_far; shad_comp.far_plane[i] = view_far;
shad_comp.near_plane[i] = view_near; shad_comp.near_plane[i] = view_near;
@@ -119,10 +116,10 @@ void HydraShadowSourceSystem::_InitialiseDirectionalLight(HydraID entity_id)
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler(); HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
HydraID create_texture_task_id = task_scheduler->CreateTask<HydraCreateUnBoundTextureTask>(HydraThreadAffinity::Render); HydraID create_framebuffer_task_id = task_scheduler->CreateTask<HydraCreateShadowFrameBuffer>(HydraThreadAffinity::Render);
HydraCreateUnBoundTextureTask *task = static_cast<HydraCreateUnBoundTextureTask *>(task_scheduler->GetTask(create_texture_task_id)); HydraCreateShadowFrameBuffer *fb_task = static_cast<HydraCreateShadowFrameBuffer *>(task_scheduler->GetTask(create_framebuffer_task_id));
task->Initialise("shadow", SHADOW_MAP_SIZE, SHADOW_MAP_SIZE, GL_R32F, GL_R32F, GL_LINEAR, GL_LINEAR, 6, GL_BYTE, 0, nullptr, &shad_comp.shadow_texture_id); fb_task->Initialise(&shad_comp.shadow_texture_id, &shad_comp.frame_buffer_id);
task_scheduler->WaitForTask(create_texture_task_id); task_scheduler->WaitForTask(create_framebuffer_task_id);
} }
void HydraShadowSourceSystem::_WriteToGPU(std::vector<HydraShadowSourceComponent> shadows) void HydraShadowSourceSystem::_WriteToGPU(std::vector<HydraShadowSourceComponent> shadows)
@@ -135,6 +132,6 @@ void HydraShadowSourceSystem::_WriteToGPU(std::vector<HydraShadowSourceComponent
HydraID update_buffer_task_id = task_scheduler->CreateTask<HydraUpdatePartialGPUBufferTask>(HydraThreadAffinity::Render); HydraID update_buffer_task_id = task_scheduler->CreateTask<HydraUpdatePartialGPUBufferTask>(HydraThreadAffinity::Render);
HydraUpdatePartialGPUBufferTask *task = static_cast<HydraUpdatePartialGPUBufferTask *>(task_scheduler->GetTask(update_buffer_task_id)); HydraUpdatePartialGPUBufferTask *task = static_cast<HydraUpdatePartialGPUBufferTask *>(task_scheduler->GetTask(update_buffer_task_id));
task->Intialise(m_shadow_buffer_id, 0, sizeof(HydraLightComponent) * shadows.size(), buffer); task->Intialise(m_shadow_buffer_id, 0, sizeof(HydraShadowSourceComponent) * shadows.size(), buffer);
task_scheduler->WaitForTask(update_buffer_task_id); task_scheduler->WaitForTask(update_buffer_task_id);
} }
+1 -7
View File
@@ -52,7 +52,7 @@
#include "../task/buffer/HydraShutdownBufferManagerTask.hpp" #include "../task/buffer/HydraShutdownBufferManagerTask.hpp"
#include "../task/buffer/HydraInitialiseTextureManagerTask.hpp" #include "../task/buffer/HydraInitialiseTextureManagerTask.hpp"
#include "../task/actor/HydraUpdatePlayerTask.h" #include "../task/actor/HydraUpdatePlayerTask.h"
#include "../task/renderer/HydraBeginRenderTask.hpp"
#include "../task/renderer/HydraEndRenderTask.hpp" #include "../task/renderer/HydraEndRenderTask.hpp"
#include "../mesh/HydraMeshManager.h" #include "../mesh/HydraMeshManager.h"
@@ -360,13 +360,7 @@ void HydraEngine::_GameLoop()
_UpdateSystems(); _UpdateSystems();
// HydraID render_task_id = m_task_scheduler->CreateTask<HydraRenderPipelineTask>(HydraThreadAffinity::Render);
// HydraRenderPipelineTask* render_task = static_cast<HydraRenderPipelineTask*>(m_task_scheduler->GetTask(render_task_id));
// render_task->Initialise(m_pipeline);
// m_task_scheduler->WaitForTask(render_task_id);
HydraID begin_task_id = m_task_scheduler->CreateTask<HydraBeginRenderTask>(HydraThreadAffinity::Render);
m_task_scheduler->WaitForTask(begin_task_id);
HydraID render_shadow_task_id = m_task_scheduler->CreateTask<HydraRenderPipelineTask>(HydraThreadAffinity::Render); HydraID render_shadow_task_id = m_task_scheduler->CreateTask<HydraRenderPipelineTask>(HydraThreadAffinity::Render);
HydraRenderPipelineTask* render_shadow_task = static_cast<HydraRenderPipelineTask*>(m_task_scheduler->GetTask(render_shadow_task_id)); HydraRenderPipelineTask* render_shadow_task = static_cast<HydraRenderPipelineTask*>(m_task_scheduler->GetTask(render_shadow_task_id));
@@ -291,7 +291,7 @@ void HydraGLTFLoader::_ProcessGLTFTextures(aiScene const *scene, std::vector<uin
GL_UNSIGNED_BYTE, GL_UNSIGNED_BYTE,
5, 5,
data); data);
texture_manager->BindTexture(texture_id); texture_manager->BindTexture(texture_id, GL_TEXTURE_2D);
// store the texture id against the scene index for the texture. Materials will have *n where n is the index // store the texture id against the scene index for the texture. Materials will have *n where n is the index
texture_lookup[i_tex] = texture_id; texture_lookup[i_tex] = texture_id;
} }
@@ -39,21 +39,36 @@ void HydraDeferredPipeline::Render()
{ {
_UpdateUBO(); _UpdateUBO();
glBindFramebuffer(GL_FRAMEBUFFER, m_frame_buffer_id);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // we're not using the stencil buffer now
glEnable(GL_DEPTH_TEST);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
HydraECS* ecs = GetEngine()->ECS(); HydraECS* ecs = GetEngine()->ECS();
std::shared_ptr<HydraRenderSystem> render_system = ecs->GetSystem<HydraRenderSystem>(); std::shared_ptr<HydraRenderSystem> render_system = ecs->GetSystem<HydraRenderSystem>();
GetEngine()->Renderer()->BeginFrame(); HydraRenderSettings render_settings = GetEngine()->RenderSettings();
glEnable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glViewport(0, 0, render_settings.ViewportWidth, render_settings.ViewportHeight);
float clear_colour[4] = {0, 0, 0, 0};
float depth_value = 1;
glClearNamedFramebufferfv(m_frame_buffer_id, GL_COLOR, 0, clear_colour);
glClearNamedFramebufferfv(m_frame_buffer_id, GL_COLOR, 1, clear_colour);
glClearNamedFramebufferfv(m_frame_buffer_id, GL_COLOR, 2, clear_colour);
glClearNamedFramebufferfv(m_frame_buffer_id, GL_COLOR, 3, clear_colour);
glClearNamedFramebufferfv(m_frame_buffer_id, GL_DEPTH, 0, &depth_value);
float screen_colour[4] = {0.0f, 0.5f, 0.7f, 1.0f};
glClearNamedFramebufferfv(0, GL_COLOR, 0, screen_colour);
glClearNamedFramebufferfv(0, GL_DEPTH, 0, &depth_value);
for(uint32_t rs_idx = 0; rs_idx <m_render_stages.size(); rs_idx++) for(uint32_t rs_idx = 0; rs_idx <m_render_stages.size(); rs_idx++)
{ {
m_render_stages[rs_idx]->Render(render_system->Entities); m_render_stages[rs_idx]->Render(render_system->Entities);
} }
GetEngine()->Renderer()->EndFrame();
} }
void HydraDeferredPipeline::_UpdateUBO() void HydraDeferredPipeline::_UpdateUBO()
@@ -126,11 +141,11 @@ void HydraDeferredPipeline::_CreateFrameBuffer()
glDrawBuffers(4, draw_buffers); glDrawBuffers(4, draw_buffers);
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
tex_buffer_manager->BindTexture(depth_texture.texture_id); tex_buffer_manager->BindTexture(depth_texture.texture_id, GL_TEXTURE_2D);
tex_buffer_manager->BindTexture(buffer_0_texture.texture_id); tex_buffer_manager->BindTexture(buffer_0_texture.texture_id, GL_TEXTURE_2D);
tex_buffer_manager->BindTexture(metal_rough_texture.texture_id); tex_buffer_manager->BindTexture(metal_rough_texture.texture_id, GL_TEXTURE_2D);
tex_buffer_manager->BindTexture(normal_texture.texture_id); tex_buffer_manager->BindTexture(normal_texture.texture_id, GL_TEXTURE_2D);
tex_buffer_manager->BindTexture(position_texture.texture_id); tex_buffer_manager->BindTexture(position_texture.texture_id, GL_TEXTURE_2D);
HydraBufferManager* buffer_manager = GetEngine()->BufferManager(); HydraBufferManager* buffer_manager = GetEngine()->BufferManager();
@@ -60,13 +60,16 @@ void HydraForwardPipeline::Render()
HydraECS* ecs = GetEngine()->ECS(); HydraECS* ecs = GetEngine()->ECS();
std::shared_ptr<HydraRenderSystem> render_system = ecs->GetSystem<HydraRenderSystem>(); std::shared_ptr<HydraRenderSystem> render_system = ecs->GetSystem<HydraRenderSystem>();
GetEngine()->Renderer()->BeginFrame(); float depth_value = 1;
float screen_colour[4] = {0, 0.2, 0.7, 1};
glClearNamedFramebufferfv(0, GL_COLOR, 0, screen_colour);
glClearNamedFramebufferfv(0, GL_DEPTH, 0, &depth_value);
for(uint32_t rs_idx = 0; rs_idx <m_render_stages.size(); rs_idx++) for(uint32_t rs_idx = 0; rs_idx <m_render_stages.size(); rs_idx++)
{ {
m_render_stages[rs_idx]->Render(render_system->Entities); m_render_stages[rs_idx]->Render(render_system->Entities);
} }
GetEngine()->Renderer()->EndFrame();
} }
void HydraForwardPipeline::_UpdateUBO() void HydraForwardPipeline::_UpdateUBO()
@@ -52,11 +52,13 @@ void HydraRenderStage::ShutDown()
glDeleteProgram(m_program); glDeleteProgram(m_program);
} }
void HydraRenderStage::Render(std::set<HydraID>& entities) void HydraRenderStage::Render(std::set<HydraID>& entities, uint32_t framebuffer_id)
{ {
HydraECS* ecs = GetEngine()->ECS(); HydraECS* ecs = GetEngine()->ECS();
if(framebuffer_id != INVALID_HYDRA_ID)
glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer_id); {
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer_id);
}
//glDrawBuffers(m_rb_attachments.size(), &m_rb_attachments[0]); //glDrawBuffers(m_rb_attachments.size(), &m_rb_attachments[0]);
HydraVertexBufferManager* vert_buffer_mananger = GetEngine()->VertexBufferManager(); HydraVertexBufferManager* vert_buffer_mananger = GetEngine()->VertexBufferManager();
glUseProgram(m_program); glUseProgram(m_program);
@@ -91,6 +93,11 @@ void HydraRenderStage::Render(std::set<HydraID>& entities)
glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0);
} }
void HydraRenderStage::Render(std::set<HydraID> &entities)
{
Render(entities, m_framebuffer_id);
}
uint32_t HydraRenderStage::_LoadShader(std::string filename, uint32_t shader_type) uint32_t HydraRenderStage::_LoadShader(std::string filename, uint32_t shader_type)
{ {
@@ -19,6 +19,7 @@ class HydraRenderStage : public HydraObject
bool enable_culling, bool enable_culling,
HYDRA_RENDERABLE_TYPE renderable_type); HYDRA_RENDERABLE_TYPE renderable_type);
void ShutDown(); void ShutDown();
void Render(std::set<HydraID>& entities, uint32_t framebuffer_id);
void Render(std::set<HydraID>& entities); void Render(std::set<HydraID>& entities);
private: private:
uint32_t _LoadShader(std::string filename, uint32_t shader_type); uint32_t _LoadShader(std::string filename, uint32_t shader_type);
@@ -16,12 +16,9 @@
#include "../actor/HydraActorManager.h" #include "../actor/HydraActorManager.h"
#include "../actor/HydraOutputActor.h" #include "../actor/HydraOutputActor.h"
void HydraShadowPipeline::Initialise() void HydraShadowPipeline::Initialise()
{ {
_CreateUBOs(); _CreateUBOs();
_CreateFrameBuffer();
_CreateRenderStage(); _CreateRenderStage();
} }
@@ -35,16 +32,30 @@ void HydraShadowPipeline::Render()
std::shared_ptr<HydraRenderSystem> render_system = ecs->GetSystem<HydraRenderSystem>(); std::shared_ptr<HydraRenderSystem> render_system = ecs->GetSystem<HydraRenderSystem>();
std::shared_ptr<HydraShadowSourceSystem> shadow_system = ecs->GetSystem<HydraShadowSourceSystem>(); std::shared_ptr<HydraShadowSourceSystem> shadow_system = ecs->GetSystem<HydraShadowSourceSystem>();
uint32_t shadow_idx = 0; uint32_t shadow_idx = 0;
glViewport(0, 0, SHADOW_MAP_SIZE, SHADOW_MAP_SIZE);
glEnable(GL_DEPTH_TEST); // Depth testing must be active
glDepthMask(GL_TRUE); // Depth buffer must be writable
glDepthFunc(GL_LESS);
for (HydraID entity_id : shadow_system->Entities) for (HydraID entity_id : shadow_system->Entities)
{ {
_UpdateUBO(shadow_idx); _UpdateUBO(shadow_idx);
_BindFrameBufferAttachments(entity_id); // _BindFrameBufferAttachments(entity_id);
GetEngine()->Renderer()->BeginFrame(); HydraShadowSourceComponent shad_comp = GetEngine()->ECS()->GetComponent<HydraShadowSourceComponent>(entity_id);
glBindFramebuffer(GL_FRAMEBUFFER, shad_comp.frame_buffer_id);
glBindTextureUnit(0, 0);
float depth_value = 1.0f;
glClearNamedFramebufferfv(shad_comp.frame_buffer_id, GL_DEPTH, 0, &depth_value);
for (uint32_t rs_idx = 0; rs_idx < m_render_stages.size(); rs_idx++) for (uint32_t rs_idx = 0; rs_idx < m_render_stages.size(); rs_idx++)
{ {
m_render_stages[rs_idx]->Render(render_system->Entities); m_render_stages[rs_idx]->Render(render_system->Entities, INVALID_HYDRA_ID);
} }
GetEngine()->Renderer()->EndFrame();
glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0);
shadow_idx++; shadow_idx++;
} }
@@ -69,12 +80,12 @@ void HydraShadowPipeline::_CreateRenderStage()
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER); shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
shader_binding.block_name.push_back("ShadowMapSets"); shader_binding.block_name.push_back("ShadowMapSets");
shader_binding.binding_point.push_back(0); shader_binding.binding_point.push_back(5);
shader_binding.buffer_id.push_back(shadow_buffer_id); shader_binding.buffer_id.push_back(shadow_buffer_id);
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER); shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
shader_binding.block_name.push_back("shadow_per_frame"); shader_binding.block_name.push_back("shadow_per_frame");
shader_binding.binding_point.push_back(0); shader_binding.binding_point.push_back(1);
shader_binding.buffer_id.push_back(per_frame_buffer_id); shader_binding.buffer_id.push_back(per_frame_buffer_id);
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER); shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER);
@@ -84,7 +95,7 @@ void HydraShadowPipeline::_CreateRenderStage()
shader_path + "shadow_shader.frag", shader_path + "shadow_shader.frag",
shader_path + "shadow_shader.geom", shader_path + "shadow_shader.geom",
shader_binding, shader_binding,
m_frame_buffer_id, 0,
textures, textures,
true, true,
HYDRA_RENDERABLE_TYPE::HYDRA_COLOUR); HYDRA_RENDERABLE_TYPE::HYDRA_COLOUR);
@@ -101,37 +112,11 @@ void HydraShadowPipeline::_UpdateUBO(uint32_t shadow_idx)
void HydraShadowPipeline::_BindFrameBufferAttachments(HydraID entity_id) void HydraShadowPipeline::_BindFrameBufferAttachments(HydraID entity_id)
{ {
HydraShadowSourceComponent shad_comp = GetEngine()->ECS()->GetComponent<HydraShadowSourceComponent>(entity_id); HydraShadowSourceComponent shad_comp = GetEngine()->ECS()->GetComponent<HydraShadowSourceComponent>(entity_id);
HydraTextureBuffer texture = GetEngine()->TextureBufferManager()->GetTexture(shad_comp.shadow_texture_id); glBindFramebuffer(GL_FRAMEBUFFER, shad_comp.frame_buffer_id);
glBindFramebuffer(GL_FRAMEBUFFER, m_frame_buffer_id); glBindTextureUnit(0, 0);
glBindTexture(GL_TEXTURE_2D, texture.gl_tex_id);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, texture.gl_tex_id, 0);
GLenum draw_buffers[4] = {GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3};
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
glBindTexture(GL_TEXTURE_2D, 0);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // we're not using the stencil buffer now
glEnable(GL_DEPTH_TEST);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
} }
void HydraShadowPipeline::_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);
}
void HydraShadowPipeline::_CreateUBOs() void HydraShadowPipeline::_CreateUBOs()
{ {
HydraBufferManager *buffer_manager = GetEngine()->BufferManager(); HydraBufferManager *buffer_manager = GetEngine()->BufferManager();
@@ -18,12 +18,12 @@ class HydraShadowPipeline : public HydraPipeline
void Render() override; void Render() override;
private: private:
void _CreateUBOs(); void _CreateUBOs();
void _CreateFrameBuffer();
void _CreateRenderStage(); void _CreateRenderStage();
void _UpdateUBO(uint32_t shadow_idx); void _UpdateUBO(uint32_t shadow_idx);
void _BindFrameBufferAttachments(HydraID entity_id); void _BindFrameBufferAttachments(HydraID entity_id);
HydraID m_per_frame_ubo = INVALID_HYDRA_ID; HydraID m_per_frame_ubo = INVALID_HYDRA_ID;
uint32_t m_frame_buffer_id;
}; };
@@ -31,18 +31,18 @@ void HydraRenderer::Initialise(HydraRenderSettings render_settings)
} }
} }
void HydraRenderer::BeginFrame() // void HydraRenderer::BeginFrame()
{ // {
glViewport(0, 0, m_render_settings.ViewportWidth, m_render_settings.ViewportHeight); // glViewport(0, 0, m_render_settings.ViewportWidth, m_render_settings.ViewportHeight);
glEnable(GL_BLEND); // glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0.0f, 0.5f, 0.7f, 1.0f); // glClearColor(0.0f, 0.5f, 0.7f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
} // }
void HydraRenderer::EndFrame() void HydraRenderer::EndFrame()
{ {
+1 -1
View File
@@ -7,7 +7,7 @@ class HydraRenderer : public HydraObject
{ {
public: public:
void Initialise(HydraRenderSettings render_settings); void Initialise(HydraRenderSettings render_settings);
void BeginFrame(); //void BeginFrame();
void EndFrame(); void EndFrame();
@@ -18,6 +18,7 @@ private:
uint32_t m_min_filter; uint32_t m_min_filter;
uint32_t m_mag_filter; uint32_t m_mag_filter;
uint32_t m_levels; uint32_t m_levels;
uint32_t m_target;
void *m_data; void *m_data;
HydraID *m_texture_id; HydraID *m_texture_id;
@@ -35,7 +36,7 @@ public:
m_data_type, m_data_type,
m_mip_levels, m_mip_levels,
m_data); m_data);
GetEngine()->TextureBufferManager()->BindTexture(*m_texture_id); GetEngine()->TextureBufferManager()->BindTexture(*m_texture_id, GL_TEXTURE_2D);
} }
void Initialise(std::string texture_name, void Initialise(std::string texture_name,
@@ -51,6 +51,7 @@ public:
HydraID *texture_id) HydraID *texture_id)
{ {
m_texture_name = texture_name; m_texture_name = texture_name;
m_width = width; m_width = width;
m_height = height; m_height = height;
m_internal_format = internal_format; m_internal_format = internal_format;
@@ -1,19 +0,0 @@
#ifndef HYDRABEGINRENDERTASK
#define HYDRABEGINRENDERTASK
#include "../HydraTask.h"
#include "../../engine/HydraEngine.h"
#include "../../renderer/HydraRenderer.h"
class HydraBeginRenderTask : public HydraTask
{
private:
protected:
public:
virtual void Process() override
{
GetEngine()->Renderer()->BeginFrame();
}
};
#endif /* HYDRABEGINRENDERTASK */
@@ -0,0 +1,61 @@
#ifndef HYDRACREATESHADOWFRAMEBUFFER
#define HYDRACREATESHADOWFRAMEBUFFER
#include "../HydraTask.h"
#include "../../engine/HydraEngine.h"
#include "../../renderer/HydraRenderer.h"
#include <GLMIncludes.h>
#include "../../GlewIncludes.h"
class HydraCreateShadowFrameBuffer : public HydraTask
{
private:
uint32_t *m_texture_id = 0;
uint32_t *m_frame_buffer_id = nullptr;
protected:
public:
void Process() override
{
HydraEngine *engine = GetEngine();
HydraTextureBufferManager *tex_buffer_manager = engine->TextureBufferManager();
HydraRenderSettings render_settings = engine->RenderSettings();
*m_texture_id = tex_buffer_manager->CreateTextureArray("shadow_FB",
SHADOW_MAP_SIZE, SHADOW_MAP_SIZE,
GL_DEPTH_COMPONENT24,
GL_NEAREST,
GL_NEAREST,
6);
HydraTextureBuffer texture = tex_buffer_manager->GetTexture(*m_texture_id);
glGenFramebuffers(1, m_frame_buffer_id);
glBindFramebuffer(GL_FRAMEBUFFER, *m_frame_buffer_id);
glNamedFramebufferDrawBuffer(*m_frame_buffer_id, GL_NONE);
glNamedFramebufferReadBuffer(*m_frame_buffer_id, GL_NONE);
glBindTexture(GL_TEXTURE_2D_ARRAY, texture.gl_tex_id);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, texture.gl_tex_id, 0);
GLenum status = glCheckNamedFramebufferStatus(*m_frame_buffer_id, GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE)
{
std::cout << "Framebuffer error: " << status << std::endl;
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
tex_buffer_manager->BindTexture(*m_texture_id, GL_TEXTURE_2D_ARRAY);
}
void Initialise(uint32_t *texture_id, uint32_t *frame_buffer_id)
{
m_texture_id = texture_id;
m_frame_buffer_id = frame_buffer_id;
}
};
#endif /* HYDRACREATESHADOWFRAMEBUFFER */
@@ -11,7 +11,6 @@ class HydraRenderTask : public HydraTask
public: public:
virtual void Process() override virtual void Process() override
{ {
GetEngine()->Renderer()->BeginFrame();
GetEngine()->Renderer()->EndFrame(); GetEngine()->Renderer()->EndFrame();
} }
}; };
@@ -161,7 +161,7 @@
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "ALL_BUILD::@6890427a1f51a3e7e1df", "id" : "ALL_BUILD::@6890427a1f51a3e7e1df",
"jsonFile" : "target-ALL_BUILD-Debug-cadb66c5dccd0bd206e6.json", "jsonFile" : "target-ALL_BUILD-Debug-9ddbbbeb4caedf0a48f0.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 0 "projectIndex" : 0
}, },
@@ -182,7 +182,7 @@
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "HydraEngine::@fafd37b19aacd4c483ed", "id" : "HydraEngine::@fafd37b19aacd4c483ed",
"jsonFile" : "target-HydraEngine-Debug-a388455bc5d4b1d63093.json", "jsonFile" : "target-HydraEngine-Debug-2faea7c156292a0c0ce8.json",
"name" : "HydraEngine", "name" : "HydraEngine",
"projectIndex" : 1 "projectIndex" : 1
}, },
@@ -355,7 +355,7 @@
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "ALL_BUILD::@6890427a1f51a3e7e1df", "id" : "ALL_BUILD::@6890427a1f51a3e7e1df",
"jsonFile" : "target-ALL_BUILD-Release-cadb66c5dccd0bd206e6.json", "jsonFile" : "target-ALL_BUILD-Release-9ddbbbeb4caedf0a48f0.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 0 "projectIndex" : 0
}, },
@@ -376,7 +376,7 @@
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "HydraEngine::@fafd37b19aacd4c483ed", "id" : "HydraEngine::@fafd37b19aacd4c483ed",
"jsonFile" : "target-HydraEngine-Release-4d51ecf0ab4ffdcb7da6.json", "jsonFile" : "target-HydraEngine-Release-b1d450122d30c349552d.json",
"name" : "HydraEngine", "name" : "HydraEngine",
"projectIndex" : 1 "projectIndex" : 1
}, },
@@ -549,7 +549,7 @@
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "ALL_BUILD::@6890427a1f51a3e7e1df", "id" : "ALL_BUILD::@6890427a1f51a3e7e1df",
"jsonFile" : "target-ALL_BUILD-MinSizeRel-cadb66c5dccd0bd206e6.json", "jsonFile" : "target-ALL_BUILD-MinSizeRel-9ddbbbeb4caedf0a48f0.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 0 "projectIndex" : 0
}, },
@@ -570,7 +570,7 @@
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "HydraEngine::@fafd37b19aacd4c483ed", "id" : "HydraEngine::@fafd37b19aacd4c483ed",
"jsonFile" : "target-HydraEngine-MinSizeRel-8280923c3e8a8a1bd015.json", "jsonFile" : "target-HydraEngine-MinSizeRel-8b4acdd146655dce4c11.json",
"name" : "HydraEngine", "name" : "HydraEngine",
"projectIndex" : 1 "projectIndex" : 1
}, },
@@ -743,7 +743,7 @@
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "ALL_BUILD::@6890427a1f51a3e7e1df", "id" : "ALL_BUILD::@6890427a1f51a3e7e1df",
"jsonFile" : "target-ALL_BUILD-RelWithDebInfo-cadb66c5dccd0bd206e6.json", "jsonFile" : "target-ALL_BUILD-RelWithDebInfo-9ddbbbeb4caedf0a48f0.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 0 "projectIndex" : 0
}, },
@@ -764,7 +764,7 @@
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "HydraEngine::@fafd37b19aacd4c483ed", "id" : "HydraEngine::@fafd37b19aacd4c483ed",
"jsonFile" : "target-HydraEngine-RelWithDebInfo-1179a3c8def17db9efd4.json", "jsonFile" : "target-HydraEngine-RelWithDebInfo-800c6fa211e5ae182b46.json",
"name" : "HydraEngine", "name" : "HydraEngine",
"projectIndex" : 1 "projectIndex" : 1
}, },
@@ -27,7 +27,7 @@
"objects" : "objects" :
[ [
{ {
"jsonFile" : "codemodel-v2-2319b378636e3c742c14.json", "jsonFile" : "codemodel-v2-ccd34cf25146cac2c39e.json",
"kind" : "codemodel", "kind" : "codemodel",
"version" : "version" :
{ {
@@ -100,7 +100,7 @@
} }
}, },
{ {
"jsonFile" : "codemodel-v2-2319b378636e3c742c14.json", "jsonFile" : "codemodel-v2-ccd34cf25146cac2c39e.json",
"kind" : "codemodel", "kind" : "codemodel",
"version" : "version" :
{ {
@@ -22,10 +22,10 @@
"dependencies" : "dependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
@@ -41,10 +41,10 @@
"orderDependencies" : "orderDependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"paths" : "paths" :
@@ -22,10 +22,10 @@
"dependencies" : "dependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
@@ -41,10 +41,10 @@
"orderDependencies" : "orderDependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"paths" : "paths" :
@@ -22,10 +22,10 @@
"dependencies" : "dependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
@@ -41,10 +41,10 @@
"orderDependencies" : "orderDependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"paths" : "paths" :
@@ -22,10 +22,10 @@
"dependencies" : "dependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
@@ -41,10 +41,10 @@
"orderDependencies" : "orderDependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"paths" : "paths" :
@@ -203,35 +203,35 @@
24, 24,
27, 27,
30, 30,
32, 33,
36, 37,
38, 39,
42, 43,
46, 47,
48, 49,
58, 59,
60, 61,
62, 63,
64, 65,
66, 67,
68, 69,
70, 71,
72, 73,
74, 75,
76, 77,
78, 79,
81, 82,
84, 85,
86, 87,
88, 89,
90, 91,
92, 93,
94, 95,
96, 97,
98, 99,
100, 101,
102, 103,
106 107
] ]
} }
], ],
@@ -322,35 +322,35 @@
24, 24,
27, 27,
30, 30,
32, 33,
36, 37,
38, 39,
42, 43,
46, 47,
48, 49,
58, 59,
60, 61,
62, 63,
64, 65,
66, 67,
68, 69,
70, 71,
72, 73,
74, 75,
76, 77,
78, 79,
81, 82,
84, 85,
86, 87,
88, 89,
90, 91,
92, 93,
94, 95,
96, 97,
98, 99,
100, 101,
102, 103,
106 107
] ]
}, },
{ {
@@ -376,18 +376,18 @@
28, 28,
29, 29,
31, 31,
33, 32,
34, 34,
35, 35,
37, 36,
39, 38,
40, 40,
41, 41,
43, 42,
44, 44,
45, 45,
47, 46,
49, 48,
50, 50,
51, 51,
52, 52,
@@ -396,33 +396,34 @@
55, 55,
56, 56,
57, 57,
59, 58,
61, 60,
63, 62,
65, 64,
67, 66,
69, 68,
71, 70,
73, 72,
75, 74,
77, 76,
79, 78,
80, 80,
82, 81,
83, 83,
85, 84,
87, 86,
89, 88,
91, 90,
93, 92,
95, 94,
97, 96,
99, 98,
101, 100,
103, 102,
104, 104,
105, 105,
107 106,
108
] ]
} }
], ],
@@ -601,6 +602,11 @@
"path" : "HydraEngine/source/buffer/HydraMaterialBufferManager.h", "path" : "HydraEngine/source/buffer/HydraMaterialBufferManager.h",
"sourceGroupIndex" : 1 "sourceGroupIndex" : 1
}, },
{
"backtrace" : 1,
"path" : "HydraEngine/source/buffer/HydraShadowBuffer.h",
"sourceGroupIndex" : 1
},
{ {
"backtrace" : 1, "backtrace" : 1,
"compileGroupIndex" : 0, "compileGroupIndex" : 0,
@@ -203,35 +203,35 @@
24, 24,
27, 27,
30, 30,
32, 33,
36, 37,
38, 39,
42, 43,
46, 47,
48, 49,
58, 59,
60, 61,
62, 63,
64, 65,
66, 67,
68, 69,
70, 71,
72, 73,
74, 75,
76, 77,
78, 79,
81, 82,
84, 85,
86, 87,
88, 89,
90, 91,
92, 93,
94, 95,
96, 97,
98, 99,
100, 101,
102, 103,
106 107
] ]
} }
], ],
@@ -322,35 +322,35 @@
24, 24,
27, 27,
30, 30,
32, 33,
36, 37,
38, 39,
42, 43,
46, 47,
48, 49,
58, 59,
60, 61,
62, 63,
64, 65,
66, 67,
68, 69,
70, 71,
72, 73,
74, 75,
76, 77,
78, 79,
81, 82,
84, 85,
86, 87,
88, 89,
90, 91,
92, 93,
94, 95,
96, 97,
98, 99,
100, 101,
102, 103,
106 107
] ]
}, },
{ {
@@ -376,18 +376,18 @@
28, 28,
29, 29,
31, 31,
33, 32,
34, 34,
35, 35,
37, 36,
39, 38,
40, 40,
41, 41,
43, 42,
44, 44,
45, 45,
47, 46,
49, 48,
50, 50,
51, 51,
52, 52,
@@ -396,33 +396,34 @@
55, 55,
56, 56,
57, 57,
59, 58,
61, 60,
63, 62,
65, 64,
67, 66,
69, 68,
71, 70,
73, 72,
75, 74,
77, 76,
79, 78,
80, 80,
82, 81,
83, 83,
85, 84,
87, 86,
89, 88,
91, 90,
93, 92,
95, 94,
97, 96,
99, 98,
101, 100,
103, 102,
104, 104,
105, 105,
107 106,
108
] ]
} }
], ],
@@ -601,6 +602,11 @@
"path" : "HydraEngine/source/buffer/HydraMaterialBufferManager.h", "path" : "HydraEngine/source/buffer/HydraMaterialBufferManager.h",
"sourceGroupIndex" : 1 "sourceGroupIndex" : 1
}, },
{
"backtrace" : 1,
"path" : "HydraEngine/source/buffer/HydraShadowBuffer.h",
"sourceGroupIndex" : 1
},
{ {
"backtrace" : 1, "backtrace" : 1,
"compileGroupIndex" : 0, "compileGroupIndex" : 0,
@@ -203,35 +203,35 @@
24, 24,
27, 27,
30, 30,
32, 33,
36, 37,
38, 39,
42, 43,
46, 47,
48, 49,
58, 59,
60, 61,
62, 63,
64, 65,
66, 67,
68, 69,
70, 71,
72, 73,
74, 75,
76, 77,
78, 79,
81, 82,
84, 85,
86, 87,
88, 89,
90, 91,
92, 93,
94, 95,
96, 97,
98, 99,
100, 101,
102, 103,
106 107
] ]
} }
], ],
@@ -322,35 +322,35 @@
24, 24,
27, 27,
30, 30,
32, 33,
36, 37,
38, 39,
42, 43,
46, 47,
48, 49,
58, 59,
60, 61,
62, 63,
64, 65,
66, 67,
68, 69,
70, 71,
72, 73,
74, 75,
76, 77,
78, 79,
81, 82,
84, 85,
86, 87,
88, 89,
90, 91,
92, 93,
94, 95,
96, 97,
98, 99,
100, 101,
102, 103,
106 107
] ]
}, },
{ {
@@ -376,18 +376,18 @@
28, 28,
29, 29,
31, 31,
33, 32,
34, 34,
35, 35,
37, 36,
39, 38,
40, 40,
41, 41,
43, 42,
44, 44,
45, 45,
47, 46,
49, 48,
50, 50,
51, 51,
52, 52,
@@ -396,33 +396,34 @@
55, 55,
56, 56,
57, 57,
59, 58,
61, 60,
63, 62,
65, 64,
67, 66,
69, 68,
71, 70,
73, 72,
75, 74,
77, 76,
79, 78,
80, 80,
82, 81,
83, 83,
85, 84,
87, 86,
89, 88,
91, 90,
93, 92,
95, 94,
97, 96,
99, 98,
101, 100,
103, 102,
104, 104,
105, 105,
107 106,
108
] ]
} }
], ],
@@ -601,6 +602,11 @@
"path" : "HydraEngine/source/buffer/HydraMaterialBufferManager.h", "path" : "HydraEngine/source/buffer/HydraMaterialBufferManager.h",
"sourceGroupIndex" : 1 "sourceGroupIndex" : 1
}, },
{
"backtrace" : 1,
"path" : "HydraEngine/source/buffer/HydraShadowBuffer.h",
"sourceGroupIndex" : 1
},
{ {
"backtrace" : 1, "backtrace" : 1,
"compileGroupIndex" : 0, "compileGroupIndex" : 0,
@@ -203,35 +203,35 @@
24, 24,
27, 27,
30, 30,
32, 33,
36, 37,
38, 39,
42, 43,
46, 47,
48, 49,
58, 59,
60, 61,
62, 63,
64, 65,
66, 67,
68, 69,
70, 71,
72, 73,
74, 75,
76, 77,
78, 79,
81, 82,
84, 85,
86, 87,
88, 89,
90, 91,
92, 93,
94, 95,
96, 97,
98, 99,
100, 101,
102, 103,
106 107
] ]
} }
], ],
@@ -322,35 +322,35 @@
24, 24,
27, 27,
30, 30,
32, 33,
36, 37,
38, 39,
42, 43,
46, 47,
48, 49,
58, 59,
60, 61,
62, 63,
64, 65,
66, 67,
68, 69,
70, 71,
72, 73,
74, 75,
76, 77,
78, 79,
81, 82,
84, 85,
86, 87,
88, 89,
90, 91,
92, 93,
94, 95,
96, 97,
98, 99,
100, 101,
102, 103,
106 107
] ]
}, },
{ {
@@ -376,18 +376,18 @@
28, 28,
29, 29,
31, 31,
33, 32,
34, 34,
35, 35,
37, 36,
39, 38,
40, 40,
41, 41,
43, 42,
44, 44,
45, 45,
47, 46,
49, 48,
50, 50,
51, 51,
52, 52,
@@ -396,33 +396,34 @@
55, 55,
56, 56,
57, 57,
59, 58,
61, 60,
63, 62,
65, 64,
67, 66,
69, 68,
71, 70,
73, 72,
75, 74,
77, 76,
79, 78,
80, 80,
82, 81,
83, 83,
85, 84,
87, 86,
89, 88,
91, 90,
93, 92,
95, 94,
97, 96,
99, 98,
101, 100,
103, 102,
104, 104,
105, 105,
107 106,
108
] ]
} }
], ],
@@ -601,6 +602,11 @@
"path" : "HydraEngine/source/buffer/HydraMaterialBufferManager.h", "path" : "HydraEngine/source/buffer/HydraMaterialBufferManager.h",
"sourceGroupIndex" : 1 "sourceGroupIndex" : 1
}, },
{
"backtrace" : 1,
"path" : "HydraEngine/source/buffer/HydraShadowBuffer.h",
"sourceGroupIndex" : 1
},
{ {
"backtrace" : 1, "backtrace" : 1,
"compileGroupIndex" : 0, "compileGroupIndex" : 0,
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -457,6 +457,7 @@ if %errorlevel% neq 0 goto :VCEnd</Command>
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraMaterialBuffer.h" /> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraMaterialBuffer.h" />
<ClCompile Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraMaterialBufferManager.cpp" /> <ClCompile Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraMaterialBufferManager.cpp" />
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraMaterialBufferManager.h" /> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraMaterialBufferManager.h" />
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraShadowBuffer.h" />
<ClCompile Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraTextureBufferManager.cpp" /> <ClCompile Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraTextureBufferManager.cpp" />
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraTextureBufferManager.h" /> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraTextureBufferManager.h" />
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraTexureBuffer.h" /> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraTexureBuffer.h" />
@@ -186,6 +186,9 @@
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraMaterialBufferManager.h"> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraMaterialBufferManager.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraShadowBuffer.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraTextureBufferManager.h"> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraTextureBufferManager.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
+1 -1
View File
@@ -1,6 +1,6 @@
================================================================================ ================================================================================
Linker Errors Linker Errors
Generated: 2026-07-27T23:22:14.073Z Generated: 2026-07-28T12:58:05.588Z
Total Errors: 1 Total Errors: 1
================================================================================ ================================================================================