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