@@ -102,61 +102,64 @@ void main()
102
102
if (any(greaterThanEqual(fragCoord,textureSize(vBuffer,0))))
103
103
return;
104
104
105
+ vec4 color = vec4(0,0,0,1);
106
+
105
107
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)
125
109
{
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;
130
128
{
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
+ }
139
137
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]
143
142
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];
145
146
146
- const float lastBary = 1.f-bary.x-bary.y ;
147
+ dUVdScreen = nbl_glsl_applyChainRule2D(dUVdBary,dBary) ;
147
148
148
149
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;
153
151
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
+ }
155
156
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
+ }
160
163
161
164
imageStore(frameBuffer,fragCoord,vec4(nbl_glsl_oetf_sRGB(color.rgb),color.a));
162
165
}
0 commit comments