ShatteredSword/dist/builtin/shaders/label.fshader

77 lines
2.6 KiB
Plaintext
Raw Permalink Normal View History

precision mediump float;
uniform vec4 u_BackgroundColor;
uniform vec4 u_BorderColor;
uniform float u_BorderWidth;
uniform float u_BorderRadius;
uniform vec2 u_MaxSize;
varying vec4 v_Position;
void main(){
vec2 adj_MaxSize = u_MaxSize - u_BorderWidth;
vec2 rad_MaxSize = u_MaxSize - u_BorderRadius;
vec2 rad2_MaxSize = u_MaxSize - 2.0*u_BorderRadius;
bool inX = (v_Position.x < adj_MaxSize.x) && (v_Position.x > -adj_MaxSize.x);
bool inY = (v_Position.y < adj_MaxSize.y) && (v_Position.y > -adj_MaxSize.y);
bool inRadiusRangeX = (v_Position.x < rad_MaxSize.x) && (v_Position.x > -rad_MaxSize.x);
bool inRadiusRangeY = (v_Position.y < rad_MaxSize.y) && (v_Position.y > -rad_MaxSize.y);
bool inRadius2RangeX = (v_Position.x < rad2_MaxSize.x) && (v_Position.x > -rad2_MaxSize.x);
bool inRadius2RangeY = (v_Position.y < rad2_MaxSize.y) && (v_Position.y > -rad2_MaxSize.y);
if(inX && inY){
// Inside bounds, draw background color
gl_FragColor = u_BackgroundColor;
} else {
// In boundary, draw border color
gl_FragColor = u_BorderColor;
}
// This isn't working well right now
/*
if(inRadius2RangeX || inRadius2RangeY){
// Draw normally
if(inX && inY){
// Inside bounds, draw background color
gl_FragColor = u_BackgroundColor;
} else {
// In boundary, draw border color
gl_FragColor = u_BorderColor;
}
} else if(inRadiusRangeX || inRadiusRangeY){
// Draw a rounded boundary for the inner part
float x = v_Position.x - sign(v_Position.x)*rad2_MaxSize.x;
float y = v_Position.y - sign(v_Position.y)*rad2_MaxSize.y;
float radSq = x*x + y*y;
float bRadSq = u_BorderRadius*u_BorderRadius;
if(radSq > bRadSq){
// Outside of radius - draw as transparent
gl_FragColor = u_BorderColor;
} else {
gl_FragColor = u_BackgroundColor;
}
} else {
// Both coordinates are in the circular section
float x = v_Position.x - sign(v_Position.x)*rad_MaxSize.x;
float y = v_Position.y - sign(v_Position.y)*rad_MaxSize.y;
float radSq = x*x + y*y;
float bRadSq = u_BorderRadius*u_BorderRadius;
if(radSq > bRadSq){
// Outside of radius - draw as transparent
gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
} else if(sqrt(bRadSq) - sqrt(radSq) < u_BorderWidth) {
// In border
gl_FragColor = u_BorderColor;
} else {
gl_FragColor = u_BackgroundColor;
}
}
*/
}