diff --git a/HydraEngine/source/HydraDefines.h b/HydraEngine/source/HydraDefines.h index de56e79..62b312f 100644 --- a/HydraEngine/source/HydraDefines.h +++ b/HydraEngine/source/HydraDefines.h @@ -41,6 +41,8 @@ const uint32_t MAX_MATERIALS = 1000; const uint32_t MAX_TEXTURES = 1000; const uint32_t MAX_ACTORS = 10000; const uint32_t MAX_LIGHTS = 500; +const uint32_t MAX_SHADOWS = 10; +const uint32_t SHADOW_MAP_SIZE = 1024; enum class HYDRA_RENDERABLE_TYPE diff --git a/HydraEngine/source/ShaderFiles/deferred_output_shader.frag b/HydraEngine/source/ShaderFiles/deferred_output_shader.frag index e5fee0d..cd6897d 100644 --- a/HydraEngine/source/ShaderFiles/deferred_output_shader.frag +++ b/HydraEngine/source/ShaderFiles/deferred_output_shader.frag @@ -45,7 +45,7 @@ layout(binding = 1) uniform uniform_output_textures uint texture_ids[16]; }; -layout(binding = 1) readonly buffer PositionsBuffer +layout(std430, binding = 1) readonly buffer PositionsBuffer { mat4 model_matrix[]; }; diff --git a/HydraEngine/source/ShaderFiles/deferred_output_shader.vert b/HydraEngine/source/ShaderFiles/deferred_output_shader.vert index c3c4f74..7905952 100644 --- a/HydraEngine/source/ShaderFiles/deferred_output_shader.vert +++ b/HydraEngine/source/ShaderFiles/deferred_output_shader.vert @@ -9,7 +9,7 @@ layout(binding = 0) uniform uniform_per_frame uint light_count; } ubo_per_frame; -layout(binding = 1) readonly buffer PositionsBuffer +layout(std430, binding = 1) readonly buffer PositionsBuffer { mat4 model_matrix[]; }; diff --git a/HydraEngine/source/ShaderFiles/deferred_shader.vert b/HydraEngine/source/ShaderFiles/deferred_shader.vert index e7ef529..8b26f51 100644 --- a/HydraEngine/source/ShaderFiles/deferred_shader.vert +++ b/HydraEngine/source/ShaderFiles/deferred_shader.vert @@ -9,7 +9,7 @@ layout(binding = 0) uniform uniform_per_frame uint light_count; } ubo_per_frame; -layout(binding = 1) readonly buffer PositionsBuffer +layout(std430, binding = 1) readonly buffer PositionsBuffer { mat4 model_matrix[]; }; diff --git a/HydraEngine/source/ShaderFiles/shadow_shader.frag b/HydraEngine/source/ShaderFiles/shadow_shader.frag new file mode 100644 index 0000000..5eccbfb --- /dev/null +++ b/HydraEngine/source/ShaderFiles/shadow_shader.frag @@ -0,0 +1,17 @@ +//*PIXEL* +#version 450 + +#extension GL_EXT_scalar_block_layout : enable +#extension GL_EXT_nonuniform_qualifier : enable + +const uint DIRECTIONAL_LIGHT = 1; +const uint POINT_LIGHT = 2; +const uint SPOT_LIGHT = 3; + + + +void main() +{ + + //gl_FragDepth = gl_FragCoord.z; +} diff --git a/HydraEngine/source/ShaderFiles/shadow_shader.geom b/HydraEngine/source/ShaderFiles/shadow_shader.geom new file mode 100644 index 0000000..b89b6b7 --- /dev/null +++ b/HydraEngine/source/ShaderFiles/shadow_shader.geom @@ -0,0 +1,45 @@ +#version 450 + +layout(triangles, invocations = 6) in; +layout(triangle_strip, max_vertices = 3) out; + +struct ShadowMapSet +{ + uint entity_id; + uint cascade_count; + uint shadow_texture_id; + uint padding0; + float near_plane[8]; + float far_plane[8]; + mat4 light_space_proj[6]; + mat4 light_space_view[6]; +}; + + + +//Push constants updated for each light +layout(binding = 0) uniform shadow_per_frame +{ + vec3 camera_pos; + uint shadow_idxs; +}; + + +layout(std430, binding = 0) readonly buffer ShadowMapSets +{ + ShadowMapSet shadows[10]; +}; + +void main() +{ + for (int i = 0; i < 3; ++i) + { + + gl_Position = shadows[shadow_idxs].light_space_proj[gl_InvocationID] * + shadows[shadow_idxs].light_space_view[gl_InvocationID] * + gl_in[i].gl_Position; + gl_Layer = gl_InvocationID; + EmitVertex(); + } + EndPrimitive(); +} \ No newline at end of file diff --git a/HydraEngine/source/ShaderFiles/shadow_shader.vert b/HydraEngine/source/ShaderFiles/shadow_shader.vert new file mode 100644 index 0000000..5eeda68 --- /dev/null +++ b/HydraEngine/source/ShaderFiles/shadow_shader.vert @@ -0,0 +1,23 @@ +//*VERTEX* +#version 450 +#extension GL_EXT_buffer_reference : enable + +layout(binding = 1) readonly buffer PositionsBuffer +{ + mat4 model_matrix[]; +}; + +layout (location = 0) in vec3 inPos; //12 bytes : 0 +layout (location = 1) in vec2 inUV; //8 Bytes : 12 +layout (location = 2) in uvec3 inChunkID; //12 Bytes : 20 +layout (location = 3) in vec3 inNormal; //8 Bytes : 12 +layout (location = 4) in vec3 inBiTangent; +layout (location = 5) in vec3 inTangent; + +void main() +{ + + uint chunkid = inChunkID[0]; + mat4 model = model_matrix[chunkid]; + gl_Position = model * vec4(inPos, 1.0); +} \ No newline at end of file diff --git a/HydraEngine/source/actor/HydraOutputActor.cpp b/HydraEngine/source/actor/HydraOutputActor.cpp index b73fa9c..9365d27 100644 --- a/HydraEngine/source/actor/HydraOutputActor.cpp +++ b/HydraEngine/source/actor/HydraOutputActor.cpp @@ -23,35 +23,35 @@ void HydraOutputActor::_CreateMaterial() render_settings.DisplayHeight, GL_RGBA8, GL_NEAREST, - GL_NEAREST); + GL_NEAREST, 1); HydraID depth = engine->TextureBufferManager()->CreateTexture("deferred_depth", render_settings.DisplayWidth, render_settings.DisplayHeight, GL_DEPTH_COMPONENT24, GL_NEAREST, - GL_NEAREST); + GL_NEAREST, 1); HydraID metal_rough = engine->TextureBufferManager()->CreateTexture("deferred_metal_rough_buffer", render_settings.DisplayWidth, render_settings.DisplayHeight, GL_RGBA8, GL_NEAREST, - GL_NEAREST); + GL_NEAREST, 1); HydraID normal = engine->TextureBufferManager()->CreateTexture("deferred_normal_buffer", render_settings.DisplayWidth, render_settings.DisplayHeight, GL_RGBA32F, GL_NEAREST, - GL_NEAREST); + GL_NEAREST, 1); HydraID position = engine->TextureBufferManager()->CreateTexture("deferred_position_buffer", render_settings.DisplayWidth, render_settings.DisplayHeight, GL_RGBA32F, GL_NEAREST, - GL_NEAREST); + GL_NEAREST, 1); // engine->TextureBufferManager()->BindTexture(depth); diff --git a/HydraEngine/source/buffer/HydraShadowBuffer.h b/HydraEngine/source/buffer/HydraShadowBuffer.h new file mode 100644 index 0000000..2ea5ce4 --- /dev/null +++ b/HydraEngine/source/buffer/HydraShadowBuffer.h @@ -0,0 +1,17 @@ +#ifndef HYDRASHADOWBUFFER +#define HYDRASHADOWBUFFER + + +#include "../engine/HydraEngine.h" +struct HydraShadowBuffer +{ + uint32_t entity_id; + uint32_t cascade_count; + uint32_t shadow_texture_id; + uint32_t padding0; + float near_plane[8]; + float far_plane[8]; + glm::mat4 light_space_proj[6]; + glm::mat4 light_space_view[6]; +}; +#endif /* HYDRASHADOWBUFFER */ diff --git a/HydraEngine/source/buffer/HydraTextureBufferManager.cpp b/HydraEngine/source/buffer/HydraTextureBufferManager.cpp index 9477fe0..b35086e 100644 --- a/HydraEngine/source/buffer/HydraTextureBufferManager.cpp +++ b/HydraEngine/source/buffer/HydraTextureBufferManager.cpp @@ -64,6 +64,7 @@ HydraID HydraTextureBufferManager::LoadTexture(std::string texture_filename) format, GL_NEAREST_MIPMAP_NEAREST, GL_LINEAR, + 1, GL_UNSIGNED_BYTE, 5, data, @@ -112,6 +113,7 @@ HydraID HydraTextureBufferManager::CreateTexture(std::string texture_name, uint32_t internal_format, uint32_t min_filter, uint32_t mag_filter, + uint32_t levels, uint32_t format, uint32_t data_type, uint32_t mip_levels, @@ -121,8 +123,8 @@ HydraID HydraTextureBufferManager::CreateTexture(std::string texture_name, glCreateTextures(GL_TEXTURE_2D, 1, &gl_tex_id); glBindTexture(GL_TEXTURE_2D, gl_tex_id); - // important to create mip_levels + 1 images - glTextureStorage2D(gl_tex_id, mip_levels + 1, internal_format, width, height); + + glTextureStorage2D(gl_tex_id, levels, internal_format, width, height); if (data != nullptr) { diff --git a/HydraEngine/source/buffer/HydraTextureBufferManager.h b/HydraEngine/source/buffer/HydraTextureBufferManager.h index 9a45c54..568e3f6 100644 --- a/HydraEngine/source/buffer/HydraTextureBufferManager.h +++ b/HydraEngine/source/buffer/HydraTextureBufferManager.h @@ -19,7 +19,7 @@ class HydraTextureBufferManager : public HydraObject void Intialise(); void Shutdown(); 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 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); void BindTexture(HydraID texture_id); void UnbindTexture(HydraID texture_id); diff --git a/HydraEngine/source/ecs/HydraSystemManager.h b/HydraEngine/source/ecs/HydraSystemManager.h index 7b1fcba..13653e7 100644 --- a/HydraEngine/source/ecs/HydraSystemManager.h +++ b/HydraEngine/source/ecs/HydraSystemManager.h @@ -26,11 +26,9 @@ public: template std::shared_ptr GetSystem() { std::string type_name = std::string(typeid(T).name()); - auto it = m_systems.find(type_name); assert(it!= m_systems.end() && "System not found."); return std::static_pointer_cast( it->second); - } template @@ -50,12 +48,9 @@ public: template void SetSignature(HydraSignature signature) { std::string type_name = std::string(typeid(T).name()); - assert(m_systems.find(type_name) != m_systems.end() && "System used before registered."); - // Set the signature for this system m_signatures.insert({type_name, signature}); - } void EntitySignatureChanged(HydraID entity_id, HydraSignature signature) { diff --git a/HydraEngine/source/ecs/components/HydraShadowSourceComponent.h b/HydraEngine/source/ecs/components/HydraShadowSourceComponent.h index 9abcb17..09111b1 100644 --- a/HydraEngine/source/ecs/components/HydraShadowSourceComponent.h +++ b/HydraEngine/source/ecs/components/HydraShadowSourceComponent.h @@ -11,7 +11,8 @@ struct HydraShadowSourceComponent uint32_t padding0; float near_plane[8]; float far_plane[8]; - glm::mat4 projection[6]; + glm::mat4 light_space_proj[6]; + glm::mat4 light_space_view[6]; }; - + #endif /* HYDRACASTERCOMPONENT */ diff --git a/HydraEngine/source/ecs/systems/HydraShadowSourceSystem.cpp b/HydraEngine/source/ecs/systems/HydraShadowSourceSystem.cpp index 2f8c248..30382b7 100644 --- a/HydraEngine/source/ecs/systems/HydraShadowSourceSystem.cpp +++ b/HydraEngine/source/ecs/systems/HydraShadowSourceSystem.cpp @@ -1,9 +1,140 @@ #include "HydraShadowSourceSystem.h" +#include "../../engine/HydraEngine.h" +#include "../../camera/HydraCamera.h" +#include "../HydraECS.h" +#include "../components/HydraShadowSourceComponent.h" +#include "../components/HydraPositionComponent.h" +#include "../components/HydraLightComponent.h" + +#include "../../buffer/HydraShadowBuffer.h" +#include "../../buffer/HydraTextureBufferManager.h" + +#include "../../scheduler/HydraTaskScheduler.h" +#include "../../task/buffer/HydraCreateGPUBufferTask.hpp" +#include "../../task/buffer/HydraUpdateWholeGPUBufferTask.hpp" +#include "../../task/buffer/HydraUpdatePartialGPUBufferTask.hpp" +#include "../../task/buffer/HydraCreateUnBoundTextureTask.hpp" + +#include "../../actor/HydraActorManager.h" + void HydraShadowSourceSystem::Initialise() { + HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler(); + + HydraID create_gpu_buffer_task_id = task_scheduler->CreateTask(HydraThreadAffinity::Render); + HydraCreateGPUBufferTask *task = static_cast(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_scheduler->WaitForTask(create_gpu_buffer_task_id); } void HydraShadowSourceSystem::InitialiseComponent(HydraID entity_id) -{ +{ + HydraEngine* engine = GetEngine(); + HydraECS* ecs = engine->ECS(); + HydraLightComponent& light_comp = ecs->GetComponent(entity_id); + switch(light_comp.light_type) + { + case (int)HYDRA_LIGHT_TYPE::HYDRA_LIGHT_DIRECTIONAL: + _InitialiseDirectionalLight(entity_id); + break; + } + } + +void HydraShadowSourceSystem::UpdateSystem(float delta_t_seconds) +{ + HydraEngine* engine = GetEngine(); + HydraECS* ecs = engine->ECS(); + std::vector shadows; + for(HydraID entity_id:Entities) + { + + HydraLightComponent& light_comp = ecs->GetComponent(entity_id); + switch(light_comp.light_type) + { + case (int)HYDRA_LIGHT_TYPE::HYDRA_LIGHT_DIRECTIONAL: + _UpdateDirectionalLight(entity_id); + break; + } + + HydraShadowSourceComponent shad_comp = ecs->GetComponent(entity_id); + shadows.push_back(shad_comp); + } + _WriteToGPU(shadows); +} + +void HydraShadowSourceSystem::_UpdateDirectionalLight(HydraID entity_id) +{ + HydraEngine* engine = GetEngine(); + HydraECS* ecs = engine->ECS(); + HydraPositionComponent pos_comp = ecs->GetComponent(entity_id); + HydraShadowSourceComponent& shad_comp = ecs->GetComponent(entity_id); + + + float view_size = 5.0f; + float view_near = -5.0f; + float view_far = 5.0f; + + float PI = 3.1415927; + float TWO_PI = 6.2831854; + + glm::vec3 light_dir = glm::vec3(0, 0, -1); + glm::mat3 light_rot = glm::mat3(1); + glm::vec3 light_euler = pos_comp.orientation; + light_rot = glm::eulerAngleXYZ(light_euler.x, light_euler.y, light_euler.z); + + light_dir = light_rot * light_dir; + light_dir = glm::normalize(light_dir); + glm::vec3 camera_pos = GetEngine()->Camera()->GetPosition(); + for (uint32_t i = 0; i < 6; i++) + { + glm::vec3 light_pos = camera_pos; // - (light_dir * light_distance); + + glm::mat4 light_trans = glm::translate(light_pos * glm::vec3(-1, -1, -1)); + glm::mat4 light_orient = glm::eulerAngleXYZ(light_euler.x, light_euler.y, light_euler.z); + glm::mat4 view = light_orient * light_trans; + glm::mat4 proj = glm::orthoRH(view_size, -view_size, -view_size, view_size, -15000, 15000); + // glm::mat4 proj = glm::orthoRH(view_size, -view_size, -view_size, view_size, view_near, view_far); + + shad_comp.far_plane[i] = view_far; + shad_comp.near_plane[i] = view_near; + shad_comp.light_space_proj[i] = proj; + shad_comp.light_space_view[i] = view; + + view_far *= 3.0f; + view_near = -view_far; + view_size *= 3.0f; + } +} + +void HydraShadowSourceSystem::_InitialiseDirectionalLight(HydraID entity_id) +{ + HydraEngine* engine = GetEngine(); + HydraECS* ecs = engine->ECS(); + HydraTextureBufferManager* tex_man = engine->TextureBufferManager(); + HydraShadowSourceComponent& shad_comp = ecs->GetComponent(entity_id); + shad_comp.entity_id = entity_id; + shad_comp.cascade_count = 6; + + HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler(); + + HydraID create_texture_task_id = task_scheduler->CreateTask(HydraThreadAffinity::Render); + HydraCreateUnBoundTextureTask *task = static_cast(task_scheduler->GetTask(create_texture_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); + task_scheduler->WaitForTask(create_texture_task_id); +} + +void HydraShadowSourceSystem::_WriteToGPU(std::vector shadows) +{ + HydraEngine* engine = GetEngine(); + HydraECS* ecs = engine->ECS(); + + void *buffer = static_cast(shadows.data()); + HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler(); + + HydraID update_buffer_task_id = task_scheduler->CreateTask(HydraThreadAffinity::Render); + HydraUpdatePartialGPUBufferTask *task = static_cast(task_scheduler->GetTask(update_buffer_task_id)); + task->Intialise(m_shadow_buffer_id, 0, sizeof(HydraLightComponent) * shadows.size(), buffer); + task_scheduler->WaitForTask(update_buffer_task_id); +} \ No newline at end of file diff --git a/HydraEngine/source/ecs/systems/HydraShadowSourceSystem.h b/HydraEngine/source/ecs/systems/HydraShadowSourceSystem.h index f233692..9b17c59 100644 --- a/HydraEngine/source/ecs/systems/HydraShadowSourceSystem.h +++ b/HydraEngine/source/ecs/systems/HydraShadowSourceSystem.h @@ -2,6 +2,7 @@ #define HYDRASHADOWSOURCESYSTEM #include "../../engine/HydraObject.h" #include "../HydraSystem.h" +#include "../components/HydraShadowSourceComponent.h" #include #include @@ -10,8 +11,15 @@ class HydraShadowSourceSystem : public HydraSystem public: virtual void Initialise() override; protected: - virtual void InitialiseComponent(HydraID entity_id) override; - void UpdateSystem(float delta_t_seconds) override {} + void InitialiseComponent(HydraID entity_id) override; + void UpdateSystem(float delta_t_seconds) override; + private: + void _UpdateDirectionalLight(HydraID entity_id); + void _InitialiseDirectionalLight(HydraID entity_id); + void _WriteToGPU(std::vector shadows); + HydraID m_shadow_buffer_id = INVALID_HYDRA_ID; + + }; #endif /* HYDRASHADOWCASTERSYSTEM */ diff --git a/HydraEngine/source/engine/HydraEngine.cpp b/HydraEngine/source/engine/HydraEngine.cpp index eb5766f..963f41c 100644 --- a/HydraEngine/source/engine/HydraEngine.cpp +++ b/HydraEngine/source/engine/HydraEngine.cpp @@ -36,6 +36,7 @@ #include "../pipeline/HydraPipeline.h" #include "../pipeline/HydraForwardPipeline.h" #include "../pipeline/HydraDeferredPipeline.h" +#include "../pipeline/HydraShadowPipeline.h" #include "../task/windowmanager/HydraInitialiseWindowManagerTask.hpp" #include "../task/windowmanager/HydraShutdownWindowManagerTask.hpp" @@ -51,6 +52,8 @@ #include "../task/buffer/HydraShutdownBufferManagerTask.hpp" #include "../task/buffer/HydraInitialiseTextureManagerTask.hpp" #include "../task/actor/HydraUpdatePlayerTask.h" +#include "../task/renderer/HydraBeginRenderTask.hpp" +#include "../task/renderer/HydraEndRenderTask.hpp" #include "../mesh/HydraMeshManager.h" HydraTaskScheduler *const HydraEngine::TaskScheduler() @@ -177,6 +180,7 @@ void HydraEngine::_CreateManagers() m_mesh_manager = new HydraMeshManager(); m_pipeline = new HydraForwardPipeline(); m_deferred_pipeline = new HydraDeferredPipeline(); + m_shadow_pipeline = new HydraShadowPipeline(); m_texture_buffer_manager = new HydraTextureBufferManager(); m_material_buffer_manager = new HydraMaterialBufferManager(); m_light_buffer_manager = new HydraLightBufferManager(); @@ -238,13 +242,14 @@ void HydraEngine::_InitialiseSystems() shadow_sig.set(m_ecs->GetComponentType(), true); shadow_sig.set(m_ecs->GetComponentType(), true); shadow_sig.set(m_ecs->GetComponentType(), true); - m_ecs->SetSystemSignature(mesh_sig); m_ecs->SetSystemSignature(trans_sig); m_ecs->SetSystemSignature(render_sig); m_ecs->SetSystemSignature(material_sig); m_ecs->SetSystemSignature(light_sig); + m_ecs->SetSystemSignature(shadow_sig); + } void HydraEngine::_UpdateSystems() @@ -268,6 +273,12 @@ void HydraEngine::_InitialiseSystems() HydraUpdateSystemTask* update_light_task = static_cast(m_task_scheduler->GetTask(update_light_id)); update_light_task->Initialise(m_delta_t, m_light_system); m_task_scheduler->WaitForTask(update_light_id); + + HydraID update_shadow_id = m_task_scheduler->CreateTask(HydraThreadAffinity::General); + HydraUpdateSystemTask* update_shadow_task = static_cast(m_task_scheduler->GetTask(update_shadow_id)); + update_shadow_task->Initialise(m_delta_t, m_shadow_system); + m_task_scheduler->WaitForTask(update_shadow_id); + } void HydraEngine::_GameLoop() @@ -296,6 +307,11 @@ void HydraEngine::_GameLoop() pipeline_task->Initialise(m_pipeline); m_task_scheduler->WaitForTask(initialise_pipeline_task_id); + HydraID initialise_shadow_pipeline_task_id = m_task_scheduler->CreateTask(HydraThreadAffinity::Render); + HydraInitialisePipelineTask *pipeline_shadow_task = static_cast(m_task_scheduler->GetTask(initialise_shadow_pipeline_task_id)); + pipeline_shadow_task->Initialise(m_shadow_pipeline); + m_task_scheduler->WaitForTask(initialise_shadow_pipeline_task_id); + HydraID initialise_def_pipeline_task_id = m_task_scheduler->CreateTask(HydraThreadAffinity::Render); HydraInitialisePipelineTask *pipeline_def_task = static_cast(m_task_scheduler->GetTask(initialise_def_pipeline_task_id)); pipeline_def_task->Initialise(m_deferred_pipeline); @@ -349,10 +365,21 @@ void HydraEngine::_GameLoop() // render_task->Initialise(m_pipeline); // m_task_scheduler->WaitForTask(render_task_id); + HydraID begin_task_id = m_task_scheduler->CreateTask(HydraThreadAffinity::Render); + m_task_scheduler->WaitForTask(begin_task_id); + + HydraID render_shadow_task_id = m_task_scheduler->CreateTask(HydraThreadAffinity::Render); + HydraRenderPipelineTask* render_shadow_task = static_cast(m_task_scheduler->GetTask(render_shadow_task_id)); + render_shadow_task->Initialise(m_shadow_pipeline); + m_task_scheduler->WaitForTask(render_shadow_task_id); + HydraID render_def_task_id = m_task_scheduler->CreateTask(HydraThreadAffinity::Render); HydraRenderPipelineTask* render_def_task = static_cast(m_task_scheduler->GetTask(render_def_task_id)); render_def_task->Initialise(m_deferred_pipeline); m_task_scheduler->WaitForTask(render_def_task_id); + + HydraID end_task_id = m_task_scheduler->CreateTask(HydraThreadAffinity::Render); + m_task_scheduler->WaitForTask(end_task_id); } } diff --git a/HydraEngine/source/engine/HydraEngine.h b/HydraEngine/source/engine/HydraEngine.h index 8fb95fc..f1d8385 100644 --- a/HydraEngine/source/engine/HydraEngine.h +++ b/HydraEngine/source/engine/HydraEngine.h @@ -83,6 +83,7 @@ private: HydraRenderSettings m_render_settings; HydraPipeline* m_pipeline = nullptr; HydraPipeline* m_deferred_pipeline = nullptr; + HydraPipeline* m_shadow_pipeline = nullptr; HydraTextureBufferManager* m_texture_buffer_manager = nullptr; HydraMaterialBufferManager* m_material_buffer_manager = nullptr; HydraLightBufferManager* m_light_buffer_manager = nullptr; @@ -93,6 +94,7 @@ private: std::shared_ptr m_material_system; std::shared_ptr m_light_system; std::shared_ptr m_shadow_system; + bool m_running = true; float m_delta_t = 0.0f; diff --git a/HydraEngine/source/fileaccess/HydraGLTFLoader.cpp b/HydraEngine/source/fileaccess/HydraGLTFLoader.cpp index 70a95e9..5f031a3 100644 --- a/HydraEngine/source/fileaccess/HydraGLTFLoader.cpp +++ b/HydraEngine/source/fileaccess/HydraGLTFLoader.cpp @@ -286,6 +286,7 @@ void HydraGLTFLoader::_ProcessGLTFTextures(aiScene const *scene, std::vectorECS(); std::shared_ptr render_system = ecs->GetSystem(); - GetEngine()->Renderer()->BeginFrame(); - + GetEngine()->Renderer()->BeginFrame(); for(uint32_t rs_idx = 0; rs_idx Render(render_system->Entities); @@ -176,7 +175,7 @@ void HydraDeferredPipeline::_CreateColourRenderStage() 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, @@ -234,7 +233,7 @@ void HydraDeferredPipeline::_CreateOutputRenderStage() 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, diff --git a/HydraEngine/source/pipeline/HydraForwardPipeline.cpp b/HydraEngine/source/pipeline/HydraForwardPipeline.cpp index 3594c23..0777458 100644 --- a/HydraEngine/source/pipeline/HydraForwardPipeline.cpp +++ b/HydraEngine/source/pipeline/HydraForwardPipeline.cpp @@ -36,14 +36,11 @@ void HydraForwardPipeline::Initialise() std::vector textures; std::vector rb_attachments; - - - render_stage->Initialise(shader_path + "forward_shader.vert", shader_path + "forward_shader.frag", shader_binding, 0, textures, true, HYDRA_RENDERABLE_TYPE::HYDRA_COLOUR); + render_stage->Initialise(shader_path + "forward_shader.vert", shader_path + "forward_shader.frag", "", shader_binding, 0, textures, true, HYDRA_RENDERABLE_TYPE::HYDRA_COLOUR); m_render_stages.push_back(render_stage); - m_per_frame_ubo = buffer_manager->CreateGPUBuffer("PerFrameUBO", - sizeof(PerFrameUBO), 0, HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER); + sizeof(PerFrameUBO), 0, HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER); } diff --git a/HydraEngine/source/pipeline/HydraRenderStage.cpp b/HydraEngine/source/pipeline/HydraRenderStage.cpp index 0abca1c..cc67951 100644 --- a/HydraEngine/source/pipeline/HydraRenderStage.cpp +++ b/HydraEngine/source/pipeline/HydraRenderStage.cpp @@ -14,6 +14,7 @@ void HydraRenderStage::Initialise(std::string vertex_shader_file, std::string fragment_shader_file, + std::string geometry_shader_file, HydraShaderBinding shader_binding, uint32_t framebuffer_id, std::vector textures, @@ -25,21 +26,23 @@ void HydraRenderStage::Initialise(std::string vertex_shader_file, m_shader_binding = shader_binding; m_textures = textures; m_cull = enable_culling; - + m_program = glCreateProgram(); if(vertex_shader_file.length() > 0) { m_vertex_shader = _LoadShader(vertex_shader_file, GL_VERTEX_SHADER); + glAttachShader(m_program, m_vertex_shader); } if(fragment_shader_file.length() > 0) { m_fragment_shader = _LoadShader(fragment_shader_file, GL_FRAGMENT_SHADER); + glAttachShader(m_program, m_fragment_shader); + } + if(geometry_shader_file.length() > 0) + { + m_geometry_shader = _LoadShader(geometry_shader_file, GL_GEOMETRY_SHADER); + glAttachShader(m_program, m_geometry_shader); } - m_program = glCreateProgram(); - glAttachShader(m_program, m_vertex_shader); - glAttachShader(m_program, m_fragment_shader); glLinkProgram(m_program); - - } void HydraRenderStage::ShutDown() diff --git a/HydraEngine/source/pipeline/HydraRenderStage.h b/HydraEngine/source/pipeline/HydraRenderStage.h index a374b0a..733045d 100644 --- a/HydraEngine/source/pipeline/HydraRenderStage.h +++ b/HydraEngine/source/pipeline/HydraRenderStage.h @@ -12,6 +12,7 @@ class HydraRenderStage : public HydraObject public: void Initialise(std::string vertex_shader_file, std::string fragment_shader_file, + std::string geometry_shader_file, HydraShaderBinding shader_binding, uint32_t framebuffer_id, std::vector textures, @@ -27,6 +28,7 @@ class HydraRenderStage : public HydraObject HydraShaderBinding m_shader_binding; 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_program = GL_INVALID_VALUE; uint32_t m_renderable_type; uint32_t m_framebuffer_id = 0; diff --git a/HydraEngine/source/pipeline/HydraShadowPipeline.cpp b/HydraEngine/source/pipeline/HydraShadowPipeline.cpp index e69de29..fa8fe8d 100644 --- a/HydraEngine/source/pipeline/HydraShadowPipeline.cpp +++ b/HydraEngine/source/pipeline/HydraShadowPipeline.cpp @@ -0,0 +1,141 @@ +#include "HydraShadowPipeline.h" + +#include "HydraRenderStage.h" +#include "../engine/HydraEngine.h" +#include "../buffer/HydraBufferManager.h" +#include "../buffer/HydraTextureBufferManager.h" +#include "../buffer/HydraLightBufferManager.h" +#include "PerFrameUBO.hpp" + +#include "../camera/HydraCamera.h" +#include "../renderer/HydraRenderer.h" +#include "../ecs/HydraECS.h" +#include "../ecs/systems/HydraRenderSystem.h" +#include "../ecs/systems/HydraShadowSourceSystem.h" +#include "../mesh/StandardVertex.h" +#include "../actor/HydraActorManager.h" +#include "../actor/HydraOutputActor.h" + + + +void HydraShadowPipeline::Initialise() +{ + _CreateUBOs(); + _CreateFrameBuffer(); + _CreateRenderStage(); +} + +void HydraShadowPipeline::Shutdown() +{ +} + +void HydraShadowPipeline::Render() +{ + HydraECS* ecs = GetEngine()->ECS(); + std::shared_ptr render_system = ecs->GetSystem(); + std::shared_ptr shadow_system = ecs->GetSystem(); + uint32_t shadow_idx =0; + for(HydraID entity_id:shadow_system->Entities) + { + _UpdateUBO(shadow_idx); + _BindFrameBufferAttachments(entity_id); + GetEngine()->Renderer()->BeginFrame(); + for(uint32_t rs_idx = 0; rs_idx Render(render_system->Entities); + } + GetEngine()->Renderer()->EndFrame(); + glBindFramebuffer(GL_FRAMEBUFFER, 0); + shadow_idx++; + } + +} + +void HydraShadowPipeline::_CreateRenderStage() +{ + 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 shadow_buffer_id = buffer_manager->FindBuffer("ShadowBuffer"); + HydraID per_frame_buffer_id = buffer_manager->FindBuffer("ShadowPerFrameUBO"); + + HydraShaderBinding shader_binding = {}; + + shader_binding.block_name.push_back("PositionsBuffer"); + 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("ShadowMapSets"); + shader_binding.binding_point.push_back(0); + shader_binding.buffer_id.push_back(shadow_buffer_id); + shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER); + + shader_binding.block_name.push_back("shadow_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 textures; + + render_stage->Initialise(shader_path + "shadow_shader.vert", + shader_path + "shadow_shader.frag", + shader_path + "shadow_shader.geom", + shader_binding, + m_frame_buffer_id, + textures, + true, + HYDRA_RENDERABLE_TYPE::HYDRA_COLOUR); + m_render_stages.push_back(render_stage); +} + +void HydraShadowPipeline::_UpdateUBO(uint32_t shadow_idx) +{ + HydraBufferManager* buffer_manager = GetEngine()->BufferManager(); + buffer_manager->UpdatePartialBuffer(m_per_frame_ubo,3*sizeof(float), sizeof(uint32_t), &shadow_idx); + glBindBuffer(GL_UNIFORM_BUFFER, m_per_frame_ubo); +} + +void HydraShadowPipeline::_BindFrameBufferAttachments(HydraID entity_id) +{ + HydraShadowSourceComponent shad_comp = GetEngine()->ECS()->GetComponent(entity_id); + HydraTextureBuffer texture = GetEngine()->TextureBufferManager()->GetTexture(shad_comp.shadow_texture_id); + glBindFramebuffer(GL_FRAMEBUFFER, m_frame_buffer_id); + + 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() +{ + HydraBufferManager* buffer_manager = GetEngine()->BufferManager(); + + m_per_frame_ubo = buffer_manager->CreateGPUBuffer("ShadowPerFrameUBO", + sizeof(float)*4, 0, HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER); +} diff --git a/HydraEngine/source/pipeline/HydraShadowPipeline.h b/HydraEngine/source/pipeline/HydraShadowPipeline.h index 2ab67fb..5eb64a0 100644 --- a/HydraEngine/source/pipeline/HydraShadowPipeline.h +++ b/HydraEngine/source/pipeline/HydraShadowPipeline.h @@ -17,6 +17,13 @@ class HydraShadowPipeline : public HydraPipeline void Shutdown() override; void Render() override; private: + void _CreateUBOs(); + void _CreateFrameBuffer(); + void _CreateRenderStage(); + void _UpdateUBO(uint32_t shadow_idx); + void _BindFrameBufferAttachments(HydraID entity_id); + HydraID m_per_frame_ubo = INVALID_HYDRA_ID; + uint32_t m_frame_buffer_id; }; diff --git a/HydraEngine/source/task/buffer/HydraCreateTextureTask.hpp b/HydraEngine/source/task/buffer/HydraCreateTextureTask.hpp index 633cad0..57be572 100644 --- a/HydraEngine/source/task/buffer/HydraCreateTextureTask.hpp +++ b/HydraEngine/source/task/buffer/HydraCreateTextureTask.hpp @@ -17,6 +17,7 @@ private: uint32_t m_mip_levels; uint32_t m_min_filter; uint32_t m_mag_filter; + uint32_t m_levels; void *m_data; HydraID *m_texture_id; @@ -29,6 +30,7 @@ public: m_internal_format, m_min_filter, m_mag_filter, + m_levels, m_format, m_data_type, m_mip_levels, @@ -43,6 +45,7 @@ public: uint32_t format, uint32_t min_filter, uint32_t mag_filter, + uint32_t levels, uint32_t data_type, uint32_t mip_levels, void *data, @@ -59,6 +62,7 @@ public: m_texture_id = texture_id; m_min_filter = min_filter; m_mag_filter = mag_filter; + m_levels = levels; } }; diff --git a/HydraEngine/source/task/buffer/HydraCreateUnBoundTextureTask.hpp b/HydraEngine/source/task/buffer/HydraCreateUnBoundTextureTask.hpp new file mode 100644 index 0000000..b2249b6 --- /dev/null +++ b/HydraEngine/source/task/buffer/HydraCreateUnBoundTextureTask.hpp @@ -0,0 +1,69 @@ +#ifndef HYDRACREATEUNBOUNDTEXTURETASK +#define HYDRACREATEUNBOUNDTEXTURETASK + +#include "../HydraTask.h" +#include "../../engine/HydraEngine.h" +#include "../../buffer/HydraTextureBufferManager.h" + +class HydraCreateUnBoundTextureTask : public HydraTask +{ +private: + std::string m_texture_name; + uint32_t m_width; + uint32_t m_height; + uint32_t m_internal_format; + uint32_t m_format; + uint32_t m_data_type; + uint32_t m_mip_levels; + uint32_t m_min_filter; + uint32_t m_mag_filter; + uint32_t m_levels; + void *m_data; + HydraID *m_texture_id; + +protected: +public: + virtual void Process() override + { + *m_texture_id = GetEngine()->TextureBufferManager()->CreateTexture(m_texture_name, + m_width, m_height, + m_internal_format, + m_min_filter, + m_mag_filter, + m_levels, + m_format, + m_data_type, + m_mip_levels, + m_data); + + } + void Initialise(std::string texture_name, + uint32_t width, + uint32_t height, + uint32_t internal_format, + uint32_t format, + uint32_t min_filter, + uint32_t mag_filter, + uint32_t levels, + uint32_t data_type, + uint32_t mip_levels, + void *data, + HydraID *texture_id) + { + m_texture_name = texture_name; + m_width = width; + m_height = height; + m_internal_format = internal_format; + m_format = format; + m_data_type = data_type; + m_mip_levels = mip_levels; + m_data = data; + m_texture_id = texture_id; + m_min_filter = min_filter; + m_mag_filter = mag_filter; + m_levels = levels; + + } +}; + +#endif /* HYDRACREATEUNBOUNDTEXTURETASK */ diff --git a/HydraEngine/source/task/buffer/HydraUpdatePartialGPUBufferTask.hpp b/HydraEngine/source/task/buffer/HydraUpdatePartialGPUBufferTask.hpp index aa3adb6..69ee716 100644 --- a/HydraEngine/source/task/buffer/HydraUpdatePartialGPUBufferTask.hpp +++ b/HydraEngine/source/task/buffer/HydraUpdatePartialGPUBufferTask.hpp @@ -15,8 +15,8 @@ class HydraUpdatePartialGPUBufferTask : public HydraTask protected: public: virtual void Process() override - { - GetEngine()->BufferManager()->UpdateWholeBuffer(m_buffer_id, m_data); + { + GetEngine()->BufferManager()->UpdatePartialBuffer(m_buffer_id, m_start, m_size, m_data); } void Intialise(HydraID buffer_id, uint32_t start, uint32_t size, void* data) { @@ -25,7 +25,6 @@ class HydraUpdatePartialGPUBufferTask : public HydraTask m_start = start; m_size = size; } - }; #endif /* HYDRAUPDATEPARTIALGPUBUFFERTASK */ diff --git a/HydraEngine/source/task/renderer/HydraBeginRenderTask.hpp b/HydraEngine/source/task/renderer/HydraBeginRenderTask.hpp new file mode 100644 index 0000000..f9b5014 --- /dev/null +++ b/HydraEngine/source/task/renderer/HydraBeginRenderTask.hpp @@ -0,0 +1,19 @@ +#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 */ diff --git a/HydraEngine/source/task/renderer/HydraEndRenderTask.hpp b/HydraEngine/source/task/renderer/HydraEndRenderTask.hpp new file mode 100644 index 0000000..3b8f787 --- /dev/null +++ b/HydraEngine/source/task/renderer/HydraEndRenderTask.hpp @@ -0,0 +1,18 @@ +#ifndef HYDRAENDRENDERTASK +#define HYDRAENDRENDERTASK + +#include "../HydraTask.h" +#include "../../engine/HydraEngine.h" +#include "../../renderer/HydraRenderer.h" + +class HydraEndRenderTask : public HydraTask +{ + private: + protected: + public: + virtual void Process() override + { + GetEngine()->Renderer()->EndFrame(); + } +}; +#endif /* HYDRAENDRENDERTASK */ diff --git a/build/.cmake/api/v1/reply/codemodel-v2-2c8505a5ab074bd0a1f3.json b/build/.cmake/api/v1/reply/codemodel-v2-2319b378636e3c742c14.json similarity index 94% rename from build/.cmake/api/v1/reply/codemodel-v2-2c8505a5ab074bd0a1f3.json rename to build/.cmake/api/v1/reply/codemodel-v2-2319b378636e3c742c14.json index 0bc5b5d..1bd2781 100644 --- a/build/.cmake/api/v1/reply/codemodel-v2-2c8505a5ab074bd0a1f3.json +++ b/build/.cmake/api/v1/reply/codemodel-v2-2319b378636e3c742c14.json @@ -161,21 +161,21 @@ { "directoryIndex" : 0, "id" : "ALL_BUILD::@6890427a1f51a3e7e1df", - "jsonFile" : "target-ALL_BUILD-Debug-1b3c50ca02e96d15a11f.json", + "jsonFile" : "target-ALL_BUILD-Debug-cadb66c5dccd0bd206e6.json", "name" : "ALL_BUILD", "projectIndex" : 0 }, { "directoryIndex" : 1, "id" : "ALL_BUILD::@fafd37b19aacd4c483ed", - "jsonFile" : "target-ALL_BUILD-Debug-21126e6f26f8151b82a1.json", + "jsonFile" : "target-ALL_BUILD-Debug-30097c8e6651db3aff43.json", "name" : "ALL_BUILD", "projectIndex" : 1 }, { "directoryIndex" : 0, "id" : "HydraClient::@6890427a1f51a3e7e1df", - "jsonFile" : "target-HydraClient-Debug-ccca9689ebe6b19fe65a.json", + "jsonFile" : "target-HydraClient-Debug-78ce361b98c7c89e9629.json", "name" : "HydraClient", "projectIndex" : 0 }, @@ -355,21 +355,21 @@ { "directoryIndex" : 0, "id" : "ALL_BUILD::@6890427a1f51a3e7e1df", - "jsonFile" : "target-ALL_BUILD-Release-1b3c50ca02e96d15a11f.json", + "jsonFile" : "target-ALL_BUILD-Release-cadb66c5dccd0bd206e6.json", "name" : "ALL_BUILD", "projectIndex" : 0 }, { "directoryIndex" : 1, "id" : "ALL_BUILD::@fafd37b19aacd4c483ed", - "jsonFile" : "target-ALL_BUILD-Release-21126e6f26f8151b82a1.json", + "jsonFile" : "target-ALL_BUILD-Release-30097c8e6651db3aff43.json", "name" : "ALL_BUILD", "projectIndex" : 1 }, { "directoryIndex" : 0, "id" : "HydraClient::@6890427a1f51a3e7e1df", - "jsonFile" : "target-HydraClient-Release-f300bf694420197200c5.json", + "jsonFile" : "target-HydraClient-Release-5f750d1feb1d099be72b.json", "name" : "HydraClient", "projectIndex" : 0 }, @@ -549,21 +549,21 @@ { "directoryIndex" : 0, "id" : "ALL_BUILD::@6890427a1f51a3e7e1df", - "jsonFile" : "target-ALL_BUILD-MinSizeRel-1b3c50ca02e96d15a11f.json", + "jsonFile" : "target-ALL_BUILD-MinSizeRel-cadb66c5dccd0bd206e6.json", "name" : "ALL_BUILD", "projectIndex" : 0 }, { "directoryIndex" : 1, "id" : "ALL_BUILD::@fafd37b19aacd4c483ed", - "jsonFile" : "target-ALL_BUILD-MinSizeRel-21126e6f26f8151b82a1.json", + "jsonFile" : "target-ALL_BUILD-MinSizeRel-30097c8e6651db3aff43.json", "name" : "ALL_BUILD", "projectIndex" : 1 }, { "directoryIndex" : 0, "id" : "HydraClient::@6890427a1f51a3e7e1df", - "jsonFile" : "target-HydraClient-MinSizeRel-707588ed524688a0f034.json", + "jsonFile" : "target-HydraClient-MinSizeRel-0b1754e9511a8dea2861.json", "name" : "HydraClient", "projectIndex" : 0 }, @@ -743,21 +743,21 @@ { "directoryIndex" : 0, "id" : "ALL_BUILD::@6890427a1f51a3e7e1df", - "jsonFile" : "target-ALL_BUILD-RelWithDebInfo-1b3c50ca02e96d15a11f.json", + "jsonFile" : "target-ALL_BUILD-RelWithDebInfo-cadb66c5dccd0bd206e6.json", "name" : "ALL_BUILD", "projectIndex" : 0 }, { "directoryIndex" : 1, "id" : "ALL_BUILD::@fafd37b19aacd4c483ed", - "jsonFile" : "target-ALL_BUILD-RelWithDebInfo-21126e6f26f8151b82a1.json", + "jsonFile" : "target-ALL_BUILD-RelWithDebInfo-30097c8e6651db3aff43.json", "name" : "ALL_BUILD", "projectIndex" : 1 }, { "directoryIndex" : 0, "id" : "HydraClient::@6890427a1f51a3e7e1df", - "jsonFile" : "target-HydraClient-RelWithDebInfo-a4b1a5ac731bdcc03733.json", + "jsonFile" : "target-HydraClient-RelWithDebInfo-19110864938462bdea5b.json", "name" : "HydraClient", "projectIndex" : 0 }, diff --git a/build/.cmake/api/v1/reply/index-2026-07-25T14-47-43-0822.json b/build/.cmake/api/v1/reply/index-2026-07-27T14-57-08-0829.json similarity index 94% rename from build/.cmake/api/v1/reply/index-2026-07-25T14-47-43-0822.json rename to build/.cmake/api/v1/reply/index-2026-07-27T14-57-08-0829.json index 4ad6f01..a115497 100644 --- a/build/.cmake/api/v1/reply/index-2026-07-25T14-47-43-0822.json +++ b/build/.cmake/api/v1/reply/index-2026-07-27T14-57-08-0829.json @@ -27,7 +27,7 @@ "objects" : [ { - "jsonFile" : "codemodel-v2-2c8505a5ab074bd0a1f3.json", + "jsonFile" : "codemodel-v2-2319b378636e3c742c14.json", "kind" : "codemodel", "version" : { @@ -100,7 +100,7 @@ } }, { - "jsonFile" : "codemodel-v2-2c8505a5ab074bd0a1f3.json", + "jsonFile" : "codemodel-v2-2319b378636e3c742c14.json", "kind" : "codemodel", "version" : { diff --git a/build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-21126e6f26f8151b82a1.json b/build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-30097c8e6651db3aff43.json similarity index 100% rename from build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-21126e6f26f8151b82a1.json rename to build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-30097c8e6651db3aff43.json index 3293cbc..9fd930e 100644 --- a/build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-21126e6f26f8151b82a1.json +++ b/build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-30097c8e6651db3aff43.json @@ -22,10 +22,10 @@ "dependencies" : [ { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "folder" : diff --git a/build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-1b3c50ca02e96d15a11f.json b/build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-cadb66c5dccd0bd206e6.json similarity index 100% rename from build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-1b3c50ca02e96d15a11f.json rename to build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-cadb66c5dccd0bd206e6.json index a1685bc..8e32007 100644 --- a/build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-1b3c50ca02e96d15a11f.json +++ b/build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-cadb66c5dccd0bd206e6.json @@ -22,13 +22,13 @@ "dependencies" : [ { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { "id" : "HydraClient::@6890427a1f51a3e7e1df" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "folder" : @@ -41,10 +41,10 @@ "orderDependencies" : [ { - "id" : "HydraClient::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "HydraClient::@6890427a1f51a3e7e1df" } ], "paths" : diff --git a/build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-21126e6f26f8151b82a1.json b/build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-30097c8e6651db3aff43.json similarity index 100% rename from build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-21126e6f26f8151b82a1.json rename to build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-30097c8e6651db3aff43.json index 3293cbc..9fd930e 100644 --- a/build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-21126e6f26f8151b82a1.json +++ b/build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-30097c8e6651db3aff43.json @@ -22,10 +22,10 @@ "dependencies" : [ { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "folder" : diff --git a/build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-1b3c50ca02e96d15a11f.json b/build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-cadb66c5dccd0bd206e6.json similarity index 100% rename from build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-1b3c50ca02e96d15a11f.json rename to build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-cadb66c5dccd0bd206e6.json index a1685bc..8e32007 100644 --- a/build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-1b3c50ca02e96d15a11f.json +++ b/build/.cmake/api/v1/reply/target-ALL_BUILD-MinSizeRel-cadb66c5dccd0bd206e6.json @@ -22,13 +22,13 @@ "dependencies" : [ { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { "id" : "HydraClient::@6890427a1f51a3e7e1df" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "folder" : @@ -41,10 +41,10 @@ "orderDependencies" : [ { - "id" : "HydraClient::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "HydraClient::@6890427a1f51a3e7e1df" } ], "paths" : diff --git a/build/.cmake/api/v1/reply/target-ALL_BUILD-Release-21126e6f26f8151b82a1.json b/build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-30097c8e6651db3aff43.json similarity index 100% rename from build/.cmake/api/v1/reply/target-ALL_BUILD-Release-21126e6f26f8151b82a1.json rename to build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-30097c8e6651db3aff43.json index 3293cbc..9fd930e 100644 --- a/build/.cmake/api/v1/reply/target-ALL_BUILD-Release-21126e6f26f8151b82a1.json +++ b/build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-30097c8e6651db3aff43.json @@ -22,10 +22,10 @@ "dependencies" : [ { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "folder" : diff --git a/build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-1b3c50ca02e96d15a11f.json b/build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-cadb66c5dccd0bd206e6.json similarity index 100% rename from build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-1b3c50ca02e96d15a11f.json rename to build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-cadb66c5dccd0bd206e6.json index a1685bc..8e32007 100644 --- a/build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-1b3c50ca02e96d15a11f.json +++ b/build/.cmake/api/v1/reply/target-ALL_BUILD-RelWithDebInfo-cadb66c5dccd0bd206e6.json @@ -22,13 +22,13 @@ "dependencies" : [ { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { "id" : "HydraClient::@6890427a1f51a3e7e1df" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "folder" : @@ -41,10 +41,10 @@ "orderDependencies" : [ { - "id" : "HydraClient::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "HydraClient::@6890427a1f51a3e7e1df" } ], "paths" : diff --git a/build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-21126e6f26f8151b82a1.json b/build/.cmake/api/v1/reply/target-ALL_BUILD-Release-30097c8e6651db3aff43.json similarity index 100% rename from build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-21126e6f26f8151b82a1.json rename to build/.cmake/api/v1/reply/target-ALL_BUILD-Release-30097c8e6651db3aff43.json index 3293cbc..9fd930e 100644 --- a/build/.cmake/api/v1/reply/target-ALL_BUILD-Debug-21126e6f26f8151b82a1.json +++ b/build/.cmake/api/v1/reply/target-ALL_BUILD-Release-30097c8e6651db3aff43.json @@ -22,10 +22,10 @@ "dependencies" : [ { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "folder" : diff --git a/build/.cmake/api/v1/reply/target-ALL_BUILD-Release-1b3c50ca02e96d15a11f.json b/build/.cmake/api/v1/reply/target-ALL_BUILD-Release-cadb66c5dccd0bd206e6.json similarity index 100% rename from build/.cmake/api/v1/reply/target-ALL_BUILD-Release-1b3c50ca02e96d15a11f.json rename to build/.cmake/api/v1/reply/target-ALL_BUILD-Release-cadb66c5dccd0bd206e6.json index a1685bc..8e32007 100644 --- a/build/.cmake/api/v1/reply/target-ALL_BUILD-Release-1b3c50ca02e96d15a11f.json +++ b/build/.cmake/api/v1/reply/target-ALL_BUILD-Release-cadb66c5dccd0bd206e6.json @@ -22,13 +22,13 @@ "dependencies" : [ { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { "id" : "HydraClient::@6890427a1f51a3e7e1df" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "folder" : @@ -41,10 +41,10 @@ "orderDependencies" : [ { - "id" : "HydraClient::@6890427a1f51a3e7e1df" + "id" : "HydraEngine::@fafd37b19aacd4c483ed" }, { - "id" : "HydraEngine::@fafd37b19aacd4c483ed" + "id" : "HydraClient::@6890427a1f51a3e7e1df" } ], "paths" : diff --git a/build/.cmake/api/v1/reply/target-HydraClient-Debug-ccca9689ebe6b19fe65a.json b/build/.cmake/api/v1/reply/target-HydraClient-Debug-78ce361b98c7c89e9629.json similarity index 100% rename from build/.cmake/api/v1/reply/target-HydraClient-Debug-ccca9689ebe6b19fe65a.json rename to build/.cmake/api/v1/reply/target-HydraClient-Debug-78ce361b98c7c89e9629.json index c7b1ff5..47646bd 100644 --- a/build/.cmake/api/v1/reply/target-HydraClient-Debug-ccca9689ebe6b19fe65a.json +++ b/build/.cmake/api/v1/reply/target-HydraClient-Debug-78ce361b98c7c89e9629.json @@ -106,12 +106,12 @@ ], "dependencies" : [ - { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" - }, { "backtrace" : 2, "id" : "HydraEngine::@fafd37b19aacd4c483ed" + }, + { + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "id" : "HydraClient::@6890427a1f51a3e7e1df", diff --git a/build/.cmake/api/v1/reply/target-HydraClient-MinSizeRel-707588ed524688a0f034.json b/build/.cmake/api/v1/reply/target-HydraClient-MinSizeRel-0b1754e9511a8dea2861.json similarity index 100% rename from build/.cmake/api/v1/reply/target-HydraClient-MinSizeRel-707588ed524688a0f034.json rename to build/.cmake/api/v1/reply/target-HydraClient-MinSizeRel-0b1754e9511a8dea2861.json index 9381a96..14caed4 100644 --- a/build/.cmake/api/v1/reply/target-HydraClient-MinSizeRel-707588ed524688a0f034.json +++ b/build/.cmake/api/v1/reply/target-HydraClient-MinSizeRel-0b1754e9511a8dea2861.json @@ -106,12 +106,12 @@ ], "dependencies" : [ - { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" - }, { "backtrace" : 2, "id" : "HydraEngine::@fafd37b19aacd4c483ed" + }, + { + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "id" : "HydraClient::@6890427a1f51a3e7e1df", diff --git a/build/.cmake/api/v1/reply/target-HydraClient-RelWithDebInfo-a4b1a5ac731bdcc03733.json b/build/.cmake/api/v1/reply/target-HydraClient-RelWithDebInfo-19110864938462bdea5b.json similarity index 100% rename from build/.cmake/api/v1/reply/target-HydraClient-RelWithDebInfo-a4b1a5ac731bdcc03733.json rename to build/.cmake/api/v1/reply/target-HydraClient-RelWithDebInfo-19110864938462bdea5b.json index 0e5cae5..b28d9b3 100644 --- a/build/.cmake/api/v1/reply/target-HydraClient-RelWithDebInfo-a4b1a5ac731bdcc03733.json +++ b/build/.cmake/api/v1/reply/target-HydraClient-RelWithDebInfo-19110864938462bdea5b.json @@ -106,12 +106,12 @@ ], "dependencies" : [ - { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" - }, { "backtrace" : 2, "id" : "HydraEngine::@fafd37b19aacd4c483ed" + }, + { + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "id" : "HydraClient::@6890427a1f51a3e7e1df", diff --git a/build/.cmake/api/v1/reply/target-HydraClient-Release-f300bf694420197200c5.json b/build/.cmake/api/v1/reply/target-HydraClient-Release-5f750d1feb1d099be72b.json similarity index 100% rename from build/.cmake/api/v1/reply/target-HydraClient-Release-f300bf694420197200c5.json rename to build/.cmake/api/v1/reply/target-HydraClient-Release-5f750d1feb1d099be72b.json index 331eab5..f63d5ce 100644 --- a/build/.cmake/api/v1/reply/target-HydraClient-Release-f300bf694420197200c5.json +++ b/build/.cmake/api/v1/reply/target-HydraClient-Release-5f750d1feb1d099be72b.json @@ -106,12 +106,12 @@ ], "dependencies" : [ - { - "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" - }, { "backtrace" : 2, "id" : "HydraEngine::@fafd37b19aacd4c483ed" + }, + { + "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" } ], "id" : "HydraClient::@6890427a1f51a3e7e1df", diff --git a/build/Debug/HydraClient.pdb b/build/Debug/HydraClient.pdb index 12ae6b4..a67a26b 100644 Binary files a/build/Debug/HydraClient.pdb and b/build/Debug/HydraClient.pdb differ diff --git a/build/HydraClient.dir/Debug/HydraClient.ilk b/build/HydraClient.dir/Debug/HydraClient.ilk index 7ed167b..34592ab 100644 Binary files a/build/HydraClient.dir/Debug/HydraClient.ilk and b/build/HydraClient.dir/Debug/HydraClient.ilk differ diff --git a/build/HydraClient.dir/Debug/HydraClient.tlog/link.read.1.tlog b/build/HydraClient.dir/Debug/HydraClient.tlog/link.read.1.tlog index 6cbe136..fe4b3e0 100644 Binary files a/build/HydraClient.dir/Debug/HydraClient.tlog/link.read.1.tlog and b/build/HydraClient.dir/Debug/HydraClient.tlog/link.read.1.tlog differ diff --git a/build/HydraClient.dir/Debug/vc143.pdb b/build/HydraClient.dir/Debug/vc143.pdb index 27252e5..0cd7c4c 100644 Binary files a/build/HydraClient.dir/Debug/vc143.pdb and b/build/HydraClient.dir/Debug/vc143.pdb differ diff --git a/build/HydraEngine/Debug/HydraEngine.pdb b/build/HydraEngine/Debug/HydraEngine.pdb index 19f1b0d..778dcde 100644 Binary files a/build/HydraEngine/Debug/HydraEngine.pdb and b/build/HydraEngine/Debug/HydraEngine.pdb differ diff --git a/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.ilk b/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.ilk index 0ee9f4d..09b4551 100644 Binary files a/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.ilk and b/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.ilk differ diff --git a/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.command.1.tlog b/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.command.1.tlog index fbb38b5..9e57765 100644 Binary files a/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.command.1.tlog and b/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.command.1.tlog differ diff --git a/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.read.1.tlog b/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.read.1.tlog index c2146b8..c1c7994 100644 Binary files a/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.read.1.tlog and b/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.read.1.tlog differ diff --git a/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.write.1.tlog b/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.write.1.tlog index 66cbc83..f93f38e 100644 Binary files a/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.write.1.tlog and b/build/HydraEngine/HydraEngine.dir/Debug/HydraEngine.tlog/CL.write.1.tlog differ diff --git a/build/HydraEngine/HydraEngine.dir/Debug/vc143.pdb b/build/HydraEngine/HydraEngine.dir/Debug/vc143.pdb index b489f31..e751d7c 100644 Binary files a/build/HydraEngine/HydraEngine.dir/Debug/vc143.pdb and b/build/HydraEngine/HydraEngine.dir/Debug/vc143.pdb differ diff --git a/build/linkerrors.txt b/build/linkerrors.txt index 4ab7e1b..b054b24 100644 --- a/build/linkerrors.txt +++ b/build/linkerrors.txt @@ -1,14 +1,8 @@ ================================================================================ Linker Errors -Generated: 2026-07-25T14:46:34.347Z -Total Errors: 3 +Generated: 2026-07-27T23:22:14.073Z +Total Errors: 1 ================================================================================ -[LNK2001] (MSVC) -unresolved external symbol "public: virtual void __cdecl HydraShadowSourceSystem::Initialise(void)" (?Initialise@HydraShadowSourceSystem@@UEAAXXZ) [C:\Code\HydraV3\build\HydraEngine\HydraEngine.vcxproj] - -[LNK2001] (MSVC) -unresolved external symbol "protected: virtual void __cdecl HydraShadowSourceSystem::InitialiseComponent(unsigned int)" (?InitialiseComponent@HydraShadowSourceSystem@@MEAAXI@Z) [C:\Code\HydraV3\build\HydraEngine\HydraEngine.vcxproj] - -[LNK1120] (MSVC) -2 unresolved externals [C:\Code\HydraV3\build\HydraEngine\HydraEngine.vcxproj] +[LNK1201] (MSVC) +error writing to program database 'C:\Code\HydraV3\build\HydraEngine\Debug\HydraEngine.pdb'; check for insufficient disk space, invalid path, or insufficient privilege [C:\Code\HydraV3\build\HydraEngine\HydraEngine.vcxproj]