Skip to content

Commit 7a4e252

Browse files
deferred texturing works
1 parent f5d2f2f commit 7a4e252

File tree

2 files changed

+49
-47
lines changed

2 files changed

+49
-47
lines changed

examples_tests/41.VisibilityBuffer/common.glsl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ vec2 nbl_glsl_fetchVtxUV(in uint vtxID, in uint drawGUID)
6363
vec3 nbl_glsl_fetchVtxNormal(in uint vtxID, in uint drawGUID)
6464
{
6565
nbl_glsl_VG_VirtualAttributePacked_t va = batchInstanceData[drawGUID].vAttrNormal;
66-
return nbl_glsl_VG_attribFetch_RGB10A2_SNORM(va,vtxID).xyz;
66+
return normalize(nbl_glsl_VG_attribFetch_RGB10A2_SNORM(va,vtxID).xyz);
6767
}
68-
6968
#endif

examples_tests/41.VisibilityBuffer/shadeVBuffer.comp

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -102,61 +102,64 @@ void main()
102102
if (any(greaterThanEqual(fragCoord,textureSize(vBuffer,0))))
103103
return;
104104

105+
vec4 color = vec4(0,0,0,1);
106+
105107
const uvec4 triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2 = texelFetch(vBuffer,fragCoord,0);
106-
107-
const int triangleIDBitcount = findMSB(MAX_TRIANGLES_IN_BATCH-1)+1;
108-
const uint drawGUID = bitfieldExtract(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[0],triangleIDBitcount,32-triangleIDBitcount);
109-
const uint triangleID = bitfieldExtract(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[0],0,triangleIDBitcount);
110-
const vec2 bary = unpackUnorm2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[1]);
111-
const mat2 dBary = mat2(
112-
unpackHalf2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[2]),
113-
unpackHalf2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[3])
114-
);
115-
116-
gBatchInstance = batchInstanceData[drawGUID];
117-
uvec3 vertexIDs;
118-
const uint baseTriangleVertex = triangleID*3u+gBatchInstance.firstIndex;
119-
for (uint i=0u; i<3u; i++)
120-
vertexIDs[i] = nbl_glsl_VG_fetchTriangleVertexIndex(baseTriangleVertex,i);
121-
122-
vec3 pos,normal;
123-
vec2 uv;
124-
mat2 dUVdScreen;
108+
if (triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[0] != 0xffFFffFFu)
125109
{
126-
vec3 positions[3];
127-
vec2 uvs[3];
128-
// wrap this up into a template macro?
129-
for (int i=0; i<3; i++)
110+
const int triangleIDBitcount = findMSB(MAX_TRIANGLES_IN_BATCH-1)+1;
111+
const uint drawGUID = bitfieldExtract(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[0],triangleIDBitcount,32-triangleIDBitcount);
112+
const uint triangleID = bitfieldExtract(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[0],0,triangleIDBitcount);
113+
const vec2 bary = unpackUnorm2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[1]);
114+
const mat2 dBary = mat2(
115+
unpackHalf2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[2]),
116+
unpackHalf2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[3])
117+
);
118+
119+
gBatchInstance = batchInstanceData[drawGUID];
120+
uvec3 vertexIDs;
121+
const uint baseTriangleVertex = triangleID*3u+gBatchInstance.firstIndex;
122+
for (uint i=0u; i<3u; i++)
123+
vertexIDs[i] = nbl_glsl_VG_fetchTriangleVertexIndex(baseTriangleVertex,i);
124+
125+
vec3 pos,normal;
126+
vec2 uv;
127+
mat2 dUVdScreen;
130128
{
131-
positions[i] = nbl_glsl_fetchVtxPos(vertexIDs[i],drawGUID);
132-
uvs[i] = nbl_glsl_fetchVtxUV(vertexIDs[i],drawGUID);
133-
}
134-
135-
// maybe could wrap this up into a function
136-
dPdBary[0] = positions[1]-positions[0];
137-
dPdBary[1] = positions[2]-positions[0];
138-
pos = dPdBary*bary+positions[0]; // TODO: compute from depth buffer or from barycentric? [Need Vib benchmark]
129+
vec3 positions[3];
130+
vec2 uvs[3];
131+
// wrap this up into a template macro?
132+
for (int i=0; i<3; i++)
133+
{
134+
positions[i] = nbl_glsl_fetchVtxPos(vertexIDs[i],drawGUID);
135+
uvs[i] = nbl_glsl_fetchVtxUV(vertexIDs[i],drawGUID);
136+
}
139137

140-
dUVdBary[0] = uvs[1]-uvs[0];
141-
dUVdBary[1] = uvs[2]-uvs[0];
142-
uv = dUVdBary*bary+uvs[0];
138+
// maybe could wrap this up into a function
139+
dPdBary[0] = positions[0]-positions[2];
140+
dPdBary[1] = positions[1]-positions[2];
141+
pos = dPdBary*bary+positions[2]; // TODO: compute from depth buffer or from barycentric? [Need Vib benchmark]
143142

144-
dUVdScreen = nbl_glsl_applyChainRule2D(dUVdBary,dBary);
143+
dUVdBary[0] = uvs[0]-uvs[2];
144+
dUVdBary[1] = uvs[1]-uvs[2];
145+
uv = dUVdBary*bary+uvs[2];
145146

146-
const float lastBary = 1.f-bary.x-bary.y;
147+
dUVdScreen = nbl_glsl_applyChainRule2D(dUVdBary,dBary);
147148

148149

149-
normal = nbl_glsl_fetchVtxNormal(vertexIDs[0],drawGUID)*bary.x;
150-
normal += nbl_glsl_fetchVtxNormal(vertexIDs[1],drawGUID)*bary.y;
151-
normal += nbl_glsl_fetchVtxNormal(vertexIDs[2],drawGUID)*lastBary;
152-
}
150+
const float lastBary = 1.f-bary.x-bary.y;
153151

154-
vec4 color; // TODO: shading
152+
normal = nbl_glsl_fetchVtxNormal(vertexIDs[0],drawGUID)*bary.x;
153+
normal += nbl_glsl_fetchVtxNormal(vertexIDs[1],drawGUID)*bary.y;
154+
normal += nbl_glsl_fetchVtxNormal(vertexIDs[2],drawGUID)*lastBary;
155+
}
155156

156-
color = vec4(0,0,0,1);
157-
color.rgb = uintIDToColor(drawGUID);
158-
//color.rgb = 0.5*normal+vec3(0.5);
159-
//color.rgb = ;
157+
color.rgb = uintIDToColor(drawGUID);
158+
color.rgb = uintIDToColor(triangleID);
159+
color.rgb = pos;
160+
color.rgb = nbl_sample_Kd(uv,dUVdScreen).rgb;
161+
//color.rgb = 0.5*normal+vec3(0.5);
162+
}
160163

161164
imageStore(frameBuffer,fragCoord,vec4(nbl_glsl_oetf_sRGB(color.rgb),color.a));
162165
}

0 commit comments

Comments
 (0)