diff --git a/.vscode/settings.json b/.vscode/settings.json index 0786f5d..9f87834 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -115,5 +115,8 @@ "-Wno-dev" ], "C_Cpp.default.cppStandard": "c++20", - "C_Cpp.default.intelliSenseMode": "msvc-x64" + "C_Cpp.default.intelliSenseMode": "msvc-x64", + "files.watcherExclude": { + "**/target": true + } } \ No newline at end of file diff --git a/res/shaders/LightCulling.slang b/res/shaders/LightCulling.slang index 5e25a68..55fabad 100644 --- a/res/shaders/LightCulling.slang +++ b/res/shaders/LightCulling.slang @@ -105,10 +105,10 @@ void cullLights(ComputeShaderInput in) for ( uint i = in.groupIndex; i < numPointLights; i += BLOCK_SIZE * BLOCK_SIZE ) { PointLight light = pointLights[i]; - //if(light.insideFrustum(groupFrustum, nearClipVS, maxDepthVS)) + if(light.insideFrustum(groupFrustum, nearClipVS, maxDepthVS)) { tAppendLight(i); - //if(!light.insidePlane(minPlane)) + if(!light.insidePlane(minPlane)) { oAppendLight(i); } diff --git a/res/shaders/lib/LightEnv.slang b/res/shaders/lib/LightEnv.slang index ad661df..72670e7 100644 --- a/res/shaders/lib/LightEnv.slang +++ b/res/shaders/lib/LightEnv.slang @@ -43,9 +43,9 @@ struct PointLight : ILightEnv { bool result = true; - //if(positionVS.z - range > zNear || positionVS.z + colorRange.w < zFar) + if(positionVS.z - colorRange.w > zNear || positionVS.z + colorRange.w < zFar) { - // result = false; + result = false; } for(int i = 0; i < 4 && result; ++i) { diff --git a/src/Engine/Graphics/RenderPass/LightCullingPass.cpp b/src/Engine/Graphics/RenderPass/LightCullingPass.cpp index 1fa14ee..b5a600a 100644 --- a/src/Engine/Graphics/RenderPass/LightCullingPass.cpp +++ b/src/Engine/Graphics/RenderPass/LightCullingPass.cpp @@ -36,6 +36,15 @@ void LightCullingPass::beginFrame() uniformUpdate.data = (uint8*)&viewParams; viewParamsBuffer->updateContents(uniformUpdate); + LightEnv lightEnv = scene->getLightBuffer(); + for(uint32 i = 0; i < lightEnv.numPointLights; ++i) + { + lightEnv.pointLights[i].positionVS = lightEnv.pointLights[i].positionWS; + } + uniformUpdate.size = sizeof(PointLight) * MAX_POINT_LIGHTS; + uniformUpdate.data = (uint8*)&lightEnv.pointLights; + pointLightBuffer->updateContents(uniformUpdate); + BulkResourceData counterReset; uint32 reset = 0; counterReset.data = (uint8*)&reset; diff --git a/src/Engine/Scene/Scene.cpp b/src/Engine/Scene/Scene.cpp index a79ad25..681b28c 100644 --- a/src/Engine/Scene/Scene.cpp +++ b/src/Engine/Scene/Scene.cpp @@ -19,14 +19,16 @@ Scene::Scene(Gfx::PGraphics graphics) lightEnv.directionalLights[0].color = Vector4(1, 1, 1, 1); lightEnv.directionalLights[0].direction = Vector4(1, 1, 0, 1); lightEnv.directionalLights[0].intensity = Vector4(1, 1, 1, 1); - lightEnv.numDirectionalLights = 1; + lightEnv.numDirectionalLights = 0; srand((unsigned int)time(NULL)); - for(uint32 i = 0; i < MAX_POINT_LIGHTS/2; ++i) + for(uint32 i = 0; i < 1; ++i) { lightEnv.pointLights[i].colorRange = Vector4(frand(), frand(), frand(), frand() * 30); lightEnv.pointLights[i].positionWS = Vector4(frand() * 100-50, frand(), frand() * 100-50, 1); } - lightEnv.numPointLights = MAX_POINT_LIGHTS/2; + lightEnv.numPointLights = 1; + lightEnv.pointLights[0].colorRange = Vector4(1, 0, 0, 100); + lightEnv.pointLights[0].positionWS = Vector4(0, 10, 0, 1); } Scene::~Scene()