From e1d827223dcf23fb12c5b76e43c215d4944394d3 Mon Sep 17 00:00:00 2001 From: Speiger Date: Wed, 3 Apr 2024 21:14:02 +0200 Subject: [PATCH] Start of engine rewrite --- .../coreengine/application/Application.java | 2 +- .../coreengine/rendering/gui/UITextures.java | 2 +- .../gui/components/IconComponent.java | 2 +- .../gui/components/icon/TexturedIcon.java | 2 +- .../rendering/gui/helper/FontBuilder.java | 10 +-- .../rendering/gui/renderer/FontRenderer.java | 2 +- .../rendering/gui/renderer/IFontRenderer.java | 2 +- .../rendering/gui/renderer/UIRenderer.java | 4 +- .../renderer/provider/BitmapFontProvider.java | 4 +- .../gui/renderer/provider/IFontProvider.java | 2 +- .../models/frameBuffer/TextureAttachment.java | 2 +- .../newGui/components/base/GuiComponent.java | 3 +- .../newGui/renderer/IUIRenderer.java | 15 ++++ .../rendering/shader/ShaderTracker.java | 2 +- .../shaderOld/uniforms/UniformTexture.java | 4 +- .../tesselation/buffer/IVertexBuilder.java | 2 + .../tesselation/buffer/VertexBuilder.java | 3 + .../rendering/textures/base/BaseTexture.java | 76 +++++++++++++++++++ .../rendering/textures/base/ITexture.java | 62 +++------------ .../textures/base/TextureTracker.java | 55 ++++++++++++++ .../atlas/AtlasStitcher.java | 18 ++--- .../base/AbstractTexture.java | 2 +- .../rendering/texturesOld/base/ITexture.java | 56 ++++++++++++++ .../base/NativeMemoryParser.java | 2 +- .../base/TextureManager.java | 2 +- .../base/WrappedTexture.java | 2 +- .../custom/IDynamicTexture.java | 4 +- .../custom/TextureAtlas.java | 2 +- .../normal/DirectTexture.java | 6 +- .../normal/DynamicTexture.java | 8 +- .../normal/SimpleTexture.java | 6 +- .../stb/STBDirectTexture.java | 6 +- .../stb/STBTexture.java | 8 +- .../coreengine/rendering/utils/Cursor.java | 2 +- .../coreengine/rendering/utils/GLStamper.java | 16 ++-- .../rendering/utils/GLStateTracker.java | 11 ++- 36 files changed, 287 insertions(+), 120 deletions(-) create mode 100644 src/main/java/speiger/src/coreengine/rendering/textures/base/BaseTexture.java create mode 100644 src/main/java/speiger/src/coreengine/rendering/textures/base/TextureTracker.java rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/atlas/AtlasStitcher.java (93%) rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/base/AbstractTexture.java (93%) create mode 100644 src/main/java/speiger/src/coreengine/rendering/texturesOld/base/ITexture.java rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/base/NativeMemoryParser.java (91%) rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/base/TextureManager.java (98%) rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/base/WrappedTexture.java (93%) rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/custom/IDynamicTexture.java (93%) rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/custom/TextureAtlas.java (99%) rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/normal/DirectTexture.java (92%) rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/normal/DynamicTexture.java (95%) rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/normal/SimpleTexture.java (91%) rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/stb/STBDirectTexture.java (92%) rename src/main/java/speiger/src/coreengine/rendering/{textures => texturesOld}/stb/STBTexture.java (89%) diff --git a/src/main/java/speiger/src/coreengine/application/Application.java b/src/main/java/speiger/src/coreengine/application/Application.java index af5c8f8..9a68051 100644 --- a/src/main/java/speiger/src/coreengine/application/Application.java +++ b/src/main/java/speiger/src/coreengine/application/Application.java @@ -22,7 +22,7 @@ import speiger.src.coreengine.rendering.input.window.Window; import speiger.src.coreengine.rendering.input.window.WindowProvider; import speiger.src.coreengine.rendering.shaderOld.ProjectionBuffer; import speiger.src.coreengine.rendering.shaderOld.ShaderTracker; -import speiger.src.coreengine.rendering.textures.base.TextureManager; +import speiger.src.coreengine.rendering.texturesOld.base.TextureManager; import speiger.src.coreengine.rendering.utils.Cursor; import speiger.src.coreengine.utils.counters.timers.FPSTimer; import speiger.src.coreengine.utils.eventbus.EventBus; diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/UITextures.java b/src/main/java/speiger/src/coreengine/rendering/gui/UITextures.java index c389a83..73406b2 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/UITextures.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/UITextures.java @@ -1,7 +1,7 @@ package speiger.src.coreengine.rendering.gui; import speiger.src.coreengine.assets.AssetLocation; -import speiger.src.coreengine.rendering.textures.base.ITexture; +import speiger.src.coreengine.rendering.texturesOld.base.ITexture; public class UITextures { diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/components/IconComponent.java b/src/main/java/speiger/src/coreengine/rendering/gui/components/IconComponent.java index c6c2942..f11e398 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/components/IconComponent.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/components/IconComponent.java @@ -1,7 +1,7 @@ package speiger.src.coreengine.rendering.gui.components; import speiger.src.coreengine.rendering.gui.GuiComponent; -import speiger.src.coreengine.rendering.textures.base.ITexture; +import speiger.src.coreengine.rendering.texturesOld.base.ITexture; public class IconComponent extends GuiComponent { diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/components/icon/TexturedIcon.java b/src/main/java/speiger/src/coreengine/rendering/gui/components/icon/TexturedIcon.java index ef30ea6..2c9154e 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/components/icon/TexturedIcon.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/components/icon/TexturedIcon.java @@ -2,7 +2,7 @@ package speiger.src.coreengine.rendering.gui.components.icon; import speiger.src.coreengine.math.misc.ColorUtils; import speiger.src.coreengine.rendering.gui.renderer.UIRenderer; -import speiger.src.coreengine.rendering.textures.base.ITexture; +import speiger.src.coreengine.rendering.texturesOld.base.ITexture; public class TexturedIcon implements IIcon { diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/helper/FontBuilder.java b/src/main/java/speiger/src/coreengine/rendering/gui/helper/FontBuilder.java index f5bc2d9..d77a022 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/helper/FontBuilder.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/helper/FontBuilder.java @@ -36,11 +36,11 @@ import speiger.src.collections.objects.misc.pairs.ObjectObjectPair; import speiger.src.coreengine.assets.AssetLocation; import speiger.src.coreengine.math.vector.ints.Vec2i; import speiger.src.coreengine.rendering.gui.renderer.IFontRenderer.CharInstance; -import speiger.src.coreengine.rendering.textures.atlas.AtlasStitcher; -import speiger.src.coreengine.rendering.textures.atlas.AtlasStitcher.Entry; -import speiger.src.coreengine.rendering.textures.custom.TextureAtlas; -import speiger.src.coreengine.rendering.textures.custom.TextureAtlas.AtlasEntry; -import speiger.src.coreengine.rendering.textures.custom.TextureAtlas.Builder; +import speiger.src.coreengine.rendering.texturesOld.atlas.AtlasStitcher; +import speiger.src.coreengine.rendering.texturesOld.atlas.AtlasStitcher.Entry; +import speiger.src.coreengine.rendering.texturesOld.custom.TextureAtlas; +import speiger.src.coreengine.rendering.texturesOld.custom.TextureAtlas.AtlasEntry; +import speiger.src.coreengine.rendering.texturesOld.custom.TextureAtlas.Builder; public class FontBuilder { public static final int LITERAL = 1; 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 4e7e14c..19f8454 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 @@ -23,7 +23,7 @@ import speiger.src.coreengine.rendering.models.DrawCall; import speiger.src.coreengine.rendering.tesselationOld.IVertexBuilder; import speiger.src.coreengine.rendering.tesselationOld.Tesselator; import speiger.src.coreengine.rendering.tesselationOld.VertexType; -import speiger.src.coreengine.rendering.textures.base.ITexture; +import speiger.src.coreengine.rendering.texturesOld.base.ITexture; import speiger.src.coreengine.utils.helpers.TextUtil; public class FontRenderer implements IFontRenderer diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/IFontRenderer.java b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/IFontRenderer.java index cd192cf..a1b5bbb 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/IFontRenderer.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/IFontRenderer.java @@ -1,7 +1,7 @@ package speiger.src.coreengine.rendering.gui.renderer; import speiger.src.coreengine.rendering.gui.components.TextComponent; -import speiger.src.coreengine.rendering.textures.base.ITexture; +import speiger.src.coreengine.rendering.texturesOld.base.ITexture; public interface IFontRenderer { 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 ae9eefb..475d2c5 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 @@ -27,8 +27,8 @@ import speiger.src.coreengine.rendering.shaderOld.uniforms.UniformVec2f; import speiger.src.coreengine.rendering.tesselation.GLCall; import speiger.src.coreengine.rendering.tesselationOld.Tesselator; import speiger.src.coreengine.rendering.tesselationOld.VertexType; -import speiger.src.coreengine.rendering.textures.base.ITexture; -import speiger.src.coreengine.rendering.textures.base.TextureManager; +import speiger.src.coreengine.rendering.texturesOld.base.ITexture; +import speiger.src.coreengine.rendering.texturesOld.base.TextureManager; import speiger.src.coreengine.rendering.utils.GLStateTracker; import speiger.src.coreengine.utils.collections.pools.SimplePool; diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/provider/BitmapFontProvider.java b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/provider/BitmapFontProvider.java index 99383ad..157601c 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/provider/BitmapFontProvider.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/provider/BitmapFontProvider.java @@ -16,8 +16,8 @@ import speiger.src.coreengine.math.vector.ints.Vec2i; import speiger.src.coreengine.rendering.gui.helper.FontBuilder; import speiger.src.coreengine.rendering.gui.helper.FontBuilder.WrittenChar; import speiger.src.coreengine.rendering.gui.renderer.IFontRenderer.CharInstance; -import speiger.src.coreengine.rendering.textures.base.ITexture; -import speiger.src.coreengine.rendering.textures.base.TextureManager; +import speiger.src.coreengine.rendering.texturesOld.base.ITexture; +import speiger.src.coreengine.rendering.texturesOld.base.TextureManager; import speiger.src.coreengine.utils.helpers.JsonUtil; public class BitmapFontProvider implements IFontProvider diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/provider/IFontProvider.java b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/provider/IFontProvider.java index 9a8022a..2e523eb 100644 --- a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/provider/IFontProvider.java +++ b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/provider/IFontProvider.java @@ -3,7 +3,7 @@ package speiger.src.coreengine.rendering.gui.renderer.provider; import com.google.gson.JsonObject; import speiger.src.coreengine.rendering.gui.renderer.IFontRenderer.CharInstance; -import speiger.src.coreengine.rendering.textures.base.ITexture; +import speiger.src.coreengine.rendering.texturesOld.base.ITexture; import speiger.src.coreengine.utils.helpers.JsonUtil; public interface IFontProvider diff --git a/src/main/java/speiger/src/coreengine/rendering/models/frameBuffer/TextureAttachment.java b/src/main/java/speiger/src/coreengine/rendering/models/frameBuffer/TextureAttachment.java index f60e659..60f13e3 100644 --- a/src/main/java/speiger/src/coreengine/rendering/models/frameBuffer/TextureAttachment.java +++ b/src/main/java/speiger/src/coreengine/rendering/models/frameBuffer/TextureAttachment.java @@ -7,7 +7,7 @@ import org.lwjgl.opengl.GL13; import org.lwjgl.opengl.GL30; import org.lwjgl.opengl.GL32; -import speiger.src.coreengine.rendering.textures.base.TextureManager; +import speiger.src.coreengine.rendering.texturesOld.base.TextureManager; public class TextureAttachment implements IFrameAttachment { diff --git a/src/main/java/speiger/src/coreengine/rendering/newGui/components/base/GuiComponent.java b/src/main/java/speiger/src/coreengine/rendering/newGui/components/base/GuiComponent.java index 8781e4d..e8497b3 100644 --- a/src/main/java/speiger/src/coreengine/rendering/newGui/components/base/GuiComponent.java +++ b/src/main/java/speiger/src/coreengine/rendering/newGui/components/base/GuiComponent.java @@ -55,12 +55,13 @@ public non-sealed class GuiComponent extends FlagObject implements ICastable, IL protected void renderChildren(IUIRenderer renderer, int mouseX, int mouseY, float particalTicks) { for(GuiComponent child : children) { + if(child.isManualManaged()) continue; renderComponent(child, renderer, mouseX, mouseY, particalTicks); } } public static boolean renderComponent(GuiComponent comp, IUIRenderer renderer, int mouseX, int mouseY, float particalTicks) { - if(!comp.isVisible() || comp.isManualManaged() || (comp.isScissored() && !renderer.isInScissors(comp.getBox()))) return false; + if(!comp.isVisible() || (comp.isScissored() && !renderer.isInScissors(comp.getBox()))) return false; if(comp.isScissored()) { renderer.pushScissors(comp.getBox()); if(comp.renderer != null) { diff --git a/src/main/java/speiger/src/coreengine/rendering/newGui/renderer/IUIRenderer.java b/src/main/java/speiger/src/coreengine/rendering/newGui/renderer/IUIRenderer.java index fde7a5e..e65d6d2 100644 --- a/src/main/java/speiger/src/coreengine/rendering/newGui/renderer/IUIRenderer.java +++ b/src/main/java/speiger/src/coreengine/rendering/newGui/renderer/IUIRenderer.java @@ -1,9 +1,24 @@ package speiger.src.coreengine.rendering.newGui.renderer; +import speiger.src.coreengine.math.vector.quaternion.Quaternion; import speiger.src.coreengine.rendering.gui.helper.box.IGuiBox; public interface IUIRenderer { public boolean isInScissors(IGuiBox box); public void pushScissors(IGuiBox box); public void popScissors(); + + public void flush(); + + public void pushTransform(); + public void popTransform(); + + public void translate(float z); + public void translate(float x, float y); + public void translate(float x, float y, float z); + + public void scale(float scale); + public void scale(float x, float y); + + public void rotate(Quaternion rotation); } diff --git a/src/main/java/speiger/src/coreengine/rendering/shader/ShaderTracker.java b/src/main/java/speiger/src/coreengine/rendering/shader/ShaderTracker.java index f4eefb9..2477c09 100644 --- a/src/main/java/speiger/src/coreengine/rendering/shader/ShaderTracker.java +++ b/src/main/java/speiger/src/coreengine/rendering/shader/ShaderTracker.java @@ -52,7 +52,7 @@ public class ShaderTracker implements ISimpleRealodableAsset, IManagedAsset { private int shaderId(ShaderProgram program) { return program == null ? 0 : program.id(); } - + @Override public void destroy() { shaders.forEach(Shader::remove); diff --git a/src/main/java/speiger/src/coreengine/rendering/shaderOld/uniforms/UniformTexture.java b/src/main/java/speiger/src/coreengine/rendering/shaderOld/uniforms/UniformTexture.java index ed7174e..305d18d 100644 --- a/src/main/java/speiger/src/coreengine/rendering/shaderOld/uniforms/UniformTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/shaderOld/uniforms/UniformTexture.java @@ -1,7 +1,7 @@ package speiger.src.coreengine.rendering.shaderOld.uniforms; -import speiger.src.coreengine.rendering.textures.base.ITexture; -import speiger.src.coreengine.rendering.textures.base.TextureManager; +import speiger.src.coreengine.rendering.texturesOld.base.ITexture; +import speiger.src.coreengine.rendering.texturesOld.base.TextureManager; public class UniformTexture extends UniformInt { int bank; diff --git a/src/main/java/speiger/src/coreengine/rendering/tesselation/buffer/IVertexBuilder.java b/src/main/java/speiger/src/coreengine/rendering/tesselation/buffer/IVertexBuilder.java index 3b84e53..08d882d 100644 --- a/src/main/java/speiger/src/coreengine/rendering/tesselation/buffer/IVertexBuilder.java +++ b/src/main/java/speiger/src/coreengine/rendering/tesselation/buffer/IVertexBuilder.java @@ -11,6 +11,8 @@ public interface IVertexBuilder extends IVertexBuffer { public IVertexBuilder putInt(int offset, int value); public IVertexBuilder putFloat(int offset, float value); + public int size(); + @Override default IVertexBuffer pos(float x, float y) { validate(this, Usage.POS, 2); diff --git a/src/main/java/speiger/src/coreengine/rendering/tesselation/buffer/VertexBuilder.java b/src/main/java/speiger/src/coreengine/rendering/tesselation/buffer/VertexBuilder.java index 6f520ea..30b0071 100644 --- a/src/main/java/speiger/src/coreengine/rendering/tesselation/buffer/VertexBuilder.java +++ b/src/main/java/speiger/src/coreengine/rendering/tesselation/buffer/VertexBuilder.java @@ -56,6 +56,9 @@ public class VertexBuilder implements IVertexBuilder { return this; } + @Override + public int size() { return vertecies; } + @Override public IVertexBuilder put(int offset, byte value) { buffer.put(totalStoredBytes + offset, value); diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/base/BaseTexture.java b/src/main/java/speiger/src/coreengine/rendering/textures/base/BaseTexture.java new file mode 100644 index 0000000..ccbbd06 --- /dev/null +++ b/src/main/java/speiger/src/coreengine/rendering/textures/base/BaseTexture.java @@ -0,0 +1,76 @@ +package speiger.src.coreengine.rendering.textures.base; + +import org.lwjgl.opengl.GL11; + +public abstract class BaseTexture implements ITexture { + protected int id; + + protected BaseTexture() { + this(GL11.glGenTextures()); + } + + protected BaseTexture(int id) { + this.id = id; + } + + @Override + public int id() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void bind() { + // TODO Auto-generated method stub + + } + + @Override + public void reload() { + // TODO Auto-generated method stub + + } + + @Override + public void delete() { + // TODO Auto-generated method stub + + } + + @Override + public int width() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int height() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public float minU() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public float minV() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public float maxU() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public float maxV() { + // TODO Auto-generated method stub + return 0; + } + +} 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 901e443..30e5757 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 @@ -1,56 +1,16 @@ package speiger.src.coreengine.rendering.textures.base; -import java.awt.image.BufferedImage; -import java.nio.ByteBuffer; - -import speiger.src.coreengine.assets.AssetLocation; -import speiger.src.coreengine.assets.reloader.IReloadableResource; -import speiger.src.coreengine.rendering.textures.normal.DirectTexture; -import speiger.src.coreengine.rendering.textures.normal.SimpleTexture; -import speiger.src.coreengine.rendering.textures.stb.STBDirectTexture; -import speiger.src.coreengine.rendering.textures.stb.STBTexture; - -public interface ITexture extends IReloadableResource -{ - public int getTextureId(); +public interface ITexture { + public int id(); + public void bind(); + public void reload(); + public void delete(); - public void bindTexture(); - public void deleteTexture(); + public int width(); + public int height(); - public int getWidth(); - public int getHeight(); - - public float getUMin(); - public float getVMin(); - public float getUMax(); - public float getVMax(); - - public ITexture makeReloadable(); - - public default float getInterpolatedU(float u){return getUMin() + ((getUMax() - getUMin()) * u);} - public default float getInterpolatedV(float v){return getUMin() + ((getUMax() - getUMin()) * v);} - - public static ITexture simple(AssetLocation location) { - return new STBTexture(location); - } - - public static ITexture direct(ByteBuffer stbImageData, int width, int height) { - return new STBDirectTexture(stbImageData, width, height); - } - - public static ITexture direct(long stbImageData, int width, int height) { - return new STBDirectTexture(stbImageData, width, height); - } - - public static ITexture direct(BufferedImage imageData) { - return new STBDirectTexture(imageData); - } - - public static ITexture awtSimple(AssetLocation location) { - return new SimpleTexture(location); - } - - public static ITexture awtDirect(BufferedImage imageData) { - return new DirectTexture(imageData); - } + public float minU(); + public float minV(); + public float maxU(); + public float maxV(); } diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/base/TextureTracker.java b/src/main/java/speiger/src/coreengine/rendering/textures/base/TextureTracker.java new file mode 100644 index 0000000..e5e7e18 --- /dev/null +++ b/src/main/java/speiger/src/coreengine/rendering/textures/base/TextureTracker.java @@ -0,0 +1,55 @@ +package speiger.src.coreengine.rendering.textures.base; + +import java.util.function.Predicate; + +import speiger.src.collections.objects.lists.ObjectArrayList; +import speiger.src.collections.objects.lists.ObjectList; +import speiger.src.collections.objects.sets.ObjectLinkedOpenHashSet; +import speiger.src.collections.objects.sets.ObjectSet; +import speiger.src.coreengine.assets.base.IAssetProvider; +import speiger.src.coreengine.assets.base.IManagedAsset; +import speiger.src.coreengine.assets.base.IReloadableAsset.ISimpleRealodableAsset; + +public class TextureTracker implements ISimpleRealodableAsset, IManagedAsset { + IAssetProvider provider; + ObjectList textures = new ObjectArrayList<>(); + ObjectSet reloadable = new ObjectLinkedOpenHashSet<>(); + + public void registerTexture(ITexture texture) { + register(texture, false); + } + + public void registerReloadable(ITexture texture) { + register(texture, true); + } + + public void register(ITexture texture, boolean reloadable) { + textures.add(texture); + if(reloadable) this.reloadable.add(texture); + } + + public void deleteTexture(ITexture texture) { + textures.remove(texture); + reloadable.remove(texture); + } + + @Override + public void onAssetsReloaded(IAssetProvider provider) { + textures.filter(((Predicate)reloadable::contains).negate()).forEach(ITexture::delete); + textures.clear(); + reloadable.peek(ITexture::reload).forEach(textures::add); + } + + @Override + public void destroy() { + textures.forEach(ITexture::delete); + textures.clear(); + reloadable.clear(); + } + + @Override + public String getName() { return "Texture Tracker"; } + + @Override + public void setProvider(IAssetProvider provider) { this.provider = provider; } +} diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/atlas/AtlasStitcher.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/atlas/AtlasStitcher.java similarity index 93% rename from src/main/java/speiger/src/coreengine/rendering/textures/atlas/AtlasStitcher.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/atlas/AtlasStitcher.java index 80fefb7..a0a09bc 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/atlas/AtlasStitcher.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/atlas/AtlasStitcher.java @@ -1,4 +1,4 @@ -package speiger.src.coreengine.rendering.textures.atlas; +package speiger.src.coreengine.rendering.texturesOld.atlas; import java.util.List; @@ -6,7 +6,7 @@ import speiger.src.collections.objects.lists.ObjectArrayList; import speiger.src.collections.objects.utils.ObjectIterables; import speiger.src.collections.utils.HashUtil; import speiger.src.coreengine.assets.AssetLocation; -import speiger.src.coreengine.rendering.textures.atlas.AtlasStitcher.Entry; +import speiger.src.coreengine.rendering.texturesOld.atlas.AtlasStitcher.Entry; public class AtlasStitcher { @@ -20,6 +20,10 @@ public class AtlasStitcher { List> toStitch = new ObjectArrayList<>(); Slot slot = null; + public AtlasStitcher(int bounds) { + this(bounds, bounds); + } + public AtlasStitcher(int maxWidth, int maxHeight) { this.maxWidth = maxWidth; this.maxHeight = maxHeight; @@ -30,9 +34,7 @@ public class AtlasStitcher { public int height() { return height; } public boolean isValid() { return valid; } - public void add(T entry) { - add(new Record(entry)); - } + public void add(T entry) { add(new Record(entry)); } public void addAll(Iterable iterables) { ObjectIterables.map(iterables, Record::new).forEach(this::add); @@ -93,12 +95,10 @@ public class AtlasStitcher { private static record Record(T entry, int width, int height) implements Comparable> { public Record(T entry) { - this(entry, entry.width(), entry.height()); + this(entry, entry.width(), entry.height()); } - public int pixels() { - return width() * height(); - } + public int pixels() { return width() * height(); } @Override public int compareTo(Record o) { diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/base/AbstractTexture.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/base/AbstractTexture.java similarity index 93% rename from src/main/java/speiger/src/coreengine/rendering/textures/base/AbstractTexture.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/base/AbstractTexture.java index cdcd27c..b7fbc16 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/base/AbstractTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/base/AbstractTexture.java @@ -1,4 +1,4 @@ -package speiger.src.coreengine.rendering.textures.base; +package speiger.src.coreengine.rendering.texturesOld.base; public abstract class AbstractTexture implements ITexture { protected int textureID; diff --git a/src/main/java/speiger/src/coreengine/rendering/texturesOld/base/ITexture.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/base/ITexture.java new file mode 100644 index 0000000..ac05e61 --- /dev/null +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/base/ITexture.java @@ -0,0 +1,56 @@ +package speiger.src.coreengine.rendering.texturesOld.base; + +import java.awt.image.BufferedImage; +import java.nio.ByteBuffer; + +import speiger.src.coreengine.assets.AssetLocation; +import speiger.src.coreengine.assets.reloader.IReloadableResource; +import speiger.src.coreengine.rendering.texturesOld.normal.DirectTexture; +import speiger.src.coreengine.rendering.texturesOld.normal.SimpleTexture; +import speiger.src.coreengine.rendering.texturesOld.stb.STBDirectTexture; +import speiger.src.coreengine.rendering.texturesOld.stb.STBTexture; + +public interface ITexture extends IReloadableResource +{ + public int getTextureId(); + + public void bindTexture(); + public void deleteTexture(); + + public int getWidth(); + public int getHeight(); + + public float getUMin(); + public float getVMin(); + public float getUMax(); + public float getVMax(); + + public ITexture makeReloadable(); + + public default float getInterpolatedU(float u){return getUMin() + ((getUMax() - getUMin()) * u);} + public default float getInterpolatedV(float v){return getUMin() + ((getUMax() - getUMin()) * v);} + + public static ITexture simple(AssetLocation location) { + return new STBTexture(location); + } + + public static ITexture direct(ByteBuffer stbImageData, int width, int height) { + return new STBDirectTexture(stbImageData, width, height); + } + + public static ITexture direct(long stbImageData, int width, int height) { + return new STBDirectTexture(stbImageData, width, height); + } + + public static ITexture direct(BufferedImage imageData) { + return new STBDirectTexture(imageData); + } + + public static ITexture awtSimple(AssetLocation location) { + return new SimpleTexture(location); + } + + public static ITexture awtDirect(BufferedImage imageData) { + return new DirectTexture(imageData); + } +} diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/base/NativeMemoryParser.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/base/NativeMemoryParser.java similarity index 91% rename from src/main/java/speiger/src/coreengine/rendering/textures/base/NativeMemoryParser.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/base/NativeMemoryParser.java index 7400ee4..98cf684 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/base/NativeMemoryParser.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/base/NativeMemoryParser.java @@ -1,4 +1,4 @@ -package speiger.src.coreengine.rendering.textures.base; +package speiger.src.coreengine.rendering.texturesOld.base; import java.io.Closeable; import java.io.IOException; diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/base/TextureManager.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/base/TextureManager.java similarity index 98% rename from src/main/java/speiger/src/coreengine/rendering/textures/base/TextureManager.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/base/TextureManager.java index a7c5662..17c72d1 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/base/TextureManager.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/base/TextureManager.java @@ -1,4 +1,4 @@ -package speiger.src.coreengine.rendering.textures.base; +package speiger.src.coreengine.rendering.texturesOld.base; import java.awt.image.BufferedImage; import java.nio.ByteBuffer; diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/base/WrappedTexture.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/base/WrappedTexture.java similarity index 93% rename from src/main/java/speiger/src/coreengine/rendering/textures/base/WrappedTexture.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/base/WrappedTexture.java index a58ee9a..c126c5a 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/base/WrappedTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/base/WrappedTexture.java @@ -1,4 +1,4 @@ -package speiger.src.coreengine.rendering.textures.base; +package speiger.src.coreengine.rendering.texturesOld.base; public class WrappedTexture implements ITexture { diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/custom/IDynamicTexture.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/custom/IDynamicTexture.java similarity index 93% rename from src/main/java/speiger/src/coreengine/rendering/textures/custom/IDynamicTexture.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/custom/IDynamicTexture.java index 8bfab21..2bfcfb5 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/custom/IDynamicTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/custom/IDynamicTexture.java @@ -1,6 +1,6 @@ -package speiger.src.coreengine.rendering.textures.custom; +package speiger.src.coreengine.rendering.texturesOld.custom; -import speiger.src.coreengine.rendering.textures.base.ITexture; +import speiger.src.coreengine.rendering.texturesOld.base.ITexture; public interface IDynamicTexture extends ITexture { diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/custom/TextureAtlas.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/custom/TextureAtlas.java similarity index 99% rename from src/main/java/speiger/src/coreengine/rendering/textures/custom/TextureAtlas.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/custom/TextureAtlas.java index 8391d15..d30916c 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/custom/TextureAtlas.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/custom/TextureAtlas.java @@ -1,4 +1,4 @@ -package speiger.src.coreengine.rendering.textures.custom; +package speiger.src.coreengine.rendering.texturesOld.custom; import java.util.Iterator; import java.util.List; diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/normal/DirectTexture.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/normal/DirectTexture.java similarity index 92% rename from src/main/java/speiger/src/coreengine/rendering/textures/normal/DirectTexture.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/normal/DirectTexture.java index 26e9936..87c4776 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/normal/DirectTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/normal/DirectTexture.java @@ -1,4 +1,4 @@ -package speiger.src.coreengine.rendering.textures.normal; +package speiger.src.coreengine.rendering.texturesOld.normal; import java.awt.image.BufferedImage; import java.nio.ByteBuffer; @@ -8,8 +8,8 @@ import org.lwjgl.opengl.GL13; import org.lwjgl.opengl.GL30; import org.lwjgl.system.MemoryUtil; -import speiger.src.coreengine.rendering.textures.base.AbstractTexture; -import speiger.src.coreengine.rendering.textures.base.TextureManager; +import speiger.src.coreengine.rendering.texturesOld.base.AbstractTexture; +import speiger.src.coreengine.rendering.texturesOld.base.TextureManager; public class DirectTexture extends AbstractTexture { diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/normal/DynamicTexture.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/normal/DynamicTexture.java similarity index 95% rename from src/main/java/speiger/src/coreengine/rendering/textures/normal/DynamicTexture.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/normal/DynamicTexture.java index 7c5bc9f..c950cb9 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/normal/DynamicTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/normal/DynamicTexture.java @@ -1,4 +1,4 @@ -package speiger.src.coreengine.rendering.textures.normal; +package speiger.src.coreengine.rendering.texturesOld.normal; import java.nio.ByteBuffer; import java.util.Arrays; @@ -20,9 +20,9 @@ import speiger.src.collections.ints.sets.IntSet; import speiger.src.collections.ints.utils.maps.Int2ObjectMaps; import speiger.src.collections.utils.ITrimmable; import speiger.src.coreengine.math.BitUtil; -import speiger.src.coreengine.rendering.textures.base.AbstractTexture; -import speiger.src.coreengine.rendering.textures.base.TextureManager; -import speiger.src.coreengine.rendering.textures.custom.IDynamicTexture; +import speiger.src.coreengine.rendering.texturesOld.base.AbstractTexture; +import speiger.src.coreengine.rendering.texturesOld.base.TextureManager; +import speiger.src.coreengine.rendering.texturesOld.custom.IDynamicTexture; import speiger.src.coreengine.rendering.utils.AllocationTracker; public class DynamicTexture extends AbstractTexture implements IDynamicTexture diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/normal/SimpleTexture.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/normal/SimpleTexture.java similarity index 91% rename from src/main/java/speiger/src/coreengine/rendering/textures/normal/SimpleTexture.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/normal/SimpleTexture.java index f794b17..cad32f3 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/normal/SimpleTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/normal/SimpleTexture.java @@ -1,4 +1,4 @@ -package speiger.src.coreengine.rendering.textures.normal; +package speiger.src.coreengine.rendering.texturesOld.normal; import java.awt.image.BufferedImage; import java.nio.ByteBuffer; @@ -10,8 +10,8 @@ import org.lwjgl.system.MemoryUtil; import speiger.src.coreengine.assets.AssetLocation; import speiger.src.coreengine.assets.base.IAsset; -import speiger.src.coreengine.rendering.textures.base.AbstractTexture; -import speiger.src.coreengine.rendering.textures.base.TextureManager; +import speiger.src.coreengine.rendering.texturesOld.base.AbstractTexture; +import speiger.src.coreengine.rendering.texturesOld.base.TextureManager; public class SimpleTexture extends AbstractTexture { diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/stb/STBDirectTexture.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/stb/STBDirectTexture.java similarity index 92% rename from src/main/java/speiger/src/coreengine/rendering/textures/stb/STBDirectTexture.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/stb/STBDirectTexture.java index dfd0c14..2eefeec 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/stb/STBDirectTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/stb/STBDirectTexture.java @@ -1,4 +1,4 @@ -package speiger.src.coreengine.rendering.textures.stb; +package speiger.src.coreengine.rendering.texturesOld.stb; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; @@ -13,8 +13,8 @@ import org.lwjgl.opengl.GL30; import org.lwjgl.stb.STBImage; import org.lwjgl.system.MemoryUtil; -import speiger.src.coreengine.rendering.textures.base.AbstractTexture; -import speiger.src.coreengine.rendering.textures.base.TextureManager; +import speiger.src.coreengine.rendering.texturesOld.base.AbstractTexture; +import speiger.src.coreengine.rendering.texturesOld.base.TextureManager; public class STBDirectTexture extends AbstractTexture { diff --git a/src/main/java/speiger/src/coreengine/rendering/textures/stb/STBTexture.java b/src/main/java/speiger/src/coreengine/rendering/texturesOld/stb/STBTexture.java similarity index 89% rename from src/main/java/speiger/src/coreengine/rendering/textures/stb/STBTexture.java rename to src/main/java/speiger/src/coreengine/rendering/texturesOld/stb/STBTexture.java index 5ca78ff..9a83b59 100644 --- a/src/main/java/speiger/src/coreengine/rendering/textures/stb/STBTexture.java +++ b/src/main/java/speiger/src/coreengine/rendering/texturesOld/stb/STBTexture.java @@ -1,4 +1,4 @@ -package speiger.src.coreengine.rendering.textures.stb; +package speiger.src.coreengine.rendering.texturesOld.stb; import java.io.IOException; import java.nio.ByteBuffer; @@ -11,9 +11,9 @@ import org.lwjgl.system.MemoryUtil; import speiger.src.coreengine.assets.AssetLocation; import speiger.src.coreengine.assets.base.IAsset; -import speiger.src.coreengine.rendering.textures.base.AbstractTexture; -import speiger.src.coreengine.rendering.textures.base.NativeMemoryParser; -import speiger.src.coreengine.rendering.textures.base.TextureManager; +import speiger.src.coreengine.rendering.texturesOld.base.AbstractTexture; +import speiger.src.coreengine.rendering.texturesOld.base.NativeMemoryParser; +import speiger.src.coreengine.rendering.texturesOld.base.TextureManager; public class STBTexture extends AbstractTexture { diff --git a/src/main/java/speiger/src/coreengine/rendering/utils/Cursor.java b/src/main/java/speiger/src/coreengine/rendering/utils/Cursor.java index 23675a1..d40f1d9 100644 --- a/src/main/java/speiger/src/coreengine/rendering/utils/Cursor.java +++ b/src/main/java/speiger/src/coreengine/rendering/utils/Cursor.java @@ -13,7 +13,7 @@ import speiger.src.collections.objects.utils.maps.Object2ObjectMaps; import speiger.src.coreengine.assets.AssetLocation; import speiger.src.coreengine.assets.reloader.IReloadableResource; import speiger.src.coreengine.rendering.input.window.Window; -import speiger.src.coreengine.rendering.textures.base.TextureManager; +import speiger.src.coreengine.rendering.texturesOld.base.TextureManager; public final class Cursor implements IReloadableResource { public static final Cursor INSTANCE = new Cursor(); diff --git a/src/main/java/speiger/src/coreengine/rendering/utils/GLStamper.java b/src/main/java/speiger/src/coreengine/rendering/utils/GLStamper.java index 1127c7f..4f68677 100644 --- a/src/main/java/speiger/src/coreengine/rendering/utils/GLStamper.java +++ b/src/main/java/speiger/src/coreengine/rendering/utils/GLStamper.java @@ -9,15 +9,13 @@ import org.lwjgl.opengl.GL33; 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.maps.impl.hash.Object2ObjectOpenHashMap; import speiger.src.collections.objects.maps.interfaces.Object2ObjectMap; -import speiger.src.collections.objects.maps.interfaces.Object2ObjectMap.Entry; import speiger.src.collections.objects.sets.ObjectLinkedOpenHashSet; import speiger.src.collections.utils.Stack; public class GLStamper { public static GLStamper INSTANCE = new GLStamper(); - Object2ObjectMap> stamps = new Object2ObjectOpenHashMap<>(); + Object2ObjectMap> stamps = Object2ObjectMap.builder().linkedMap(); Stack unusedStamps = new ObjectArrayList<>(); IntStack queryIDs = new IntArrayList(); @@ -31,18 +29,14 @@ public class GLStamper { public void removeOwner(String ownerID) { Set set = stamps.remove(ownerID); - if(set != null) { - for(GLStamp stamp : set) { - stamp.release(); - } - } + if(set == null) return; + set.forEach(GLStamp::release); } public void cleanup() { if(!stamps.isEmpty()) { - for(Iterator>> iter = stamps.object2ObjectEntrySet().iterator();iter.hasNext();) { - iter.next().getValue().forEach(GLStamp::release); - iter.remove(); + for(Iterator> iter = stamps.values().iterator();iter.hasNext();iter.remove()) { + iter.next().forEach(GLStamp::release); } } if(queryIDs.isEmpty()) return; diff --git a/src/main/java/speiger/src/coreengine/rendering/utils/GLStateTracker.java b/src/main/java/speiger/src/coreengine/rendering/utils/GLStateTracker.java index 69eda3f..9005543 100644 --- a/src/main/java/speiger/src/coreengine/rendering/utils/GLStateTracker.java +++ b/src/main/java/speiger/src/coreengine/rendering/utils/GLStateTracker.java @@ -11,6 +11,7 @@ import speiger.src.collections.objects.lists.ObjectArrayList; import speiger.src.collections.objects.lists.ObjectList; import speiger.src.coreengine.rendering.shader.ShaderTracker; import speiger.src.coreengine.rendering.shader.uniform.GlobalUniforms; +import speiger.src.coreengine.rendering.textures.base.TextureTracker; import speiger.src.coreengine.rendering.utils.states.BlendState; import speiger.src.coreengine.rendering.utils.states.CullState; import speiger.src.coreengine.rendering.utils.states.FloatState; @@ -24,6 +25,7 @@ import speiger.src.coreengine.utils.counters.averager.Counter; public class GLStateTracker { static final ObjectList ALL_STATES = new ObjectArrayList<>(); + //GPU States public static final GLState MULTI_SAMPLING = addState(new GLState(GL13.GL_MULTISAMPLE)); public static final GLWireFrame WIRE_FRAME = addState(new GLWireFrame(GLCullType.BOTH)); public static final GLState PROVOKING_VERTEX = addState(new GLProvoking()); @@ -35,10 +37,13 @@ public class GLStateTracker { public static final FloatState LINE_SIZE = addState(new FloatState(1F, GL11::glLineWidth)); public static final ScissorsManager TESTER = new ScissorsManager(100); public static final Counter[] COUNTERS = Counter.createCounters(4); - public static final ViewPortStack VIEW_PORT = new ViewPortStack(); - public static final ShaderTracker SHADERS = new ShaderTracker(); - public static final GlobalUniforms UNIFORMS = new GlobalUniforms(); public static final TextureState TEXTURES = addState(new TextureState()); + public static final ViewPortStack VIEW_PORT = new ViewPortStack(); + + //Trackers + public static final ShaderTracker SHADERS = new ShaderTracker(); + public static final TextureTracker TEXTURE_TRACKER = new TextureTracker(); + public static final GlobalUniforms UNIFORMS = new GlobalUniforms(); public static T addState(T state) { ALL_STATES.add(state);