diff --git a/build.gradle b/build.gradle index 71adff2..ae23f2b 100644 --- a/build.gradle +++ b/build.gradle @@ -66,5 +66,5 @@ dependencies { compile 'com.google.code.gson:gson:2.8.6' //Primitive Collections - compile 'de.speiger:Primitive-Collections:0.4.1' + compile 'de.speiger:Primitive-Collections:0.4.3' } \ No newline at end of file diff --git a/src/main/java/speiger/src/coreengine/math/MathUtils.java b/src/main/java/speiger/src/coreengine/math/MathUtils.java index 9751414..a12670b 100644 --- a/src/main/java/speiger/src/coreengine/math/MathUtils.java +++ b/src/main/java/speiger/src/coreengine/math/MathUtils.java @@ -88,6 +88,11 @@ public class MathUtils return value > 0 ? 1D : (value < 0 ? -1D : 0D); } + public static int sub(int key, int value) + { + return key - value; + } + public static int ceil(double value) { int i = (int)value; diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/components/PieComponent.java b/src/main/java/speiger/src/coreengine/rendering/gui/components/PieComponent.java index f09b149..900c889 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/components/PieComponent.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/components/PieComponent.java @@ -11,6 +11,7 @@ import speiger.src.coreengine.rendering.gui.GuiComponent; import speiger.src.coreengine.rendering.gui.renderer.buffer.RenderBuffer; import speiger.src.coreengine.rendering.tesselation.Tesselator; import speiger.src.coreengine.rendering.tesselation.VertexType; +import speiger.src.coreengine.rendering.utils.GLUtils; public class PieComponent extends GuiComponent { @@ -76,7 +77,11 @@ public class PieComponent extends GuiComponent { float centerX = getBox().getCenterX(); float centerY = getBox().getCenterY(); - getRenderer().setBrightness(getActiveBrightness()).translate(centerX, centerY).drawBuffers(buffer, 0F, 0F).translate(-centerX, -centerY).setBrightness(1F); + getRenderer().setBrightness(getActiveBrightness()).translate(centerX, centerY).flush(); + GLUtils.DEBTH_TEST.push(true); + getRenderer().drawBuffers(buffer, 0F, 0F).flush(); + GLUtils.DEBTH_TEST.pop(); + getRenderer().translate(-centerX, -centerY).setBrightness(1F); return true; } diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/components/TreeComponent.java b/src/main/java/speiger/src/coreengine/rendering/gui/components/TreeComponent.java index 530d9f3..3020a7a 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/components/TreeComponent.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/components/TreeComponent.java @@ -48,8 +48,8 @@ public class TreeComponent extends GuiComponent implements int movement; Vec2i lastMouse = Vec2i.newMutable(); IButtonComponent customButton; - protected ObjectSet openNodes = new ObjectOpenHashSet(); - protected ObjectSet selectedNodes = new ObjectOpenHashSet(); + protected ObjectSet openNodes = new ObjectOpenHashSet<>(); + protected ObjectSet selectedNodes = new ObjectOpenHashSet<>(); protected int selectionMode = 1; protected int updateMode = 1; T node; @@ -304,11 +304,16 @@ public class TreeComponent extends GuiComponent implements } public void openNode(T entry, boolean childrenIncluded) + { + openNode(entry, childrenIncluded, Integer.MAX_VALUE); + } + + public void openNode(T entry, boolean childrenIncluded, int maxLayers) { openNodes.add(entry); if(childrenIncluded) { - getNodes(entry, openNodes, false); + getNodes(entry, openNodes, false, maxLayers); } listChange = true; updateScrollBar(); @@ -659,6 +664,22 @@ public class TreeComponent extends GuiComponent implements return MathUtils.clamp(0, visibleNodes.size(), MathUtils.ceil((getBox().getBaseHeight() - (horizontalBar.getRequiredSpace() / getBox().getScale())) / entryHeight) + 1); } + protected void getNodes(T entry, Collection collection, boolean openOnly, int layers) + { + if(entry != null && layers >= 0) + { + collection.add(entry); + if(!entry.isLeaf() && (!openOnly || openNodes.contains(entry))) + { + for(int i = 0,m=entry.getChildCount();i collection, boolean openOnly) { if(entry != null) diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/components/list/TextEntry.java b/src/main/java/speiger/src/coreengine/rendering/gui/components/list/TextListEntry.java similarity index 80% rename from src/main/java/speiger/src/coreengine/rendering/gui/components/list/TextEntry.java rename to src/main/java/speiger/src/coreengine/rendering/gui/components/list/TextListEntry.java index b5c861c..ef045a0 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/components/list/TextEntry.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/components/list/TextListEntry.java @@ -3,16 +3,16 @@ package speiger.src.coreengine.rendering.gui.components.list; import speiger.src.coreengine.rendering.gui.components.TextComponent; import speiger.src.coreengine.rendering.gui.helper.Align; -public class TextEntry extends BaseListEntry +public class TextListEntry extends BaseListEntry { TextComponent text = addComponent(new TextComponent().setLimitedBounds(false).setAlignment(Align.LEFT_TOP, Align.LEFT_TOP).setSpecialRendering(true).setComponentPosition(0F, 0F).cast()); - public TextEntry(String s) + public TextListEntry(String s) { text.setText(s); } - public TextEntry setScale(float scale) + public TextListEntry setScale(float scale) { text.setTextScale(scale); return this; diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/components/special/ConsoleComponent.java b/src/main/java/speiger/src/coreengine/rendering/gui/components/special/ConsoleComponent.java index 0421182..178b981 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/components/special/ConsoleComponent.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/components/special/ConsoleComponent.java @@ -12,7 +12,7 @@ import speiger.src.coreengine.rendering.gui.base.IKeyComponent; import speiger.src.coreengine.rendering.gui.components.ListComponent; import speiger.src.coreengine.rendering.gui.components.ScrollBarComponent; import speiger.src.coreengine.rendering.gui.components.TextFieldComponent; -import speiger.src.coreengine.rendering.gui.components.list.TextEntry; +import speiger.src.coreengine.rendering.gui.components.list.TextListEntry; import speiger.src.coreengine.rendering.gui.helper.constrains.ComponentConstrains; import speiger.src.coreengine.rendering.gui.helper.constrains.ParentConstrain; import speiger.src.coreengine.rendering.gui.helper.constrains.PixelConstrain; @@ -204,7 +204,7 @@ public class ConsoleComponent extends GuiComponent implements IKeyComponent } } - private static class MessageEntry extends TextEntry + private static class MessageEntry extends TextListEntry { int messageId; diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/components/tree/TextTreeEntry.java b/src/main/java/speiger/src/coreengine/rendering/gui/components/tree/TextTreeEntry.java new file mode 100644 index 0000000..c8d6cb9 --- /dev/null +++ b/src/main/java/speiger/src/coreengine/rendering/gui/components/tree/TextTreeEntry.java @@ -0,0 +1,26 @@ + +package speiger.src.coreengine.rendering.gui.components.tree; + +import speiger.src.coreengine.rendering.gui.components.TextComponent; +import speiger.src.coreengine.rendering.gui.helper.Align; + +public class TextTreeEntry extends BaseTreeEntry +{ + TextComponent text = addComponent(new TextComponent().setLimitedBounds(false).setAlignment(Align.LEFT_TOP, Align.LEFT_TOP).setSpecialRendering(true).setComponentPosition(0F, 0F).cast()); + + public TextTreeEntry(String s) + { + text.setText(s); + } + + public TextTreeEntry setScale(float scale) + { + text.setTextScale(scale); + return this; + } + + public String getText() + { + return text.getText(); + } +} diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/helper/constrains/Constraints.java b/src/main/java/speiger/src/coreengine/rendering/gui/helper/constrains/Constraints.java index cef0d73..5d62a82 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/helper/constrains/Constraints.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/helper/constrains/Constraints.java @@ -37,13 +37,18 @@ public class Constraints } public static ComponentConstrains getSideConstraint(float size, Facing side) + { + return getSideConstraint(size, side, 0F); + } + + public static ComponentConstrains getSideConstraint(float size, Facing side, float offset) { switch(side) { - case NORTH: return new ComponentConstrains(new ParentConstrain(), new ParentConstrain(), new ParentConstrain(), new PixelConstrain(size)); - case EAST: return new ComponentConstrains(new ParentConstrain(size).invert(), new ParentConstrain(), new PixelConstrain(size), new ParentConstrain()); - case SOUTH: return new ComponentConstrains(new ParentConstrain(), new ParentConstrain(size).invert(), new ParentConstrain(), new PixelConstrain(size)); - case WEST: return new ComponentConstrains(new ParentConstrain(), new ParentConstrain(), new PixelConstrain(size), new ParentConstrain()); + case NORTH: return new ComponentConstrains(new ParentConstrain(), new ParentConstrain(offset), new ParentConstrain(), new PixelConstrain(size)); + case EAST: return new ComponentConstrains(new ParentConstrain(size+offset).invert(), new ParentConstrain(), new PixelConstrain(size), new ParentConstrain()); + case SOUTH: return new ComponentConstrains(new ParentConstrain(), new ParentConstrain(size+offset).invert(), new ParentConstrain(), new PixelConstrain(size)); + case WEST: return new ComponentConstrains(new ParentConstrain(offset), new ParentConstrain(), new PixelConstrain(size), new ParentConstrain()); default: return null; } } diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/FontRenderer.java b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/FontRenderer.java index 1fa633d..9281e9a 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/FontRenderer.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/FontRenderer.java @@ -107,7 +107,7 @@ public class FontRenderer implements IFontRenderer bufferBuilder.finishData(); if(bufferBuilder.getVertexCount() > 0) { - drawCalls.add(bufferBuilder.getDrawCall(getTexture().getTextureID())); + drawCalls.add(bufferBuilder.getDrawCall(getTexture().getTextureId())); } bufferBuilder.setOffset(0F, 0F, 0F); return drawCalls; @@ -192,7 +192,7 @@ public class FontRenderer implements IFontRenderer component.getMetadata().addLine(lines.get(i)); } maxWidth /= 2; - buffer.finishShape(getTexture().getTextureID(), bufferBuilder); + buffer.finishShape(getTexture().getTextureId(), bufferBuilder); if(lineBuffer.hasData()) { Tesselator tes = buffer.start(GL11.GL_TRIANGLES, VertexType.UI).offset(0F, 0F, 0.001F); diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/UIRenderer.java b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/UIRenderer.java index cee5f9a..da47013 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/UIRenderer.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/UIRenderer.java @@ -707,6 +707,6 @@ public class UIRenderer implements IReloadableResource private int getTextureId(ITexture texture) { - return texture == null ? 0 : texture.getTextureID(); + return texture == null ? 0 : texture.getTextureId(); } } diff --git a/src/main/java/speiger/src/coreengine/rendering/models/loader/MergedModelData.java b/src/main/java/speiger/src/coreengine/rendering/models/loader/MergedModelData.java index f3bc9bf..ace6df7 100644 --- a/src/main/java/speiger/src/coreengine/rendering/models/loader/MergedModelData.java +++ b/src/main/java/speiger/src/coreengine/rendering/models/loader/MergedModelData.java @@ -34,7 +34,6 @@ public class MergedModelData extends SimpleModelData public static MergedModelData merge(String newName, int vertexBytes, List data) { - System.out.println("Test: "+data.size()+", Name="+newName); ByteList byteData = new ByteArrayList(); IntList indeciesData = new IntArrayList(); int[] offsets = new int[data.size() * 2]; diff --git a/src/main/java/speiger/src/coreengine/rendering/shader/uniforms/UniformTexture.java b/src/main/java/speiger/src/coreengine/rendering/shader/uniforms/UniformTexture.java index a054473..4cd8da2 100644 --- a/src/main/java/speiger/src/coreengine/rendering/shader/uniforms/UniformTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/shader/uniforms/UniformTexture.java @@ -34,7 +34,7 @@ public class UniformTexture extends UniformInt disable(); return; } - storeTexture(textureID.getTextureID()); + storeTexture(textureID.getTextureId()); } public void disable() diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/base/AbstractTexture.java b/src/main/java/speiger/src/coreengine/rendering/textures/base/AbstractTexture.java index fd9da64..4979faf 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/base/AbstractTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/textures/base/AbstractTexture.java @@ -17,7 +17,7 @@ public abstract class AbstractTexture implements ITexture } @Override - public int getTextureID() + public int getTextureId() { return textureID; } diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/base/ITexture.java b/src/main/java/speiger/src/coreengine/rendering/textures/base/ITexture.java index cc6d47d..901e443 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/base/ITexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/textures/base/ITexture.java @@ -12,7 +12,7 @@ import speiger.src.coreengine.rendering.textures.stb.STBTexture; public interface ITexture extends IReloadableResource { - public int getTextureID(); + public int getTextureId(); public void bindTexture(); public void deleteTexture(); diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/base/TextureManager.java b/src/main/java/speiger/src/coreengine/rendering/textures/base/TextureManager.java index 3921287..3020c68 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/base/TextureManager.java +++ b/src/main/java/speiger/src/coreengine/rendering/textures/base/TextureManager.java @@ -51,7 +51,7 @@ public class TextureManager implements IReloadableResource { if(texture != null) { - GL11.glDeleteTextures(texture.getTextureID()); + GL11.glDeleteTextures(texture.getTextureId()); reloader.removeReloadableResource(texture); } } diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/base/WrappedTexture.java b/src/main/java/speiger/src/coreengine/rendering/textures/base/WrappedTexture.java index 7771703..a58ee9a 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/base/WrappedTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/textures/base/WrappedTexture.java @@ -21,7 +21,7 @@ public class WrappedTexture implements ITexture } @Override - public int getTextureID() + public int getTextureId() { return textureId; } diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/normal/DynamicTexture.java b/src/main/java/speiger/src/coreengine/rendering/textures/normal/DynamicTexture.java index e91bfde..ae1bd93 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/normal/DynamicTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/textures/normal/DynamicTexture.java @@ -3,6 +3,8 @@ package speiger.src.coreengine.rendering.textures.normal; import java.nio.ByteBuffer; import java.util.Arrays; import java.util.Iterator; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; import org.lwjgl.opengl.GL11; import org.lwjgl.system.MemoryStack; @@ -29,6 +31,7 @@ public class DynamicTexture extends AbstractTexture implements IDynamicTexture public static final int B = 0xFF; public static final int A = 0xFF << 24; Int2ObjectMap dirtyChunks = new Int2ObjectLinkedOpenHashMap(); + Lock lock = new ReentrantLock(); int[] data; int width; int height; @@ -56,6 +59,7 @@ public class DynamicTexture extends AbstractTexture implements IDynamicTexture @Override public void markDirty(int x, int z) { + lock.lock(); int chunkIndex = BitUtil.toInt(x >> 4, z >> 4); IntSet set = dirtyChunks.get(chunkIndex); if(set == null) @@ -64,6 +68,7 @@ public class DynamicTexture extends AbstractTexture implements IDynamicTexture dirtyChunks.put(chunkIndex, set); } set.add((x & 15) << 4 | (z & 15)); + lock.unlock(); } @Override @@ -144,6 +149,7 @@ public class DynamicTexture extends AbstractTexture implements IDynamicTexture @Override public void processChanges(boolean full) { + lock.lock(); if(full) { ByteBuffer buffer = MemoryUtil.memAlloc(data.length * 4); @@ -206,12 +212,13 @@ public class DynamicTexture extends AbstractTexture implements IDynamicTexture { ((ITrimmable)dirtyChunks).trim(); } + lock.unlock(); } @Override public void reload() { - int old = getTextureID(); + int old = getTextureId(); setTextureID(GL11.glGenTextures()); TextureManager.INSTANCE.removeTexture(old); processChanges(true); diff --git a/src/main/java/speiger/src/coreengine/utils/profiler/GPUProfilerEntry.java b/src/main/java/speiger/src/coreengine/utils/profiler/GPUProfilerEntry.java index 4aa513b..1a16fd9 100644 --- a/src/main/java/speiger/src/coreengine/utils/profiler/GPUProfilerEntry.java +++ b/src/main/java/speiger/src/coreengine/utils/profiler/GPUProfilerEntry.java @@ -83,8 +83,8 @@ public class GPUProfilerEntry implements IProfilerEntry currentTime = 0; if(end && totalTicks++ >= 10) { - minTime = Long.MAX_VALUE; - maxTime = Long.MIN_VALUE; + minTime = currentTime; + maxTime = currentTime; totalTicks = 0; } } diff --git a/src/main/java/speiger/src/coreengine/utils/profiler/ProfilerEntry.java b/src/main/java/speiger/src/coreengine/utils/profiler/ProfilerEntry.java index 1ff5e32..3da21aa 100644 --- a/src/main/java/speiger/src/coreengine/utils/profiler/ProfilerEntry.java +++ b/src/main/java/speiger/src/coreengine/utils/profiler/ProfilerEntry.java @@ -84,8 +84,8 @@ public class ProfilerEntry implements IProfilerEntry currentTime = 0; if(end && totalTicks++ >= 10) { - minTime = Long.MAX_VALUE; - maxTime = Long.MIN_VALUE; + minTime = currentTime; + maxTime = currentTime; totalTicks = 0; } }