Basic light culling but without the culling
This commit is contained in:
@@ -8,9 +8,9 @@ import MATERIAL_IMPORT;
|
||||
import PrimitiveSceneData;
|
||||
import MaterialParameter;
|
||||
|
||||
layout(set = INDEX_LIGHT_ENV, binding = 1)
|
||||
layout(set = INDEX_LIGHT_ENV, binding = 4)
|
||||
StructuredBuffer<uint> lightIndexList;
|
||||
layout(set = INDEX_LIGHT_ENV, binding = 2)
|
||||
layout(set = INDEX_LIGHT_ENV, binding = 5)
|
||||
RWTexture2D<uint2> lightGrid;
|
||||
|
||||
|
||||
@@ -56,9 +56,9 @@ float4 fragmentMain(
|
||||
|
||||
float3 result = float3(0, 0, 0);
|
||||
|
||||
for (int i = 0; i < gLightEnv.numDirectionalLights; i++)
|
||||
for (int i = 0; i < numDirectionalLights; i++)
|
||||
{
|
||||
result += gLightEnv.directionalLights[i].illuminate(materialParams, brdf, viewDir);
|
||||
result += directionalLights[i].illuminate(materialParams, brdf, viewDir);
|
||||
}
|
||||
|
||||
uint2 tileIndex = uint2(floor(position.xy / BLOCK_SIZE));
|
||||
@@ -69,7 +69,7 @@ float4 fragmentMain(
|
||||
for (int j = 0; j < lightCount; ++j)
|
||||
{
|
||||
uint lightIndex = lightIndexList[startOffset + j];
|
||||
PointLight pointLight = gLightEnv.pointLights[lightIndex];
|
||||
PointLight pointLight = pointLights[lightIndex];
|
||||
result += pointLight.illuminate(materialParams, brdf, viewDir);
|
||||
}
|
||||
return float4(result, 1);
|
||||
|
||||
@@ -102,15 +102,16 @@ void cullLights(ComputeShaderInput in)
|
||||
|
||||
Plane minPlane = {float3(0, 0, -1), -minDepthVS};
|
||||
|
||||
for ( uint i = in.groupIndex; i < gLightEnv.numPointLights; i += BLOCK_SIZE * BLOCK_SIZE )
|
||||
for ( uint i = in.groupIndex; i < numPointLights; i += BLOCK_SIZE * BLOCK_SIZE )
|
||||
{
|
||||
PointLight light = gLightEnv.pointLights[i];
|
||||
//if(gLightEnv.insideFrustum(groupFrustum, nearClipVS, maxDepthVS))
|
||||
PointLight light = pointLights[i];
|
||||
//if(light.insideFrustum(groupFrustum, nearClipVS, maxDepthVS))
|
||||
{
|
||||
tAppendLight(i);
|
||||
//if(!light.insidePlane(minPlane))
|
||||
//{
|
||||
oAppendLight(i);
|
||||
//}
|
||||
{
|
||||
oAppendLight(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -58,15 +58,11 @@ struct PointLight : ILightEnv
|
||||
}
|
||||
};
|
||||
|
||||
#define MAX_DIRECTIONAL_LIGHTS 4
|
||||
#define MAX_POINT_LIGHTS 256
|
||||
struct Lights
|
||||
{
|
||||
DirectionalLight directionalLights[MAX_DIRECTIONAL_LIGHTS];
|
||||
PointLight pointLights[MAX_POINT_LIGHTS];
|
||||
uint numDirectionalLights;
|
||||
uint numPointLights;
|
||||
};
|
||||
|
||||
layout(set = INDEX_LIGHT_ENV, binding = 0, std430)
|
||||
ConstantBuffer<Lights> gLightEnv;
|
||||
StructuredBuffer<DirectionalLight> directionalLights;
|
||||
layout(set = INDEX_LIGHT_ENV, binding = 1, std430)
|
||||
ConstantBuffer<uint> numDirectionalLights;
|
||||
layout(set = INDEX_LIGHT_ENV, binding = 2, std430)
|
||||
StructuredBuffer<PointLight> pointLights;
|
||||
layout(set = INDEX_LIGHT_ENV, binding = 3, std430)
|
||||
ConstantBuffer<uint> numPointLights;
|
||||
|
||||
Reference in New Issue
Block a user