| #version 460 | |
| 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]; | |
| 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 TDLight | |
| { | |
| vec4 position; | |
| vec3 direction; | |
| vec3 diffuse; | |
| vec4 nearFar; | |
| vec4 lightSize; | |
| vec4 misc; | |
| vec4 coneLookupScaleBias; | |
| vec4 attenScaleBiasRoll; | |
| mat4 shadowMapMatrix; | |
| mat4 shadowMapCamMatrix; | |
| vec4 shadowMapRes; | |
| mat4 projMapMatrix; | |
| }; | |
| struct TDEnvLight | |
| { | |
| vec3 color; | |
| mat3 rotate; | |
| }; | |
| layout(std140) uniform TDLightBlock | |
| { | |
| TDLight uTDLights[TD_LIGHTS_ARRAY_SIZE]; | |
| }; | |
| layout(std140) uniform TDEnvLightBlock | |
| { | |
| TDEnvLight uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE]; | |
| }; | |
| layout(std430) readonly restrict buffer TDEnvLightBuffer | |
| { | |
| vec3 shCoeffs[9]; | |
| } uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE]; | |
| 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 (rgba8) uniform image2D mTD2DImageOutputs[1]; | |
| layout (rgba8) uniform image2DArray mTD2DArrayImageOutputs[1]; | |
| layout (rgba8) uniform image3D mTD3DImageOutputs[1]; | |
| layout (rgba8) uniform imageCube mTDCubeImageOutputs[1]; | |
| mat4 TDInstanceMat(int instanceID); | |
| mat3 TDInstanceMat3(int instanceID); | |
| vec3 TDInstanceTranslate(int instanceID); | |
| bool TDInstanceActive(int instanceID); | |
| mat3 TDInstanceRotateMat(int instanceID); | |
| vec3 TDInstanceScale(int instanceID); | |
| vec3 TDInstanceTexCoord(int instanceID, vec3 t); | |
| vec4 TDInstanceColor(int instanceID, vec4 curColor); | |
| vec4 TDInstanceCustomAttrib0(int instanceID); | |
| vec4 TDInstanceCustomAttrib1(int instanceID); | |
| vec4 TDInstanceCustomAttrib2(int instanceID); | |
| vec4 TDInstanceCustomAttrib3(int instanceID); | |
| vec4 TDInstanceCustomAttrib4(int instanceID); | |
| vec4 TDInstanceCustomAttrib5(int instanceID); | |
| vec4 TDInstanceCustomAttrib6(int instanceID); | |
| vec4 TDInstanceCustomAttrib7(int instanceID); | |
| vec4 TDInstanceCustomAttrib8(int instanceID); | |
| vec4 TDInstanceCustomAttrib9(int instanceID); | |
| vec4 TDInstanceCustomAttrib10(int instanceID); | |
| vec4 TDInstanceCustomAttrib11(int instanceID); | |
| uint TDInstanceTextureIndex(int instanceIndex); | |
| vec4 TDInstanceTexture(uint texIndex, vec3 uv); | |
| vec4 TDInstanceTexture(uint texIndex, vec2 uv); | |
| vec4 TDDeform(vec4 pos); | |
| vec4 TDDeform(vec3 pos); | |
| vec4 TDDeform(int instanceID, vec3 pos); | |
| vec3 TDDeformVec(vec3 v); | |
| vec3 TDDeformVec(int instanceID, vec3 v); | |
| vec3 TDDeformNorm(vec3 v); | |
| vec3 TDDeformNorm(int instanceID, vec3 v); | |
| vec4 TDSkinnedDeform(vec4 pos); | |
| vec3 TDSkinnedDeformVec(vec3 vec); | |
| vec3 TDSkinnedDeformNorm(vec3 vec); | |
| vec4 TDInstanceDeform(vec4 pos); | |
| vec3 TDInstanceDeformVec(vec3 vec); | |
| vec3 TDInstanceDeformNorm(vec3 vec); | |
| vec4 TDInstanceDeform(int instanceID, vec4 pos); | |
| vec3 TDInstanceDeformVec(int instanceID, vec3 vec); | |
| vec3 TDInstanceDeformNorm(int instanceID, vec3 vec); | |
| vec3 TDFastDeformTangent(vec3 oldNorm, vec4 oldTangent, vec3 deformedNorm); | |
| mat4 TDBoneMat(int boneIndex); | |
| mat4 TDInstanceMat(); | |
| mat3 TDInstanceMat3(); | |
| vec3 TDInstanceTranslate(); | |
| bool TDInstanceActive(); | |
| mat3 TDInstanceRotateMat(); | |
| vec3 TDInstanceScale(); | |
| vec3 TDInstanceTexCoord(vec3 t); | |
| vec4 TDInstanceColor(vec4 curColor); | |
| vec4 TDPointColor(); | |
| #ifdef TD_PICKING_ACTIVE | |
| out TDPickVertex { | |
| vec3 sopSpacePosition; | |
| vec3 camSpacePosition; | |
| vec3 worldSpacePosition; | |
| vec3 sopSpaceNormal; | |
| vec3 camSpaceNormal; | |
| vec3 worldSpaceNormal; | |
| vec3 uv[1]; | |
| flat int pickId; | |
| flat int instanceId; | |
| vec4 color; | |
| } oTDPickVert; | |
| #define vTDPickVert oTDPickVert | |
| #endif | |
| vec4 iTDCamToProj(vec4 v, vec3 uv, int cameraIndex, bool applyPickMod) | |
| { | |
| if (!TDInstanceActive()) | |
| return vec4(2, 2, 2, 0); | |
| v = uTDMats[0].proj * v; | |
| return v; | |
| } | |
| vec4 iTDWorldToProj(vec4 v, vec3 uv, int cameraIndex, bool applyPickMod) { | |
| if (!TDInstanceActive()) | |
| return vec4(2, 2, 2, 0); | |
| v = uTDMats[0].camProj * v; | |
| return v; | |
| } | |
| vec4 TDDeform(vec4 pos); | |
| vec4 TDDeform(vec3 pos); | |
| vec4 TDInstanceColor(vec4 curColor); | |
| vec3 TDInstanceTexCoord(vec3 t); | |
| int TDInstanceID() { | |
| return gl_InstanceID + uTDInstanceIDOffset; | |
| } | |
| int TDCameraIndex() { | |
| return 0; | |
| } | |
| vec3 TDUVUnwrapCoord() { | |
| return uv[0]; | |
| } | |
| #ifdef TD_PICKING_ACTIVE | |
| uniform int uTDPickId; | |
| #endif | |
| int TDPickID() { | |
| #ifdef TD_PICKING_ACTIVE | |
| return uTDPickId; | |
| #else | |
| return 0; | |
| #endif | |
| } | |
| float iTDConvertPickId(int id) { | |
| id |= 1073741824; | |
| return intBitsToFloat(id); | |
| } | |
| void TDWritePickingValues() { | |
| #ifdef TD_PICKING_ACTIVE | |
| vec4 worldPos = TDDeform(P); | |
| vec4 camPos = uTDMats[TDCameraIndex()].cam * worldPos; | |
| oTDPickVert.pickId = TDPickID(); | |
| #endif | |
| } | |
| vec4 TDWorldToProj(vec4 v, vec3 uv) | |
| { | |
| return iTDWorldToProj(v, uv, TDCameraIndex(), true); | |
| } | |
| vec4 TDWorldToProj(vec3 v, vec3 uv) | |
| { | |
| return TDWorldToProj(vec4(v, 1.0), uv); | |
| } | |
| vec4 TDWorldToProj(vec4 v) | |
| { | |
| return TDWorldToProj(v, vec3(0.0)); | |
| } | |
| vec4 TDWorldToProj(vec3 v) | |
| { | |
| return TDWorldToProj(vec4(v, 1.0)); | |
| } | |
| vec4 TDPointColor() { | |
| return Cd; | |
| } |