优化项目架构
This commit is contained in:
44
SproutFarm-Frontend/Shader/OutlineforAtlasTexture.gdshader
Normal file
44
SproutFarm-Frontend/Shader/OutlineforAtlasTexture.gdshader
Normal file
@@ -0,0 +1,44 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
uniform float outline_width = 1.0;
|
||||
uniform vec4 outline_color : source_color;
|
||||
uniform vec4 texture_region = vec4(0.0);
|
||||
|
||||
void fragment() {
|
||||
vec4 color = texture(TEXTURE, UV);
|
||||
vec2 outline_offset = vec2(outline_width) * TEXTURE_PIXEL_SIZE;
|
||||
vec4 uv_region = vec4(texture_region.xy * TEXTURE_PIXEL_SIZE, texture_region.zw * TEXTURE_PIXEL_SIZE);
|
||||
if (uv_region.zw == vec2(0.0)) {
|
||||
uv_region.zw = vec2(1.0);
|
||||
}
|
||||
|
||||
float uv_offset;
|
||||
float a;
|
||||
float max_a = 0.0;
|
||||
|
||||
uv_offset = UV.y - outline_offset.y;
|
||||
if (uv_offset > uv_region.y) {
|
||||
a = texture(TEXTURE, vec2(UV.x, uv_offset)).a;
|
||||
max_a = max(a, max_a);
|
||||
}
|
||||
|
||||
uv_offset = UV.y + outline_offset.y;
|
||||
if (uv_offset < uv_region.y + uv_region.w) {
|
||||
a = texture(TEXTURE, vec2(UV.x, uv_offset)).a;
|
||||
max_a = max(a, max_a);
|
||||
}
|
||||
|
||||
uv_offset = UV.x - outline_offset.x;
|
||||
if (uv_offset > uv_region.x) {
|
||||
a = texture(TEXTURE, vec2(uv_offset, UV.y)).a;
|
||||
max_a = max(a, max_a);
|
||||
}
|
||||
|
||||
uv_offset = UV.x + outline_offset.x;
|
||||
if (uv_offset < uv_region.x + uv_region.z) {
|
||||
a = texture(TEXTURE, vec2(uv_offset, UV.y)).a;
|
||||
max_a = max(a, max_a);
|
||||
}
|
||||
|
||||
COLOR = mix(color, outline_color, max_a - color.a);
|
||||
}
|
||||
Reference in New Issue
Block a user