2 layout(location = 0) in vec3 P;
\r
3 layout(location = 1) in vec3 N;
\r
4 layout(location = 2) in vec4 Cd;
\r
5 layout(location = 3) in vec3 uv[8];
\r
6 uniform int uTDInstanceIDOffset;
\r
7 uniform int uTDNumInstances;
\r
8 uniform float uTDAlphaTestVal;
\r
9 #define TD_NUM_COLOR_BUFFERS 1
\r
10 #define TD_NUM_LIGHTS 0
\r
11 #define TD_NUM_SHADOWED_LIGHTS 0
\r
12 #define TD_NUM_ENV_LIGHTS 0
\r
13 #define TD_LIGHTS_ARRAY_SIZE 1
\r
14 #define TD_ENV_LIGHTS_ARRAY_SIZE 1
\r
15 #define TD_NUM_CAMERAS 1
\r
24 vec4 coneLookupScaleBias;
\r
25 vec4 attenScaleBiasRoll;
\r
26 mat4 shadowMapMatrix;
\r
27 mat4 shadowMapCamMatrix;
\r
36 layout(std140) uniform TDLightBlock
\r
38 TDLight uTDLights[TD_LIGHTS_ARRAY_SIZE];
\r
40 layout(std140) uniform TDEnvLightBlock
\r
42 TDEnvLight uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE];
\r
44 layout(std430) readonly restrict buffer TDEnvLightBuffer
\r
47 } uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE];
\r
48 struct TDPhongResult
\r
53 float shadowStrength;
\r
59 float shadowStrength;
\r
66 mat4 worldCamInverse;
\r
70 mat4 camProjInverse;
\r
74 mat4 worldCamProjInverse;
\r
76 mat3 worldForNormals;
\r
78 mat3 worldCamForNormals;
\r
80 layout(std140) uniform TDMatricesBlock {
\r
81 TDMatrix uTDMats[TD_NUM_CAMERAS];
\r
88 int renderTOPCameraIndex;
\r
90 layout(std140) uniform TDCameraInfoBlock {
\r
91 TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS];
\r
102 layout(std140) uniform TDGeneralBlock {
\r
103 TDGeneral uTDGeneral;
\r
105 layout (rgba8) uniform image2D mTD2DImageOutputs[1];
\r
106 layout (rgba8) uniform image2DArray mTD2DArrayImageOutputs[1];
\r
107 layout (rgba8) uniform image3D mTD3DImageOutputs[1];
\r
108 layout (rgba8) uniform imageCube mTDCubeImageOutputs[1];
\r
110 mat4 TDInstanceMat(int instanceID);
\r
111 mat3 TDInstanceMat3(int instanceID);
\r
112 vec3 TDInstanceTranslate(int instanceID);
\r
113 bool TDInstanceActive(int instanceID);
\r
114 mat3 TDInstanceRotateMat(int instanceID);
\r
115 vec3 TDInstanceScale(int instanceID);
\r
116 vec3 TDInstanceTexCoord(int instanceID, vec3 t);
\r
117 vec4 TDInstanceColor(int instanceID, vec4 curColor);
\r
118 vec4 TDInstanceCustomAttrib0(int instanceID);
\r
119 vec4 TDInstanceCustomAttrib1(int instanceID);
\r
120 vec4 TDInstanceCustomAttrib2(int instanceID);
\r
121 vec4 TDInstanceCustomAttrib3(int instanceID);
\r
122 vec4 TDInstanceCustomAttrib4(int instanceID);
\r
123 vec4 TDInstanceCustomAttrib5(int instanceID);
\r
124 vec4 TDInstanceCustomAttrib6(int instanceID);
\r
125 vec4 TDInstanceCustomAttrib7(int instanceID);
\r
126 vec4 TDInstanceCustomAttrib8(int instanceID);
\r
127 vec4 TDInstanceCustomAttrib9(int instanceID);
\r
128 vec4 TDInstanceCustomAttrib10(int instanceID);
\r
129 vec4 TDInstanceCustomAttrib11(int instanceID);
\r
130 uint TDInstanceTextureIndex(int instanceIndex);
\r
131 vec4 TDInstanceTexture(uint texIndex, vec3 uv);
\r
132 vec4 TDInstanceTexture(uint texIndex, vec2 uv);
\r
134 vec4 TDDeform(vec4 pos);
\r
135 vec4 TDDeform(vec3 pos);
\r
136 vec4 TDDeform(int instanceID, vec3 pos);
\r
137 vec3 TDDeformVec(vec3 v);
\r
138 vec3 TDDeformVec(int instanceID, vec3 v);
\r
139 vec3 TDDeformNorm(vec3 v);
\r
140 vec3 TDDeformNorm(int instanceID, vec3 v);
\r
141 vec4 TDSkinnedDeform(vec4 pos);
\r
142 vec3 TDSkinnedDeformVec(vec3 vec);
\r
143 vec3 TDSkinnedDeformNorm(vec3 vec);
\r
144 vec4 TDInstanceDeform(vec4 pos);
\r
145 vec3 TDInstanceDeformVec(vec3 vec);
\r
146 vec3 TDInstanceDeformNorm(vec3 vec);
\r
147 vec4 TDInstanceDeform(int instanceID, vec4 pos);
\r
148 vec3 TDInstanceDeformVec(int instanceID, vec3 vec);
\r
149 vec3 TDInstanceDeformNorm(int instanceID, vec3 vec);
\r
150 vec3 TDFastDeformTangent(vec3 oldNorm, vec4 oldTangent, vec3 deformedNorm);
\r
151 mat4 TDBoneMat(int boneIndex);
\r
152 mat4 TDInstanceMat();
\r
153 mat3 TDInstanceMat3();
\r
154 vec3 TDInstanceTranslate();
\r
155 bool TDInstanceActive();
\r
156 mat3 TDInstanceRotateMat();
\r
157 vec3 TDInstanceScale();
\r
158 vec3 TDInstanceTexCoord(vec3 t);
\r
159 vec4 TDInstanceColor(vec4 curColor);
\r
160 vec4 TDPointColor();
\r
161 #ifdef TD_PICKING_ACTIVE
\r
163 vec3 sopSpacePosition;
\r
164 vec3 camSpacePosition;
\r
165 vec3 worldSpacePosition;
\r
166 vec3 sopSpaceNormal;
\r
167 vec3 camSpaceNormal;
\r
168 vec3 worldSpaceNormal;
\r
171 flat int instanceId;
\r
174 #define vTDPickVert oTDPickVert
\r
176 vec4 iTDCamToProj(vec4 v, vec3 uv, int cameraIndex, bool applyPickMod)
\r
178 if (!TDInstanceActive())
\r
179 return vec4(2, 2, 2, 0);
\r
180 v = uTDMats[0].proj * v;
\r
183 vec4 iTDWorldToProj(vec4 v, vec3 uv, int cameraIndex, bool applyPickMod) {
\r
184 if (!TDInstanceActive())
\r
185 return vec4(2, 2, 2, 0);
\r
186 v = uTDMats[0].camProj * v;
\r
189 vec4 TDDeform(vec4 pos);
\r
190 vec4 TDDeform(vec3 pos);
\r
191 vec4 TDInstanceColor(vec4 curColor);
\r
192 vec3 TDInstanceTexCoord(vec3 t);
\r
193 int TDInstanceID() {
\r
194 return gl_InstanceID + uTDInstanceIDOffset;
\r
196 int TDCameraIndex() {
\r
199 vec3 TDUVUnwrapCoord() {
\r
202 #ifdef TD_PICKING_ACTIVE
\r
203 uniform int uTDPickId;
\r
206 #ifdef TD_PICKING_ACTIVE
\r
212 float iTDConvertPickId(int id) {
\r
214 return intBitsToFloat(id);
\r
217 void TDWritePickingValues() {
\r
218 #ifdef TD_PICKING_ACTIVE
\r
219 vec4 worldPos = TDDeform(P);
\r
220 vec4 camPos = uTDMats[TDCameraIndex()].cam * worldPos;
\r
221 oTDPickVert.pickId = TDPickID();
\r
224 vec4 TDWorldToProj(vec4 v, vec3 uv)
\r
226 return iTDWorldToProj(v, uv, TDCameraIndex(), true);
\r
228 vec4 TDWorldToProj(vec3 v, vec3 uv)
\r
230 return TDWorldToProj(vec4(v, 1.0), uv);
\r
232 vec4 TDWorldToProj(vec4 v)
\r
234 return TDWorldToProj(v, vec3(0.0));
\r
236 vec4 TDWorldToProj(vec3 v)
\r
238 return TDWorldToProj(vec4(v, 1.0));
\r
240 vec4 TDPointColor() {
\r