43 lines
1.6 KiB
Plaintext
43 lines
1.6 KiB
Plaintext
shader_type canvas_item;
|
|
|
|
uniform bool center_enabled = true;
|
|
uniform bool legs_enabled = true;
|
|
uniform bool inverted = false;
|
|
uniform int color_id = 0;
|
|
uniform vec4 color_0 = vec4(0., 1, 0., 1.);
|
|
uniform vec4 color_1 = vec4(1., 0., 0., 1.);
|
|
uniform vec4 color_2 = vec4(0., 0., 1., 1.);
|
|
uniform float center_radius = .002;
|
|
uniform float width = .003;
|
|
uniform float len = .03;
|
|
uniform float spacing = .008;
|
|
uniform float spread = 1.;
|
|
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap_anisotropic;
|
|
|
|
|
|
void fragment(){
|
|
|
|
float a = SCREEN_PIXEL_SIZE.x / SCREEN_PIXEL_SIZE.y;
|
|
vec2 UVa = vec2(UV.x / a, UV.y);
|
|
vec2 center = vec2(.5 / a, .5);
|
|
|
|
float point = step(distance(UVa, center), center_radius);
|
|
|
|
float h = step(center.x - len - spacing*spread, UVa.x) - step(center.x - spacing*spread, UVa.x);
|
|
h += step(center.x + spacing*spread, UVa.x) - step(center.x + len + spacing*spread, UVa.x);
|
|
h *= step(center.y - width, UVa.y) - step(center.y + width, UVa.y);
|
|
|
|
float v = step(center.y - len - spacing*spread, UVa.y) - step(center.y - spacing*spread, UVa.y);
|
|
v += step(center.y + spacing*spread, UVa.y) - step(center.y + len + spacing*spread, UVa.y);
|
|
v *= step(center.x - width, UVa.x) - step(center.x + width, UVa.x);
|
|
|
|
float crosshair;
|
|
|
|
crosshair = (h+v) * float(legs_enabled) + point * float(center_enabled);
|
|
|
|
if(!inverted){
|
|
COLOR = (color_0 * float(color_id == 0) + color_1 * float(color_id == 1) + color_2 * float(color_id == 2)) * crosshair;
|
|
}else{
|
|
COLOR = vec4((cos(textureLod(SCREEN_TEXTURE, SCREEN_UV, 0.0).rgb * 3.1415926534) + 1.)/2., 1.) * crosshair;
|
|
}
|
|
} |