e4s-sdk/gamedata/shaders/r3/deffer_detail_s_flat.vs
2026-06-17 23:06:51 +03:00

48 lines
1 KiB
GLSL

#include "common.h"
uniform float4 consts; // {1/quant,1/quant,diffusescale,ambient}
//uniform float4 array [200] : register(c12);
//tbuffer DetailsData
//{
uniform float4 array[61*4];
//}
v2p_flat main (v_detail v)
{
v2p_flat O;
// index
int i = v.misc.w;
float4 m0 = array[i+0];
float4 m1 = array[i+1];
float4 m2 = array[i+2];
float4 c0 = array[i+3];
// Transform pos to world coords
float4 pos;
pos.x = dot (m0, v.pos);
pos.y = dot (m1, v.pos);
pos.z = dot (m2, v.pos);
pos.w = 1;
// Normal in world coords
float3 norm;
norm.x = pos.x - m0.w ;
norm.y = pos.y - m1.w + .75f; // avoid zero
norm.z = pos.z - m2.w ;
// Final out
float4 Pp = mul (m_WVP, pos );
O.hpos = Pp;
O.N = mul (m_WV, normalize(norm) );
float3 Pe = mul (m_WV, pos );
O.tcdh = float4 ((v.misc * consts).xyyy );
# if defined(USE_R2_STATIC_SUN)
O.tcdh.w = c0.x; // (,,,dir-occlusion)
# endif
O.position = float4 (Pe, c0.w );
return O;
}
FXVS;