mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-13 21:50:06 +00:00
b8338311ea
For GL_EXT_vulkan_glsl_relaxed. When merging the default uniform block, there were cases where symbols in the tree wern't updated to match the new block structure after merging blocks together. This change traverses the symbol tree and updates any references to the merged block.
127 lines
2.9 KiB
GLSL
Executable File
127 lines
2.9 KiB
GLSL
Executable File
#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);
|
|
}
|