aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/dev/figboot/cuberender/state
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/dev/figboot/cuberender/state')
-rw-r--r--src/main/java/dev/figboot/cuberender/state/Framebuffer.java23
-rw-r--r--src/main/java/dev/figboot/cuberender/state/Mesh.java32
-rw-r--r--src/main/java/dev/figboot/cuberender/state/Sampleable.java2
3 files changed, 27 insertions, 30 deletions
diff --git a/src/main/java/dev/figboot/cuberender/state/Framebuffer.java b/src/main/java/dev/figboot/cuberender/state/Framebuffer.java
index 56e218e..3c2a1ad 100644
--- a/src/main/java/dev/figboot/cuberender/state/Framebuffer.java
+++ b/src/main/java/dev/figboot/cuberender/state/Framebuffer.java
@@ -1,6 +1,7 @@
package dev.figboot.cuberender.state;
import dev.figboot.cuberender.math.Matrix3f;
+import dev.figboot.cuberender.math.Matrix4f;
import dev.figboot.cuberender.math.Vector3f;
import dev.figboot.cuberender.math.Vector4f;
import lombok.Getter;
@@ -23,9 +24,9 @@ public class Framebuffer {
@Getter private final BufferedImage color;
private final float[] depth;
- private int depthMode = FB_DEPTH_USE | FB_DEPTH_COMMIT;
+ @Setter private int depthMode = FB_DEPTH_USE | FB_DEPTH_COMMIT;
- @Setter private Matrix3f transform;
+ @Setter private Matrix4f transform;
@Setter private BlendMode blendMode = BlendMode.DISABLE;
@@ -37,10 +38,6 @@ public class Framebuffer {
depth = new float[width * height];
}
- public void setDepthMode(int mode) {
- this.depthMode = mode;
- }
-
public void clear(int bits, int color) {
if ((bits & FB_CLEAR_COLOR) != 0) {
Graphics gfx = this.color.getGraphics();
@@ -74,9 +71,9 @@ public class Framebuffer {
i1 = mesh.indices[tri * 3 + 1];
i2 = mesh.indices[tri * 3 + 2];
- Vector3f vert0 = mesh.vertices[i0];
- Vector3f vert1 = mesh.vertices[i1];
- Vector3f vert2 = mesh.vertices[i2];
+ Vector4f vert0 = mesh.vertices[i0];
+ Vector4f vert1 = mesh.vertices[i1];
+ Vector4f vert2 = mesh.vertices[i2];
drawTriangle(vert0, vert1, vert2, mesh.normals[tri], s, i0, i1, i2);
}
@@ -94,9 +91,9 @@ public class Framebuffer {
i1 = tri * 3 + 1;
i2 = tri * 3 + 2;
- Vector3f vert0 = mesh.vertices[i0];
- Vector3f vert1 = mesh.vertices[i1];
- Vector3f vert2 = mesh.vertices[i2];
+ Vector4f vert0 = mesh.vertices[i0];
+ Vector4f vert1 = mesh.vertices[i1];
+ Vector4f vert2 = mesh.vertices[i2];
drawTriangle(vert0, vert1, vert2, mesh.normals[tri], s, i0, i1, i2);
}
@@ -111,7 +108,7 @@ public class Framebuffer {
}
// triangles have flat normals (we don't need anything more than that in this renderer and it saves us the trouble of interpolating between 3 normal vectors)
- private void drawTriangle(Vector3f vert0, Vector3f vert1, Vector3f vert2, Vector3f normal, Sampleable<Object> sampleable, int i0, int i1, int i2) {
+ private void drawTriangle(Vector4f vert0, Vector4f vert1, Vector4f vert2, Vector4f normal, Sampleable<Object> sampleable, int i0, int i1, int i2) {
Vector4f outColor = new Vector4f(), prevColor = new Vector4f();
vert0 = transform.transform(vert0);
diff --git a/src/main/java/dev/figboot/cuberender/state/Mesh.java b/src/main/java/dev/figboot/cuberender/state/Mesh.java
index 2f28c16..c18fe04 100644
--- a/src/main/java/dev/figboot/cuberender/state/Mesh.java
+++ b/src/main/java/dev/figboot/cuberender/state/Mesh.java
@@ -2,7 +2,7 @@ package dev.figboot.cuberender.state;
import dev.figboot.cuberender.math.MathUtil;
import dev.figboot.cuberender.math.Vector2f;
-import dev.figboot.cuberender.math.Vector3f;
+import dev.figboot.cuberender.math.Vector4f;
import dev.figboot.cuberender.math.Vector4f;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
@@ -11,20 +11,20 @@ import java.util.*;
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
public abstract class Mesh<T> implements Sampleable<T> {
- final Vector3f[] vertices;
- final Vector3f[] normals;
+ final Vector4f[] vertices;
+ final Vector4f[] normals;
final int[] indices;
final Map<AttachmentType, Object> attachments;
- protected void applyLighting(Vector4f color, Vector3f normal) {
+ protected void applyLighting(Vector4f color, Vector4f normal) {
Float lightFact = (Float)attachments.get(AttachmentType.LIGHT_FACTOR);
if (lightFact == null) {
return;
}
- float fact = 1 - (normal.dot((Vector3f)attachments.get(AttachmentType.LIGHT_VECTOR)) + 1) / 2;
+ float fact = 1 - (normal.dot((Vector4f)attachments.get(AttachmentType.LIGHT_VECTOR)) + 1) / 2;
fact *= lightFact; // lightFact should kinda set the "black level"
fact = 1 - fact;
@@ -36,8 +36,8 @@ public abstract class Mesh<T> implements Sampleable<T> {
}
public static class Builder {
- private final List<Vector3f> vertices = new ArrayList<>();
- private final List<Vector3f> normals = new ArrayList<>();
+ private final List<Vector4f> vertices = new ArrayList<>();
+ private final List<Vector4f> normals = new ArrayList<>();
private final List<Integer> indices = new ArrayList<>();
private final List<Vector2f> texCoords = new ArrayList<>();
private int color;
@@ -65,12 +65,12 @@ public abstract class Mesh<T> implements Sampleable<T> {
return this;
}
- public Builder vertex(Vector3f... vert) {
+ public Builder vertex(Vector4f... vert) {
vertices.addAll(Arrays.asList(vert));
return this;
}
- public Builder normals(Vector3f... norm) {
+ public Builder normals(Vector4f... norm) {
normals.addAll(Arrays.asList(norm));
return this;
}
@@ -99,9 +99,9 @@ public abstract class Mesh<T> implements Sampleable<T> {
}
if (texture == null) {
- return new ColorMesh(vertices.toArray(new Vector3f[0]), normals.toArray(new Vector3f[0]), idxArr, attachments, color);
+ return new ColorMesh(vertices.toArray(new Vector4f[0]), normals.toArray(new Vector4f[0]), idxArr, attachments, color);
} else {
- return new TextureMesh(vertices.toArray(new Vector3f[0]), normals.toArray(new Vector3f[0]), idxArr, attachments, texture, texCoords.toArray(new Vector2f[0]));
+ return new TextureMesh(vertices.toArray(new Vector4f[0]), normals.toArray(new Vector4f[0]), idxArr, attachments, texture, texCoords.toArray(new Vector2f[0]));
}
}
}
@@ -109,7 +109,7 @@ public abstract class Mesh<T> implements Sampleable<T> {
private static class ColorMesh extends Mesh<Void> {
int color;
- ColorMesh(Vector3f[] vertices, Vector3f[] normals, int[] indices, Map<AttachmentType, Object> attachments, int color) {
+ ColorMesh(Vector4f[] vertices, Vector4f[] normals, int[] indices, Map<AttachmentType, Object> attachments, int color) {
super(vertices, normals, indices, attachments);
this.color = color;
}
@@ -120,7 +120,7 @@ public abstract class Mesh<T> implements Sampleable<T> {
}
@Override
- public void sample(float b0, float b1, float b2, Vector3f normal, Void u1, Void u2, Void u3, Vector4f outColor) {
+ public void sample(float b0, float b1, float b2, Vector4f normal, Void u1, Void u2, Void u3, Vector4f outColor) {
applyLighting(outColor.fromARGB(color), normal);
}
}
@@ -129,7 +129,7 @@ public abstract class Mesh<T> implements Sampleable<T> {
Texture texture;
Vector2f[] texCoords;
- TextureMesh(Vector3f[] vertices, Vector3f[] normals, int[] indices, Map<AttachmentType, Object> attachments, Texture tex, Vector2f[] texCoords) {
+ TextureMesh(Vector4f[] vertices, Vector4f[] normals, int[] indices, Map<AttachmentType, Object> attachments, Texture tex, Vector2f[] texCoords) {
super(vertices, normals, indices, attachments);
this.texture = tex;
this.texCoords = texCoords;
@@ -141,7 +141,7 @@ public abstract class Mesh<T> implements Sampleable<T> {
}
@Override
- public void sample(float b0, float b1, float b2, Vector3f normal, Vector2f tc1, Vector2f tc2, Vector2f tc3, Vector4f color) {
+ public void sample(float b0, float b1, float b2, Vector4f normal, Vector2f tc1, Vector2f tc2, Vector2f tc3, Vector4f color) {
float texX = b0 * tc1.x + b1 * tc2.x + b2 * tc3.x;
float texY = b0 * tc1.y + b1 * tc2.y + b2 * tc3.y;
@@ -154,6 +154,6 @@ public abstract class Mesh<T> implements Sampleable<T> {
public enum AttachmentType {
LIGHT_FACTOR, // float
- LIGHT_VECTOR // Vector3f
+ LIGHT_VECTOR // Vector4f
}
}
diff --git a/src/main/java/dev/figboot/cuberender/state/Sampleable.java b/src/main/java/dev/figboot/cuberender/state/Sampleable.java
index 876a248..7b7ad7d 100644
--- a/src/main/java/dev/figboot/cuberender/state/Sampleable.java
+++ b/src/main/java/dev/figboot/cuberender/state/Sampleable.java
@@ -6,5 +6,5 @@ import dev.figboot.cuberender.math.Vector4f;
public interface Sampleable<T> {
T extra(int idx);
- void sample(float b0, float b1, float b2, Vector3f normal, T e1, T e2, T e3, Vector4f target);
+ void sample(float b0, float b1, float b2, Vector4f normal, T e1, T e2, T e3, Vector4f outColor);
}