blob: 69c0b21b1af862f225dcab869ad35059ba05e185 [file] [log] [blame]
#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 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(binding = 15) uniform samplerBuffer sTDInstanceT;
layout(binding = 16) uniform samplerBuffer sTDInstanceTexCoord;
layout(binding = 17) uniform samplerBuffer sTDInstanceColor;
#define TD_NUM_BONES 0
vec4 TDWorldToProj(vec4 v);
vec4 TDWorldToProj(vec3 v);
vec4 TDWorldToProj(vec4 v, vec3 uv);
vec4 TDWorldToProj(vec3 v, vec3 uv);
int TDPickID();
int TDInstanceID();
int TDCameraIndex();
vec3 TDUVUnwrapCoord();
vec3 TDInstanceTexCoord(int index, vec3 t) {
vec3 v;
int coord = index;
vec4 samp = texelFetch(sTDInstanceTexCoord, coord);
v[0] = t.s;
v[1] = t.t;
v[2] = samp[0];
t.stp = v.stp;
return t;
}
bool TDInstanceActive(int index) {
index -= uTDInstanceIDOffset;
float v;
int coord = index;
vec4 samp = texelFetch(sTDInstanceT, coord);
v = samp[0];
return v != 0.0;
}
vec3 iTDInstanceTranslate(int index, out bool instanceActive) {
int origIndex = index;
index -= uTDInstanceIDOffset;
vec3 v;
int coord = index;
vec4 samp = texelFetch(sTDInstanceT, coord);
v[0] = samp[1];
v[1] = samp[2];
v[2] = samp[3];
instanceActive = samp[0] != 0.0;
return v;
}
vec3 TDInstanceTranslate(int index) {
index -= uTDInstanceIDOffset;
vec3 v;
int coord = index;
vec4 samp = texelFetch(sTDInstanceT, coord);
v[0] = samp[1];
v[1] = samp[2];
v[2] = samp[3];
return v;
}
mat3 TDInstanceRotateMat(int index) {
index -= uTDInstanceIDOffset;
vec3 v = vec3(0.0, 0.0, 0.0);
mat3 m = mat3(1.0);
{
mat3 r;
}
return m;
}
vec3 TDInstanceScale(int index) {
index -= uTDInstanceIDOffset;
vec3 v = vec3(1.0, 1.0, 1.0);
return v;
}
vec3 TDInstancePivot(int index) {
index -= uTDInstanceIDOffset;
vec3 v = vec3(0.0, 0.0, 0.0);
return v;
}
vec3 TDInstanceRotTo(int index) {
index -= uTDInstanceIDOffset;
vec3 v = vec3(0.0, 0.0, 1.0);
return v;
}
vec3 TDInstanceRotUp(int index) {
index -= uTDInstanceIDOffset;
vec3 v = vec3(0.0, 1.0, 0.0);
return v;
}
mat4 TDInstanceMat(int id) {
bool instanceActive = true;
vec3 t = iTDInstanceTranslate(id, instanceActive);
if (!instanceActive)
{
return mat4(0.0);
}
mat4 m = mat4(1.0);
{
vec3 tt = t;
m[3][0] += m[0][0]*tt.x;
m[3][1] += m[0][1]*tt.x;
m[3][2] += m[0][2]*tt.x;
m[3][3] += m[0][3]*tt.x;
m[3][0] += m[1][0]*tt.y;
m[3][1] += m[1][1]*tt.y;
m[3][2] += m[1][2]*tt.y;
m[3][3] += m[1][3]*tt.y;
m[3][0] += m[2][0]*tt.z;
m[3][1] += m[2][1]*tt.z;
m[3][2] += m[2][2]*tt.z;
m[3][3] += m[2][3]*tt.z;
}
return m;
}
mat3 TDInstanceMat3(int id) {
mat3 m = mat3(1.0);
return m;
}
mat3 TDInstanceMat3ForNorm(int id) {
mat3 m = TDInstanceMat3(id);
return m;
}
vec4 TDInstanceColor(int index, vec4 curColor) {
index -= uTDInstanceIDOffset;
vec4 v;
int coord = index;
vec4 samp = texelFetch(sTDInstanceColor, coord);
v[0] = samp[0];
v[1] = samp[1];
v[2] = samp[2];
v[3] = 1.0;
curColor[0] = v[0];
;
curColor[1] = v[1];
;
curColor[2] = v[2];
;
return curColor;
}
vec4 TDInstanceDeform(int id, vec4 pos) {
pos = TDInstanceMat(id) * pos;
return uTDMats[TDCameraIndex()].world * pos;
}
vec3 TDInstanceDeformVec(int id, vec3 vec)
{
mat3 m = TDInstanceMat3(id);
return mat3(uTDMats[TDCameraIndex()].world) * (m * vec);
}
vec3 TDInstanceDeformNorm(int id, vec3 vec)
{
mat3 m = TDInstanceMat3ForNorm(id);
return mat3(uTDMats[TDCameraIndex()].worldForNormals) * (m * vec);
}
vec4 TDInstanceDeform(vec4 pos) {
return TDInstanceDeform(TDInstanceID(), pos);
}
vec3 TDInstanceDeformVec(vec3 vec) {
return TDInstanceDeformVec(TDInstanceID(), vec);
}
vec3 TDInstanceDeformNorm(vec3 vec) {
return TDInstanceDeformNorm(TDInstanceID(), vec);
}
bool TDInstanceActive() { return TDInstanceActive(TDInstanceID()); }
vec3 TDInstanceTranslate() { return TDInstanceTranslate(TDInstanceID()); }
mat3 TDInstanceRotateMat() { return TDInstanceRotateMat(TDInstanceID()); }
vec3 TDInstanceScale() { return TDInstanceScale(TDInstanceID()); }
mat4 TDInstanceMat() { return TDInstanceMat(TDInstanceID());
}
mat3 TDInstanceMat3() { return TDInstanceMat3(TDInstanceID());
}
vec3 TDInstanceTexCoord(vec3 t) {
return TDInstanceTexCoord(TDInstanceID(), t);
}
vec4 TDInstanceColor(vec4 curColor) {
return TDInstanceColor(TDInstanceID(), curColor);
}
vec4 TDSkinnedDeform(vec4 pos) { return pos; }
vec3 TDSkinnedDeformVec(vec3 vec) { return vec; }
vec3 TDFastDeformTangent(vec3 oldNorm, vec4 oldTangent, vec3 deformedNorm)
{ return oldTangent.xyz; }
mat4 TDBoneMat(int index) {
return mat4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);
}
vec4 TDDeform(vec4 pos) {
pos = TDSkinnedDeform(pos);
pos = TDInstanceDeform(pos);
return pos;
}
vec4 TDDeform(int instanceID, vec3 p) {
vec4 pos = vec4(p, 1.0);
pos = TDSkinnedDeform(pos);
pos = TDInstanceDeform(instanceID, pos);
return pos;
}
vec4 TDDeform(vec3 pos) {
return TDDeform(TDInstanceID(), pos);
}
vec3 TDDeformVec(int instanceID, vec3 vec) {
vec = TDSkinnedDeformVec(vec);
vec = TDInstanceDeformVec(instanceID, vec);
return vec;
}
vec3 TDDeformVec(vec3 vec) {
return TDDeformVec(TDInstanceID(), vec);
}
vec3 TDDeformNorm(int instanceID, vec3 vec) {
vec = TDSkinnedDeformVec(vec);
vec = TDInstanceDeformNorm(instanceID, vec);
return vec;
}
vec3 TDDeformNorm(vec3 vec) {
return TDDeformNorm(TDInstanceID(), vec);
}
vec3 TDSkinnedDeformNorm(vec3 vec) {
vec = TDSkinnedDeformVec(vec);
return vec;
}