mirror of
https://github.com/KhronosGroup/glslang
synced 2024-09-19 20:29:54 +00:00
127 lines
2.9 KiB
GLSL
127 lines
2.9 KiB
GLSL
#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);
|
|
}
|