summaryrefslogtreecommitdiffstats
path: root/src/main/java/dev/figboot/cuberender/state/BlendMode.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/dev/figboot/cuberender/state/BlendMode.java')
-rw-r--r--src/main/java/dev/figboot/cuberender/state/BlendMode.java26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/main/java/dev/figboot/cuberender/state/BlendMode.java b/src/main/java/dev/figboot/cuberender/state/BlendMode.java
new file mode 100644
index 0000000..0c30998
--- /dev/null
+++ b/src/main/java/dev/figboot/cuberender/state/BlendMode.java
@@ -0,0 +1,26 @@
+package dev.figboot.cuberender.state;
+
+import dev.figboot.cuberender.math.Vector4f;
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+@Getter
+public enum BlendMode {
+ DISABLE((inOutColor, prev) -> inOutColor.w = 1),
+ BLEND_OVER((inOutColor, prev) -> {
+ float pAlphaFactor = prev.w * (1 - inOutColor.w);
+ float aOut = inOutColor.w + pAlphaFactor;
+
+ inOutColor.x = (inOutColor.x + prev.x * pAlphaFactor) / aOut;
+ inOutColor.y = (inOutColor.y + prev.y * pAlphaFactor) / aOut;
+ inOutColor.z = (inOutColor.z + prev.z * pAlphaFactor) / aOut;
+ inOutColor.w = aOut;
+ });
+
+ private final BlendFunction function;
+
+ public interface BlendFunction {
+ void blend(Vector4f inOutColor, Vector4f prev);
+ }
+}