bgfx/3rdparty/glsl-optimizer/tests/vertex/MF-GodRays-inES3.txt
2014-10-11 12:32:43 -07:00

162 lines
5.7 KiB
Text

#version 300 es
float xll_mod( float x, float y ) {
float d = x / y;
float f = fract (abs(d)) * y;
return d >= 0.0 ? f : -f;
}
vec2 xll_mod( vec2 x, vec2 y ) {
vec2 d = x / y;
vec2 f = fract (abs(d)) * y;
return vec2 (d.x >= 0.0 ? f.x : -f.x, d.y >= 0.0 ? f.y : -f.y);
}
vec3 xll_mod( vec3 x, vec3 y ) {
vec3 d = x / y;
vec3 f = fract (abs(d)) * y;
return vec3 (d.x >= 0.0 ? f.x : -f.x, d.y >= 0.0 ? f.y : -f.y, d.z >= 0.0 ? f.z : -f.z);
}
vec4 xll_mod( vec4 x, vec4 y ) {
vec4 d = x / y;
vec4 f = fract (abs(d)) * y;
return vec4 (d.x >= 0.0 ? f.x : -f.x, d.y >= 0.0 ? f.y : -f.y, d.z >= 0.0 ? f.z : -f.z, d.w >= 0.0 ? f.w : -f.w);
}
float xll_saturate( float x) {
return clamp( x, 0.0, 1.0);
}
vec2 xll_saturate( vec2 x) {
return clamp( x, 0.0, 1.0);
}
vec3 xll_saturate( vec3 x) {
return clamp( x, 0.0, 1.0);
}
vec4 xll_saturate( vec4 x) {
return clamp( x, 0.0, 1.0);
}
mat2 xll_saturate(mat2 m) {
return mat2( clamp(m[0], 0.0, 1.0), clamp(m[1], 0.0, 1.0));
}
mat3 xll_saturate(mat3 m) {
return mat3( clamp(m[0], 0.0, 1.0), clamp(m[1], 0.0, 1.0), clamp(m[2], 0.0, 1.0));
}
mat4 xll_saturate(mat4 m) {
return mat4( clamp(m[0], 0.0, 1.0), clamp(m[1], 0.0, 1.0), clamp(m[2], 0.0, 1.0), clamp(m[3], 0.0, 1.0));
}
struct v2f {
highp vec4 pos;
highp vec2 uv;
lowp vec4 color;
};
struct appdata_full {
highp vec4 vertex;
highp vec4 tangent;
highp vec3 normal;
highp vec4 texcoord;
highp vec4 texcoord1;
highp vec4 color;
};
uniform highp float _Bias;
uniform highp float _BlinkingTimeOffsScale;
uniform highp vec4 _Color;
uniform highp float _FadeOutDistFar;
uniform highp float _FadeOutDistNear;
uniform highp float _MaxGrowSize;
uniform highp float _Multiplier;
uniform highp float _NoiseAmount;
uniform highp float _SizeGrowEndDist;
uniform highp float _SizeGrowStartDist;
uniform highp vec4 _Time;
uniform highp float _TimeOffDuration;
uniform highp float _TimeOnDuration;
uniform highp float _VerticalBillboarding;
uniform highp mat4 _World2Object;
uniform highp vec3 _WorldSpaceCameraPos;
uniform highp mat4 glstate_matrix_mvp;
void CalcOrthonormalBasis( in highp vec3 dir, out highp vec3 right, out highp vec3 up );
highp float CalcFadeOutFactor( in highp float dist );
highp float CalcDistScale( in highp float dist );
v2f xlat_main( in appdata_full v );
void CalcOrthonormalBasis( in highp vec3 dir, out highp vec3 right, out highp vec3 up ) {
up = (( (abs( dir.y ) > 0.999000) ) ? ( vec3( 0.0, 0.0, 1.0) ) : ( vec3( 0.0, 1.0, 0.0) ));
right = normalize( cross( up, dir) );
up = cross( dir, right);
}
highp float CalcFadeOutFactor( in highp float dist ) {
highp float nfadeout;
highp float ffadeout;
nfadeout = xll_saturate( (dist / _FadeOutDistNear) );
ffadeout = (1.00000 - xll_saturate( (max( (dist - _FadeOutDistFar), 0.00000) * 0.200000) ));
ffadeout *= ffadeout;
nfadeout *= nfadeout;
nfadeout *= nfadeout;
nfadeout *= ffadeout;
return nfadeout;
}
highp float CalcDistScale( in highp float dist ) {
highp float distScale;
distScale = min( (max( (dist - _SizeGrowStartDist), 0.00000) / _SizeGrowEndDist), 1.00000);
return ((distScale * distScale) * _MaxGrowSize);
}
v2f xlat_main( in appdata_full v ) {
highp vec3 centerOffs;
highp vec3 centerLocal;
highp vec3 viewerLocal;
highp vec3 localDir;
highp float localDirLength;
highp vec3 rightLocal;
highp vec3 upLocal;
highp float distScale;
highp vec3 BBNormal;
highp vec3 BBLocalPos;
highp float time;
highp float fracTime;
highp float wave;
highp float noiseTime;
highp float noise;
highp float noiseWave;
v2f o;
centerOffs = (vec3( (vec2( 0.500000) - v.color.xy ), 0.00000) * v.texcoord1.xyy );
centerLocal = (v.vertex.xyz + centerOffs.xyz );
viewerLocal = vec3( ( _World2Object * vec4( _WorldSpaceCameraPos, 1.00000) ));
localDir = (viewerLocal - centerLocal);
localDir.y = mix( 0.00000, localDir.y , _VerticalBillboarding);
localDirLength = length( localDir );
CalcOrthonormalBasis( (localDir / localDirLength), rightLocal, upLocal);
distScale = (CalcDistScale( localDirLength) * v.color.w );
BBNormal = ((rightLocal * v.normal.x ) + (upLocal * v.normal.y ));
BBLocalPos = ((centerLocal - ((rightLocal * centerOffs.x ) + (upLocal * centerOffs.y ))) + (BBNormal * distScale));
time = (_Time.y + (_BlinkingTimeOffsScale * v.color.z ));
fracTime = xll_mod( time, (_TimeOnDuration + _TimeOffDuration));
wave = (smoothstep( 0.00000, (_TimeOnDuration * 0.250000), fracTime) * (1.00000 - smoothstep( (_TimeOnDuration * 0.750000), _TimeOnDuration, fracTime)));
noiseTime = (time * (6.28319 / _TimeOnDuration));
noise = (sin( noiseTime ) * ((0.500000 * cos( ((noiseTime * 0.636600) + 56.7272) )) + 0.500000));
noiseWave = ((_NoiseAmount * noise) + (1.00000 - _NoiseAmount));
wave = (( (_NoiseAmount < 0.0100000) ) ? ( wave ) : ( noiseWave ));
wave += _Bias;
o.uv = v.texcoord.xy ;
o.pos = ( glstate_matrix_mvp * vec4( BBLocalPos, 1.00000) );
o.color = (((CalcFadeOutFactor( localDirLength) * _Color) * _Multiplier) * wave);
return o;
}
in highp vec4 _inVertex;
in mediump vec3 _inNormal;
in highp vec4 _uv0;
in highp vec4 _uv1;
in lowp vec4 _color;
in vec4 TANGENT;
out highp vec4 xlv_SV_POSITION;
out highp vec2 xlv_TEXCOORD0;
out lowp vec4 xlv_TEXCOORD1;
void main() {
v2f xl_retval;
appdata_full xlt_v;
xlt_v.vertex = _inVertex;
xlt_v.tangent = TANGENT;
xlt_v.normal = _inNormal;
xlt_v.texcoord = _uv0;
xlt_v.texcoord1 = _uv1;
xlt_v.color = _color;
xl_retval = xlat_main( xlt_v);
xlv_SV_POSITION = vec4( xl_retval.pos);
xlv_TEXCOORD0 = vec2( xl_retval.uv);
xlv_TEXCOORD1 = vec4( xl_retval.color);
}