| #version 460 | |
| uniform int uTDInstanceIDOffset; | |
| uniform int uTDNumInstances; | |
| uniform float uTDAlphaTestVal; | |
| #define TD_NUM_COLOR_BUFFERS 1 | |
| #define TD_NUM_LIGHTS 0 | |
| #define TD_NUM_SHADOWED_LIGHTS 0 | |
| #define TD_NUM_ENV_LIGHTS 0 | |
| #define TD_LIGHTS_ARRAY_SIZE 1 | |
| #define TD_ENV_LIGHTS_ARRAY_SIZE 1 | |
| #define TD_NUM_CAMERAS 1 | |
| struct TDPhongResult | |
| { | |
| vec3 diffuse; | |
| vec3 specular; | |
| vec3 specular2; | |
| float shadowStrength; | |
| }; | |
| struct TDPBRResult | |
| { | |
| vec3 diffuse; | |
| vec3 specular; | |
| float shadowStrength; | |
| }; | |
| struct TDMatrix | |
| { | |
| mat4 world; | |
| mat4 worldInverse; | |
| mat4 worldCam; | |
| mat4 worldCamInverse; | |
| mat4 cam; | |
| mat4 camInverse; | |
| mat4 camProj; | |
| mat4 camProjInverse; | |
| mat4 proj; | |
| mat4 projInverse; | |
| mat4 worldCamProj; | |
| mat4 worldCamProjInverse; | |
| mat4 quadReproject; | |
| mat3 worldForNormals; | |
| mat3 camForNormals; | |
| mat3 worldCamForNormals; | |
| }; | |
| layout(std140) uniform TDMatricesBlock { | |
| TDMatrix uTDMats[TD_NUM_CAMERAS]; | |
| }; | |
| struct TDCameraInfo | |
| { | |
| vec4 nearFar; | |
| vec4 fog; | |
| vec4 fogColor; | |
| int renderTOPCameraIndex; | |
| }; | |
| layout(std140) uniform TDCameraInfoBlock { | |
| TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS]; | |
| }; | |
| struct TDGeneral | |
| { | |
| vec4 ambientColor; | |
| vec4 nearFar; | |
| vec4 viewport; | |
| vec4 viewportRes; | |
| vec4 fog; | |
| vec4 fogColor; | |
| }; | |
| layout(std140) uniform TDGeneralBlock { | |
| TDGeneral uTDGeneral; | |
| }; | |
| layout(location = 0) in vec3 P; | |
| layout(location = 1) in vec3 N; | |
| layout(location = 2) in vec4 Cd; | |
| layout(location = 3) in vec3 uv[8]; | |
| vec4 TDWorldToProj(vec4 v); | |
| vec4 TDWorldToProj(vec3 v); | |
| vec4 TDWorldToProj(vec4 v, vec3 uv); | |
| vec4 TDWorldToProj(vec3 v, vec3 uv); | |
| int TDInstanceID(); | |
| int TDCameraIndex(); | |
| vec3 TDUVUnwrapCoord(); | |
| /*********TOUCHDEFORMPREFIX**********/ | |
| #define TD_NUM_BONES 0 | |
| vec3 TDInstanceTexCoord(int instanceID, vec3 t); | |
| vec4 TDInstanceColor(int instanceID, vec4 curColor); | |
| vec4 TDDeform(vec4 pos); | |
| vec4 TDDeform(vec3 pos); | |
| vec3 TDInstanceTexCoord(vec3 t); | |
| vec4 TDInstanceColor(vec4 curColor); | |
| #line 1 | |
| out Vertex | |
| { | |
| vec4 color; | |
| vec3 worldSpacePos; | |
| vec3 texCoord0; | |
| flat int cameraIndex; | |
| flat int instance; | |
| } oVert; | |
| void main() | |
| { | |
| { // Avoid duplicate variable defs | |
| vec3 texcoord = TDInstanceTexCoord(uv[0]); | |
| oVert.texCoord0.stp = texcoord.stp; | |
| } | |
| // First deform the vertex and normal | |
| // TDDeform always returns values in world space | |
| oVert.instance = TDInstanceID(); | |
| vec4 worldSpacePos = TDDeform(P); | |
| vec3 uvUnwrapCoord = TDInstanceTexCoord(TDUVUnwrapCoord()); | |
| gl_Position = TDWorldToProj(worldSpacePos, uvUnwrapCoord); | |
| // This is here to ensure we only execute lighting etc. code | |
| // when we need it. If picking is active we don't need lighting, so | |
| // this entire block of code will be ommited from the compile. | |
| // The TD_PICKING_ACTIVE define will be set automatically when | |
| // picking is active. | |
| int cameraIndex = TDCameraIndex(); | |
| oVert.cameraIndex = cameraIndex; | |
| oVert.worldSpacePos.xyz = worldSpacePos.xyz; | |
| oVert.color = TDInstanceColor(Cd); | |
| } |