|
|
@@ -19,27 +19,6 @@ ByteAddressBuffer lightBuffer : register(t1, space4);
|
|
|
|
|
|
#define between(v1, vmin, vmax) (v1.x >= vmin.x && v1.x <= vmax.x && v1.y >= vmin.y && v1.y <= vmax.y && v1.z >= vmin.z && v1.z <= vmax.z)
|
|
|
|
|
|
-float3 getLight(int index)
|
|
|
-{
|
|
|
- uint raw = lightBuffer.Load((index / 4) * 4);
|
|
|
- uint shift = (index % 4) * 8;
|
|
|
- float r = ((raw >> shift) & 0xFF) / 255.0;
|
|
|
- shift += 8;
|
|
|
- if (shift == 32)
|
|
|
- {
|
|
|
- raw = lightBuffer.Load((index / 4) * 4 + 4);
|
|
|
- shift = 0;
|
|
|
- }
|
|
|
- float g = ((raw >> shift) & 0xFF) / 255.0;
|
|
|
- shift += 8;
|
|
|
- if (shift == 32)
|
|
|
- {
|
|
|
- raw = lightBuffer.Load((index / 4) * 4 + 4);
|
|
|
- shift = 0;
|
|
|
- }
|
|
|
- float b = ((raw >> shift) & 0xFF) / 255.0;
|
|
|
- return float3(r, g, b);
|
|
|
-}
|
|
|
|
|
|
float3 interpolateLight(float3 topLeft, float3 topRight, float3 bottomLeft, float3 bottomRight, float2 coords)
|
|
|
{
|
|
|
@@ -149,74 +128,74 @@ void ChunkIntersection()
|
|
|
case 0: // front | NORTH
|
|
|
intersectionAttributes.normal = float3(0, -1, 0);
|
|
|
intersectionAttributes.texCoord = float2(1 - (currentPos.x - floor(currentPos.x)), 1 - (currentPos.z - floor(currentPos.z)));
|
|
|
- topLeftDayLight = getLight(lightOffset + 0);
|
|
|
- topLeftDynamicLight = getLight(lightOffset + 3);
|
|
|
- topRightDayLight = getLight(lightOffset + 18);
|
|
|
- topRightDynamicLight = getLight(lightOffset + 21);
|
|
|
- bottomLeftDayLight = getLight(lightOffset + 24);
|
|
|
- bottomLeftDynamicLight = getLight(lightOffset + 27);
|
|
|
- bottomRightDayLight = getLight(lightOffset + 42);
|
|
|
- bottomRightDynamicLight = getLight(lightOffset + 45);
|
|
|
+ topLeftDayLight = getLight(lightBuffer, lightOffset + 0);
|
|
|
+ topLeftDynamicLight = getLight(lightBuffer, lightOffset + 3);
|
|
|
+ topRightDayLight = getLight(lightBuffer, lightOffset + 18);
|
|
|
+ topRightDynamicLight = getLight(lightBuffer, lightOffset + 21);
|
|
|
+ bottomLeftDayLight = getLight(lightBuffer, lightOffset + 24);
|
|
|
+ bottomLeftDynamicLight = getLight(lightBuffer, lightOffset + 27);
|
|
|
+ bottomRightDayLight = getLight(lightBuffer, lightOffset + 42);
|
|
|
+ bottomRightDynamicLight = getLight(lightBuffer, lightOffset + 45);
|
|
|
break;
|
|
|
case 1: // back | SOUTH
|
|
|
intersectionAttributes.normal = float3(0, 1, 0);
|
|
|
intersectionAttributes.texCoord = float2(currentPos.x - floor(currentPos.x), 1 - (currentPos.z - floor(currentPos.z)));
|
|
|
- topLeftDayLight = getLight(lightOffset + 12);
|
|
|
- topLeftDynamicLight = getLight(lightOffset + 15);
|
|
|
- topRightDayLight = getLight(lightOffset + 6);
|
|
|
- topRightDynamicLight = getLight(lightOffset + 9);
|
|
|
- bottomLeftDayLight = getLight(lightOffset + 36);
|
|
|
- bottomLeftDynamicLight = getLight(lightOffset + 39);
|
|
|
- bottomRightDayLight = getLight(lightOffset + 30);
|
|
|
- bottomRightDynamicLight = getLight(lightOffset + 33);
|
|
|
+ topLeftDayLight = getLight(lightBuffer, lightOffset + 12);
|
|
|
+ topLeftDynamicLight = getLight(lightBuffer, lightOffset + 15);
|
|
|
+ topRightDayLight = getLight(lightBuffer, lightOffset + 6);
|
|
|
+ topRightDynamicLight = getLight(lightBuffer, lightOffset + 9);
|
|
|
+ bottomLeftDayLight = getLight(lightBuffer, lightOffset + 36);
|
|
|
+ bottomLeftDynamicLight = getLight(lightBuffer, lightOffset + 39);
|
|
|
+ bottomRightDayLight = getLight(lightBuffer, lightOffset + 30);
|
|
|
+ bottomRightDynamicLight = getLight(lightBuffer, lightOffset + 33);
|
|
|
break;
|
|
|
case 2: // left | EAST
|
|
|
intersectionAttributes.normal = float3(1, 0, 0);
|
|
|
intersectionAttributes.texCoord = float2(1 - (currentPos.y - floor(currentPos.y)), 1 - (currentPos.z - floor(currentPos.z)));
|
|
|
- topLeftDayLight = getLight(lightOffset + 6);
|
|
|
- topLeftDynamicLight = getLight(lightOffset + 9);
|
|
|
- topRightDayLight = getLight(lightOffset + 0);
|
|
|
- topRightDynamicLight = getLight(lightOffset + 3);
|
|
|
- bottomLeftDayLight = getLight(lightOffset + 30);
|
|
|
- bottomLeftDynamicLight = getLight(lightOffset + 33);
|
|
|
- bottomRightDayLight = getLight(lightOffset + 24);
|
|
|
- bottomRightDynamicLight = getLight(lightOffset + 27);
|
|
|
+ topLeftDayLight = getLight(lightBuffer, lightOffset + 6);
|
|
|
+ topLeftDynamicLight = getLight(lightBuffer, lightOffset + 9);
|
|
|
+ topRightDayLight = getLight(lightBuffer, lightOffset + 0);
|
|
|
+ topRightDynamicLight = getLight(lightBuffer, lightOffset + 3);
|
|
|
+ bottomLeftDayLight = getLight(lightBuffer, lightOffset + 30);
|
|
|
+ bottomLeftDynamicLight = getLight(lightBuffer, lightOffset + 33);
|
|
|
+ bottomRightDayLight = getLight(lightBuffer, lightOffset + 24);
|
|
|
+ bottomRightDynamicLight = getLight(lightBuffer, lightOffset + 27);
|
|
|
break;
|
|
|
case 3: // right | WEST
|
|
|
intersectionAttributes.normal = float3(-1, 0, 0);
|
|
|
intersectionAttributes.texCoord = float2(currentPos.y - floor(currentPos.y), 1 - (currentPos.z - floor(currentPos.z)));
|
|
|
- topLeftDayLight = getLight(lightOffset + 18);
|
|
|
- topLeftDynamicLight = getLight(lightOffset + 21);
|
|
|
- topRightDayLight = getLight(lightOffset + 12);
|
|
|
- topRightDynamicLight = getLight(lightOffset + 15);
|
|
|
- bottomLeftDayLight = getLight(lightOffset + 42);
|
|
|
- bottomLeftDynamicLight = getLight(lightOffset + 45);
|
|
|
- bottomRightDayLight = getLight(lightOffset + 36);
|
|
|
- bottomRightDynamicLight = getLight(lightOffset + 39);
|
|
|
+ topLeftDayLight = getLight(lightBuffer, lightOffset + 18);
|
|
|
+ topLeftDynamicLight = getLight(lightBuffer, lightOffset + 21);
|
|
|
+ topRightDayLight = getLight(lightBuffer, lightOffset + 12);
|
|
|
+ topRightDynamicLight = getLight(lightBuffer, lightOffset + 15);
|
|
|
+ bottomLeftDayLight = getLight(lightBuffer, lightOffset + 42);
|
|
|
+ bottomLeftDynamicLight = getLight(lightBuffer, lightOffset + 45);
|
|
|
+ bottomRightDayLight = getLight(lightBuffer, lightOffset + 36);
|
|
|
+ bottomRightDynamicLight = getLight(lightBuffer, lightOffset + 39);
|
|
|
break;
|
|
|
case 4: // top
|
|
|
intersectionAttributes.normal = float3(0, 0, 1);
|
|
|
intersectionAttributes.texCoord = float2(1 - (currentPos.x - floor(currentPos.x)), 1 - (currentPos.y - floor(currentPos.y)));
|
|
|
- topLeftDayLight = getLight(lightOffset + 6);
|
|
|
- topLeftDynamicLight = getLight(lightOffset + 9);
|
|
|
- topRightDayLight = getLight(lightOffset + 12);
|
|
|
- topRightDynamicLight = getLight(lightOffset + 15);
|
|
|
- bottomLeftDayLight = getLight(lightOffset + 0);
|
|
|
- bottomLeftDynamicLight = getLight(lightOffset + 3);
|
|
|
- bottomRightDayLight = getLight(lightOffset + 18);
|
|
|
- bottomRightDynamicLight = getLight(lightOffset + 21);
|
|
|
+ topLeftDayLight = getLight(lightBuffer, lightOffset + 6);
|
|
|
+ topLeftDynamicLight = getLight(lightBuffer, lightOffset + 9);
|
|
|
+ topRightDayLight = getLight(lightBuffer, lightOffset + 12);
|
|
|
+ topRightDynamicLight = getLight(lightBuffer, lightOffset + 15);
|
|
|
+ bottomLeftDayLight = getLight(lightBuffer, lightOffset + 0);
|
|
|
+ bottomLeftDynamicLight = getLight(lightBuffer, lightOffset + 3);
|
|
|
+ bottomRightDayLight = getLight(lightBuffer, lightOffset + 18);
|
|
|
+ bottomRightDynamicLight = getLight(lightBuffer, lightOffset + 21);
|
|
|
break;
|
|
|
case 5: // bottom
|
|
|
intersectionAttributes.normal = float3(0, 0, -1);
|
|
|
intersectionAttributes.texCoord = float2(1 - (currentPos.x - floor(currentPos.x)), currentPos.y - floor(currentPos.y));
|
|
|
- topLeftDayLight = getLight(lightOffset + 24);
|
|
|
- topLeftDynamicLight = getLight(lightOffset + 27);
|
|
|
- topRightDayLight = getLight(lightOffset + 42);
|
|
|
- topRightDynamicLight = getLight(lightOffset + 45);
|
|
|
- bottomLeftDayLight = getLight(lightOffset + 30);
|
|
|
- bottomLeftDynamicLight = getLight(lightOffset + 33);
|
|
|
- bottomRightDayLight = getLight(lightOffset + 36);
|
|
|
- bottomRightDynamicLight = getLight(lightOffset + 39);
|
|
|
+ topLeftDayLight = getLight(lightBuffer, lightOffset + 24);
|
|
|
+ topLeftDynamicLight = getLight(lightBuffer, lightOffset + 27);
|
|
|
+ topRightDayLight = getLight(lightBuffer, lightOffset + 42);
|
|
|
+ topRightDynamicLight = getLight(lightBuffer, lightOffset + 45);
|
|
|
+ bottomLeftDayLight = getLight(lightBuffer, lightOffset + 30);
|
|
|
+ bottomLeftDynamicLight = getLight(lightBuffer, lightOffset + 33);
|
|
|
+ bottomRightDayLight = getLight(lightBuffer, lightOffset + 36);
|
|
|
+ bottomRightDynamicLight = getLight(lightBuffer, lightOffset + 39);
|
|
|
break;
|
|
|
}
|
|
|
intersectionAttributes.dayLight = packLight(interpolateLight(topLeftDayLight, topRightDayLight, bottomLeftDayLight, bottomRightDayLight, intersectionAttributes.texCoord));
|