#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; }