Restructured shaderlib by moving functions and renaming files
This commit is contained in:
parent
c70eaed0c4
commit
40374bd849
10 changed files with 53 additions and 49 deletions
|
@ -3,3 +3,13 @@
|
|||
float cbrt(float x) {
|
||||
return pow(x, 1.0/3.0);
|
||||
}
|
||||
|
||||
/*
|
||||
Alpha Blending a over b after Bruce A. Wallace
|
||||
source: 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);
|
||||
}
|
||||
|
|
27
shaderlib/hsv.gdshaderinc
Normal file
27
shaderlib/hsv.gdshaderinc
Normal file
|
@ -0,0 +1,27 @@
|
|||
|
||||
/*
|
||||
rgb2hsv and hsv2rgb functions adapted
|
||||
from https://godotshaders.com/shader/hsv-adjustment/
|
||||
original code by https://godotshaders.com/author/al1-ce/
|
||||
|
||||
Color space conversion functions always work with vec4.
|
||||
The fourth value is always alpha.
|
||||
*/
|
||||
|
||||
// Convert RGB to HSV (hue, saturation, brightness)
|
||||
vec4 rgb2hsv(vec4 c) {
|
||||
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
|
||||
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
|
||||
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
|
||||
float d = q.x - min(q.w, q.y);
|
||||
float e = 1.0e-10;
|
||||
return vec4(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x, c.a);
|
||||
}
|
||||
|
||||
// Convert HSV back to RGB (red, green, blue)
|
||||
vec4 hsv2rgb(vec4 c) {
|
||||
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
||||
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
||||
vec3 rgb = c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
||||
return vec4(rgb.r, rgb.g, rgb.b, c.a);
|
||||
}
|
|
@ -1,42 +1,16 @@
|
|||
|
||||
/*
|
||||
Color space conversion functions always work with vec4.
|
||||
The fourth value is always alpha.
|
||||
*/
|
||||
|
||||
#include "res://shaderlib/common.gdshaderinc"
|
||||
|
||||
/*
|
||||
rgb2hsv and hsv2rgb functions adapted
|
||||
from https://godotshaders.com/shader/hsv-adjustment/
|
||||
original code by https://godotshaders.com/author/al1-ce/
|
||||
*/
|
||||
|
||||
// Convert RGB to HSV (hue, saturation, brightness)
|
||||
vec4 rgb2hsv(vec4 c) {
|
||||
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
|
||||
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
|
||||
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
|
||||
float d = q.x - min(q.w, q.y);
|
||||
float e = 1.0e-10;
|
||||
return vec4(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x, c.a);
|
||||
}
|
||||
|
||||
// Convert HSV back to RGB (red, green, blue)
|
||||
vec4 hsv2rgb(vec4 c) {
|
||||
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
||||
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
||||
vec3 rgb = c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
||||
return vec4(rgb.r, rgb.g, rgb.b, c.a);
|
||||
}
|
||||
|
||||
/*
|
||||
OkLab and OkLCh
|
||||
For more details on oklab, see
|
||||
- https://bottosson.github.io/posts/oklab/
|
||||
- https://en.wikipedia.org/wiki/Oklab_color_space
|
||||
|
||||
Color space conversion functions always work with vec4.
|
||||
The fourth value is always alpha.
|
||||
*/
|
||||
|
||||
#include "res://shaderlib/common.gdshaderinc"
|
||||
|
||||
vec4 rgb2oklab(vec4 c) {
|
||||
float l = 0.4122214708f * c.r + 0.5363325363f * c.g + 0.0514459929f * c.b;
|
||||
float m = 0.2119034982f * c.r + 0.6806995451f * c.g + 0.1073969566f * c.b;
|
|
@ -1,10 +0,0 @@
|
|||
|
||||
/*
|
||||
Alpha Blending a over b after Bruce A. Wallace
|
||||
source: 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);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue