Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //*****************************************************************************
- // Torque -- GLSL procedural shader
- //*****************************************************************************
- #include "shaders/common/gl/hlslCompat.glsl"
- // Dependencies:
- #include "shaders/common/gl/imposter.glsl"
- #include "shaders/common/gl/torque.glsl"
- // Features:
- // Imposter Vert
- // Paraboloid Vert Transform
- // Base Texture
- // Alpha Test
- // Visibility
- // Depth (Out)
- struct VertexData
- {
- vec4 position;
- vec2 tcImposterParams;
- vec3 tcImposterUpVec;
- vec3 tcImposterRightVec;
- } IN;
- in vec4 vPosition;
- #define IN_position IN.position
- in vec2 vTexCoord0;
- #define IN_tcImposterParams IN.tcImposterParams
- in vec3 vTexCoord1;
- #define IN_tcImposterUpVec IN.tcImposterUpVec
- in vec3 vTexCoord2;
- #define IN_tcImposterRightVec IN.tcImposterRightVec
- out float _TEXCOORD0_;
- out float2 _TEXCOORD1_;
- out vec2 _TEXCOORD2_;
- out vec4 _TEXCOORD3_;
- out float _TEXCOORD4_;
- // Struct defines
- #define OUT_imposterFade _TEXCOORD0_
- #define OUT_posXY _TEXCOORD1_
- #define OUT_out_texCoord _TEXCOORD2_
- #define OUT_outVpos _TEXCOORD3_
- #define OUT_depth _TEXCOORD4_
- //-----------------------------------------------------------------------------
- // Main
- //-----------------------------------------------------------------------------
- uniform vec4 imposterLimits ;
- uniform vec4 imposterUVs [64];
- uniform vec3 eyePosWorld ;
- uniform vec2 atlasScale ;
- uniform float4x4 worldViewOnly ;
- uniform vec4 lightParams ;
- uniform vec2 atlasXOffset ;
- void main()
- {
- //-------------------------
- IN.position = vPosition;
- IN.tcImposterParams = vTexCoord0;
- IN.tcImposterUpVec = vTexCoord1;
- IN.tcImposterRightVec = vTexCoord2;
- //-------------------------
- // Imposter Vert
- vec3 inPosition;
- vec2 texCoord;
- float3x3 worldToTangent;
- OUT_imposterFade = IN_tcImposterParams.y;
- imposter_v( IN_position.xyz, int(IN_position.w), IN_tcImposterParams.x * length(IN_tcImposterRightVec), normalize(IN_tcImposterUpVec), normalize(IN_tcImposterRightVec), int(imposterLimits.y), int(imposterLimits.x), imposterLimits.z, bool(imposterLimits.w), eyePosWorld, imposterUVs, inPosition, texCoord, worldToTangent );
- vec3 wsPosition = inPosition.xyz;
- float3x3 viewToTangent = worldToTangent;
- // Paraboloid Vert Transform
- gl_Position = tMul(worldViewOnly, float4(inPosition.xyz,1)).xzyw;
- float L = length(gl_Position.xyz);
- gl_Position /= L;
- gl_Position.z = gl_Position.z + 1.0;
- gl_Position.xy /= gl_Position.z;
- gl_Position.z = L / lightParams.x;
- gl_Position.w = 1.0;
- OUT_posXY = gl_Position.xy;
- gl_Position.xy *= atlasScale.xy;
- gl_Position.xy += atlasXOffset;
- // Base Texture
- OUT_out_texCoord = vec2(texCoord);
- // Alpha Test
- // Visibility
- OUT_outVpos = gl_Position;
- // Depth (Out)
- OUT_depth = gl_Position.z / gl_Position.w;
- gl_Position.y *= -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement