stuff
This commit is contained in:
186
modules/wallpaper-engine/shaders/genericimage2.vert
Normal file
186
modules/wallpaper-engine/shaders/genericimage2.vert
Normal file
@@ -0,0 +1,186 @@
|
||||
|
||||
// [COMBO] {"material":"ui_editor_properties_lighting","combo":"LIGHTING","default":0}
|
||||
// [COMBO] {"material":"ui_editor_properties_reflection","combo":"REFLECTION","default":0}
|
||||
|
||||
#include "common_vertex.h"
|
||||
|
||||
uniform mat4 g_ModelViewProjectionMatrix;
|
||||
uniform vec4 g_Texture0Rotation;
|
||||
uniform vec2 g_Texture0Translation;
|
||||
|
||||
#if SKINNING
|
||||
uniform mat4x3 g_Bones[BONECOUNT];
|
||||
#endif
|
||||
|
||||
attribute vec3 a_Position;
|
||||
attribute vec2 a_TexCoord;
|
||||
|
||||
#if SKINNING
|
||||
attribute uvec4 a_BlendIndices;
|
||||
attribute vec4 a_BlendWeights;
|
||||
#endif
|
||||
|
||||
#if PBRMASKS
|
||||
uniform vec4 g_Texture2Resolution;
|
||||
varying vec4 v_TexCoord;
|
||||
#else
|
||||
varying vec2 v_TexCoord;
|
||||
#endif
|
||||
|
||||
#if LIGHTING || REFLECTION
|
||||
uniform vec3 g_EyePosition;
|
||||
|
||||
uniform mat4 g_ModelMatrix;
|
||||
uniform mat3 g_NormalModelMatrix;
|
||||
|
||||
uniform mat4 g_AltModelMatrix;
|
||||
uniform mat3 g_AltNormalModelMatrix;
|
||||
uniform mat4 g_AltViewProjectionMatrix;
|
||||
|
||||
#if PRELIGHTING
|
||||
#define M_MDL g_AltModelMatrix
|
||||
#define M_NML g_AltNormalModelMatrix
|
||||
#define M_VP g_AltViewProjectionMatrix
|
||||
#define M_MVP mul(g_AltModelMatrix, g_AltViewProjectionMatrix)
|
||||
#else
|
||||
#define M_MDL g_ModelMatrix
|
||||
#define M_NML g_NormalModelMatrix
|
||||
#define M_VP g_ViewProjectionMatrix
|
||||
#define M_MVP g_ModelViewProjectionMatrix
|
||||
#endif
|
||||
#else
|
||||
#define M_MVP g_ModelViewProjectionMatrix
|
||||
#endif
|
||||
|
||||
#if LIGHTING
|
||||
uniform mat4 g_ViewProjectionMatrix;
|
||||
uniform vec3 g_LightsPosition[4];
|
||||
|
||||
varying vec4 v_Light0DirectionL3X;
|
||||
varying vec4 v_Light1DirectionL3Y;
|
||||
varying vec4 v_Light2DirectionL3Z;
|
||||
#endif
|
||||
|
||||
#if (LIGHTING || REFLECTION) && NORMALMAP == 0
|
||||
varying vec3 v_Normal;
|
||||
#endif
|
||||
|
||||
#if REFLECTION && NORMALMAP
|
||||
varying vec3 v_Tangent;
|
||||
varying vec3 v_Bitangent;
|
||||
varying vec3 v_ScreenPos;
|
||||
#endif
|
||||
|
||||
#if BLENDMODE
|
||||
varying vec3 v_ScreenCoord;
|
||||
#endif
|
||||
|
||||
#ifdef SKINNING_ALPHA
|
||||
uniform float g_BonesAlpha[BONECOUNT];
|
||||
varying float v_BoneAlpha;
|
||||
#endif
|
||||
|
||||
void main() {
|
||||
|
||||
#if SKINNING
|
||||
vec3 localPos = mul(vec4(a_Position, 1.0), g_Bones[a_BlendIndices.x] * a_BlendWeights.x +
|
||||
g_Bones[a_BlendIndices.y] * a_BlendWeights.y +
|
||||
g_Bones[a_BlendIndices.z] * a_BlendWeights.z +
|
||||
g_Bones[a_BlendIndices.w] * a_BlendWeights.w);
|
||||
#else
|
||||
vec3 localPos = a_Position;
|
||||
#endif
|
||||
|
||||
#if SKINNING_ALPHA
|
||||
v_BoneAlpha = saturate(g_BonesAlpha[a_BlendIndices.x] * a_BlendWeights.x +
|
||||
g_BonesAlpha[a_BlendIndices.y] * a_BlendWeights.y +
|
||||
g_BonesAlpha[a_BlendIndices.z] * a_BlendWeights.z +
|
||||
g_BonesAlpha[a_BlendIndices.w] * a_BlendWeights.w);
|
||||
#endif
|
||||
|
||||
#if SPRITESHEET
|
||||
v_TexCoord.xy = g_Texture0Translation + a_TexCoord.x * g_Texture0Rotation.xy + a_TexCoord.y * g_Texture0Rotation.zw;
|
||||
#else
|
||||
v_TexCoord.xy = a_TexCoord;
|
||||
#endif
|
||||
|
||||
#if PBRMASKS
|
||||
v_TexCoord.zw = vec2(a_TexCoord.x * g_Texture2Resolution.z / g_Texture2Resolution.x,
|
||||
a_TexCoord.y * g_Texture2Resolution.w / g_Texture2Resolution.y);
|
||||
#endif
|
||||
|
||||
#if LIGHTING || REFLECTION
|
||||
// Compute normal and tangent space for lighting and/or reflection later
|
||||
vec3 normal = vec3(0, 0, 1.0);
|
||||
vec3 tangent = vec3(1.0, 0, 0);
|
||||
vec4 worldPos = mul(vec4(localPos, 1.0), M_MDL);
|
||||
|
||||
#if SKINNING
|
||||
normal = mul(normal, CAST3X3(g_Bones[a_BlendIndices.x]) * a_BlendWeights.x +
|
||||
CAST3X3(g_Bones[a_BlendIndices.y]) * a_BlendWeights.y +
|
||||
CAST3X3(g_Bones[a_BlendIndices.z]) * a_BlendWeights.z +
|
||||
CAST3X3(g_Bones[a_BlendIndices.w]) * a_BlendWeights.w);
|
||||
#endif
|
||||
|
||||
#if NORMALMAP
|
||||
|
||||
#if SKINNING
|
||||
tangent = mul(tangent, CAST3X3(g_Bones[a_BlendIndices.x]) * a_BlendWeights.x +
|
||||
CAST3X3(g_Bones[a_BlendIndices.y]) * a_BlendWeights.y +
|
||||
CAST3X3(g_Bones[a_BlendIndices.z]) * a_BlendWeights.z +
|
||||
CAST3X3(g_Bones[a_BlendIndices.w]) * a_BlendWeights.w);
|
||||
#endif
|
||||
mat3 tangentSpace = BuildTangentSpace(M_NML, normal, vec4(tangent, 1.0));
|
||||
#if REFLECTION
|
||||
v_Tangent = tangentSpace[0];
|
||||
v_Bitangent = tangentSpace[1];
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Prepare lighting data
|
||||
#if LIGHTING
|
||||
v_Light0DirectionL3X.xyz = g_LightsPosition[0] - worldPos.xyz;
|
||||
v_Light1DirectionL3Y.xyz = g_LightsPosition[1] - worldPos.xyz;
|
||||
v_Light2DirectionL3Z.xyz = g_LightsPosition[2] - worldPos.xyz;
|
||||
vec3 l3 = g_LightsPosition[3] - worldPos.xyz;
|
||||
|
||||
gl_Position = mul(worldPos, M_VP);
|
||||
|
||||
#if NORMALMAP
|
||||
v_Light0DirectionL3X.xyz = mul(tangentSpace, v_Light0DirectionL3X.xyz);
|
||||
v_Light1DirectionL3Y.xyz = mul(tangentSpace, v_Light1DirectionL3Y.xyz);
|
||||
v_Light2DirectionL3Z.xyz = mul(tangentSpace, v_Light2DirectionL3Z.xyz);
|
||||
l3 = mul(tangentSpace, l3);
|
||||
#else
|
||||
v_Normal = normalize(mul(normal, M_NML));
|
||||
#endif
|
||||
|
||||
v_Light0DirectionL3X.w = l3.x;
|
||||
v_Light1DirectionL3Y.w = l3.y;
|
||||
v_Light2DirectionL3Z.w = l3.z;
|
||||
|
||||
#else
|
||||
gl_Position = mul(vec4(localPos, 1.0), M_MVP);
|
||||
#endif
|
||||
|
||||
#if REFLECTION && NORMALMAP
|
||||
v_ScreenPos = gl_Position.xyw;
|
||||
#ifdef HLSL
|
||||
v_ScreenPos.y = -v_ScreenPos.y;
|
||||
v_Tangent.y = -v_Tangent.y;
|
||||
v_Bitangent.y = -v_Bitangent.y;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if PRELIGHTING
|
||||
gl_Position = mul(vec4(a_Position, 1.0), g_ModelViewProjectionMatrix);
|
||||
#endif
|
||||
|
||||
#if BLENDMODE
|
||||
v_ScreenCoord = gl_Position.xyw;
|
||||
#ifdef HLSL
|
||||
v_ScreenCoord.y = -v_ScreenCoord.y;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user