shaderlib: Add alpha_blend function, extend place_texture example, update autocomplete - implements #23

This commit is contained in:
ChaoticByte 2024-12-30 17:02:19 +01:00
parent 3abaf38400
commit 1635cd5b82
No known key found for this signature in database
3 changed files with 21 additions and 8 deletions

View file

@ -1,6 +1,7 @@
shader_type canvas_item;
#include "res://shaderlib/transform.gdshaderinc"
#include "res://shaderlib/transparency.gdshaderinc"
//!load ./swamp.jpg
//!load+ img2 ./grass.png
@ -9,6 +10,6 @@ uniform sampler2D img2: repeat_disable, filter_nearest;
void fragment() {
vec4 grass = place_texture(img2, UV, TEXTURE_PIXEL_SIZE, vec2(0, .47), vec2(1));
grass.rgb += (vec3(0.03, 0.07, 0.11) - ((UV.y - .8) * 0.15)); // color correction
COLOR.rgb = mix(COLOR.rgb, grass.rgb, grass.a);
grass.rgb += (vec3(0.02, 0.07, 0.1) - ((UV.y - .8) * 0.15)); // color correction
COLOR = alpha_blend(COLOR, grass);
}

View file

@ -0,0 +1,9 @@
// Alpha Blending a over b after Bruce A. Wallace
// sources:
// - https://en.wikipedia.org/wiki/Alpha_compositing
vec4 alpha_blend(vec4 b, vec4 a) {
float alpha = a.a + (b.a * (1.0 - a.a));
vec3 col = ((a.rgb*a.a) + ((b.rgb*b.a) * (1.0 - a.a)) / alpha);
return vec4(col.r, col.g, col.b, alpha);
}

View file

@ -124,11 +124,13 @@ const gdshader_builtins = [
# shaderlib
var shaderlib_regex = {
"hsv": RegEx.create_from_string(r'\s*\#include\s+\"res\:\/\/shaderlib\/hsv\.gdshaderinc\"'),
"transform": RegEx.create_from_string(r'\s*\#include\s+\"res\:\/\/shaderlib\/transform\.gdshaderinc\"')
"transform": RegEx.create_from_string(r'\s*\#include\s+\"res\:\/\/shaderlib\/transform\.gdshaderinc\"'),
"transparency": RegEx.create_from_string(r'\s*\#include\s+\"res\:\/\/shaderlib\/transparency\.gdshaderinc\"')
}
const shaderlib_functions = {
"hsv": ["rgb2hsv", "hsv2rgb", "hsv_offset", "hsv_multiply"],
"transform": ["place_texture"]
"transform": ["place_texture"],
"transparency": ["alpha_blend"],
}
#
# configure Highlighter
@ -182,11 +184,12 @@ func _on_code_edit_code_completion_requested():
code_editor.add_code_completion_option(CodeEdit.KIND_FUNCTION, k, k+"(", Color.INDIAN_RED)
# shaderlib #
var shader_code = code_editor.text
for key in shaderlib_functions:
for key in shaderlib_regex:
if shaderlib_regex[key].search(shader_code) != null:
for k in shaderlib_functions[key]:
code_editor.code_completion_prefixes.append(k)
code_editor.add_code_completion_option(CodeEdit.KIND_FUNCTION, k, k+"(", Color.INDIAN_RED)
if key in shaderlib_functions:
for k in shaderlib_functions[key]:
code_editor.code_completion_prefixes.append(k)
code_editor.add_code_completion_option(CodeEdit.KIND_FUNCTION, k, k+"(", Color.INDIAN_RED)
# # # # # # #
code_editor.update_code_completion_options(true)
#