Small Progress on the Renderer
This commit is contained in:
@@ -26,7 +26,7 @@ public interface IUIRenderer {
|
||||
void alignH(Align align);
|
||||
|
||||
void pushLayer(LayerType type);
|
||||
void popLayer();
|
||||
void popLayer(LayerType type);
|
||||
|
||||
|
||||
void drawLine(float startX, float startY, float endX, float endY, float lineWidth, int color);
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package speiger.src.coreengine.ui.gui.renderer;
|
||||
|
||||
public enum LayerType {
|
||||
COMPONENT,
|
||||
COMPONENT_STACK,
|
||||
WINDOW;
|
||||
}
|
||||
@@ -2,12 +2,19 @@ package speiger.src.coreengine.ui.gui.renderer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
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.utils.Stack;
|
||||
import speiger.src.coreengine.math.MathUtils;
|
||||
import speiger.src.coreengine.math.bits.BitUtil;
|
||||
import speiger.src.coreengine.math.vector.matrix.Matrix4fStack;
|
||||
import speiger.src.coreengine.math.vector.quaternion.Quaternion;
|
||||
import speiger.src.coreengine.platform.graphics.api.core.GraphicsDevice;
|
||||
import speiger.src.coreengine.platform.graphics.api.shader.ShaderPipeline;
|
||||
import speiger.src.coreengine.platform.graphics.api.utils.SampledTexture;
|
||||
import speiger.src.coreengine.platform.graphics.api.utils.ScissorsManager;
|
||||
import speiger.src.coreengine.platform.graphics.api.utils.ScissorsManager.IScissorsHandler;
|
||||
import speiger.src.coreengine.platform.graphics.api.vertex.builder.IVertexBuffer.BufferResult;
|
||||
import speiger.src.coreengine.platform.graphics.api.vertex.builder.IVertexBuilder;
|
||||
import speiger.src.coreengine.platform.graphics.api.vertex.builder.VertexBuilder;
|
||||
@@ -21,8 +28,12 @@ public class UIRenderer implements IUIRenderer {
|
||||
VertexBuilder builder = new VertexBuilder(100);
|
||||
List<UIDraw> draws = new ObjectArrayList<>();
|
||||
Align[] alignment = new Align[] { Align.CENTER, Align.CENTER };
|
||||
Stack<WindowLayer> layers = new ObjectArrayList<>();
|
||||
int windowLayer = 1;
|
||||
int currentComponent = 0;
|
||||
ShaderPipeline currentPipeline;
|
||||
SampledTexture currentTexture;
|
||||
ScissorsManager clippingManager = new ScissorsManager(64, ScissorsManager.NoOp.INSTANCE);
|
||||
|
||||
public UIRenderer(GraphicsDevice device) {
|
||||
this.device = device;
|
||||
@@ -30,17 +41,17 @@ public class UIRenderer implements IUIRenderer {
|
||||
|
||||
@Override
|
||||
public boolean isClipping(IGuiBox box) {
|
||||
return false;
|
||||
return clippingManager.contains(Math.round(box.getMinX()), Math.round(box.getMinY()), Math.round(box.getWidth()), Math.round(box.getHeight()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pushClip(IGuiBox box) {
|
||||
|
||||
clippingManager.push(Math.round(box.getMinX()), Math.round(box.getMinY()), Math.round(box.getWidth()), Math.round(box.getHeight()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void popClip() {
|
||||
|
||||
clippingManager.pop();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -96,14 +107,44 @@ public class UIRenderer implements IUIRenderer {
|
||||
|
||||
@Override
|
||||
public void pushLayer(LayerType type) {
|
||||
|
||||
switch(type) {
|
||||
case WINDOW:
|
||||
layers.push(new WindowLayer(windowLayer++));
|
||||
break;
|
||||
case COMPONENT_STACK:
|
||||
if(layers.isEmpty()) return;
|
||||
layers.top().push();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void popLayer() {
|
||||
|
||||
public void popLayer(LayerType type) {
|
||||
switch(type) {
|
||||
case WINDOW:
|
||||
layers.pop();
|
||||
break;
|
||||
case COMPONENT_STACK:
|
||||
if(layers.isEmpty()) return;
|
||||
layers.top().pop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Idea:
|
||||
* public class DrawObject {
|
||||
* int windowLayer;
|
||||
* int componentLayer;
|
||||
* ShaderPipeline pipeline;
|
||||
* Int2ObjectMap<SampledTexture> textures;
|
||||
* vec4 scissors;
|
||||
* byte[] vertexData;
|
||||
* }
|
||||
*
|
||||
* We pregenerate the draw call
|
||||
*/
|
||||
|
||||
@Override
|
||||
public void drawLine(float startX, float startY, float endX, float endY, float lineWidth, int color) {
|
||||
ensureType(UIConstants.GUI, null);
|
||||
@@ -212,4 +253,25 @@ public class UIRenderer implements IUIRenderer {
|
||||
}
|
||||
|
||||
protected record UIDraw(ShaderPipeline pipeline, SampledTexture texture, BufferResult result) {}
|
||||
|
||||
private class WindowLayer {
|
||||
final int layer;
|
||||
IntStack stack = new IntArrayList();
|
||||
int currentLayer = 1;
|
||||
public WindowLayer(int layer) {
|
||||
this.layer = layer;
|
||||
}
|
||||
|
||||
private void push() {
|
||||
stack.push(currentLayer++);
|
||||
}
|
||||
|
||||
private void pop() {
|
||||
stack.pop();
|
||||
}
|
||||
|
||||
public int currentLayer() {
|
||||
return BitUtil.toInt(layer, stack.isEmpty() ? 0 : stack.top());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user