Shadow buffer
This commit is contained in:
@@ -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,14 +8,12 @@ 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,
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ HydraID HydraTextureBufferManager::LoadTexture(std::string texture_filename)
|
|||||||
HydraID create_tex_id = scheduler->CreateTask<HydraCreateTextureTask>(HydraThreadAffinity::Render);
|
HydraID create_tex_id = scheduler->CreateTask<HydraCreateTextureTask>(HydraThreadAffinity::Render);
|
||||||
HydraCreateTextureTask *create_tex_task = static_cast<HydraCreateTextureTask *>(scheduler->GetTask(create_tex_id));
|
HydraCreateTextureTask *create_tex_task = static_cast<HydraCreateTextureTask *>(scheduler->GetTask(create_tex_id));
|
||||||
HydraID tex_id = INVALID_HYDRA_ID;
|
HydraID tex_id = INVALID_HYDRA_ID;
|
||||||
create_tex_task->Initialise(texture_filename,
|
create_tex_task->Initialise(texture_filename,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
GL_RGBA8,
|
GL_RGBA8,
|
||||||
@@ -107,7 +107,45 @@ HydraID HydraTextureBufferManager::_GetTextureID()
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
HydraID HydraTextureBufferManager::CreateTexture(std::string texture_name,
|
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,
|
||||||
uint32_t width,
|
uint32_t width,
|
||||||
uint32_t height,
|
uint32_t height,
|
||||||
uint32_t internal_format,
|
uint32_t internal_format,
|
||||||
@@ -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,48 +14,46 @@
|
|||||||
#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);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HydraShadowSourceSystem::InitialiseComponent(HydraID entity_id)
|
void HydraShadowSourceSystem::InitialiseComponent(HydraID entity_id)
|
||||||
{
|
{
|
||||||
HydraEngine* engine = GetEngine();
|
HydraEngine *engine = GetEngine();
|
||||||
HydraECS* ecs = engine->ECS();
|
HydraECS *ecs = engine->ECS();
|
||||||
HydraLightComponent& light_comp = ecs->GetComponent<HydraLightComponent>(entity_id);
|
HydraLightComponent &light_comp = ecs->GetComponent<HydraLightComponent>(entity_id);
|
||||||
switch(light_comp.light_type)
|
switch (light_comp.light_type)
|
||||||
{
|
{
|
||||||
case (int)HYDRA_LIGHT_TYPE::HYDRA_LIGHT_DIRECTIONAL:
|
case (int)HYDRA_LIGHT_TYPE::HYDRA_LIGHT_DIRECTIONAL:
|
||||||
_InitialiseDirectionalLight(entity_id);
|
_InitialiseDirectionalLight(entity_id);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HydraShadowSourceSystem::UpdateSystem(float delta_t_seconds)
|
void HydraShadowSourceSystem::UpdateSystem(float delta_t_seconds)
|
||||||
{
|
{
|
||||||
HydraEngine* engine = GetEngine();
|
HydraEngine *engine = GetEngine();
|
||||||
HydraECS* ecs = engine->ECS();
|
HydraECS *ecs = engine->ECS();
|
||||||
std::vector<HydraShadowSourceComponent> shadows;
|
std::vector<HydraShadowSourceComponent> shadows;
|
||||||
for(HydraID entity_id:Entities)
|
for (HydraID entity_id : Entities)
|
||||||
{
|
{
|
||||||
|
|
||||||
HydraLightComponent& light_comp = ecs->GetComponent<HydraLightComponent>(entity_id);
|
HydraLightComponent &light_comp = ecs->GetComponent<HydraLightComponent>(entity_id);
|
||||||
switch(light_comp.light_type)
|
switch (light_comp.light_type)
|
||||||
{
|
{
|
||||||
case (int)HYDRA_LIGHT_TYPE::HYDRA_LIGHT_DIRECTIONAL:
|
case (int)HYDRA_LIGHT_TYPE::HYDRA_LIGHT_DIRECTIONAL:
|
||||||
_UpdateDirectionalLight(entity_id);
|
_UpdateDirectionalLight(entity_id);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
HydraShadowSourceComponent shad_comp = ecs->GetComponent<HydraShadowSourceComponent>(entity_id);
|
HydraShadowSourceComponent shad_comp = ecs->GetComponent<HydraShadowSourceComponent>(entity_id);
|
||||||
@@ -66,75 +64,74 @@ void HydraShadowSourceSystem::UpdateSystem(float delta_t_seconds)
|
|||||||
|
|
||||||
void HydraShadowSourceSystem::_UpdateDirectionalLight(HydraID entity_id)
|
void HydraShadowSourceSystem::_UpdateDirectionalLight(HydraID entity_id)
|
||||||
{
|
{
|
||||||
HydraEngine* engine = GetEngine();
|
HydraEngine *engine = GetEngine();
|
||||||
HydraECS* ecs = engine->ECS();
|
HydraECS *ecs = engine->ECS();
|
||||||
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_near = -5.0f;
|
||||||
|
float view_far = 5.0f;
|
||||||
|
|
||||||
float view_size = 5.0f;
|
float PI = 3.1415927;
|
||||||
float view_near = -5.0f;
|
float TWO_PI = 6.2831854;
|
||||||
float view_far = 5.0f;
|
|
||||||
|
|
||||||
float PI = 3.1415927;
|
glm::vec3 light_dir = glm::vec3(0, 0, -1);
|
||||||
float TWO_PI = 6.2831854;
|
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);
|
||||||
|
|
||||||
glm::vec3 light_dir = glm::vec3(0, 0, -1);
|
light_dir = light_rot * light_dir;
|
||||||
glm::mat3 light_rot = glm::mat3(1);
|
light_dir = glm::normalize(light_dir);
|
||||||
glm::vec3 light_euler = pos_comp.orientation;
|
glm::vec3 camera_pos = GetEngine()->Camera()->GetPosition();
|
||||||
light_rot = glm::eulerAngleXYZ(light_euler.x, light_euler.y, light_euler.z);
|
|
||||||
|
|
||||||
light_dir = light_rot * light_dir;
|
for (uint32_t i = 0; i < 6; i++)
|
||||||
light_dir = glm::normalize(light_dir);
|
{
|
||||||
glm::vec3 camera_pos = GetEngine()->Camera()->GetPosition();
|
glm::vec3 light_pos = camera_pos; // - (light_dir * light_distance);
|
||||||
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_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 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;
|
||||||
shad_comp.light_space_proj[i] = proj;
|
shad_comp.light_space_proj[i] = proj;
|
||||||
shad_comp.light_space_view[i] = view;
|
shad_comp.light_space_view[i] = view;
|
||||||
|
|
||||||
view_far *= 3.0f;
|
view_far *= 3.0f;
|
||||||
view_near = -view_far;
|
view_near = -view_far;
|
||||||
view_size *= 3.0f;
|
view_size *= 3.0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HydraShadowSourceSystem::_InitialiseDirectionalLight(HydraID entity_id)
|
void HydraShadowSourceSystem::_InitialiseDirectionalLight(HydraID entity_id)
|
||||||
{
|
{
|
||||||
HydraEngine* engine = GetEngine();
|
HydraEngine *engine = GetEngine();
|
||||||
HydraECS* ecs = engine->ECS();
|
HydraECS *ecs = engine->ECS();
|
||||||
HydraTextureBufferManager* tex_man = engine->TextureBufferManager();
|
HydraTextureBufferManager *tex_man = engine->TextureBufferManager();
|
||||||
HydraShadowSourceComponent& shad_comp = ecs->GetComponent<HydraShadowSourceComponent>(entity_id);
|
HydraShadowSourceComponent &shad_comp = ecs->GetComponent<HydraShadowSourceComponent>(entity_id);
|
||||||
shad_comp.entity_id = entity_id;
|
shad_comp.entity_id = entity_id;
|
||||||
shad_comp.cascade_count = 6;
|
shad_comp.cascade_count = 6;
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
HydraEngine* engine = GetEngine();
|
HydraEngine *engine = GetEngine();
|
||||||
HydraECS* ecs = engine->ECS();
|
HydraECS *ecs = engine->ECS();
|
||||||
|
|
||||||
void *buffer = static_cast<void *>(shadows.data());
|
void *buffer = static_cast<void *>(shadows.data());
|
||||||
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
||||||
|
|
||||||
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);
|
||||||
}
|
}
|
||||||
@@ -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));
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ void HydraGLTFLoader::_ProcessGLTFTextures(aiScene const *scene, std::vector<uin
|
|||||||
//stbi_set_flip_vertically_on_load(1);
|
//stbi_set_flip_vertically_on_load(1);
|
||||||
stbi_uc* data = stbi_load_from_memory(reinterpret_cast<stbi_uc*>(tex->pcData), tex->mWidth, &width, &height, &channels, 4);
|
stbi_uc* data = stbi_load_from_memory(reinterpret_cast<stbi_uc*>(tex->pcData), tex->mWidth, &width, &height, &channels, 4);
|
||||||
|
|
||||||
HydraID texture_id = texture_manager->CreateTexture(texture_name,
|
HydraID texture_id = texture_manager->CreateTexture(texture_name,
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
GL_RGBA8,
|
GL_RGBA8,
|
||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,111 +28,99 @@ void HydraShadowPipeline::Shutdown()
|
|||||||
|
|
||||||
void HydraShadowPipeline::Render()
|
void HydraShadowPipeline::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>();
|
||||||
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;
|
||||||
for(HydraID entity_id:shadow_system->Entities)
|
|
||||||
|
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)
|
||||||
{
|
{
|
||||||
_UpdateUBO(shadow_idx);
|
_UpdateUBO(shadow_idx);
|
||||||
_BindFrameBufferAttachments(entity_id);
|
// _BindFrameBufferAttachments(entity_id);
|
||||||
GetEngine()->Renderer()->BeginFrame();
|
HydraShadowSourceComponent shad_comp = GetEngine()->ECS()->GetComponent<HydraShadowSourceComponent>(entity_id);
|
||||||
for(uint32_t rs_idx = 0; rs_idx <m_render_stages.size(); rs_idx++)
|
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++)
|
||||||
{
|
{
|
||||||
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++;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HydraShadowPipeline::_CreateRenderStage()
|
void HydraShadowPipeline::_CreateRenderStage()
|
||||||
{
|
{
|
||||||
HydraRenderStage* render_stage = new HydraRenderStage();
|
HydraRenderStage *render_stage = new HydraRenderStage();
|
||||||
std::string shader_path = std::string(shader_base);
|
std::string shader_path = std::string(shader_base);
|
||||||
HydraBufferManager* buffer_manager = GetEngine()->BufferManager();
|
HydraBufferManager *buffer_manager = GetEngine()->BufferManager();
|
||||||
|
|
||||||
HydraID pos_buffer_id = buffer_manager->FindBuffer("PositionsBuffer");
|
HydraID pos_buffer_id = buffer_manager->FindBuffer("PositionsBuffer");
|
||||||
HydraID shadow_buffer_id = buffer_manager->FindBuffer("ShadowBuffer");
|
HydraID shadow_buffer_id = buffer_manager->FindBuffer("ShadowBuffer");
|
||||||
HydraID per_frame_buffer_id = buffer_manager->FindBuffer("ShadowPerFrameUBO");
|
HydraID per_frame_buffer_id = buffer_manager->FindBuffer("ShadowPerFrameUBO");
|
||||||
|
|
||||||
HydraShaderBinding shader_binding = {};
|
HydraShaderBinding shader_binding = {};
|
||||||
|
|
||||||
shader_binding.block_name.push_back("PositionsBuffer");
|
shader_binding.block_name.push_back("PositionsBuffer");
|
||||||
shader_binding.binding_point.push_back(1);
|
shader_binding.binding_point.push_back(1);
|
||||||
shader_binding.buffer_id.push_back(pos_buffer_id);
|
shader_binding.buffer_id.push_back(pos_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("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);
|
||||||
|
|
||||||
std::vector<uint32_t> textures;
|
std::vector<uint32_t> textures;
|
||||||
|
|
||||||
render_stage->Initialise(shader_path + "shadow_shader.vert",
|
render_stage->Initialise(shader_path + "shadow_shader.vert",
|
||||||
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);
|
||||||
m_render_stages.push_back(render_stage);
|
m_render_stages.push_back(render_stage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HydraShadowPipeline::_UpdateUBO(uint32_t shadow_idx)
|
void HydraShadowPipeline::_UpdateUBO(uint32_t shadow_idx)
|
||||||
{
|
{
|
||||||
HydraBufferManager* buffer_manager = GetEngine()->BufferManager();
|
HydraBufferManager *buffer_manager = GetEngine()->BufferManager();
|
||||||
buffer_manager->UpdatePartialBuffer(m_per_frame_ubo,3*sizeof(float), sizeof(uint32_t), &shadow_idx);
|
buffer_manager->UpdatePartialBuffer(m_per_frame_ubo, 3 * sizeof(float), sizeof(uint32_t), &shadow_idx);
|
||||||
glBindBuffer(GL_UNIFORM_BUFFER, m_per_frame_ubo);
|
glBindBuffer(GL_UNIFORM_BUFFER, m_per_frame_ubo);
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
||||||
|
|
||||||
m_per_frame_ubo = buffer_manager->CreateGPUBuffer("ShadowPerFrameUBO",
|
m_per_frame_ubo = buffer_manager->CreateGPUBuffer("ShadowPerFrameUBO",
|
||||||
sizeof(float)*4, 0, HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER);
|
sizeof(float) * 4, 0, HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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,10 +36,10 @@ 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,
|
||||||
uint32_t width,
|
uint32_t width,
|
||||||
uint32_t height,
|
uint32_t height,
|
||||||
uint32_t internal_format,
|
uint32_t internal_format,
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public:
|
|||||||
m_data);
|
m_data);
|
||||||
|
|
||||||
}
|
}
|
||||||
void Initialise(std::string texture_name,
|
void Initialise(std::string texture_name,
|
||||||
uint32_t width,
|
uint32_t width,
|
||||||
uint32_t height,
|
uint32_t height,
|
||||||
uint32_t internal_format,
|
uint32_t internal_format,
|
||||||
@@ -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 */
|
||||||
@@ -10,8 +10,7 @@ class HydraRenderTask : public HydraTask
|
|||||||
protected:
|
protected:
|
||||||
public:
|
public:
|
||||||
virtual void Process() override
|
virtual void Process() override
|
||||||
{
|
{
|
||||||
GetEngine()->Renderer()->BeginFrame();
|
|
||||||
GetEngine()->Renderer()->EndFrame();
|
GetEngine()->Renderer()->EndFrame();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
+8
-8
@@ -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
|
||||||
},
|
},
|
||||||
+2
-2
@@ -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" :
|
||||||
{
|
{
|
||||||
+4
-4
@@ -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" :
|
||||||
+4
-4
@@ -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" :
|
||||||
+4
-4
@@ -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" :
|
||||||
+4
-4
@@ -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" :
|
||||||
+93
-87
@@ -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,
|
||||||
+93
-87
@@ -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,
|
||||||
+93
-87
@@ -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,
|
||||||
+93
-87
@@ -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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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,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
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user