Directional Shdaows, no alpha

This commit is contained in:
Confideo-IOM
2026-08-03 22:34:52 +01:00
parent 299ad1d9c7
commit d074dc71a5
69 changed files with 1353 additions and 406 deletions
+14 -5
View File
@@ -11,13 +11,14 @@ bool HydraGame::Initialise()
m_sun_light_id = GetEngine()->ActorManager()->CreateActor<HydraDirectionalLightActor>(); m_sun_light_id = GetEngine()->ActorManager()->CreateActor<HydraDirectionalLightActor>();
GetEngine()->ActorManager()->InitialiseActor(m_sun_light_id); GetEngine()->ActorManager()->InitialiseActor(m_sun_light_id);
GetEngine()->ActorManager()->SetOrientation(m_sun_light_id, -0.25f, 0.0f, 0.0f); GetEngine()->ActorManager()->SetOrientation(m_sun_light_id, -0.5f, 0.0f, 0.0f);
GetEngine()->ActorManager()->SetPosition(m_sun_light_id, glm::dvec3(0.0f, 5.0f, 10.0f));
// m_other_light_id = GetEngine()->ActorManager()->CreateActor<HydraPointLightActor>(); // m_other_light_id = GetEngine()->ActorManager()->CreateActor<HydraPointLightActor>();
// GetEngine()->ActorManager()->InitialiseActor(m_other_light_id); // GetEngine()->ActorManager()->InitialiseActor(m_other_light_id);
// GetEngine()->ActorManager()->SetOrientation(m_other_light_id, -0.5f, 0.0f, 0.0f); // GetEngine()->ActorManager()->SetOrientation(m_other_light_id, -0.5f, 0.0f, 0.0f);
// GetEngine()->ActorManager()->SetPosition(m_other_light_id, glm::dvec3(5.0f, 4.0f, 5.0f)); // GetEngine()->ActorManager()->SetPosition(m_other_light_id, glm::dvec3(5.0f, 4.0f, 5.0f));
// m_other_light_id = GetEngine()->ActorManager()->CreateActor<HydraDirectionalLightActor>(); // m_other_light_id = GetEngine()->ActorManager()->CreateActor<HydraDirectionalLightActor>();
// GetEngine()->ActorManager()->InitialiseActor(m_other_light_id); // GetEngine()->ActorManager()->InitialiseActor(m_other_light_id);
// GetEngine()->ActorManager()->SetOrientation(m_other_light_id, 0.4f, 0.5f, 0.0f); // GetEngine()->ActorManager()->SetOrientation(m_other_light_id, 0.4f, 0.5f, 0.0f);
@@ -25,6 +26,10 @@ bool HydraGame::Initialise()
// //1.570796327f // //1.570796327f
// //3.141592654f // //3.141592654f
m_cube_actor_id = GetEngine()->ActorManager()->CreateActor<HydraTestCubeActor>();
GetEngine()->ActorManager()->InitialiseActor(m_cube_actor_id);
GetEngine()->ActorManager()->SetPosition(m_cube_actor_id, glm::dvec3(0, 1.0, 0));
m_plane_actor_id = GetEngine()->ActorManager()->CreateActor<HydraPlaneActor>(); m_plane_actor_id = GetEngine()->ActorManager()->CreateActor<HydraPlaneActor>();
GetEngine()->ActorManager()->InitialiseActor(m_plane_actor_id); GetEngine()->ActorManager()->InitialiseActor(m_plane_actor_id);
GetEngine()->ActorManager()->SetPosition(m_plane_actor_id, glm::dvec3(0, 0, 0)); GetEngine()->ActorManager()->SetPosition(m_plane_actor_id, glm::dvec3(0, 0, 0));
@@ -34,13 +39,17 @@ bool HydraGame::Initialise()
// GetEngine()->ActorManager()->SetPosition(m_cube_actor_id, glm::dvec3(0, -2, 0)); // GetEngine()->ActorManager()->SetPosition(m_cube_actor_id, glm::dvec3(0, -2, 0));
// GetEngine()->ActorManager()->SetRelationship(m_plane_actor_id, m_cube_actor_id); // GetEngine()->ActorManager()->SetRelationship(m_plane_actor_id, m_cube_actor_id);
m_gltf_id = GetEngine()->ActorManager()->LoadActor("c:/Code/HydraV3/Media/AntiqueCamera.glb"); m_gltf_id = GetEngine()->ActorManager()->LoadActor("c:/Code/HydraV3/Media/Tree1.glb");
GetEngine()->ActorManager()->InitialiseActor(m_gltf_id); GetEngine()->ActorManager()->InitialiseActor(m_gltf_id);
GetEngine()->ActorManager()->SetPosition(m_gltf_id, glm::dvec3(0, 0, 0)); GetEngine()->ActorManager()->SetPosition(m_gltf_id, glm::dvec3(0, 0, 0));
m_gltf_id1 = GetEngine()->ActorManager()->LoadActor("c:/Code/HydraV3/Media/Tree1.glb");
GetEngine()->ActorManager()->InitialiseActor(m_gltf_id);
GetEngine()->ActorManager()->SetPosition(m_gltf_id, glm::dvec3(0, 0, 500));
m_player_actor_id = GetEngine()->ActorManager()->CreateActor<HydraPlayerActor>(); m_player_actor_id = GetEngine()->ActorManager()->CreateActor<HydraPlayerActor>();
GetEngine()->ActorManager()->InitialiseActor(m_player_actor_id); GetEngine()->ActorManager()->InitialiseActor(m_player_actor_id);
GetEngine()->ActorManager()->SetPosition(m_player_actor_id, glm::dvec3(0, 4, 4)); GetEngine()->ActorManager()->SetPosition(m_player_actor_id, glm::dvec3(0, 2, 2));
GetEngine()->PossessPlayer(m_player_actor_id); GetEngine()->PossessPlayer(m_player_actor_id);
GetEngine()->Camera()->AttachToActor(m_player_actor_id); GetEngine()->Camera()->AttachToActor(m_player_actor_id);
@@ -61,7 +70,7 @@ void HydraGame::Update(float delta_t_seconds)
// } // }
m_angle += m_diff; m_angle += m_diff;
//GetEngine()->ActorManager()->SetOrientation(m_sun_light_id, -0.2, m_angle, 0); GetEngine()->ActorManager()->SetOrientation(m_sun_light_id, -0.5f, m_angle/2.0f, 0);
// GetEngine()->ActorManager()->SetOrientation(m_gltf_id, 0, m_angle, 0); // GetEngine()->ActorManager()->SetOrientation(m_gltf_id, 0, m_angle, 0);
// GetEngine()->ActorManager()->SetOrientation(m_plane_actor_id, 0, m_angle, 0); // GetEngine()->ActorManager()->SetOrientation(m_plane_actor_id, 0, m_angle, 0);
} }
+1
View File
@@ -15,6 +15,7 @@ class HydraGame : public HydraGameProxy
HydraID m_sun_light_id = INVALID_HYDRA_ID; HydraID m_sun_light_id = INVALID_HYDRA_ID;
HydraID m_other_light_id = INVALID_HYDRA_ID; HydraID m_other_light_id = INVALID_HYDRA_ID;
HydraID m_gltf_id = INVALID_HYDRA_ID; HydraID m_gltf_id = INVALID_HYDRA_ID;
HydraID m_gltf_id1 = INVALID_HYDRA_ID;
float m_time = 0; float m_time = 0;
float m_angle = 0; float m_angle = 0;
float m_diff = 0.005; float m_diff = 0.005;
+2
View File
@@ -10,6 +10,8 @@
#include "../source/actor/HydraDirectionalLightActor.h" #include "../source/actor/HydraDirectionalLightActor.h"
#include "../source/actor/HydraPointLightActor.h" #include "../source/actor/HydraPointLightActor.h"
#include "../source/actor/HydraSpotLightActor.h" #include "../source/actor/HydraSpotLightActor.h"
#include "../source/actor/HydraTestCubeActor.h"
#include "../source/camera/HydraCamera.h" #include "../source/camera/HydraCamera.h"
#include <GLMIncludes.h> #include <GLMIncludes.h>
+3 -2
View File
@@ -42,7 +42,7 @@ const uint32_t MAX_TEXTURES = 1000;
const uint32_t MAX_ACTORS = 10000; const uint32_t MAX_ACTORS = 10000;
const uint32_t MAX_LIGHTS = 500; const uint32_t MAX_LIGHTS = 500;
const uint32_t MAX_SHADOWS = 10; const uint32_t MAX_SHADOWS = 10;
const uint32_t SHADOW_MAP_SIZE = 1024; const uint32_t SHADOW_MAP_SIZE = 4096;
enum class HYDRA_RENDERABLE_TYPE enum class HYDRA_RENDERABLE_TYPE
@@ -51,7 +51,8 @@ enum class HYDRA_RENDERABLE_TYPE
HYDRA_SHADOW, HYDRA_SHADOW,
HYDRA_TRANSPARENT, HYDRA_TRANSPARENT,
HYDRA_LIGHTING, HYDRA_LIGHTING,
HYDRA_OUTPUT HYDRA_OUTPUT,
HYDRA_TEXTURE_DEBUG
}; };
enum class HYDRA_BUFFER_TYPE enum class HYDRA_BUFFER_TYPE
@@ -16,7 +16,7 @@ uint HYDRA_LIGHT_DIRECTIONAL = 1;
uint HYDRA_LIGHT_POINT = 2; uint HYDRA_LIGHT_POINT = 2;
uint HYDRA_LIGHT_SPOT = 3; uint HYDRA_LIGHT_SPOT = 3;
struct light_structure struct LightStructure
{ {
vec4 ambient; vec4 ambient;
vec4 diffuse; vec4 diffuse;
@@ -29,8 +29,25 @@ struct light_structure
float cutoff_outer; float cutoff_outer;
uint entity_id; uint entity_id;
uint light_type; uint light_type;
uint shadow_map_id;
uint shadow_caster;
uint padding0;
uint padding1;
}; };
struct ShadowMapSet
{
uint entity_id;
uint cascade_count;
uint shadow_texture_id;
uint frame_buffer_id;
float near_plane[8];
float far_plane[8];
mat4 light_space_proj[6];
mat4 light_space_view[6];
};
layout(binding = 0) uniform uniform_per_frame layout(binding = 0) uniform uniform_per_frame
{ {
mat4 view; mat4 view;
@@ -45,20 +62,26 @@ layout(binding = 1) uniform uniform_output_textures
uint texture_ids[16]; uint texture_ids[16];
}; };
layout(std430, binding = 1) readonly buffer PositionsBuffer layout(std430, binding = 1) readonly buffer positions_buffer
{ {
mat4 model_matrix[]; mat4 model_matrix[];
}; };
layout( std430, binding = 3) readonly buffer TextureBuffer { layout( std430, binding = 3) readonly buffer texture_buffer {
uvec2 textures[1000]; uvec2 textures[1000];
}; };
layout (std430, binding = 4) readonly buffer LightBuffer layout (std430, binding = 4) readonly buffer light_buffer
{ {
light_structure lights[500]; LightStructure lights[500];
}; };
layout (std430, binding = 5) readonly buffer shadow_map_sets
{
ShadowMapSet shadows[10];
};
layout (location=0) in VS_OUT layout (location=0) in VS_OUT
{ {
vec2 vsUV; vec2 vsUV;
@@ -189,8 +212,6 @@ vec3 PointShading(vec3 normal,
vec3 world_pos, vec3 world_pos,
vec3 view_pos) vec3 view_pos)
{ {
float distance = length(light_pos - world_pos); float distance = length(light_pos - world_pos);
float attenuation = 1.0; float attenuation = 1.0;
@@ -220,10 +241,6 @@ vec3 SpotShading(vec3 normal,
vec3 direction_to_light = normalize(light_pos - world_pos); vec3 direction_to_light = normalize(light_pos - world_pos);
float theta = dot(direction_to_light, light_dir); float theta = dot(direction_to_light, light_dir);
float falloff = 0.0f; float falloff = 0.0f;
// if(theta > cutoff) // if(theta > cutoff)
// { // {
float epsilon = cutoff - cutoff_outer; float epsilon = cutoff - cutoff_outer;
@@ -251,6 +268,101 @@ mat3 GetRotationOnlyMatrix(mat4 model_mat)
return rot_mat; return rot_mat;
} }
float SimpleSampleShadow(vec4 frag_clip_space, sampler2DArray sampler_shadow_map, uint shadow_trans_idx)
{
vec3 frag_light_space = frag_clip_space.xyz / frag_clip_space.w;
frag_light_space = (frag_light_space * 0.5) + 0.5;
float shadow_map_depth = texture(sampler_shadow_map, vec3(frag_light_space.xy, shadow_trans_idx)).r;
// return frag_light_space.z - shadow_map_depth;
// return shadow_map_depth ;
if(frag_light_space.z > shadow_map_depth)
{
return 0;
}
return 1;
}
float SampleShadow(vec4 frag_clip_space, sampler2DArray sampler_shadow_map, uint shadow_trans_idx, vec3 normal, vec3 light_dir)
{
vec3 frag_light_space = frag_clip_space.xyz / frag_clip_space.w;
frag_light_space = (frag_light_space * 0.5) + 0.5;
float shadow_map_depth = texture(sampler_shadow_map, vec3(frag_light_space.xy, shadow_trans_idx)).r;
// calculate bias (based on depth map resolution and slope)
float bias = max(0.005 * (1.0 - dot(normal, light_dir)), 0.0001);
// check whether current frag pos is in shadow
// float shadow = currentDepth - bias > closestDepth ? 1.0 : 0.0;
// PCF
float shadow = 0.0;
vec2 texel_size = 1.0 / textureSize(sampler_shadow_map, 0).xy;
for(int x = -1; x <= 1; ++x)
{
for(int y = -1; y <= 1; ++y)
{
shadow_map_depth = texture(sampler_shadow_map, vec3(frag_light_space.xy + vec2(x, y) * texel_size, shadow_trans_idx)).r;
shadow += frag_light_space.z - bias > shadow_map_depth ? 1.0 : 0.0;
}
}
shadow /= 9.0;
// keep the shadow at 0.0 when outside the far_plane region of the light's frustum.
if(frag_light_space.z > 1.0)
shadow = 0.0;
return shadow;
}
float CalculateDirectionalShadow(vec4 world_pos, uint shadow_idx, vec3 normal, vec3 light_dir)
{
float shadow = 0;
//Move the fragment to light space
vec4 frag_in_light_space = shadows[shadow_idx].light_space_view[5] * world_pos;
//measure the distance of the fragment from the light
float frag_distance = length(frag_in_light_space.xyz);
uint shadow_trans_idx = 0;
uint ignore_shadow = 0;
shadow_idx = 0;
//Work out which shadowmap is appropriate for this distance
for(uint i = 0; i < 6; i++)
{
if(frag_distance <= shadows[shadow_idx].far_plane[i])
{
//record the shadow map level
shadow_trans_idx = i;
//and indicate that this has a level
ignore_shadow = 1;
break;
}
}
if(ignore_shadow == 1)
{
vec4 translated_pixel = shadows[shadow_idx].light_space_proj[shadow_trans_idx] *
shadows[shadow_idx].light_space_view[shadow_trans_idx] *
world_pos;
uvec2 shadow_handle = textures[shadows[shadow_idx].shadow_texture_id];
shadow = SampleShadow(translated_pixel, sampler2DArray(shadow_handle), shadow_trans_idx, normal, light_dir );
}
return shadow;
}
void main() void main()
{ {
uvec2 diffuse_handle = textures[texture_ids[DIFFUSE_TEXTURE_ID]]; uvec2 diffuse_handle = textures[texture_ids[DIFFUSE_TEXTURE_ID]];
@@ -269,8 +381,9 @@ void main()
vec3 world_pos = texture(sampler2D(world_pos_handle), vs_out.vsUV.xy).xyz; vec3 world_pos = texture(sampler2D(world_pos_handle), vs_out.vsUV.xy).xyz;
float rough = metal_rough[1]; float rough = metal_rough[1];
float metal = metal_rough[2]; float metal = metal_rough[2];
float ao = 1;
vec3 Lo = vec3(0,0,0); vec3 ambient = vec3(0.05) * diffuse.xyz * ao;
vec3 Lo = ambient;
for(int i = 0; i < ubo_per_frame.light_count; i ++) for(int i = 0; i < ubo_per_frame.light_count; i ++)
{ {
mat4 model = model_matrix[lights[i].entity_id]; mat4 model = model_matrix[lights[i].entity_id];
@@ -281,6 +394,11 @@ void main()
if(lights[i].light_type == HYDRA_LIGHT_DIRECTIONAL) if(lights[i].light_type == HYDRA_LIGHT_DIRECTIONAL)
{ {
Lo += DirectionalShading(normal, diffuse.xyz, rough, metal, lights[i].intensity, light_direction, light_pos, world_pos, ubo_per_frame.viewer_pos); Lo += DirectionalShading(normal, diffuse.xyz, rough, metal, lights[i].intensity, light_direction, light_pos, world_pos, ubo_per_frame.viewer_pos);
if(lights[i].shadow_caster == 1)
{
float shadow = CalculateDirectionalShadow(vec4(world_pos, 1.0), lights[i].shadow_map_id, normal, light_direction);
Lo = Lo * vec3(1-shadow);
}
} }
else if(lights[i].light_type == HYDRA_LIGHT_POINT) else if(lights[i].light_type == HYDRA_LIGHT_POINT)
{ {
@@ -318,15 +436,11 @@ void main()
} }
float lighting = 0; float lighting = 0;
// ambient lighting (note that the next IBL tutorial will replace // ambient lighting (note that the next IBL tutorial will replace
// this ambient lighting with environment lighting). // this ambient lighting with environment lighting).
float ao = 1;
vec3 ambient = vec3(0.05) * diffuse.xyz * ao;
vec3 output_color = Lo + ambient;
vec3 output_color = Lo;
// HDR tonemapping // HDR tonemapping
output_color = output_color / (output_color + vec3(1.0)); output_color = output_color / (output_color + vec3(1.0));
@@ -9,7 +9,7 @@ layout(binding = 0) uniform uniform_per_frame
uint light_count; uint light_count;
} ubo_per_frame; } ubo_per_frame;
layout(std430, binding = 1) readonly buffer PositionsBuffer layout(std430, binding = 1) readonly buffer positions_buffer
{ {
mat4 model_matrix[]; mat4 model_matrix[];
}; };
@@ -16,12 +16,12 @@ struct MaterialStore
uint padding[1]; uint padding[1];
}; };
layout(binding = 2, std430) readonly buffer MaterialBuffer layout(binding = 2, std430) readonly buffer material_buffer
{ {
MaterialStore materials[1000]; MaterialStore materials[1000];
}; };
layout( std430, binding = 3) readonly buffer TextureBuffer { layout( std430, binding = 3) readonly buffer texture_buffer {
uvec2 textures[1000]; uvec2 textures[1000];
}; };
@@ -9,7 +9,7 @@ layout(binding = 0) uniform uniform_per_frame
uint light_count; uint light_count;
} ubo_per_frame; } ubo_per_frame;
layout(std430, binding = 1) readonly buffer PositionsBuffer layout(std430, binding = 1) readonly buffer positions_buffer
{ {
mat4 model_matrix[]; mat4 model_matrix[];
}; };
@@ -26,7 +26,6 @@ layout (location=0) in VS_OUT
{ {
vec2 vsUV; vec2 vsUV;
vec4 vsWorldPos; vec4 vsWorldPos;
vec4 normal;
flat uint vsChunkID; flat uint vsChunkID;
flat uint vsMaterialID; flat uint vsMaterialID;
}vs_out; }vs_out;
@@ -1,15 +1,62 @@
//*PIXEL* //*PIXEL*
#version 450 #version 460
#extension GL_EXT_scalar_block_layout : enable #extension GL_ARB_bindless_texture : require
#extension GL_EXT_nonuniform_qualifier : enable
const uint DIRECTIONAL_LIGHT = 1; 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;
uint INVALID_HYDRA_ID = 4294967295;
struct MaterialStore
{
vec4 diffuse_colour;
vec4 matalic_rough;
uint diffuse_texture_id;
uint metallic_rough_texture_id;
uint normal_texture_id;
uint padding[1];
};
layout(std430, binding = 2) readonly buffer material_buffer
{
MaterialStore materials[1000];
};
layout(std430, binding = 3) readonly buffer texture_buffer
{
uvec2 textures[1000];
};
layout (location=0) in GEOM_OUT
{
vec2 vsUV;
flat uint vsMaterialID;
}geom_out;
layout (location=0) out vec4 output_colour;
void main() void main()
{ {
MaterialStore mat = materials[geom_out.vsMaterialID];
vec4 diffuse_val = mat.diffuse_colour;
output_colour = vec4(1,0,0,1);
// if(mat.diffuse_texture_id != INVALID_HYDRA_ID)
// {
// output_colour = vec4(0,1,0,1);
// uvec2 diffuse_handle = textures[mat.diffuse_texture_id];
// diffuse_val = diffuse_val * texture(sampler2D(diffuse_handle), geom_out.vsUV.xy);
// output_colour = diffuse_val;
// }
// if(diffuse_val[3] <= 0.4)
// {
// discard;
// }
// Calculate the accurate, unclamped distance from the light source
// output_colour = diffuse_val;
// output_colour = vec4(geom_out.vsUV, 1,1);
//gl_FragDepth = gl_FragCoord.z;
} }
@@ -22,19 +22,39 @@ layout(binding = 0) uniform shadow_per_frame
uint shadow_idxs; uint shadow_idxs;
}; };
layout(std430, binding = 5) readonly buffer ShadowMapSets layout(std430, binding = 5) readonly buffer shadow_map_sets
{ {
ShadowMapSet shadows[10]; ShadowMapSet shadows[10];
}; };
layout (location=0) in VS_OUT
{
vec2 vsUV;
flat uint vsMaterialID;
}vs_in[];
layout (location=0) out GEOM_OUT
{
vec2 vsUV;
flat uint vsMaterialID;
}geom_out;
void main() void main()
{ {
mat4 view = shadows[shadow_idxs].light_space_view[gl_InvocationID];
mat4 proj = shadows[shadow_idxs].light_space_proj[gl_InvocationID];
for (int i = 0; i < 3; ++i) 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; gl_Layer = gl_InvocationID;
vec4 clip_space_pos = proj * view * gl_in[i].gl_Position;
gl_Position = clip_space_pos;
geom_out.vsMaterialID = vs_in[gl_InvocationID].vsMaterialID;
geom_out.vsUV = vs_in[gl_InvocationID].vsUV;
EmitVertex(); EmitVertex();
} }
EndPrimitive(); EndPrimitive();
@@ -1,8 +1,8 @@
//*VERTEX* //*VERTEX*
#version 450 #version 460
#extension GL_EXT_buffer_reference : enable
layout(binding = 1) readonly buffer PositionsBuffer
layout(binding = 1) readonly buffer positions_buffer
{ {
mat4 model_matrix[]; mat4 model_matrix[];
}; };
@@ -14,10 +14,19 @@ layout (location = 3) in vec3 inNormal; //8 Bytes : 12
layout (location = 4) in vec3 inBiTangent; layout (location = 4) in vec3 inBiTangent;
layout (location = 5) in vec3 inTangent; layout (location = 5) in vec3 inTangent;
layout (location=0) out VS_OUT
{
vec2 vsUV;
flat uint vsMaterialID;
}vs_out;
void main() void main()
{ {
uint chunkid = inChunkID[0]; uint chunkid = inChunkID[0];
mat4 model = model_matrix[chunkid]; mat4 model = model_matrix[chunkid];
gl_Position = model * vec4(inPos, 1.0); gl_Position = model * vec4(inPos, 1.0);
vs_out.vsUV = inUV;
vs_out.vsMaterialID = inChunkID[1];
} }
@@ -0,0 +1,39 @@
//*PIXEL*
#version 450
#extension GL_EXT_scalar_block_layout : enable
#extension GL_EXT_nonuniform_qualifier : enable
#extension GL_ARB_bindless_texture : enable
const uint DIRECTIONAL_LIGHT = 1;
const uint POINT_LIGHT = 2;
const uint SPOT_LIGHT = 3;
layout( std430, binding = 3) readonly buffer texture_buffer {
uvec2 textures[1000];
};
layout(binding = 0) uniform uniform_per_frame
{
mat4 view;
mat4 proj;
uint shadow_texture_id;
vec3 padding0;
};
layout (location=0) in VS_OUT
{
vec2 vsUV;
};
layout (location=0) out vec4 output_colour;
void main()
{
uvec2 shadow_handle = textures[shadow_texture_id];
float colour = texture(sampler2DArray(shadow_handle), vec3(vsUV, 0)).r;
//colour = (1.0 - (1.0 - colour) * 1.4);
output_colour = vec4(colour, colour, colour, 1.0);
//output_colour = vec4(1,0,0,1);
}
@@ -0,0 +1,37 @@
//*VERTEX*
#version 450
#extension GL_EXT_buffer_reference : enable
layout(binding = 1) readonly buffer positions_buffer
{
mat4 model_matrix[];
};
layout(binding = 0) uniform uniform_per_frame
{
mat4 view;
mat4 proj;
uint shadow_texture_id;
vec3 padding0;
};
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;
layout (location=0) out VS_OUT
{
vec2 vsUV;
};
void main()
{
uint chunkid = inChunkID[0];
mat4 model = model_matrix[chunkid];
gl_Position = proj * view * vec4(inPos, 1.0);
vsUV = inUV;
}
@@ -23,7 +23,7 @@ void HydraDirectionalLightActor::InitialiseComponents()
light_comp.diffuse = glm::vec4(1,1,1,1); light_comp.diffuse = glm::vec4(1,1,1,1);
light_comp.intensity = 1000.0f; light_comp.intensity = 10000.0f;
light_comp.light_type = static_cast<uint32_t>(HYDRA_LIGHT_TYPE::HYDRA_LIGHT_DIRECTIONAL); light_comp.light_type = static_cast<uint32_t>(HYDRA_LIGHT_TYPE::HYDRA_LIGHT_DIRECTIONAL);
light_comp.entity_id = GetID(); light_comp.entity_id = GetID();
@@ -0,0 +1,208 @@
#include "HydraTestCubeActor.h"
#include "../engine/HydraEngine.h"
#include "../actor/HydraActorManager.h"
#include "../task/HydraTask.h"
#include "../ecs/HydraECS.h"
#include "../ecs/components/HydraPositionComponent.h"
#include "../ecs/components/HydraMeshComponent.h"
#include "../ecs/components/HydraRenderableComponent.h"
#include "../ecs/components/HydraMaterialComponent.h"
#include "../buffer/HydraMaterialBufferManager.h"
#include "../buffer/HydraTextureBufferManager.h"
#include "../buffer/HydraMaterialBuffer.h"
#include "../mesh/HydraMeshManager.h"
#include "../mesh/HydraMesh.h"
void HydraTestCubeActor::InitialiseComponents()
{
// HydraECS* ecs = GetEngine()->ECS();
// HydraID entity_id = ecs->CreateEntity();
_CreatePosition();
// _CreatePhysics();
_CreateMaterial();
_CreateMesh();
_CreateRenderableComponent();
}
void HydraTestCubeActor::DeferredInitialiseComponents()
{
}
void HydraTestCubeActor::_CreatePosition()
{
HydraECS *ecs = GetEngine()->ECS();
HydraPositionComponent position_component;
ecs->AddComponent<HydraPositionComponent>(GetID(), position_component);
}
void HydraTestCubeActor::_CreateMesh()
{
HydraMeshManager *mesh_manager = GetEngine()->MeshManager();
HydraID mesh_id = mesh_manager->CreateMesh();
HydraMesh *mesh = mesh_manager->GetMesh(mesh_id);
HydraMaterialComponent mat_comp = GetEngine()->ECS()->GetComponent<HydraMaterialComponent>(GetID());
mesh->vertexes.resize(24);
mesh->indexes.resize(36);
float scale_x = 1.0f;
float scale_y = 1.0f;
float scale_z = 1.0f;
float min_x = -0.5f * scale_x;
float min_y = -0.5f * scale_y;
float min_z = -0.5f * scale_z;
float max_x = 0.5f * scale_x;
float max_y = 0.5f * scale_y;
float max_z = 0.5f * scale_z;
float min_u = 1;
float min_v = 1;
float max_u = 0;
float max_v = 0;
// 1---2 5---6
//| / | | / |
// 0---3 4---7
HydraID actor_id = GetID();
mesh->vertexes[0] = {min_x, min_y, min_z, min_u, min_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[1] = {min_x, max_y, min_z, min_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[2] = {max_x, max_y, min_z, max_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[3] = {max_x, min_y, min_z, max_u, min_v, actor_id, mat_comp.material_id, 0};
// Face 0
mesh->indexes[0] = 0;
mesh->indexes[1] = 1;
mesh->indexes[2] = 2;
mesh->indexes[3] = 0;
mesh->indexes[4] = 2;
mesh->indexes[5] = 3;
mesh->vertexes[4] = {max_x, min_y, min_z, min_u, min_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[5] = {max_x, max_y, min_z, min_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[6] = {max_x, max_y, max_z, max_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[7] = {max_x, min_y, max_z, max_u, min_v, actor_id, mat_comp.material_id, 0};
mesh->indexes[6] = 4;
mesh->indexes[7] = 5;
mesh->indexes[8] = 6;
mesh->indexes[9] = 4;
mesh->indexes[10] = 6;
mesh->indexes[11] = 7;
// Back Face
mesh->vertexes[8] = {max_x, min_y, max_z, min_u, min_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[9] = {max_x, max_y, max_z, min_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[10] = {min_x, max_y, max_z, max_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[11] = {min_x, min_y, max_z, max_u, min_v, actor_id, mat_comp.material_id, 0};
mesh->indexes[12] = 8;
mesh->indexes[13] = 9;
mesh->indexes[14] = 10;
mesh->indexes[15] = 8;
mesh->indexes[16] = 10;
mesh->indexes[17] = 11;
mesh->vertexes[12] = {min_x, min_y, max_z, min_u, min_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[13] = {min_x, max_y, max_z, min_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[14] = {min_x, max_y, min_z, max_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[15] = {min_x, min_y, min_z, max_u, min_v, actor_id, mat_comp.material_id, 0};
mesh->indexes[18] = 12;
mesh->indexes[19] = 13;
mesh->indexes[20] = 14;
mesh->indexes[21] = 12;
mesh->indexes[22] = 14;
mesh->indexes[23] = 15;
mesh->vertexes[16] = {min_x, max_y, min_z, min_u, min_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[17] = {min_x, max_y, max_z, min_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[18] = {max_x, max_y, max_z, max_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[19] = {max_x, max_y, min_z, max_u, min_v, actor_id, mat_comp.material_id, 0};
mesh->indexes[24] = 16;
mesh->indexes[25] = 17;
mesh->indexes[26] = 18;
mesh->indexes[27] = 16;
mesh->indexes[28] = 18;
mesh->indexes[29] = 19;
mesh->vertexes[20] = {min_x, min_y, min_z, min_u, min_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[21] = {max_x, min_y, min_z, min_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[22] = {max_x, min_y, max_z, max_u, max_v, actor_id, mat_comp.material_id, 0};
mesh->vertexes[23] = {min_x, min_y, max_z, max_u, min_v, actor_id, mat_comp.material_id, 0};
mesh->indexes[30] = 20;
mesh->indexes[31] = 21;
mesh->indexes[32] = 22;
mesh->indexes[33] = 20;
mesh->indexes[34] = 22;
mesh->indexes[35] = 23;
mesh_manager->CalculateNormals(mesh->mesh_id);
HydraECS *ecs = GetEngine()->ECS();
HydraMeshComponent mesh_comp;
mesh_comp.mesh_id = mesh_id;
mesh_comp.mesh_state = HYDRA_STATE::Waiting;
ecs->AddComponent<HydraMeshComponent>(GetID(), mesh_comp);
}
void HydraTestCubeActor::_CreateMaterial()
{
HydraEngine *engine = GetEngine();
std::string filename = std::string(texture_base) + std::string("/DesignArea/DesignArea_Albedo.png");
HydraID tex_id = engine->TextureBufferManager()->LoadTexture(filename);
HydraMaterialBuffer material = {};
material.diffuse_texture_id = tex_id;
material.diffuse_colour = glm::vec4(1, 1, 1, 1);
material.metalic_rough = glm::vec4(0, 0.5, 0.3, 1);
HydraID mat_id = engine->MaterialBufferManager()->CreateMaterial(material);
HydraMaterialComponent mat_comp = {};
mat_comp.material_id = mat_id;
engine->ECS()->AddComponent<HydraMaterialComponent>(GetID(), mat_comp);
}
void HydraTestCubeActor::_CreatePhysics()
{
// HydraECSPhysicsComponent physics_component;
// physics_component.physics_state = Hydra_State::Waiting;
// physics_component.physics_definition.actor_id = GetID();
// physics_component.physics_definition.physics_type = HydraPhyicsType::Static;
// physics_component.physics_definition.physics_shape = HydraPhysicsShape::HydraBoxShape;
// physics_component.physics_definition.mass = 100000.0f;
// physics_component.physics_definition.extent_x = 1000.0f;
// physics_component.physics_definition.extent_y = 0.5f;
// physics_component.physics_definition.extent_z = 1000.0f;
// physics_component.physics_definition.dynamic_friction = 0.5f;
// physics_component.physics_definition.restitution = 0.5f;
// HydraECS* ecs = GetEngine()->ECS();
// ecs->AddComponent<HydraECSPhysicsComponent>(GetID(), physics_component);
}
void HydraTestCubeActor::_CreateRenderableComponent()
{
HydraRenderableComponent render_comp;
HydraECS *ecs = GetEngine()->ECS();
render_comp.renderable_types.set((uint32_t)HYDRA_RENDERABLE_TYPE::HYDRA_COLOUR, true);
ecs->AddComponent<HydraRenderableComponent>(GetID(), render_comp);
}
@@ -0,0 +1,31 @@
#ifndef HYDRATESTCUBEACTOR
#define HYDRATESTCUBEACTOR
#include "HydraActor.h"
class CLASS_DEFINE HydraTestCubeActor : public HydraActor
{
private:
double m_scale = 1.0;
double m_widthscale = 1.0f;
HydraID m_material_component = INVALID_HYDRA_ID;
HydraID m_position_component = INVALID_HYDRA_ID;
HydraID m_mesh_component = INVALID_HYDRA_ID;
protected:
void _CreatePosition();
void _CreateMesh();
void _CreateMaterial();
void _CreatePhysics();
void _CreateRenderableComponent();
public:
virtual void InitialiseComponents();
virtual void DeferredInitialiseComponents();
virtual void Destroy(){}
};
#endif /* HYDRATESTCUBEACTOR */
@@ -0,0 +1,87 @@
#include "HydraTextureDebugActor.h"
#include "../engine/HydraEngine.h"
#include "../actor/HydraActorManager.h"
#include "../task/HydraTask.h"
#include "../ecs/HydraECS.h"
#include "../ecs/components/HydraPositionComponent.h"
#include "../ecs/components/HydraMeshComponent.h"
#include "../ecs/components/HydraRenderableComponent.h"
#include "../ecs/components/HydraMaterialComponent.h"
#include "../buffer/HydraMaterialBufferManager.h"
#include "../buffer/HydraTextureBufferManager.h"
#include "../buffer/HydraMaterialBuffer.h"
#include "../mesh/HydraMeshManager.h"
#include "../mesh/HydraMesh.h"
void HydraTextureDebugActor::_CreateMesh()
{
HydraMeshManager *mesh_manager = GetEngine()->MeshManager();
HydraID mesh_id = mesh_manager->CreateMesh();
HydraMesh *mesh = mesh_manager->GetMesh(mesh_id);
mesh->vertexes.resize(4);
mesh->indexes.resize(6);
float scale_x = 1.0f;
float scale_y = 1.0f;
float scale_z = 1.0f;
float min_x = -0.5f * scale_x;
float min_y = -0.5f * scale_y;
float min_z = 0.5f * scale_z;
float max_x = 0.5f * scale_x;
float max_y = 0.5f * scale_y;
float max_z = 0.5f * scale_z;
float min_u = 1;
float min_v = 1;
float max_u = 0;
float max_v = 0;
// 1---2 5---6
// | / | | / |
// 0---3 4---7
HydraID actor_id = GetID();
mesh->vertexes[0] = {min_x, min_y, min_z, min_u, min_v, actor_id, 0, 0, 0,0,0,0,0,0,0,0,0};
mesh->vertexes[1] = {min_x, max_y, min_z, min_u, max_v, actor_id, 0, 0, 0,0,0,0,0,0,0,0,0};
mesh->vertexes[2] = {max_x, max_y, min_z, max_u, max_v, actor_id, 0, 0, 0,0,0,0,0,0,0,0,0};
mesh->vertexes[3] = {max_x, min_y, min_z, max_u, min_v, actor_id, 0, 0, 0,0,0,0,0,0,0,0,0};
// Face 0
mesh->indexes[0] = 0;
mesh->indexes[1] = 1;
mesh->indexes[2] = 2;
mesh->indexes[3] = 0;
mesh->indexes[4] = 2;
mesh->indexes[5] = 3;
HydraECS *ecs = GetEngine()->ECS();
HydraMeshComponent mesh_comp;
mesh_comp.mesh_id = mesh_id;
mesh_comp.mesh_state = HYDRA_STATE::Waiting;
ecs->AddComponent<HydraMeshComponent>(GetID(), mesh_comp);
}
void HydraTextureDebugActor::_CreateRenderableComponent()
{
HydraRenderableComponent render_comp;
HydraECS *ecs = GetEngine()->ECS();
render_comp.renderable_types.set((uint32_t)HYDRA_RENDERABLE_TYPE::HYDRA_TEXTURE_DEBUG, true);
ecs->AddComponent<HydraRenderableComponent>(GetID(), render_comp);
}
void HydraTextureDebugActor::InitialiseComponents()
{
_CreateMesh();
_CreateRenderableComponent();
}
@@ -0,0 +1,25 @@
#ifndef HYDRATEXTUREDEBUGACTOR
#define HYDRATEXTUREDEBUGACTOR
#include "HydraActor.h"
class CLASS_DEFINE HydraTextureDebugActor : public HydraActor
{
private:
HydraID m_mesh_component = INVALID_HYDRA_ID;
protected:
void _CreateMesh();
void _CreateRenderableComponent();
public:
virtual void InitialiseComponents();
virtual void Destroy(){}
HydraID Texture_ID = INVALID_HYDRA_ID;
};
#endif /* HYDRATEXTUREDEBUGACTOR */
@@ -15,6 +15,10 @@ struct HydraLightComponent
float cutoff_outer = 0.75f; float cutoff_outer = 0.75f;
HydraID entity_id; HydraID entity_id;
uint32_t light_type; uint32_t light_type;
uint32_t shadow_map_id = 0;
uint32_t shadow_caster = 0;
uint32_t padding0;
uint32_t padding1;
}; };
#endif /* HYDRAECSLIGHTCOMPONENT */ #endif /* HYDRAECSLIGHTCOMPONENT */
@@ -21,6 +21,13 @@ void HydraShadowSourceSystem::Initialise()
{ {
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler(); HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
for(uint32_t i = 0; i < MAX_SHADOWS; i++)
{
m_available_shadows.push(i);
}
m_shadows.resize(MAX_SHADOWS);
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(HydraShadowSourceComponent), &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);
@@ -32,6 +39,16 @@ 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);
{
std::lock_guard<std::mutex> lock(m_mutex);
assert(m_available_shadows.size() > 0 && "Run out of shadows");
uint32_t shad_id = m_available_shadows.front();
m_available_shadows.pop();
light_comp.shadow_map_id = shad_id;
light_comp.shadow_caster = 1;
}
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:
@@ -57,9 +74,9 @@ void HydraShadowSourceSystem::UpdateSystem(float delta_t_seconds)
} }
HydraShadowSourceComponent shad_comp = ecs->GetComponent<HydraShadowSourceComponent>(entity_id); HydraShadowSourceComponent shad_comp = ecs->GetComponent<HydraShadowSourceComponent>(entity_id);
shadows.push_back(shad_comp); m_shadows[light_comp.shadow_map_id] = shad_comp;
} }
_WriteToGPU(shadows); _WriteToGPU();
} }
void HydraShadowSourceSystem::_UpdateDirectionalLight(HydraID entity_id) void HydraShadowSourceSystem::_UpdateDirectionalLight(HydraID entity_id)
@@ -69,30 +86,31 @@ void HydraShadowSourceSystem::_UpdateDirectionalLight(HydraID entity_id)
HydraPositionComponent pos_comp = ecs->GetComponent<HydraPositionComponent>(entity_id); HydraPositionComponent pos_comp = ecs->GetComponent<HydraPositionComponent>(entity_id);
HydraShadowSourceComponent &shad_comp = ecs->GetComponent<HydraShadowSourceComponent>(entity_id); HydraShadowSourceComponent &shad_comp = ecs->GetComponent<HydraShadowSourceComponent>(entity_id);
float view_size = 5.0f; float view_size = 20.0f;
float view_near = -5.0f; float view_near = -10.0f;
float view_far = 5.0f; float view_far = 10.0f;
float PI = 3.1415927; float PI = 3.1415927;
float TWO_PI = 6.2831854; float TWO_PI = 6.2831854;
glm::vec3 light_dir = glm::vec3(0, 0, -1); glm::vec3 light_dir = glm::vec3(0, 0, -1);
glm::mat3 light_rot = glm::mat3(1); glm::mat3 light_rot = glm::mat3(1);
glm::vec3 light_euler = pos_comp.orientation; glm::vec3 light_euler = pos_comp.orientation * glm::vec3(-1,-1,-1);
light_rot = glm::eulerAngleXYZ(light_euler.x, light_euler.y, light_euler.z); light_rot = glm::eulerAngleXYZ(light_euler.x, light_euler.y, light_euler.z);
light_dir = light_rot * light_dir; light_dir = light_rot * light_dir;
light_dir = glm::normalize(light_dir); light_dir = glm::normalize(light_dir);
glm::vec3 camera_pos = GetEngine()->Camera()->GetPosition(); glm::vec3 camera_pos = GetEngine()->Camera()->GetPosition();
float light_distance = 2;
for (uint32_t i = 0; i < 6; i++) for (uint32_t i = 0; i < 6; i++)
{ {
glm::vec3 light_pos = camera_pos; // - (light_dir * light_distance); glm::vec3 light_pos = camera_pos - (light_dir * light_distance);
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::ortho<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;
@@ -116,22 +134,25 @@ void HydraShadowSourceSystem::_InitialiseDirectionalLight(HydraID entity_id)
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler(); HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
uint32_t depth_texture_id = 0;
HydraID create_framebuffer_task_id = task_scheduler->CreateTask<HydraCreateShadowFrameBuffer>(HydraThreadAffinity::Render); HydraID create_framebuffer_task_id = task_scheduler->CreateTask<HydraCreateShadowFrameBuffer>(HydraThreadAffinity::Render);
HydraCreateShadowFrameBuffer *fb_task = static_cast<HydraCreateShadowFrameBuffer *>(task_scheduler->GetTask(create_framebuffer_task_id)); HydraCreateShadowFrameBuffer *fb_task = static_cast<HydraCreateShadowFrameBuffer *>(task_scheduler->GetTask(create_framebuffer_task_id));
fb_task->Initialise(&shad_comp.shadow_texture_id, &shad_comp.frame_buffer_id); fb_task->Initialise(&shad_comp.shadow_texture_id, &depth_texture_id, &shad_comp.frame_buffer_id);
task_scheduler->WaitForTask(create_framebuffer_task_id); task_scheduler->WaitForTask(create_framebuffer_task_id);
shad_comp.shadow_texture_id = depth_texture_id;
} }
void HydraShadowSourceSystem::_WriteToGPU(std::vector<HydraShadowSourceComponent> shadows) void HydraShadowSourceSystem::_WriteToGPU()
{ {
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 *>(m_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<HydraUpdateWholeGPUBufferTask>(HydraThreadAffinity::Render);
HydraUpdatePartialGPUBufferTask *task = static_cast<HydraUpdatePartialGPUBufferTask *>(task_scheduler->GetTask(update_buffer_task_id)); HydraUpdateWholeGPUBufferTask *task = static_cast<HydraUpdateWholeGPUBufferTask *>(task_scheduler->GetTask(update_buffer_task_id));
task->Intialise(m_shadow_buffer_id, 0, sizeof(HydraShadowSourceComponent) * shadows.size(), buffer); task->Intialise(m_shadow_buffer_id, buffer);
task_scheduler->WaitForTask(update_buffer_task_id); task_scheduler->WaitForTask(update_buffer_task_id);
} }
@@ -5,6 +5,8 @@
#include "../components/HydraShadowSourceComponent.h" #include "../components/HydraShadowSourceComponent.h"
#include <GLMIncludes.h> #include <GLMIncludes.h>
#include <queue> #include <queue>
#include <vector>
#include <mutex>
class HydraShadowSourceSystem : public HydraSystem class HydraShadowSourceSystem : public HydraSystem
{ {
@@ -16,9 +18,11 @@ class HydraShadowSourceSystem : public HydraSystem
private: private:
void _UpdateDirectionalLight(HydraID entity_id); void _UpdateDirectionalLight(HydraID entity_id);
void _InitialiseDirectionalLight(HydraID entity_id); void _InitialiseDirectionalLight(HydraID entity_id);
void _WriteToGPU(std::vector<HydraShadowSourceComponent> shadows); void _WriteToGPU();
HydraID m_shadow_buffer_id = INVALID_HYDRA_ID; HydraID m_shadow_buffer_id = INVALID_HYDRA_ID;
std::queue<HydraID> m_available_shadows;
std::vector<HydraShadowSourceComponent> m_shadows;
std::mutex m_mutex;
}; };
@@ -5,14 +5,18 @@
#include "../buffer/HydraTextureBufferManager.h" #include "../buffer/HydraTextureBufferManager.h"
#include "../buffer/HydraLightBufferManager.h" #include "../buffer/HydraLightBufferManager.h"
#include "PerFrameUBO.hpp" #include "PerFrameUBO.hpp"
#include "TextureDebugUBO.hpp"
#include "../camera/HydraCamera.h" #include "../camera/HydraCamera.h"
#include "../renderer/HydraRenderer.h" #include "../renderer/HydraRenderer.h"
#include "../ecs/HydraECS.h" #include "../ecs/HydraECS.h"
#include "../ecs/systems/HydraRenderSystem.h" #include "../ecs/systems/HydraRenderSystem.h"
#include "../ecs/systems/HydraShadowSourceSystem.h"
#include "../ecs/components/HydraShadowSourceComponent.h"
#include "../mesh/StandardVertex.h" #include "../mesh/StandardVertex.h"
#include "../actor/HydraActorManager.h" #include "../actor/HydraActorManager.h"
#include "../actor/HydraOutputActor.h" #include "../actor/HydraOutputActor.h"
#include "../actor/HydraTextureDebugActor.h"
void HydraDeferredPipeline::Initialise() void HydraDeferredPipeline::Initialise()
{ {
@@ -23,6 +27,7 @@ void HydraDeferredPipeline::Initialise()
_CreateFrameBuffer(); _CreateFrameBuffer();
_CreateColourRenderStage(); _CreateColourRenderStage();
_CreateOutputRenderStage(); _CreateOutputRenderStage();
_CreateTextureDebugOutputStage();
} }
void HydraDeferredPipeline::Shutdown() void HydraDeferredPipeline::Shutdown()
@@ -38,9 +43,6 @@ void HydraDeferredPipeline::Shutdown()
void HydraDeferredPipeline::Render() void HydraDeferredPipeline::Render()
{ {
_UpdateUBO(); _UpdateUBO();
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>();
@@ -68,7 +70,6 @@ void HydraDeferredPipeline::Render()
{ {
m_render_stages[rs_idx]->Render(render_system->Entities); m_render_stages[rs_idx]->Render(render_system->Entities);
} }
} }
void HydraDeferredPipeline::_UpdateUBO() void HydraDeferredPipeline::_UpdateUBO()
@@ -93,6 +94,21 @@ void HydraDeferredPipeline::_UpdateUBO()
output_ubo.light_count = light_count; output_ubo.light_count = light_count;
buffer_manager->UpdateWholeBuffer(m_per_frame_output_ubo, &output_ubo); buffer_manager->UpdateWholeBuffer(m_per_frame_output_ubo, &output_ubo);
glBindBuffer(GL_UNIFORM_BUFFER, m_per_frame_output_ubo); glBindBuffer(GL_UNIFORM_BUFFER, m_per_frame_output_ubo);
std::shared_ptr<HydraShadowSourceSystem> sys = GetEngine()->ECS()->GetSystem<HydraShadowSourceSystem>();
HydraID texture_id = 0;
if(sys->Entities.size() > 0)
{
auto it = sys->Entities.begin();
HydraShadowSourceComponent shad_comp = GetEngine()->ECS()->GetComponent<HydraShadowSourceComponent>(*it);
texture_id = shad_comp.shadow_texture_id;
}
TextureDebugUBO texture_ubo = {};
texture_ubo.view = glm::translate(glm::vec3(1,1,0));
texture_ubo.proj = glm::ortho(-2.0f, 2.0f, -2.0f, 2.0f);
texture_ubo.shadow_idx = texture_id;
buffer_manager->UpdateWholeBuffer(m_texture_debug_ubo, &texture_ubo);
glBindBuffer(GL_UNIFORM_BUFFER, m_texture_debug_ubo);
} }
void HydraDeferredPipeline::_CreateFrameBuffer() void HydraDeferredPipeline::_CreateFrameBuffer()
@@ -166,17 +182,17 @@ void HydraDeferredPipeline::_CreateColourRenderStage()
HydraShaderBinding shader_binding = {}; HydraShaderBinding shader_binding = {};
shader_binding.block_name.push_back("PositionsBuffer"); shader_binding.block_name.push_back("positions_buffer");
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("MaterialBuffer"); shader_binding.block_name.push_back("material_buffer");
shader_binding.binding_point.push_back(2); shader_binding.binding_point.push_back(2);
shader_binding.buffer_id.push_back(mat_buffer_id); shader_binding.buffer_id.push_back(mat_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("TextureBuffer"); shader_binding.block_name.push_back("texture_buffer");
shader_binding.binding_point.push_back(3); shader_binding.binding_point.push_back(3);
shader_binding.buffer_id.push_back(tex_buffer_id); shader_binding.buffer_id.push_back(tex_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);
@@ -187,14 +203,14 @@ void HydraDeferredPipeline::_CreateColourRenderStage()
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 + "deferred_shader.vert", render_stage->Initialise(shader_path + "deferred_shader.vert",
shader_path + "deferred_shader.frag", "", shader_path + "deferred_shader.frag", "",
shader_binding, shader_binding,
m_frame_buffer_id, m_frame_buffer_id,
textures, textures,
true, true,
GL_BACK,
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);
} }
@@ -220,13 +236,13 @@ void HydraDeferredPipeline::_CreateOutputRenderStage()
HydraID light_buffer_id = buffer_manager->FindBuffer("LightBuffer"); HydraID light_buffer_id = buffer_manager->FindBuffer("LightBuffer");
HydraShaderBinding shader_binding = {}; HydraShaderBinding shader_binding = {};
shader_binding.block_name.push_back("PositionsBuffer"); shader_binding.block_name.push_back("position_buffer");
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("TextureBuffer"); shader_binding.block_name.push_back("texture_buffer");
shader_binding.binding_point.push_back(3); shader_binding.binding_point.push_back(3);
shader_binding.buffer_id.push_back(tex_buffer_id); shader_binding.buffer_id.push_back(tex_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);
@@ -241,29 +257,77 @@ void HydraDeferredPipeline::_CreateOutputRenderStage()
shader_binding.buffer_id.push_back(output_texture_buffer_id); shader_binding.buffer_id.push_back(output_texture_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);
shader_binding.block_name.push_back("LightBuffer"); shader_binding.block_name.push_back("light_buffer");
shader_binding.binding_point.push_back(4); shader_binding.binding_point.push_back(4);
shader_binding.buffer_id.push_back(light_buffer_id); shader_binding.buffer_id.push_back(light_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);
render_stage->Initialise(shader_path + "deferred_output_shader.vert", render_stage->Initialise(shader_path + "deferred_output_shader.vert",
shader_path + "deferred_output_shader.frag", "", shader_path + "deferred_output_shader.frag", "",
shader_binding, shader_binding,
0, 0,
textures, textures,
false, false,
GL_BACK,
true,
HYDRA_RENDERABLE_TYPE::HYDRA_OUTPUT); HYDRA_RENDERABLE_TYPE::HYDRA_OUTPUT);
m_render_stages.push_back(render_stage); m_render_stages.push_back(render_stage);
} }
void HydraDeferredPipeline::_CreateTextureDebugOutputStage()
{
HydraRenderStage* render_stage = new HydraRenderStage();
std::string shader_path = std::string(shader_base);
HydraBufferManager* buffer_manager = GetEngine()->BufferManager();
std::vector<uint32_t> textures;
GetEngine()->ActorManager()->InitialiseActor(m_output_actor_id);
HydraOutputActor* actor = static_cast<HydraOutputActor*>(GetEngine()->ActorManager()->GetActor(m_output_actor_id));
HydraTextureBufferManager* tex_buf_manager = GetEngine()->TextureBufferManager();
HydraID pos_buffer_id = buffer_manager->FindBuffer("PositionsBuffer");
HydraID tex_buffer_id = buffer_manager->FindBuffer("TextureBuffer");
HydraID texture_debug_ubo = buffer_manager->FindBuffer("TextureDebugUBO");
HydraShaderBinding shader_binding = {};
shader_binding.block_name.push_back("position_buffer");
shader_binding.binding_point.push_back(1);
shader_binding.buffer_id.push_back(pos_buffer_id);
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
shader_binding.block_name.push_back("texture_buffer");
shader_binding.binding_point.push_back(3);
shader_binding.buffer_id.push_back(tex_buffer_id);
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
shader_binding.block_name.push_back("uniform_per_frame");
shader_binding.binding_point.push_back(0);
shader_binding.buffer_id.push_back(texture_debug_ubo);
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER);
render_stage->Initialise(shader_path + "texture_debug_shader.vert",
shader_path + "texture_debug_shader.frag", "",
shader_binding,
0,
textures,
false,
GL_BACK,
false,
HYDRA_RENDERABLE_TYPE::HYDRA_TEXTURE_DEBUG);
m_render_stages.push_back(render_stage);
}
void HydraDeferredPipeline::_CreateOutputActor() void HydraDeferredPipeline::_CreateOutputActor()
{ {
m_output_actor_id = GetEngine()->ActorManager()->CreateActor<HydraOutputActor>(); m_output_actor_id = GetEngine()->ActorManager()->CreateActor<HydraOutputActor>();
GetEngine()->ActorManager()->InitialiseActor(m_output_actor_id); GetEngine()->ActorManager()->InitialiseActor(m_output_actor_id);
HydraOutputActor* actor = static_cast<HydraOutputActor*>(GetEngine()->ActorManager()->GetActor(m_output_actor_id)); HydraOutputActor* actor = static_cast<HydraOutputActor*>(GetEngine()->ActorManager()->GetActor(m_output_actor_id));
m_texture_debug_actor_id = GetEngine()->ActorManager()->CreateActor<HydraTextureDebugActor>();
GetEngine()->ActorManager()->InitialiseActor(m_texture_debug_actor_id);
HydraTextureDebugActor* tex_actor = static_cast<HydraTextureDebugActor*>(GetEngine()->ActorManager()->GetActor(m_texture_debug_actor_id));
} }
void HydraDeferredPipeline::_CreateUBOs() void HydraDeferredPipeline::_CreateUBOs()
@@ -279,6 +343,7 @@ void HydraDeferredPipeline::_CreateUBOs()
m_output_texture_ubo = buffer_manager->CreateGPUBuffer("DeferredOutputTextureUBO", m_output_texture_ubo = buffer_manager->CreateGPUBuffer("DeferredOutputTextureUBO",
sizeof(uint32_t)*16, 0, HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER); sizeof(uint32_t)*16, 0, HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER);
m_texture_debug_ubo = buffer_manager->CreateGPUBuffer("TextureDebugUBO",
sizeof(TextureDebugUBO), 0, HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER);
} }
@@ -24,9 +24,10 @@ class HydraDeferredPipeline : public HydraPipeline
HydraID m_buffer_0 = INVALID_HYDRA_ID; //Frame buffer 0; HydraID m_buffer_0 = INVALID_HYDRA_ID; //Frame buffer 0;
HydraID m_depth = INVALID_HYDRA_ID; HydraID m_depth = INVALID_HYDRA_ID;
HydraID m_output_actor_id = INVALID_HYDRA_ID; HydraID m_output_actor_id = INVALID_HYDRA_ID;
HydraID m_texture_debug_actor_id = INVALID_HYDRA_ID;
HydraID m_output_texture_ubo = INVALID_HYDRA_ID; HydraID m_output_texture_ubo = INVALID_HYDRA_ID;
HydraID m_output_light_ubo = INVALID_HYDRA_ID; HydraID m_output_light_ubo = INVALID_HYDRA_ID;
HydraID m_texture_debug_ubo = INVALID_HYDRA_ID;
uint32_t m_frame_buffer_id; uint32_t m_frame_buffer_id;
void _UpdateUBO(); void _UpdateUBO();
@@ -35,6 +36,7 @@ class HydraDeferredPipeline : public HydraPipeline
void _CreateColourRenderStage(); void _CreateColourRenderStage();
void _CreateOutputRenderStage(); void _CreateOutputRenderStage();
void _CreateOutputActor(); void _CreateOutputActor();
void _CreateTextureDebugOutputStage();
void _CreateUBOs(); void _CreateUBOs();
}; };
@@ -36,7 +36,7 @@ void HydraForwardPipeline::Initialise()
std::vector<uint32_t> textures; std::vector<uint32_t> textures;
std::vector<uint32_t> rb_attachments; std::vector<uint32_t> 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, GL_BACK, true, HYDRA_RENDERABLE_TYPE::HYDRA_COLOUR);
m_render_stages.push_back(render_stage); m_render_stages.push_back(render_stage);
m_per_frame_ubo = buffer_manager->CreateGPUBuffer("PerFrameUBO", m_per_frame_ubo = buffer_manager->CreateGPUBuffer("PerFrameUBO",
@@ -19,14 +19,18 @@ void HydraRenderStage::Initialise(std::string vertex_shader_file,
uint32_t framebuffer_id, uint32_t framebuffer_id,
std::vector<uint32_t> textures, std::vector<uint32_t> textures,
bool enable_culling, bool enable_culling,
uint32_t cull_face,
bool depth_enable,
HYDRA_RENDERABLE_TYPE renderable_type) HYDRA_RENDERABLE_TYPE renderable_type)
{ {
m_framebuffer_id = framebuffer_id; m_framebuffer_id = framebuffer_id;
m_renderable_type = static_cast<uint32_t>(renderable_type); m_renderable_type = static_cast<uint32_t>(renderable_type);
m_shader_binding = shader_binding; m_shader_binding = shader_binding;
m_textures = textures; m_textures = textures;
m_depth_enable = depth_enable;
m_cull = enable_culling; m_cull = enable_culling;
m_program = glCreateProgram(); m_program = glCreateProgram();
m_cull_face = cull_face;
if(vertex_shader_file.length() > 0) if(vertex_shader_file.length() > 0)
{ {
m_vertex_shader = _LoadShader(vertex_shader_file, GL_VERTEX_SHADER); m_vertex_shader = _LoadShader(vertex_shader_file, GL_VERTEX_SHADER);
@@ -43,6 +47,25 @@ void HydraRenderStage::Initialise(std::string vertex_shader_file,
glAttachShader(m_program, m_geometry_shader); glAttachShader(m_program, m_geometry_shader);
} }
glLinkProgram(m_program); glLinkProgram(m_program);
int success;
glGetProgramiv(m_program, GL_LINK_STATUS, &success);
if (!success) {
// 2. Get the log length (optional but recommended)
int logLength;
glGetProgramiv(m_program, GL_INFO_LOG_LENGTH, &logLength);
// 3. Retrieve and print the error log
char* infoLog = new char[logLength];
glGetProgramInfoLog(m_program, logLength, NULL, infoLog);
std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
// 4. Clean up allocated memory
delete[] infoLog;
}
} }
void HydraRenderStage::ShutDown() void HydraRenderStage::ShutDown()
@@ -70,12 +93,22 @@ void HydraRenderStage::Render(std::set<HydraID>& entities, uint32_t framebuffer_
if(m_cull) if(m_cull)
{ {
glEnable(GL_CULL_FACE); glEnable(GL_CULL_FACE);
glCullFace(m_cull_face);
} }
else else
{ {
glDisable(GL_CULL_FACE); glDisable(GL_CULL_FACE);
} }
if(m_depth_enable)
{
glEnable(GL_DEPTH_TEST);
}
else
{
glDisable(GL_DEPTH_TEST);
}
for(const auto& entity_id : entities ) for(const auto& entity_id : entities )
{ {
HydraRenderableComponent render_comp = ecs->GetComponent<HydraRenderableComponent>(entity_id); HydraRenderableComponent render_comp = ecs->GetComponent<HydraRenderableComponent>(entity_id);
@@ -17,6 +17,8 @@ class HydraRenderStage : public HydraObject
uint32_t framebuffer_id, uint32_t framebuffer_id,
std::vector<uint32_t> textures, std::vector<uint32_t> textures,
bool enable_culling, bool enable_culling,
uint32_t cull_face,
bool depth_enable,
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, uint32_t framebuffer_id);
@@ -33,7 +35,9 @@ class HydraRenderStage : public HydraObject
uint32_t m_program = GL_INVALID_VALUE; uint32_t m_program = GL_INVALID_VALUE;
uint32_t m_renderable_type; uint32_t m_renderable_type;
uint32_t m_framebuffer_id = 0; uint32_t m_framebuffer_id = 0;
uint32_t m_cull_face = GL_NONE;
bool m_cull = false; bool m_cull = false;
bool m_depth_enable = true;
std::vector<uint32_t> m_textures; std::vector<uint32_t> m_textures;
}; };
@@ -40,16 +40,22 @@ void HydraShadowPipeline::Render()
glDepthMask(GL_TRUE); // Depth buffer must be writable glDepthMask(GL_TRUE); // Depth buffer must be writable
glDepthFunc(GL_LESS); glDepthFunc(GL_LESS);
//glEnable(GL_POLYGON_OFFSET_FILL);
//glPolygonOffset(2.5f, 1.0f);
for (HydraID entity_id : shadow_system->Entities) for (HydraID entity_id : shadow_system->Entities)
{ {
_UpdateUBO(shadow_idx); _UpdateUBO(shadow_idx);
// _BindFrameBufferAttachments(entity_id); // _BindFrameBufferAttachments(entity_id);
HydraShadowSourceComponent shad_comp = GetEngine()->ECS()->GetComponent<HydraShadowSourceComponent>(entity_id); HydraShadowSourceComponent shad_comp = GetEngine()->ECS()->GetComponent<HydraShadowSourceComponent>(entity_id);
glBindFramebuffer(GL_FRAMEBUFFER, shad_comp.frame_buffer_id); glBindFramebuffer(GL_FRAMEBUFFER, shad_comp.frame_buffer_id);
glBindTextureUnit(0, 0); // HydraTextureBuffer tex_buffer = GetEngine()->TextureBufferManager()->GetTexture(shad_comp.shadow_texture_id);
// glBindTextureUnit(tex_buffer.gl_tex_id, 0);
float depth_value = 1.0f; float depth_value = 1.0f;
float clear_colour[] = {0,0,0};
glClearNamedFramebufferfv(shad_comp.frame_buffer_id, GL_DEPTH, 0, &depth_value); glClearNamedFramebufferfv(shad_comp.frame_buffer_id, GL_DEPTH, 0, &depth_value);
glClearNamedFramebufferfv(shad_comp.frame_buffer_id, GL_COLOR, 0, clear_colour);
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++)
{ {
@@ -60,6 +66,8 @@ void HydraShadowPipeline::Render()
shadow_idx++; shadow_idx++;
} }
// glDisable(GL_POLYGON_OFFSET_FILL);
} }
void HydraShadowPipeline::_CreateRenderStage() void HydraShadowPipeline::_CreateRenderStage()
@@ -69,17 +77,29 @@ void HydraShadowPipeline::_CreateRenderStage()
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 mat_buffer_id = buffer_manager->FindBuffer("MaterialBuffer");
HydraID tex_buffer_id = buffer_manager->FindBuffer("TextureBuffer");
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("positions_buffer");
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("material_buffer");
shader_binding.binding_point.push_back(2);
shader_binding.buffer_id.push_back(mat_buffer_id);
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
shader_binding.block_name.push_back("texture_buffer");
shader_binding.binding_point.push_back(3);
shader_binding.buffer_id.push_back(tex_buffer_id);
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
shader_binding.block_name.push_back("shadow_map_sets");
shader_binding.binding_point.push_back(5); 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);
@@ -98,6 +118,8 @@ void HydraShadowPipeline::_CreateRenderStage()
0, 0,
textures, textures,
true, true,
GL_FRONT,
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);
} }
@@ -0,0 +1,15 @@
#ifndef TEXTUREDEBUGUBO
#define TEXTUREDEBUGUBO
#include <GLMIncludes.h>
struct TextureDebugUBO
{
glm::mat4 view;
glm::mat4 proj;
uint32_t shadow_idx;
glm::vec3 padding0;
};
#endif /* TEXTUREDEBUGUBO */
@@ -11,6 +11,7 @@ class HydraCreateShadowFrameBuffer : public HydraTask
{ {
private: private:
uint32_t *m_texture_id = 0; uint32_t *m_texture_id = 0;
uint32_t *m_depth_texture_id = 0;
uint32_t *m_frame_buffer_id = nullptr; uint32_t *m_frame_buffer_id = nullptr;
protected: protected:
@@ -24,24 +25,45 @@ public:
*m_texture_id = tex_buffer_manager->CreateTextureArray("shadow_FB", *m_texture_id = tex_buffer_manager->CreateTextureArray("shadow_FB",
SHADOW_MAP_SIZE, SHADOW_MAP_SIZE, SHADOW_MAP_SIZE, SHADOW_MAP_SIZE,
GL_DEPTH_COMPONENT24, GL_RGBA8,
GL_NEAREST, GL_NEAREST,
GL_NEAREST, GL_NEAREST,
6); 6);
HydraTextureBuffer texture = tex_buffer_manager->GetTexture(*m_texture_id); HydraTextureBuffer texture = tex_buffer_manager->GetTexture(*m_texture_id);
*m_depth_texture_id = tex_buffer_manager->CreateTextureArray("shadow_depth_buffer",
SHADOW_MAP_SIZE, SHADOW_MAP_SIZE,
GL_DEPTH_COMPONENT32F,
GL_NEAREST,
GL_NEAREST,
6);
HydraTextureBuffer depth_texture = tex_buffer_manager->GetTexture(*m_depth_texture_id);
glGenFramebuffers(1, m_frame_buffer_id); glGenFramebuffers(1, m_frame_buffer_id);
glBindFramebuffer(GL_FRAMEBUFFER, *m_frame_buffer_id); glBindFramebuffer(GL_FRAMEBUFFER, *m_frame_buffer_id);
glNamedFramebufferDrawBuffer(*m_frame_buffer_id, GL_NONE); glTextureParameteri(texture.gl_tex_id, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glNamedFramebufferReadBuffer(*m_frame_buffer_id, GL_NONE); glTextureParameteri(texture.gl_tex_id, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glBindTexture(GL_TEXTURE_2D_ARRAY, texture.gl_tex_id); // FIX 1: Set explicit filters for the depth texture to prevent incomplete attachment
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTextureParameteri(depth_texture.gl_tex_id, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTextureParameteri(depth_texture.gl_tex_id, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, texture.gl_tex_id, 0); glm::vec4 border = glm::vec4(1,1,1,1);
glTextureParameteri(depth_texture.gl_tex_id, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTextureParameteri(depth_texture.gl_tex_id, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTextureParameterfv(depth_texture.gl_tex_id, GL_TEXTURE_BORDER_COLOR, &border[0]);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, texture.gl_tex_id, 0);
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, depth_texture.gl_tex_id, 0);
glNamedFramebufferDrawBuffer(*m_frame_buffer_id, GL_COLOR_ATTACHMENT0);
glNamedFramebufferReadBuffer(*m_frame_buffer_id, GL_COLOR_ATTACHMENT0);
GLenum draw_buffers[] = {GL_COLOR_ATTACHMENT0};
glNamedFramebufferDrawBuffers(*m_frame_buffer_id, 1, draw_buffers);
GLenum status = glCheckNamedFramebufferStatus(*m_frame_buffer_id, GL_FRAMEBUFFER); GLenum status = glCheckNamedFramebufferStatus(*m_frame_buffer_id, GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE) if (status != GL_FRAMEBUFFER_COMPLETE)
@@ -49,13 +71,14 @@ public:
std::cout << "Framebuffer error: " << status << std::endl; std::cout << "Framebuffer error: " << status << std::endl;
} }
glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0);
glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
tex_buffer_manager->BindTexture(*m_texture_id, GL_TEXTURE_2D_ARRAY); tex_buffer_manager->BindTexture(*m_depth_texture_id, GL_TEXTURE_2D_ARRAY);
} }
void Initialise(uint32_t *texture_id, uint32_t *frame_buffer_id) void Initialise(uint32_t *texture_id, uint32_t *depth_texture_id, uint32_t *frame_buffer_id)
{ {
m_texture_id = texture_id; m_texture_id = texture_id;
m_frame_buffer_id = frame_buffer_id; m_frame_buffer_id = frame_buffer_id;
m_depth_texture_id = depth_texture_id;
} }
}; };
#endif /* HYDRACREATESHADOWFRAMEBUFFER */ #endif /* HYDRACREATESHADOWFRAMEBUFFER */
@@ -161,28 +161,28 @@
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "ALL_BUILD::@6890427a1f51a3e7e1df", "id" : "ALL_BUILD::@6890427a1f51a3e7e1df",
"jsonFile" : "target-ALL_BUILD-Debug-9ddbbbeb4caedf0a48f0.json", "jsonFile" : "target-ALL_BUILD-Debug-79cb89fa590649c6cd6a.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 0 "projectIndex" : 0
}, },
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "ALL_BUILD::@fafd37b19aacd4c483ed", "id" : "ALL_BUILD::@fafd37b19aacd4c483ed",
"jsonFile" : "target-ALL_BUILD-Debug-30097c8e6651db3aff43.json", "jsonFile" : "target-ALL_BUILD-Debug-21126e6f26f8151b82a1.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 1 "projectIndex" : 1
}, },
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "HydraClient::@6890427a1f51a3e7e1df", "id" : "HydraClient::@6890427a1f51a3e7e1df",
"jsonFile" : "target-HydraClient-Debug-78ce361b98c7c89e9629.json", "jsonFile" : "target-HydraClient-Debug-ccca9689ebe6b19fe65a.json",
"name" : "HydraClient", "name" : "HydraClient",
"projectIndex" : 0 "projectIndex" : 0
}, },
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "HydraEngine::@fafd37b19aacd4c483ed", "id" : "HydraEngine::@fafd37b19aacd4c483ed",
"jsonFile" : "target-HydraEngine-Debug-2faea7c156292a0c0ce8.json", "jsonFile" : "target-HydraEngine-Debug-5452e3263cf1470b23a6.json",
"name" : "HydraEngine", "name" : "HydraEngine",
"projectIndex" : 1 "projectIndex" : 1
}, },
@@ -355,28 +355,28 @@
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "ALL_BUILD::@6890427a1f51a3e7e1df", "id" : "ALL_BUILD::@6890427a1f51a3e7e1df",
"jsonFile" : "target-ALL_BUILD-Release-9ddbbbeb4caedf0a48f0.json", "jsonFile" : "target-ALL_BUILD-Release-79cb89fa590649c6cd6a.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 0 "projectIndex" : 0
}, },
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "ALL_BUILD::@fafd37b19aacd4c483ed", "id" : "ALL_BUILD::@fafd37b19aacd4c483ed",
"jsonFile" : "target-ALL_BUILD-Release-30097c8e6651db3aff43.json", "jsonFile" : "target-ALL_BUILD-Release-21126e6f26f8151b82a1.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 1 "projectIndex" : 1
}, },
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "HydraClient::@6890427a1f51a3e7e1df", "id" : "HydraClient::@6890427a1f51a3e7e1df",
"jsonFile" : "target-HydraClient-Release-5f750d1feb1d099be72b.json", "jsonFile" : "target-HydraClient-Release-f300bf694420197200c5.json",
"name" : "HydraClient", "name" : "HydraClient",
"projectIndex" : 0 "projectIndex" : 0
}, },
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "HydraEngine::@fafd37b19aacd4c483ed", "id" : "HydraEngine::@fafd37b19aacd4c483ed",
"jsonFile" : "target-HydraEngine-Release-b1d450122d30c349552d.json", "jsonFile" : "target-HydraEngine-Release-b044e0a52a51be50ee6d.json",
"name" : "HydraEngine", "name" : "HydraEngine",
"projectIndex" : 1 "projectIndex" : 1
}, },
@@ -549,28 +549,28 @@
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "ALL_BUILD::@6890427a1f51a3e7e1df", "id" : "ALL_BUILD::@6890427a1f51a3e7e1df",
"jsonFile" : "target-ALL_BUILD-MinSizeRel-9ddbbbeb4caedf0a48f0.json", "jsonFile" : "target-ALL_BUILD-MinSizeRel-79cb89fa590649c6cd6a.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 0 "projectIndex" : 0
}, },
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "ALL_BUILD::@fafd37b19aacd4c483ed", "id" : "ALL_BUILD::@fafd37b19aacd4c483ed",
"jsonFile" : "target-ALL_BUILD-MinSizeRel-30097c8e6651db3aff43.json", "jsonFile" : "target-ALL_BUILD-MinSizeRel-21126e6f26f8151b82a1.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 1 "projectIndex" : 1
}, },
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "HydraClient::@6890427a1f51a3e7e1df", "id" : "HydraClient::@6890427a1f51a3e7e1df",
"jsonFile" : "target-HydraClient-MinSizeRel-0b1754e9511a8dea2861.json", "jsonFile" : "target-HydraClient-MinSizeRel-707588ed524688a0f034.json",
"name" : "HydraClient", "name" : "HydraClient",
"projectIndex" : 0 "projectIndex" : 0
}, },
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "HydraEngine::@fafd37b19aacd4c483ed", "id" : "HydraEngine::@fafd37b19aacd4c483ed",
"jsonFile" : "target-HydraEngine-MinSizeRel-8b4acdd146655dce4c11.json", "jsonFile" : "target-HydraEngine-MinSizeRel-e5876cc85c072c445230.json",
"name" : "HydraEngine", "name" : "HydraEngine",
"projectIndex" : 1 "projectIndex" : 1
}, },
@@ -743,28 +743,28 @@
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "ALL_BUILD::@6890427a1f51a3e7e1df", "id" : "ALL_BUILD::@6890427a1f51a3e7e1df",
"jsonFile" : "target-ALL_BUILD-RelWithDebInfo-9ddbbbeb4caedf0a48f0.json", "jsonFile" : "target-ALL_BUILD-RelWithDebInfo-79cb89fa590649c6cd6a.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 0 "projectIndex" : 0
}, },
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "ALL_BUILD::@fafd37b19aacd4c483ed", "id" : "ALL_BUILD::@fafd37b19aacd4c483ed",
"jsonFile" : "target-ALL_BUILD-RelWithDebInfo-30097c8e6651db3aff43.json", "jsonFile" : "target-ALL_BUILD-RelWithDebInfo-21126e6f26f8151b82a1.json",
"name" : "ALL_BUILD", "name" : "ALL_BUILD",
"projectIndex" : 1 "projectIndex" : 1
}, },
{ {
"directoryIndex" : 0, "directoryIndex" : 0,
"id" : "HydraClient::@6890427a1f51a3e7e1df", "id" : "HydraClient::@6890427a1f51a3e7e1df",
"jsonFile" : "target-HydraClient-RelWithDebInfo-19110864938462bdea5b.json", "jsonFile" : "target-HydraClient-RelWithDebInfo-a4b1a5ac731bdcc03733.json",
"name" : "HydraClient", "name" : "HydraClient",
"projectIndex" : 0 "projectIndex" : 0
}, },
{ {
"directoryIndex" : 1, "directoryIndex" : 1,
"id" : "HydraEngine::@fafd37b19aacd4c483ed", "id" : "HydraEngine::@fafd37b19aacd4c483ed",
"jsonFile" : "target-HydraEngine-RelWithDebInfo-800c6fa211e5ae182b46.json", "jsonFile" : "target-HydraEngine-RelWithDebInfo-ced71872e09d334d9e28.json",
"name" : "HydraEngine", "name" : "HydraEngine",
"projectIndex" : 1 "projectIndex" : 1
}, },
@@ -27,7 +27,7 @@
"objects" : "objects" :
[ [
{ {
"jsonFile" : "codemodel-v2-ccd34cf25146cac2c39e.json", "jsonFile" : "codemodel-v2-ec4f138d26e897b71d3a.json",
"kind" : "codemodel", "kind" : "codemodel",
"version" : "version" :
{ {
@@ -100,7 +100,7 @@
} }
}, },
{ {
"jsonFile" : "codemodel-v2-ccd34cf25146cac2c39e.json", "jsonFile" : "codemodel-v2-ec4f138d26e897b71d3a.json",
"kind" : "codemodel", "kind" : "codemodel",
"version" : "version" :
{ {
@@ -22,10 +22,10 @@
"dependencies" : "dependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"folder" : "folder" :
@@ -25,10 +25,10 @@
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"folder" : "folder" :
@@ -22,10 +22,10 @@
"dependencies" : "dependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"folder" : "folder" :
@@ -25,10 +25,10 @@
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"folder" : "folder" :
@@ -22,10 +22,10 @@
"dependencies" : "dependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"folder" : "folder" :
@@ -25,10 +25,10 @@
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"folder" : "folder" :
@@ -22,10 +22,10 @@
"dependencies" : "dependencies" :
[ [
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"folder" : "folder" :
@@ -25,10 +25,10 @@
"id" : "HydraClient::@6890427a1f51a3e7e1df" "id" : "HydraClient::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "HydraEngine::@fafd37b19aacd4c483ed" "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"folder" : "folder" :
@@ -107,11 +107,11 @@
"dependencies" : "dependencies" :
[ [
{ {
"backtrace" : 2, "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
"id" : "HydraEngine::@fafd37b19aacd4c483ed"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "backtrace" : 2,
"id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"id" : "HydraClient::@6890427a1f51a3e7e1df", "id" : "HydraClient::@6890427a1f51a3e7e1df",
@@ -107,11 +107,11 @@
"dependencies" : "dependencies" :
[ [
{ {
"backtrace" : 2, "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
"id" : "HydraEngine::@fafd37b19aacd4c483ed"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "backtrace" : 2,
"id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"id" : "HydraClient::@6890427a1f51a3e7e1df", "id" : "HydraClient::@6890427a1f51a3e7e1df",
@@ -107,11 +107,11 @@
"dependencies" : "dependencies" :
[ [
{ {
"backtrace" : 2, "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
"id" : "HydraEngine::@fafd37b19aacd4c483ed"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "backtrace" : 2,
"id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"id" : "HydraClient::@6890427a1f51a3e7e1df", "id" : "HydraClient::@6890427a1f51a3e7e1df",
@@ -107,11 +107,11 @@
"dependencies" : "dependencies" :
[ [
{ {
"backtrace" : 2, "id" : "ZERO_CHECK::@6890427a1f51a3e7e1df"
"id" : "HydraEngine::@fafd37b19aacd4c483ed"
}, },
{ {
"id" : "ZERO_CHECK::@6890427a1f51a3e7e1df" "backtrace" : 2,
"id" : "HydraEngine::@fafd37b19aacd4c483ed"
} }
], ],
"id" : "HydraClient::@6890427a1f51a3e7e1df", "id" : "HydraClient::@6890427a1f51a3e7e1df",
@@ -200,17 +200,17 @@
17, 17,
19, 19,
21, 21,
24, 23,
27, 25,
30, 28,
33, 31,
34,
37, 37,
39, 41,
43, 43,
47, 47,
49, 51,
59, 53,
61,
63, 63,
65, 65,
67, 67,
@@ -220,9 +220,9 @@
75, 75,
77, 77,
79, 79,
82, 81,
85, 83,
87, 86,
89, 89,
91, 91,
93, 93,
@@ -231,7 +231,9 @@
99, 99,
101, 101,
103, 103,
107 105,
107,
111
] ]
} }
], ],
@@ -319,17 +321,17 @@
17, 17,
19, 19,
21, 21,
24, 23,
27, 25,
30, 28,
33, 31,
34,
37, 37,
39, 41,
43, 43,
47, 47,
49, 51,
59, 53,
61,
63, 63,
65, 65,
67, 67,
@@ -339,9 +341,9 @@
75, 75,
77, 77,
79, 79,
82, 81,
85, 83,
87, 86,
89, 89,
91, 91,
93, 93,
@@ -350,7 +352,9 @@
99, 99,
101, 101,
103, 103,
107 105,
107,
111
] ]
}, },
{ {
@@ -370,34 +374,34 @@
18, 18,
20, 20,
22, 22,
23, 24,
25,
26, 26,
28, 27,
29, 29,
31, 30,
32, 32,
34, 33,
35, 35,
36, 36,
38, 38,
39,
40, 40,
41,
42, 42,
44, 44,
45, 45,
46, 46,
48, 48,
49,
50, 50,
51,
52, 52,
53,
54, 54,
55, 55,
56, 56,
57, 57,
58, 58,
59,
60, 60,
61,
62, 62,
64, 64,
66, 66,
@@ -408,10 +412,10 @@
76, 76,
78, 78,
80, 80,
81, 82,
83,
84, 84,
86, 85,
87,
88, 88,
90, 90,
92, 92,
@@ -421,9 +425,11 @@
100, 100,
102, 102,
104, 104,
105,
106, 106,
108 108,
109,
110,
112
] ]
} }
], ],
@@ -554,6 +560,28 @@
"path" : "HydraEngine/source/actor/HydraSpotLightActor.h", "path" : "HydraEngine/source/actor/HydraSpotLightActor.h",
"sourceGroupIndex" : 1 "sourceGroupIndex" : 1
}, },
{
"backtrace" : 1,
"compileGroupIndex" : 0,
"path" : "HydraEngine/source/actor/HydraTestCubeActor.cpp",
"sourceGroupIndex" : 0
},
{
"backtrace" : 1,
"path" : "HydraEngine/source/actor/HydraTestCubeActor.h",
"sourceGroupIndex" : 1
},
{
"backtrace" : 1,
"compileGroupIndex" : 0,
"path" : "HydraEngine/source/actor/HydraTextureDebugActor.cpp",
"sourceGroupIndex" : 0
},
{
"backtrace" : 1,
"path" : "HydraEngine/source/actor/HydraTextureDebugActor.h",
"sourceGroupIndex" : 1
},
{ {
"backtrace" : 1, "backtrace" : 1,
"path" : "HydraEngine/source/buffer/HydraBuffer.h", "path" : "HydraEngine/source/buffer/HydraBuffer.h",
@@ -200,17 +200,17 @@
17, 17,
19, 19,
21, 21,
24, 23,
27, 25,
30, 28,
33, 31,
34,
37, 37,
39, 41,
43, 43,
47, 47,
49, 51,
59, 53,
61,
63, 63,
65, 65,
67, 67,
@@ -220,9 +220,9 @@
75, 75,
77, 77,
79, 79,
82, 81,
85, 83,
87, 86,
89, 89,
91, 91,
93, 93,
@@ -231,7 +231,9 @@
99, 99,
101, 101,
103, 103,
107 105,
107,
111
] ]
} }
], ],
@@ -319,17 +321,17 @@
17, 17,
19, 19,
21, 21,
24, 23,
27, 25,
30, 28,
33, 31,
34,
37, 37,
39, 41,
43, 43,
47, 47,
49, 51,
59, 53,
61,
63, 63,
65, 65,
67, 67,
@@ -339,9 +341,9 @@
75, 75,
77, 77,
79, 79,
82, 81,
85, 83,
87, 86,
89, 89,
91, 91,
93, 93,
@@ -350,7 +352,9 @@
99, 99,
101, 101,
103, 103,
107 105,
107,
111
] ]
}, },
{ {
@@ -370,34 +374,34 @@
18, 18,
20, 20,
22, 22,
23, 24,
25,
26, 26,
28, 27,
29, 29,
31, 30,
32, 32,
34, 33,
35, 35,
36, 36,
38, 38,
39,
40, 40,
41,
42, 42,
44, 44,
45, 45,
46, 46,
48, 48,
49,
50, 50,
51,
52, 52,
53,
54, 54,
55, 55,
56, 56,
57, 57,
58, 58,
59,
60, 60,
61,
62, 62,
64, 64,
66, 66,
@@ -408,10 +412,10 @@
76, 76,
78, 78,
80, 80,
81, 82,
83,
84, 84,
86, 85,
87,
88, 88,
90, 90,
92, 92,
@@ -421,9 +425,11 @@
100, 100,
102, 102,
104, 104,
105,
106, 106,
108 108,
109,
110,
112
] ]
} }
], ],
@@ -554,6 +560,28 @@
"path" : "HydraEngine/source/actor/HydraSpotLightActor.h", "path" : "HydraEngine/source/actor/HydraSpotLightActor.h",
"sourceGroupIndex" : 1 "sourceGroupIndex" : 1
}, },
{
"backtrace" : 1,
"compileGroupIndex" : 0,
"path" : "HydraEngine/source/actor/HydraTestCubeActor.cpp",
"sourceGroupIndex" : 0
},
{
"backtrace" : 1,
"path" : "HydraEngine/source/actor/HydraTestCubeActor.h",
"sourceGroupIndex" : 1
},
{
"backtrace" : 1,
"compileGroupIndex" : 0,
"path" : "HydraEngine/source/actor/HydraTextureDebugActor.cpp",
"sourceGroupIndex" : 0
},
{
"backtrace" : 1,
"path" : "HydraEngine/source/actor/HydraTextureDebugActor.h",
"sourceGroupIndex" : 1
},
{ {
"backtrace" : 1, "backtrace" : 1,
"path" : "HydraEngine/source/buffer/HydraBuffer.h", "path" : "HydraEngine/source/buffer/HydraBuffer.h",
@@ -200,17 +200,17 @@
17, 17,
19, 19,
21, 21,
24, 23,
27, 25,
30, 28,
33, 31,
34,
37, 37,
39, 41,
43, 43,
47, 47,
49, 51,
59, 53,
61,
63, 63,
65, 65,
67, 67,
@@ -220,9 +220,9 @@
75, 75,
77, 77,
79, 79,
82, 81,
85, 83,
87, 86,
89, 89,
91, 91,
93, 93,
@@ -231,7 +231,9 @@
99, 99,
101, 101,
103, 103,
107 105,
107,
111
] ]
} }
], ],
@@ -319,17 +321,17 @@
17, 17,
19, 19,
21, 21,
24, 23,
27, 25,
30, 28,
33, 31,
34,
37, 37,
39, 41,
43, 43,
47, 47,
49, 51,
59, 53,
61,
63, 63,
65, 65,
67, 67,
@@ -339,9 +341,9 @@
75, 75,
77, 77,
79, 79,
82, 81,
85, 83,
87, 86,
89, 89,
91, 91,
93, 93,
@@ -350,7 +352,9 @@
99, 99,
101, 101,
103, 103,
107 105,
107,
111
] ]
}, },
{ {
@@ -370,34 +374,34 @@
18, 18,
20, 20,
22, 22,
23, 24,
25,
26, 26,
28, 27,
29, 29,
31, 30,
32, 32,
34, 33,
35, 35,
36, 36,
38, 38,
39,
40, 40,
41,
42, 42,
44, 44,
45, 45,
46, 46,
48, 48,
49,
50, 50,
51,
52, 52,
53,
54, 54,
55, 55,
56, 56,
57, 57,
58, 58,
59,
60, 60,
61,
62, 62,
64, 64,
66, 66,
@@ -408,10 +412,10 @@
76, 76,
78, 78,
80, 80,
81, 82,
83,
84, 84,
86, 85,
87,
88, 88,
90, 90,
92, 92,
@@ -421,9 +425,11 @@
100, 100,
102, 102,
104, 104,
105,
106, 106,
108 108,
109,
110,
112
] ]
} }
], ],
@@ -554,6 +560,28 @@
"path" : "HydraEngine/source/actor/HydraSpotLightActor.h", "path" : "HydraEngine/source/actor/HydraSpotLightActor.h",
"sourceGroupIndex" : 1 "sourceGroupIndex" : 1
}, },
{
"backtrace" : 1,
"compileGroupIndex" : 0,
"path" : "HydraEngine/source/actor/HydraTestCubeActor.cpp",
"sourceGroupIndex" : 0
},
{
"backtrace" : 1,
"path" : "HydraEngine/source/actor/HydraTestCubeActor.h",
"sourceGroupIndex" : 1
},
{
"backtrace" : 1,
"compileGroupIndex" : 0,
"path" : "HydraEngine/source/actor/HydraTextureDebugActor.cpp",
"sourceGroupIndex" : 0
},
{
"backtrace" : 1,
"path" : "HydraEngine/source/actor/HydraTextureDebugActor.h",
"sourceGroupIndex" : 1
},
{ {
"backtrace" : 1, "backtrace" : 1,
"path" : "HydraEngine/source/buffer/HydraBuffer.h", "path" : "HydraEngine/source/buffer/HydraBuffer.h",
@@ -200,17 +200,17 @@
17, 17,
19, 19,
21, 21,
24, 23,
27, 25,
30, 28,
33, 31,
34,
37, 37,
39, 41,
43, 43,
47, 47,
49, 51,
59, 53,
61,
63, 63,
65, 65,
67, 67,
@@ -220,9 +220,9 @@
75, 75,
77, 77,
79, 79,
82, 81,
85, 83,
87, 86,
89, 89,
91, 91,
93, 93,
@@ -231,7 +231,9 @@
99, 99,
101, 101,
103, 103,
107 105,
107,
111
] ]
} }
], ],
@@ -319,17 +321,17 @@
17, 17,
19, 19,
21, 21,
24, 23,
27, 25,
30, 28,
33, 31,
34,
37, 37,
39, 41,
43, 43,
47, 47,
49, 51,
59, 53,
61,
63, 63,
65, 65,
67, 67,
@@ -339,9 +341,9 @@
75, 75,
77, 77,
79, 79,
82, 81,
85, 83,
87, 86,
89, 89,
91, 91,
93, 93,
@@ -350,7 +352,9 @@
99, 99,
101, 101,
103, 103,
107 105,
107,
111
] ]
}, },
{ {
@@ -370,34 +374,34 @@
18, 18,
20, 20,
22, 22,
23, 24,
25,
26, 26,
28, 27,
29, 29,
31, 30,
32, 32,
34, 33,
35, 35,
36, 36,
38, 38,
39,
40, 40,
41,
42, 42,
44, 44,
45, 45,
46, 46,
48, 48,
49,
50, 50,
51,
52, 52,
53,
54, 54,
55, 55,
56, 56,
57, 57,
58, 58,
59,
60, 60,
61,
62, 62,
64, 64,
66, 66,
@@ -408,10 +412,10 @@
76, 76,
78, 78,
80, 80,
81, 82,
83,
84, 84,
86, 85,
87,
88, 88,
90, 90,
92, 92,
@@ -421,9 +425,11 @@
100, 100,
102, 102,
104, 104,
105,
106, 106,
108 108,
109,
110,
112
] ]
} }
], ],
@@ -554,6 +560,28 @@
"path" : "HydraEngine/source/actor/HydraSpotLightActor.h", "path" : "HydraEngine/source/actor/HydraSpotLightActor.h",
"sourceGroupIndex" : 1 "sourceGroupIndex" : 1
}, },
{
"backtrace" : 1,
"compileGroupIndex" : 0,
"path" : "HydraEngine/source/actor/HydraTestCubeActor.cpp",
"sourceGroupIndex" : 0
},
{
"backtrace" : 1,
"path" : "HydraEngine/source/actor/HydraTestCubeActor.h",
"sourceGroupIndex" : 1
},
{
"backtrace" : 1,
"compileGroupIndex" : 0,
"path" : "HydraEngine/source/actor/HydraTextureDebugActor.cpp",
"sourceGroupIndex" : 0
},
{
"backtrace" : 1,
"path" : "HydraEngine/source/actor/HydraTextureDebugActor.h",
"sourceGroupIndex" : 1
},
{ {
"backtrace" : 1, "backtrace" : 1,
"path" : "HydraEngine/source/buffer/HydraBuffer.h", "path" : "HydraEngine/source/buffer/HydraBuffer.h",
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,7 +1,4 @@
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\vc143.pdb c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\vc143.pdb
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydramaterialsystem.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydralightsystem.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrasystemmanager.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrasystem.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrasystem.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraecs.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraecs.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydracamera.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydracamera.obj
@@ -10,6 +7,9 @@ c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydratexturebuffermanage
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydramaterialbuffermanager.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydramaterialbuffermanager.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydralightbuffermanager.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydralightbuffermanager.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrabuffermanager.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrabuffermanager.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydratexturedebugactor.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydratestcubeactor.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraspotlightactor.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrapointlightactor.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrapointlightactor.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraplayeractor.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraplayeractor.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraplaneactor.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraplaneactor.obj
@@ -19,12 +19,9 @@ c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydradirectionallightact
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraactormanager.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraactormanager.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraactor.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraactor.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\cmakecxxcompilerid.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\cmakecxxcompilerid.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrawindowmanager.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydratask.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrathread.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrataskscheduler.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrataskbarrier.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrataskbarrier.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrarenderer.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrarenderer.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrashadowpipeline.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrarenderstage.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrarenderstage.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrapipeline.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrapipeline.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraforwardpipeline.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraforwardpipeline.obj
@@ -36,14 +33,22 @@ c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraobject.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrainputmanager.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrainputmanager.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydratransformsystem.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydratransformsystem.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrashadowsourcesystem.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrarendersystem.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrarendersystem.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrameshsystem.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrameshsystem.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraspotlightactor.obj c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydramaterialsystem.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydralightsystem.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrasystemmanager.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrawindowmanager.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydratask.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrathread.obj
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydrataskscheduler.obj
c:\code\hydrav3\build\hydraengine\cmakefiles\generate.stamp c:\code\hydrav3\build\hydraengine\cmakefiles\generate.stamp
c:\code\hydrav3\build\hydraengine\debug\hydraengine.dll
c:\code\hydrav3\build\hydraengine\debug\hydraengine.pdb
c:\code\hydrav3\build\hydraengine\debug\hydraengine.lib c:\code\hydrav3\build\hydraengine\debug\hydraengine.lib
c:\code\hydrav3\build\hydraengine\debug\hydraengine.exp c:\code\hydrav3\build\hydraengine\debug\hydraengine.exp
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.ilk c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.ilk
c:\code\hydrav3\build\hydraengine\debug\hydraengine.pdb
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\cl.command.1.tlog c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\cl.command.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\cl.items.tlog c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\cl.items.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\cl.read.1.tlog c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\cl.read.1.tlog
@@ -51,16 +56,6 @@ c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\cl.writ
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\custombuild.command.1.tlog c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\custombuild.command.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\custombuild.read.1.tlog c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\custombuild.read.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\custombuild.write.1.tlog c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\custombuild.write.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.29064-cvtres.read.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.29064-cvtres.write.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.29064-rc.read.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.29064-rc.write.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.29064.read.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.29064.read.2.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.29064.read.3.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.29064.read.4.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.29064.read.5.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.29064.write.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.command.1.tlog c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.command.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.read.1.tlog c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.read.1.tlog
c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.secondary.1.tlog c:\code\hydrav3\build\hydraengine\hydraengine.dir\debug\hydraengine.tlog\link.secondary.1.tlog
@@ -8,6 +8,8 @@ C:\Code\HydraV3\HydraEngine\source\actor\HydraPlaneActor.cpp;C:\Code\HydraV3\bui
C:\Code\HydraV3\HydraEngine\source\actor\HydraPlayerActor.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraPlayerActor.obj C:\Code\HydraV3\HydraEngine\source\actor\HydraPlayerActor.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraPlayerActor.obj
C:\Code\HydraV3\HydraEngine\source\actor\HydraPointLightActor.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraPointLightActor.obj C:\Code\HydraV3\HydraEngine\source\actor\HydraPointLightActor.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraPointLightActor.obj
C:\Code\HydraV3\HydraEngine\source\actor\HydraSpotLightActor.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraSpotLightActor.obj C:\Code\HydraV3\HydraEngine\source\actor\HydraSpotLightActor.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraSpotLightActor.obj
C:\Code\HydraV3\HydraEngine\source\actor\HydraTestCubeActor.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraTestCubeActor.obj
C:\Code\HydraV3\HydraEngine\source\actor\HydraTextureDebugActor.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraTextureDebugActor.obj
C:\Code\HydraV3\HydraEngine\source\buffer\HydraBufferManager.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraBufferManager.obj C:\Code\HydraV3\HydraEngine\source\buffer\HydraBufferManager.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraBufferManager.obj
C:\Code\HydraV3\HydraEngine\source\buffer\HydraLightBufferManager.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraLightBufferManager.obj C:\Code\HydraV3\HydraEngine\source\buffer\HydraLightBufferManager.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraLightBufferManager.obj
C:\Code\HydraV3\HydraEngine\source\buffer\HydraMaterialBufferManager.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraMaterialBufferManager.obj C:\Code\HydraV3\HydraEngine\source\buffer\HydraMaterialBufferManager.cpp;C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraMaterialBufferManager.obj
@@ -1,4 +1,4 @@
^C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\CMAKECXXCOMPILERID.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAACTORMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRABUFFERMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRACAMERA.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRADEFERREDPIPELINE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRADIRECTIONALLIGHTACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAECS.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAENGINE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAFORWARDPIPELINE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAGAMEPROXY.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAGLTFACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAGLTFLOADER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAINPUTMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRALIGHTBUFFERMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRALIGHTSYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAMATERIALBUFFERMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAMATERIALSYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAMESHMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAMESHSYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAOBJECT.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAOUTPUTACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAPIPELINE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAPLANEACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAPLAYERACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAPOINTLIGHTACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRARENDERER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRARENDERSTAGE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRARENDERSYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRASHADOWPIPELINE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRASHADOWSOURCESYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRASPOTLIGHTACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRASYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRASYSTEMMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATASK.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATASKBARRIER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATASKSCHEDULER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATEXTUREBUFFERMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATHREAD.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATRANSFORMSYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAVERTEXBUFFERMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAWINDOWMANAGER.OBJ ^C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\CMAKECXXCOMPILERID.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAACTORMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRABUFFERMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRACAMERA.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRADEFERREDPIPELINE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRADIRECTIONALLIGHTACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAECS.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAENGINE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAFORWARDPIPELINE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAGAMEPROXY.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAGLTFACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAGLTFLOADER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAINPUTMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRALIGHTBUFFERMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRALIGHTSYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAMATERIALBUFFERMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAMATERIALSYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAMESHMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAMESHSYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAOBJECT.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAOUTPUTACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAPIPELINE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAPLANEACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAPLAYERACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAPOINTLIGHTACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRARENDERER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRARENDERSTAGE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRARENDERSYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRASHADOWPIPELINE.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRASHADOWSOURCESYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRASPOTLIGHTACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRASYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRASYSTEMMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATASK.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATASKBARRIER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATASKSCHEDULER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATESTCUBEACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATEXTUREBUFFERMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATEXTUREDEBUGACTOR.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATHREAD.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRATRANSFORMSYSTEM.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAVERTEXBUFFERMANAGER.OBJ|C:\CODE\HYDRAV3\BUILD\HYDRAENGINE\HYDRAENGINE.DIR\DEBUG\HYDRAWINDOWMANAGER.OBJ
C:\Code\HydraV3\build\HydraEngine\Debug\HydraEngine.lib C:\Code\HydraV3\build\HydraEngine\Debug\HydraEngine.lib
C:\Code\HydraV3\build\HydraEngine\Debug\HydraEngine.EXP C:\Code\HydraV3\build\HydraEngine\Debug\HydraEngine.EXP
C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraEngine.ilk C:\Code\HydraV3\build\HydraEngine\HydraEngine.dir\Debug\HydraEngine.ilk
Binary file not shown.
+4
View File
@@ -448,6 +448,10 @@ if %errorlevel% neq 0 goto :VCEnd</Command>
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraPointLightActor.h" /> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraPointLightActor.h" />
<ClCompile Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraSpotLightActor.cpp" /> <ClCompile Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraSpotLightActor.cpp" />
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraSpotLightActor.h" /> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraSpotLightActor.h" />
<ClCompile Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraTestCubeActor.cpp" />
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraTestCubeActor.h" />
<ClCompile Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraTextureDebugActor.cpp" />
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraTextureDebugActor.h" />
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraBuffer.h" /> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraBuffer.h" />
<ClCompile Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraBufferManager.cpp" /> <ClCompile Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraBufferManager.cpp" />
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraBufferManager.h" /> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraBufferManager.h" />
@@ -31,6 +31,12 @@
<ClCompile Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraSpotLightActor.cpp"> <ClCompile Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraSpotLightActor.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraTestCubeActor.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraTextureDebugActor.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraBufferManager.cpp"> <ClCompile Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraBufferManager.cpp">
<Filter>Source Files</Filter> <Filter>Source Files</Filter>
</ClCompile> </ClCompile>
@@ -168,6 +174,12 @@
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraSpotLightActor.h"> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraSpotLightActor.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraTestCubeActor.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\actor\HydraTextureDebugActor.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraBuffer.h"> <ClInclude Include="C:\Code\HydraV3\HydraEngine\source\buffer\HydraBuffer.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
+3 -3
View File
@@ -1,8 +1,8 @@
================================================================================ ================================================================================
Linker Errors Linker Errors
Generated: 2026-07-28T12:58:05.588Z Generated: 2026-08-03T13:16:01.235Z
Total Errors: 1 Total Errors: 1
================================================================================ ================================================================================
[LNK1201] (MSVC) [LNK1104] (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] cannot open file 'C:\Code\HydraV3\build\Debug\HydraClient.exe' [C:\Code\HydraV3\build\HydraClient.vcxproj]