summaryrefslogtreecommitdiff
path: root/crates/renderer/src/assets
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2025-11-13 22:04:56 -0500
committerLLLL Colonq <llll@colonq>2025-11-13 22:04:56 -0500
commita76f583c2d11043a94c3251ec6a5381d7836bdb4 (patch)
treebcb6a085fa5114be1354efa79cc6e191095f8253 /crates/renderer/src/assets
parente8bf4d7dde7d4f450458deb0612eb3bc14994901 (diff)
Add TCG
Diffstat (limited to 'crates/renderer/src/assets')
-rw-r--r--crates/renderer/src/assets/shaders/flat/frag.glsl3
-rw-r--r--crates/renderer/src/assets/shaders/tcg_base/frag.glsl60
-rw-r--r--crates/renderer/src/assets/shaders/tcg_base/vert.glsl4
-rw-r--r--crates/renderer/src/assets/shaders/tcg_screen/frag.glsl7
-rw-r--r--crates/renderer/src/assets/textures/tcg/factions/lever.pngbin0 -> 366 bytes
-rw-r--r--crates/renderer/src/assets/textures/tcg/factions/nate.pngbin0 -> 323 bytes
-rw-r--r--crates/renderer/src/assets/textures/tcg/factions/tony.pngbin0 -> 272 bytes
7 files changed, 66 insertions, 8 deletions
diff --git a/crates/renderer/src/assets/shaders/flat/frag.glsl b/crates/renderer/src/assets/shaders/flat/frag.glsl
index cab840d..69fe2ec 100644
--- a/crates/renderer/src/assets/shaders/flat/frag.glsl
+++ b/crates/renderer/src/assets/shaders/flat/frag.glsl
@@ -7,9 +7,6 @@ void main()
float opacity = 1.0 - clamp(transparency, 0.0, 1.0);
vec2 tcfull = vec2(vertex_texcoord.x, 1.0 - vertex_texcoord.y);
vec4 texel = texture(texture_data, tcfull);
- if (texel.a != 1.0) {
- discard;
- }
texel.a *= opacity;
frag_color = texel;
}
diff --git a/crates/renderer/src/assets/shaders/tcg_base/frag.glsl b/crates/renderer/src/assets/shaders/tcg_base/frag.glsl
new file mode 100644
index 0000000..b941d61
--- /dev/null
+++ b/crates/renderer/src/assets/shaders/tcg_base/frag.glsl
@@ -0,0 +1,60 @@
+uniform sampler2D texture_data;
+
+uniform vec4 shift_color;
+
+vec3 rgb_to_hsl(vec3 rgb) {
+ vec3 ret;
+ float min = min(min(rgb.r, rgb.g), rgb.b);
+ float max = max(max(rgb.r, rgb.g), rgb.b);
+ float lum = (max + min) / 2.0;
+ ret.z = lum;
+ if (max == min) {
+ ret.x = ret.y = 0.0;
+ } else {
+ float chroma = max - min;
+ ret.y = chroma / (1.0 - abs(2.0 * lum - 1.0));
+ if (max == rgb.r) {
+ ret.x = (rgb.g - rgb.b) / chroma + (rgb.g < rgb.b ? 6.0 : 0.0);
+ } else if (max == rgb.g) {
+ ret.x = (rgb.b - rgb.r) / chroma + 2.0;
+ } else {
+ ret.x = (rgb.r - rgb.g) / chroma + 4.0;
+ }
+ ret.x /= 6.0;
+ }
+ return ret;
+}
+
+float hue_to_rgb(float p, float q, float t) {
+ if (t < 0.0) t += 1.0;
+ if (t > 1.0) t -= 1.0;
+ if (t < 1.0/6.0) return p + (q - p) * 6.0 * t;
+ if (t < 1.0/2.0) return q;
+ if (t < 2.0/3.0) return p + (q - p) * (2.0/3.0 - t) * 6.0;
+ return p;
+}
+
+vec3 hsl_to_rgb(vec3 hsl) {
+ vec3 ret;
+ if (hsl.y == 0.0) {
+ ret.r = ret.g = ret.b = hsl.z;
+ } else {
+ float q = hsl.z < 0.5 ? hsl.z * (1.0 + hsl.y) : hsl.z + hsl.y - hsl.z * hsl.y;
+ float p = 2.0 * hsl.z - q;
+ ret.r = hue_to_rgb(p, q, hsl.x + 1.0/3.0);
+ ret.g = hue_to_rgb(p, q, hsl.x);
+ ret.b = hue_to_rgb(p, q, hsl.x - 1.0/3.0);
+ }
+ return ret;
+}
+
+void main()
+{
+ vec2 tcfull = vec2(vertex_texcoord.x, 1.0 - vertex_texcoord.y);
+ vec4 texel = texture(texture_data, tcfull);
+ vec3 hsl = rgb_to_hsl(texel.xyz);
+ vec3 shift_hsl = rgb_to_hsl(shift_color.xyz);
+ hsl.x = shift_hsl.x;
+ texel.xyz = hsl_to_rgb(hsl);
+ frag_color = texel;
+}
diff --git a/crates/renderer/src/assets/shaders/tcg_base/vert.glsl b/crates/renderer/src/assets/shaders/tcg_base/vert.glsl
new file mode 100644
index 0000000..e324f7e
--- /dev/null
+++ b/crates/renderer/src/assets/shaders/tcg_base/vert.glsl
@@ -0,0 +1,4 @@
+void main()
+{
+ default_main();
+} \ No newline at end of file
diff --git a/crates/renderer/src/assets/shaders/tcg_screen/frag.glsl b/crates/renderer/src/assets/shaders/tcg_screen/frag.glsl
index 2a14860..cb4a58f 100644
--- a/crates/renderer/src/assets/shaders/tcg_screen/frag.glsl
+++ b/crates/renderer/src/assets/shaders/tcg_screen/frag.glsl
@@ -1,15 +1,12 @@
uniform sampler2D texture_data;
-uniform float transparency;
-
void main()
{
- float opacity = 1.0 - clamp(transparency, 0.0, 1.0);
vec2 tcfull = vec2(vertex_texcoord.x, vertex_texcoord.y);
vec4 texel = texture(texture_data, tcfull);
- if (texel.a != 1.0) {
+ if (texel.a == 0.0) {
discard;
}
- texel.a *= opacity;
+ texel.a = 1.0;
frag_color = texel;
}
diff --git a/crates/renderer/src/assets/textures/tcg/factions/lever.png b/crates/renderer/src/assets/textures/tcg/factions/lever.png
new file mode 100644
index 0000000..a757baa
--- /dev/null
+++ b/crates/renderer/src/assets/textures/tcg/factions/lever.png
Binary files differ
diff --git a/crates/renderer/src/assets/textures/tcg/factions/nate.png b/crates/renderer/src/assets/textures/tcg/factions/nate.png
new file mode 100644
index 0000000..38a45e5
--- /dev/null
+++ b/crates/renderer/src/assets/textures/tcg/factions/nate.png
Binary files differ
diff --git a/crates/renderer/src/assets/textures/tcg/factions/tony.png b/crates/renderer/src/assets/textures/tcg/factions/tony.png
new file mode 100644
index 0000000..c6ccaf0
--- /dev/null
+++ b/crates/renderer/src/assets/textures/tcg/factions/tony.png
Binary files differ