Small changes

This commit is contained in:
Comgstar 2025-04-16 20:23:03 +02:00
parent 903f3f6155
commit 500083d062
4 changed files with 94 additions and 40 deletions

View File

@ -525,36 +525,48 @@ public class Matrix4f {
public Matrix4f scale(float value) { return scale(value, value, value); } public Matrix4f scale(float value) { return scale(value, value, value); }
public Matrix4f scale(float x, float y, float z) { public Matrix4f scale(float x, float y, float z) {
if(x != 1F) {
data[M00] *= x; data[M00] *= x;
data[M01] *= x; data[M01] *= x;
data[M02] *= x; data[M02] *= x;
data[M03] *= x; data[M03] *= x;
}
if(y != 1F) {
data[M10] *= y; data[M10] *= y;
data[M11] *= y; data[M11] *= y;
data[M12] *= y; data[M12] *= y;
data[M13] *= y; data[M13] *= y;
}
if(z != 1F) {
data[M20] *= z; data[M20] *= z;
data[M21] *= z; data[M21] *= z;
data[M22] *= z; data[M22] *= z;
data[M23] *= z; data[M23] *= z;
}
return evaluateProps(); return evaluateProps();
} }
public Matrix4f unscale(float scale) { return unscale(scale, scale, scale); } public Matrix4f unscale(float scale) { return unscale(scale, scale, scale); }
public Matrix4f unscale(float x, float y, float z) { public Matrix4f unscale(float x, float y, float z) {
if(x != 1F) {
data[M00] /= x; data[M00] /= x;
data[M01] /= x; data[M01] /= x;
data[M02] /= x; data[M02] /= x;
data[M03] /= x; data[M03] /= x;
}
if(y != 1F) {
data[M10] /= y; data[M10] /= y;
data[M11] /= y; data[M11] /= y;
data[M12] /= y; data[M12] /= y;
data[M13] /= y; data[M13] /= y;
}
if(z != 1F) {
data[M20] /= z; data[M20] /= z;
data[M21] /= z; data[M21] /= z;
data[M22] /= z; data[M22] /= z;
data[M23] /= z; data[M23] /= z;
}
return evaluateProps(); return evaluateProps();
} }

View File

@ -6,8 +6,10 @@ import speiger.src.collections.utils.Stack;
public class Matrix4fStack extends Matrix4f { public class Matrix4fStack extends Matrix4f {
Stack<Matrix4f> stack = new ObjectArrayList<>(); Stack<Matrix4f> stack = new ObjectArrayList<>();
public void push() { public Matrix4f push() {
stack.push(new Matrix4f(this)); Matrix4f matrix = new Matrix4f(this);
stack.push(matrix);
return matrix;
} }
public void pop() { public void pop() {
@ -17,4 +19,8 @@ public class Matrix4fStack extends Matrix4f {
public int size() { public int size() {
return stack.size(); return stack.size();
} }
public Matrix4f copyCurrent() {
return new Matrix4f(this);
}
} }

View File

@ -1,18 +1,37 @@
package speiger.src.coreengine.rendering.gui.renderer; package speiger.src.coreengine.rendering.gui.renderer;
import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
import speiger.src.collections.ints.collections.IntStack;
import speiger.src.collections.ints.lists.IntArrayList;
import speiger.src.collections.objects.lists.ObjectArrayList; import speiger.src.collections.objects.lists.ObjectArrayList;
import speiger.src.collections.utils.Stack; import speiger.src.collections.utils.Stack;
import speiger.src.coreengine.math.misc.Facing; import speiger.src.coreengine.math.misc.Facing;
import speiger.src.coreengine.math.vector.matrix.Matrix4f; import speiger.src.coreengine.math.vector.matrix.Matrix4f;
import speiger.src.coreengine.math.vector.matrix.Matrix4fStack;
import speiger.src.coreengine.math.vector.quaternion.Quaternion; import speiger.src.coreengine.math.vector.quaternion.Quaternion;
import speiger.src.coreengine.rendering.guiOld.helper.box.IGuiBox; import speiger.src.coreengine.rendering.guiOld.helper.box.IGuiBox;
import speiger.src.coreengine.rendering.models.DrawCall; import speiger.src.coreengine.rendering.models.DrawCall;
import speiger.src.coreengine.rendering.tesselation.GLCall;
import speiger.src.coreengine.rendering.tesselation.buffer.VertexBuilder;
public class SimpleUIRenderer implements IUIRenderer { public class SimpleUIRenderer implements IUIRenderer, AutoCloseable {
TexturedRect cachedRect = new TexturedRect(); TexturedRect cachedRect = new TexturedRect();
Stack<Matrix4f> transformCache = ObjectArrayList.wrap(new Matrix4f()); Matrix4fStack transform = new Matrix4fStack();
List<Matrix4f> transformCache = new ObjectArrayList<>();
IntStack indexCache = new IntArrayList();
boolean matrixChanged = false;
List<GLCall> drawCalls = new ObjectArrayList<>();
Stack<GLCall> cache = new ObjectArrayList<>();
VertexBuilder builder = new VertexBuilder(Short.MAX_VALUE);
@Override
public void close() throws Exception {
builder.close();
}
@Override @Override
public boolean isInScissors(IGuiBox box) { public boolean isInScissors(IGuiBox box) {
@ -39,42 +58,52 @@ public class SimpleUIRenderer implements IUIRenderer {
@Override @Override
public void pushTransform() { public void pushTransform() {
transformCache.push(new Matrix4f(transformCache.top())); transform.push();
} }
@Override @Override
public void popTransform() { public void popTransform() {
transform.pop();
if(transform.size() > indexCache.size()) {
indexCache.pop();
}
} }
@Override @Override
public void translate(float z) { public void translate(float z) {
transform.translate(0, 0, z);
matrixChanged = true;
} }
@Override @Override
public void translate(float x, float y) { public void translate(float x, float y) {
transform.translate(x, y);
matrixChanged = true;
} }
@Override @Override
public void translate(float x, float y, float z) { public void translate(float x, float y, float z) {
transform.translate(x, y, z);
matrixChanged = true;
} }
@Override @Override
public void scale(float scale) { public void scale(float scale) {
transform.scale(scale);
matrixChanged = true;
} }
@Override @Override
public void scale(float x, float y) { public void scale(float x, float y) {
transform.scale(x, y, 1F);
matrixChanged = true;
} }
@Override @Override
public void rotate(Quaternion rotation) { public void rotate(Quaternion rotation) {
transform.rotate(rotation);
matrixChanged = true;
} }
@Override @Override

View File

@ -11,7 +11,7 @@ import speiger.src.coreengine.rendering.tesselation.format.VertexElement;
import speiger.src.coreengine.rendering.tesselation.format.VertexFormat; import speiger.src.coreengine.rendering.tesselation.format.VertexFormat;
import speiger.src.coreengine.rendering.utils.values.GLMode; import speiger.src.coreengine.rendering.utils.values.GLMode;
public class VertexBuilder implements IVertexBuilder { public class VertexBuilder implements IVertexBuilder, AutoCloseable {
GLMode mode; GLMode mode;
ByteBuffer buffer; ByteBuffer buffer;
VertexFormat format; VertexFormat format;
@ -43,10 +43,17 @@ public class VertexBuilder implements IVertexBuilder {
} }
private void ensureCapacity(int newValue) { private void ensureCapacity(int newValue) {
if(buffer.isDirect() && totalStoredBytes + newValue >= buffer.capacity()) { if(totalStoredBytes + newValue >= buffer.capacity()) {
int oldSize = buffer.capacity(); int oldSize = buffer.capacity();
int newSize = Math.max(oldSize + (oldSize >> 1), oldSize + newValue); int newSize = Math.max(oldSize + (oldSize >> 1), oldSize + newValue);
buffer = MemoryUtil.memRealloc(buffer, newSize); //TODO that if the old buffer gets deallocated if(buffer.isDirect()) {
buffer = MemoryUtil.memRealloc(buffer, newSize);
}
else {
ByteBuffer newBuffer = ByteBuffer.allocate(newSize);
newBuffer.put(buffer).position(0);
buffer = newBuffer;
}
} }
} }
@ -141,7 +148,7 @@ public class VertexBuilder implements IVertexBuilder {
} }
public VertexBuilder copy(ByteBuffer buffer) { public VertexBuilder copy(ByteBuffer buffer) {
buffer.put(buffer.position(), this.buffer, 0, this.buffer.position()); buffer.put(buffer.position(), this.buffer, 0, totalStoredBytes);
return this; return this;
} }