Files
starruler-linux/data/shaders/source/distant_planet_icon_ps.txt
T
2018-07-17 14:15:37 +02:00

91 lines
3.6 KiB
Plaintext

#version 120
#define pi 3.141592653589793238462643383279
#define twopi (pi * 2.0)
varying vec2 uv, uv1, uv2;
uniform sampler2D textures[4];
uniform vec4 sprite1;
uniform vec4 sprite2;
uniform float fade;
uniform float isDisabled;
uniform float isUsed;
uniform float isExported;
uniform float isColonizing;
uniform float isOwned;
uniform float isDecaying;
uniform float classIcon;
uniform vec4 captureColor;
uniform float capturePct;
uniform vec4 disableColor;
const float w = 128.0;
const float h = 256.0;
const float modRatio = 26.0/21.0;
const float modShift = 0.09;
const float row = 4.0;
const vec4 disabled_icon = vec4(28.0/w, 81.0/h, 55.0/w, 110.0/h);
const vec4 unused_icon = vec4(83.0/w, 2.0/h, 108.0/w, 27.0/h);
const vec4 decay_icon = vec4(29.0/w, 56.0/h, 54.0/w, 81.0/h);
const vec4 exported_icon = vec4(29.0/w, 2.0/h, 54.0/w, 27.0/h);
const vec4 colonizing_icon = vec4(2.0/w, 56.0/h, 29.0/w, 81.0/h);
const vec4 class_icon = vec4(2.0/w, 29.0/h, 27.0/w, 54.0/h);
const vec2 class_offset = vec2(27.0/w, 27.0/h);
void main() {
vec4 result = texture2D(textures[0],uv);
vec2 uv3 = (uv2 / modRatio) + vec2(modShift);
vec4 disIcon = texture2D(textures[3], mix(disabled_icon.xy, disabled_icon.zw, uv1)) * disableColor;
vec4 uIcon = texture2D(textures[3], mix(unused_icon.xy, unused_icon.zw, uv3));
vec4 dIcon = texture2D(textures[3], mix(decay_icon.xy, decay_icon.zw, uv3));
vec4 expIcon = texture2D(textures[3], mix(exported_icon.xy, exported_icon.zw, uv3));
vec2 classOff = vec2(class_offset.x * mod(classIcon - 4.0, row), class_offset.y * floor((classIcon - 4.0)/row));
vec4 clsIcon = texture2D(textures[3], mix(class_icon.xy+classOff, class_icon.zw+classOff, uv3));
vec4 colIcon = texture2D(textures[3], mix(colonizing_icon.xy, colonizing_icon.zw, uv3-vec2(-0.4, -0.4)));
result.rgb *= gl_Color.rgb;
//Base of black transparent if unowned
result *= isOwned;
vec4 icon1 = texture2D(textures[1], mix(sprite1.xy, sprite1.zw, uv1));
icon1.rgb = (fade * icon1.rgb) + ((1.0 - fade) * gl_Color.rgb);
if(all(bvec4( greaterThanEqual(uv1, vec2(0.0)), lessThanEqual(uv1, vec2(1.0))))) {
result = mix( result, vec4(icon1.rgb, 1.0), icon1.a );
result = mix( result, vec4(disIcon.rgb, 1.0), disIcon.a * fade * isDisabled );
}
vec4 icon2 = texture2D(textures[2], mix(sprite2.xy, sprite2.zw, uv2));
if(all(bvec4( greaterThanEqual(uv2, vec2(0.0)), lessThanEqual(uv2, vec2(1.0))))) {
result = mix( result, vec4(icon2.rgb, 1.0), icon2.a * fade );
}
if(all(bvec4( greaterThanEqual(uv3, vec2(0.0)), lessThanEqual(uv3, vec2(1.0))))) {
vec2 showCls = step(vec2(3.0, classIcon), vec2(classIcon, 20.0));
result = mix( result, vec4(clsIcon.rgb, 1.0), clsIcon.a * fade * showCls.x * showCls.y );
result = mix( result, vec4(dIcon.rgb, 1.0), dIcon.a * fade * isDecaying );
result = mix( result, vec4(uIcon.rgb, 1.0), uIcon.a * fade * (1.0 - isUsed) );
result = mix( result, vec4(expIcon.rgb, 1.0), expIcon.a * fade * isExported );
}
if(all(bvec4( greaterThanEqual(uv3, vec2(-0.4, -0.4)), lessThanEqual(uv3, vec2(0.6, 0.4))))) {
result = mix( result, vec4(colIcon.rgb, 1.0), colIcon.a * fade * isColonizing );
}
if(captureColor.a > 0.0) {
vec2 rcoords = (uv - vec2(0.5, 0.5)) * 2.0;
float radius = length(rcoords);
if(radius > 0.8 && radius < 1.0) {
float ang = (atan(rcoords.x, rcoords.y) + pi) / twopi;
if(ang < capturePct) {
/*float alpha = sqrt((radius - 0.8) * 5.0);*/
float alpha = 1.0 - (abs(radius - 0.9) * 11.0);
result = mix( result, vec4(captureColor.rgb, 1.0), alpha * captureColor.a);
}
}
}
result.a *= gl_Color.a;
gl_FragColor = result;
}