diff --git a/data/shaders/texturesparseresidency/sparseresidency.frag b/data/shaders/texturesparseresidency/sparseresidency.frag index 63660bfd..9bc581ec 100644 --- a/data/shaders/texturesparseresidency/sparseresidency.frag +++ b/data/shaders/texturesparseresidency/sparseresidency.frag @@ -7,6 +7,9 @@ layout (binding = 1) uniform sampler2D samplerColor; layout (location = 0) in vec2 inUV; layout (location = 1) in float inLodBias; +layout (location = 2) in vec3 inNormal; +layout (location = 3) in vec3 inViewVec; +layout (location = 4) in vec3 inLightVec; layout (location = 0) out vec4 outFragColor; @@ -17,29 +20,26 @@ void main() // Get residency code for current texel int residencyCode = sparseTextureARB(samplerColor, inUV, color, inLodBias); -//#define MIN_LOD -#ifdef MIN_LOD // Fetch sparse until we get a valid texel - // todo: does not work in SPIR-V with current drivers (will be fixed in a new release) float minLod = 1.0; while (!sparseTexelsResidentARB(residencyCode)) { residencyCode = sparseTextureClampARB(samplerColor, inUV, minLod, color); minLod += 1.0f; } -#endif + // Check if texel is resident bool texelResident = sparseTexelsResidentARB(residencyCode); - float lodClamp = 1.0f; - if (texelResident) - { - color = texture(samplerColor, inUV, inLodBias); - } - else + if (!texelResident) { color = vec4(1.0, 0.0, 0.0, 0.0); } - outFragColor = vec4(color.rgb, 1.0); + vec3 N = normalize(inNormal); + vec3 L = normalize(inLightVec); + vec3 R = reflect(-L, N); + vec3 diffuse = max(dot(N, L), 0.25) * color.rgb; + outFragColor = vec4(diffuse, 1.0); +// outFragColor = vec4(color.rgb, 1.0); } \ No newline at end of file diff --git a/data/shaders/texturesparseresidency/sparseresidency.frag.spv b/data/shaders/texturesparseresidency/sparseresidency.frag.spv index f6fae7bc..11fd7590 100644 Binary files a/data/shaders/texturesparseresidency/sparseresidency.frag.spv and b/data/shaders/texturesparseresidency/sparseresidency.frag.spv differ diff --git a/data/shaders/texturesparseresidency/sparseresidency.vert b/data/shaders/texturesparseresidency/sparseresidency.vert index 2ef3a344..0726e934 100644 --- a/data/shaders/texturesparseresidency/sparseresidency.vert +++ b/data/shaders/texturesparseresidency/sparseresidency.vert @@ -17,9 +17,9 @@ layout (binding = 0) uniform UBO layout (location = 0) out vec2 outUV; layout (location = 1) out float outLodBias; -//layout (location = 2) out vec3 outNormal; -//layout (location = 3) out vec3 outViewVec; -//layout (location = 4) out vec3 outLightVec; +layout (location = 2) out vec3 outNormal; +layout (location = 3) out vec3 outViewVec; +layout (location = 4) out vec3 outLightVec; out gl_PerVertex { @@ -30,16 +30,13 @@ void main() { outUV = inUV; outLodBias = ubo.lodBias; + outNormal = inNormal; vec3 worldPos = vec3(ubo.model * vec4(inPos, 1.0)); gl_Position = ubo.projection * ubo.model * vec4(inPos.xyz, 1.0); - /* - vec4 pos = ubo.model * vec4(inPos, 1.0); - outNormal = mat3(inverse(transpose(ubo.model))) * inNormal; - vec3 lightPos = vec3(0.0); - vec3 lPos = mat3(ubo.model) * lightPos.xyz; - outLightVec = lPos - pos.xyz; - outViewVec = ubo.viewPos.xyz - pos.xyz; - */ + + vec3 lightPos = vec3(0.0, -5.0f, 0.0f); + outLightVec = lightPos - inPos.xyz; + outViewVec = ubo.viewPos.xyz - worldPos.xyz; } diff --git a/data/shaders/texturesparseresidency/sparseresidency.vert.spv b/data/shaders/texturesparseresidency/sparseresidency.vert.spv index f6a96571..3134d5fa 100644 Binary files a/data/shaders/texturesparseresidency/sparseresidency.vert.spv and b/data/shaders/texturesparseresidency/sparseresidency.vert.spv differ