Small changes
This commit is contained in:
parent
903f3f6155
commit
500083d062
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user