2 uniform int uTDInstanceIDOffset;
\r
3 uniform int uTDNumInstances;
\r
4 uniform float uTDAlphaTestVal;
\r
5 #define TD_NUM_COLOR_BUFFERS 1
\r
6 #define TD_NUM_LIGHTS 0
\r
7 #define TD_NUM_SHADOWED_LIGHTS 0
\r
8 #define TD_NUM_ENV_LIGHTS 0
\r
9 #define TD_LIGHTS_ARRAY_SIZE 1
\r
10 #define TD_ENV_LIGHTS_ARRAY_SIZE 1
\r
11 #define TD_NUM_CAMERAS 1
\r
20 vec4 coneLookupScaleBias;
\r
21 vec4 attenScaleBiasRoll;
\r
22 mat4 shadowMapMatrix;
\r
23 mat4 shadowMapCamMatrix;
\r
32 layout(std140) uniform TDLightBlock
\r
34 TDLight uTDLights[TD_LIGHTS_ARRAY_SIZE];
\r
36 layout(std140) uniform TDEnvLightBlock
\r
38 TDEnvLight uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE];
\r
40 layout(std430) readonly restrict buffer TDEnvLightBuffer
\r
43 } uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE];
\r
44 struct TDPhongResult
\r
49 float shadowStrength;
\r
55 float shadowStrength;
\r
62 mat4 worldCamInverse;
\r
66 mat4 camProjInverse;
\r
70 mat4 worldCamProjInverse;
\r
72 mat3 worldForNormals;
\r
74 mat3 worldCamForNormals;
\r
76 layout(std140) uniform TDMatricesBlock {
\r
77 TDMatrix uTDMats[TD_NUM_CAMERAS];
\r
84 int renderTOPCameraIndex;
\r
86 layout(std140) uniform TDCameraInfoBlock {
\r
87 TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS];
\r
98 layout(std140) uniform TDGeneralBlock {
\r
99 TDGeneral uTDGeneral;
\r
102 layout(binding = 15) uniform samplerBuffer sTDInstanceT;
\r
103 layout(binding = 16) uniform samplerBuffer sTDInstanceTexCoord;
\r
104 layout(binding = 17) uniform samplerBuffer sTDInstanceColor;
\r
105 #define TD_NUM_BONES 0
\r
106 vec4 TDWorldToProj(vec4 v);
\r
107 vec4 TDWorldToProj(vec3 v);
\r
108 vec4 TDWorldToProj(vec4 v, vec3 uv);
\r
109 vec4 TDWorldToProj(vec3 v, vec3 uv);
\r
111 int TDInstanceID();
\r
112 int TDCameraIndex();
\r
113 vec3 TDUVUnwrapCoord();
\r
114 vec3 TDInstanceTexCoord(int index, vec3 t) {
\r
117 vec4 samp = texelFetch(sTDInstanceTexCoord, coord);
\r
124 bool TDInstanceActive(int index) {
\r
125 index -= uTDInstanceIDOffset;
\r
128 vec4 samp = texelFetch(sTDInstanceT, coord);
\r
132 vec3 iTDInstanceTranslate(int index, out bool instanceActive) {
\r
133 int origIndex = index;
\r
134 index -= uTDInstanceIDOffset;
\r
137 vec4 samp = texelFetch(sTDInstanceT, coord);
\r
141 instanceActive = samp[0] != 0.0;
\r
144 vec3 TDInstanceTranslate(int index) {
\r
145 index -= uTDInstanceIDOffset;
\r
148 vec4 samp = texelFetch(sTDInstanceT, coord);
\r
154 mat3 TDInstanceRotateMat(int index) {
\r
155 index -= uTDInstanceIDOffset;
\r
156 vec3 v = vec3(0.0, 0.0, 0.0);
\r
157 mat3 m = mat3(1.0);
\r
163 vec3 TDInstanceScale(int index) {
\r
164 index -= uTDInstanceIDOffset;
\r
165 vec3 v = vec3(1.0, 1.0, 1.0);
\r
168 vec3 TDInstancePivot(int index) {
\r
169 index -= uTDInstanceIDOffset;
\r
170 vec3 v = vec3(0.0, 0.0, 0.0);
\r
173 vec3 TDInstanceRotTo(int index) {
\r
174 index -= uTDInstanceIDOffset;
\r
175 vec3 v = vec3(0.0, 0.0, 1.0);
\r
178 vec3 TDInstanceRotUp(int index) {
\r
179 index -= uTDInstanceIDOffset;
\r
180 vec3 v = vec3(0.0, 1.0, 0.0);
\r
183 mat4 TDInstanceMat(int id) {
\r
184 bool instanceActive = true;
\r
185 vec3 t = iTDInstanceTranslate(id, instanceActive);
\r
186 if (!instanceActive)
\r
190 mat4 m = mat4(1.0);
\r
193 m[3][0] += m[0][0]*tt.x;
\r
194 m[3][1] += m[0][1]*tt.x;
\r
195 m[3][2] += m[0][2]*tt.x;
\r
196 m[3][3] += m[0][3]*tt.x;
\r
197 m[3][0] += m[1][0]*tt.y;
\r
198 m[3][1] += m[1][1]*tt.y;
\r
199 m[3][2] += m[1][2]*tt.y;
\r
200 m[3][3] += m[1][3]*tt.y;
\r
201 m[3][0] += m[2][0]*tt.z;
\r
202 m[3][1] += m[2][1]*tt.z;
\r
203 m[3][2] += m[2][2]*tt.z;
\r
204 m[3][3] += m[2][3]*tt.z;
\r
208 mat3 TDInstanceMat3(int id) {
\r
209 mat3 m = mat3(1.0);
\r
212 mat3 TDInstanceMat3ForNorm(int id) {
\r
213 mat3 m = TDInstanceMat3(id);
\r
216 vec4 TDInstanceColor(int index, vec4 curColor) {
\r
217 index -= uTDInstanceIDOffset;
\r
220 vec4 samp = texelFetch(sTDInstanceColor, coord);
\r
225 curColor[0] = v[0];
\r
227 curColor[1] = v[1];
\r
229 curColor[2] = v[2];
\r
233 vec4 TDInstanceDeform(int id, vec4 pos) {
\r
234 pos = TDInstanceMat(id) * pos;
\r
235 return uTDMats[TDCameraIndex()].world * pos;
\r
238 vec3 TDInstanceDeformVec(int id, vec3 vec)
\r
240 mat3 m = TDInstanceMat3(id);
\r
241 return mat3(uTDMats[TDCameraIndex()].world) * (m * vec);
\r
243 vec3 TDInstanceDeformNorm(int id, vec3 vec)
\r
245 mat3 m = TDInstanceMat3ForNorm(id);
\r
246 return mat3(uTDMats[TDCameraIndex()].worldForNormals) * (m * vec);
\r
248 vec4 TDInstanceDeform(vec4 pos) {
\r
249 return TDInstanceDeform(TDInstanceID(), pos);
\r
251 vec3 TDInstanceDeformVec(vec3 vec) {
\r
252 return TDInstanceDeformVec(TDInstanceID(), vec);
\r
254 vec3 TDInstanceDeformNorm(vec3 vec) {
\r
255 return TDInstanceDeformNorm(TDInstanceID(), vec);
\r
257 bool TDInstanceActive() { return TDInstanceActive(TDInstanceID()); }
\r
258 vec3 TDInstanceTranslate() { return TDInstanceTranslate(TDInstanceID()); }
\r
259 mat3 TDInstanceRotateMat() { return TDInstanceRotateMat(TDInstanceID()); }
\r
260 vec3 TDInstanceScale() { return TDInstanceScale(TDInstanceID()); }
\r
261 mat4 TDInstanceMat() { return TDInstanceMat(TDInstanceID());
\r
263 mat3 TDInstanceMat3() { return TDInstanceMat3(TDInstanceID());
\r
265 vec3 TDInstanceTexCoord(vec3 t) {
\r
266 return TDInstanceTexCoord(TDInstanceID(), t);
\r
268 vec4 TDInstanceColor(vec4 curColor) {
\r
269 return TDInstanceColor(TDInstanceID(), curColor);
\r
271 vec4 TDSkinnedDeform(vec4 pos) { return pos; }
\r
273 vec3 TDSkinnedDeformVec(vec3 vec) { return vec; }
\r
275 vec3 TDFastDeformTangent(vec3 oldNorm, vec4 oldTangent, vec3 deformedNorm)
\r
276 { return oldTangent.xyz; }
\r
277 mat4 TDBoneMat(int index) {
\r
278 return mat4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);
\r
280 vec4 TDDeform(vec4 pos) {
\r
281 pos = TDSkinnedDeform(pos);
\r
282 pos = TDInstanceDeform(pos);
\r
286 vec4 TDDeform(int instanceID, vec3 p) {
\r
287 vec4 pos = vec4(p, 1.0);
\r
288 pos = TDSkinnedDeform(pos);
\r
289 pos = TDInstanceDeform(instanceID, pos);
\r
293 vec4 TDDeform(vec3 pos) {
\r
294 return TDDeform(TDInstanceID(), pos);
\r
297 vec3 TDDeformVec(int instanceID, vec3 vec) {
\r
298 vec = TDSkinnedDeformVec(vec);
\r
299 vec = TDInstanceDeformVec(instanceID, vec);
\r
303 vec3 TDDeformVec(vec3 vec) {
\r
304 return TDDeformVec(TDInstanceID(), vec);
\r
307 vec3 TDDeformNorm(int instanceID, vec3 vec) {
\r
308 vec = TDSkinnedDeformVec(vec);
\r
309 vec = TDInstanceDeformNorm(instanceID, vec);
\r
313 vec3 TDDeformNorm(vec3 vec) {
\r
314 return TDDeformNorm(TDInstanceID(), vec);
\r
317 vec3 TDSkinnedDeformNorm(vec3 vec) {
\r
318 vec = TDSkinnedDeformVec(vec);
\r