diff --git a/.classpath b/.classpath
index be88c88..aa24133 100644
--- a/.classpath
+++ b/.classpath
@@ -12,7 +12,19 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs
index 6d93aa6..d123caf 100644
--- a/.settings/org.eclipse.buildship.core.prefs
+++ b/.settings/org.eclipse.buildship.core.prefs
@@ -1,11 +1,11 @@
arguments=
auto.sync=false
build.scans.enabled=false
-connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
+connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(9.1.0))
connection.project.dir=
eclipse.preferences.version=1
gradle.user.home=
-java.home=C\:/Program Files/Eclipse Adoptium/jdk-21.0.1.12-hotspot
+java.home=C\:/Program Files/Java/jdk-25.0.2+10
jvm.arguments=
offline.mode=false
override.workspace.settings=true
diff --git a/build.gradle b/build.gradle
index 9923614..1dfa11b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,6 +1,8 @@
apply plugin: 'java'
apply plugin: 'eclipse'
+java.toolchain.languageVersion = JavaLanguageVersion.of(25)
+
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
@@ -12,7 +14,14 @@ eclipse {
}
}
-sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = JavaLanguageVersion.of(21)
+sourceSets {
+ graphics {}
+}
+
+configurations {
+ graphics.extendsFrom implementation
+ graphics.extendsFrom runtime
+}
repositories {
mavenCentral()
@@ -23,34 +32,6 @@ repositories {
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
-task srcJar(type: Jar) {
- from sourceSets.main.allSource
- archiveClassifier = 'sources'
- from {
- configurations.runtimeClasspath.collect {
- it.isDirectory() ? it : zipTree(it)
- }
- }
- duplicatesStrategy = DuplicatesStrategy.INCLUDE
-}
-
-artifacts {
- archives srcJar
-}
-
-jar {
- manifest {
- attributes "Main-Class": 'speiger.src.coreengine.NewInputTest'
- }
- from {
- configurations.runtimeClasspath.collect {
- it.isDirectory() ? it : zipTree(it)
- }
- }
- exclude('**/*.LIST')
- exclude('**/module-info.class')
- duplicatesStrategy = DuplicatesStrategy.INCLUDE
-}
dependencies {
//LWJGL 3
@@ -77,11 +58,38 @@ dependencies {
implementation "org.lwjgl:lwjgl-harfbuzz::$lwjglNatives"
implementation "org.lwjgl:lwjgl-nanovg::$lwjglNatives"
-
-
//Gson
implementation 'com.google.code.gson:gson:2.8.6'
//Primitive Collections
- implementation 'de.speiger:Primitive-Collections:0.9.0'
+ implementation 'de.speiger:Primitive-Collections:1.0.0'
}
+
+jar {
+ manifest {
+ attributes "Main-Class": 'speiger.src.coreengine.NewInputTest'
+ }
+ from {
+ configurations.runtimeClasspath.collect {
+ it.isDirectory() ? it : zipTree(it)
+ }
+ }
+ exclude('**/*.LIST')
+ exclude('**/module-info.class')
+ duplicatesStrategy = DuplicatesStrategy.INCLUDE
+}
+
+task srcJar(type: Jar) {
+ from sourceSets.main.allSource
+ archiveClassifier = 'sources'
+ from {
+ configurations.runtimeClasspath.collect {
+ it.isDirectory() ? it : zipTree(it)
+ }
+ }
+ duplicatesStrategy = DuplicatesStrategy.INCLUDE
+}
+
+artifacts {
+ archives srcJar
+}
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index a595206..757df18 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/src/graphics/java/speiger/src/coreengine/api/buffer/VertexBuffer.java b/src/graphics/java/speiger/src/coreengine/api/buffer/VertexBuffer.java
new file mode 100644
index 0000000..1c09e53
--- /dev/null
+++ b/src/graphics/java/speiger/src/coreengine/api/buffer/VertexBuffer.java
@@ -0,0 +1,5 @@
+package speiger.src.coreengine.api.buffer;
+
+public interface VertexBuffer {
+
+}
diff --git a/src/graphics/java/speiger/src/coreengine/api/core/Graphics.java b/src/graphics/java/speiger/src/coreengine/api/core/Graphics.java
new file mode 100644
index 0000000..9a70ff1
--- /dev/null
+++ b/src/graphics/java/speiger/src/coreengine/api/core/Graphics.java
@@ -0,0 +1,9 @@
+package speiger.src.coreengine.api.core;
+
+import speiger.src.coreengine.rendering.input.window.Window;
+
+public interface Graphics {
+ public String getName();
+
+ public GraphicsDevice createDevice(Window window);
+}
diff --git a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsCommandQueue.java b/src/graphics/java/speiger/src/coreengine/api/core/GraphicsCommandQueue.java
new file mode 100644
index 0000000..e7268e6
--- /dev/null
+++ b/src/graphics/java/speiger/src/coreengine/api/core/GraphicsCommandQueue.java
@@ -0,0 +1,5 @@
+package speiger.src.coreengine.api.core;
+
+public interface GraphicsCommandQueue {
+
+}
diff --git a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsDevice.java b/src/graphics/java/speiger/src/coreengine/api/core/GraphicsDevice.java
new file mode 100644
index 0000000..86d60d0
--- /dev/null
+++ b/src/graphics/java/speiger/src/coreengine/api/core/GraphicsDevice.java
@@ -0,0 +1,12 @@
+package speiger.src.coreengine.api.core;
+
+import speiger.src.coreengine.api.buffer.VertexBuffer;
+import speiger.src.coreengine.api.texture.Texture;
+import speiger.src.coreengine.rendering.input.window.Window;
+
+public interface GraphicsDevice {
+ public GraphicsSurface createSurface(Window window);
+ public GraphicsCommandQueue getQueue();
+ public VertexBuffer createBuffer();
+ public Texture createTexture();
+}
diff --git a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsResource.java b/src/graphics/java/speiger/src/coreengine/api/core/GraphicsResource.java
new file mode 100644
index 0000000..ae0e4b2
--- /dev/null
+++ b/src/graphics/java/speiger/src/coreengine/api/core/GraphicsResource.java
@@ -0,0 +1,5 @@
+package speiger.src.coreengine.api.core;
+
+public interface GraphicsResource {
+ public void remove();
+}
diff --git a/src/graphics/java/speiger/src/coreengine/api/core/GraphicsSurface.java b/src/graphics/java/speiger/src/coreengine/api/core/GraphicsSurface.java
new file mode 100644
index 0000000..5713d38
--- /dev/null
+++ b/src/graphics/java/speiger/src/coreengine/api/core/GraphicsSurface.java
@@ -0,0 +1,5 @@
+package speiger.src.coreengine.api.core;
+
+public interface GraphicsSurface {
+ public void setVsync(boolean value);
+}
diff --git a/src/graphics/java/speiger/src/coreengine/api/texture/Texture.java b/src/graphics/java/speiger/src/coreengine/api/texture/Texture.java
new file mode 100644
index 0000000..d9d971b
--- /dev/null
+++ b/src/graphics/java/speiger/src/coreengine/api/texture/Texture.java
@@ -0,0 +1,6 @@
+package speiger.src.coreengine.api.texture;
+
+public abstract class Texture {
+ protected final TextureType type = null;
+
+}
diff --git a/src/graphics/java/speiger/src/coreengine/api/texture/TextureType.java b/src/graphics/java/speiger/src/coreengine/api/texture/TextureType.java
new file mode 100644
index 0000000..824c3c7
--- /dev/null
+++ b/src/graphics/java/speiger/src/coreengine/api/texture/TextureType.java
@@ -0,0 +1,15 @@
+package speiger.src.coreengine.api.texture;
+
+public enum TextureType {
+ TEXTURE_1D,
+ TEXTURE_1D_ARRAY,
+ TEXTURE_2D,
+ TEXTURE_2D_ARRAY,
+ TEXTURE_2D_MULTISAMPLE,
+ TEXTURE_2D_MULTISAMPLE_ARRAY,
+ TEXTURE_3D,
+ TEXTURE_CUBE_MAP,
+ TEXTURE_CUBE_MAP_ARRAY,
+ TEXTURE_RECTANGLE,
+ TEXTURE_BUFFER;
+}
diff --git a/src/main/java/speiger/src/coreengine/NewInputTest.java b/src/main/java/speiger/src/coreengine/NewInputTest.java
index 7efcee0..04ec2ec 100644
--- a/src/main/java/speiger/src/coreengine/NewInputTest.java
+++ b/src/main/java/speiger/src/coreengine/NewInputTest.java
@@ -28,6 +28,7 @@ import speiger.src.coreengine.rendering.input.devices.Joystick;
import speiger.src.coreengine.rendering.input.devices.Keyboard;
import speiger.src.coreengine.rendering.input.devices.Mouse;
import speiger.src.coreengine.rendering.input.events.KeyEvent;
+import speiger.src.coreengine.rendering.input.events.MouseEvent;
import speiger.src.coreengine.rendering.input.window.Window;
import speiger.src.coreengine.rendering.input.window.WindowManager;
import speiger.src.coreengine.rendering.models.buffers.BufferAttribute;
@@ -42,7 +43,6 @@ import speiger.src.coreengine.rendering.tesselation.format.VertexTypes;
import speiger.src.coreengine.rendering.textures.custom.Drawable;
import speiger.src.coreengine.rendering.textures.custom.DynamicTexture;
import speiger.src.coreengine.rendering.utils.GLStateTracker;
-import speiger.src.coreengine.rendering.utils.values.GLBlendFactor;
import speiger.src.coreengine.rendering.utils.values.GLDataType;
import speiger.src.coreengine.rendering.utils.values.GLMode;
import speiger.src.coreengine.rendering.utils.values.textures.GLTextureFormat;
@@ -78,6 +78,9 @@ public class NewInputTest {
FileDrop.INSTANCE.init(bus);
manager.addDevices(Mouse.INSTANCE, Keyboard.INSTANCE, Joystick.INSTANCE, FileDrop.INSTANCE);
Window window = manager.builder().title("Testing Engine").width(800).height(600).antialis(0).build();
+ Window secondWindow = manager.builder().title("Second Window Engine").width(800).height(600).antialis(0).build();
+ Thread.ofPlatform().start(() -> drawSecondScreen(secondWindow));
+ window.setupContext();
shaderTest.register();
guiShader.register();
assets.addListener(GLStateTracker.instance().shaders);
@@ -102,6 +105,10 @@ public class NewInputTest {
texture.fill(0, half, half, half, 0, 0, 255, 255);
texture.process(true);
window.visible(true);
+
+ bus.register(MouseEvent.Click.class, T -> {
+ System.out.println("Testing: Button="+T.button()+", Click="+T.press()+", X="+T.x()+", Y="+T.y()+", WindowId="+T.windowId()+", WindowName="+manager.getWindow(T.windowId()).title());
+ });
bus.register(KeyEvent.Key.class, T -> {
if(T.key() == GLFW.GLFW_KEY_T) {
T.cancel();
@@ -138,15 +145,15 @@ public class NewInputTest {
builder.pos(-0.5F, 0.5F, 0).tex(0F, 0F).rgba(-1).endVertex();
builder.pos(-0.5F, -0.5F, 0).tex(0F, 1F).rgba(-1).endVertex();
- Font font = fonts.createFont(1F);
+// Font font = fonts.createFont(1F);
TestModel model = new TestModel(builder.getBytes());
- TestModel[] guiModel = new TestModel[1];
- List draws = new ObjectArrayList<>();
- TexturedBuffer buffer = new TexturedBuffer((K, V) -> {
- draws.addAll(K);
- guiModel[0] = new TestModel(V);
- System.out.println("Testing: "+V.length+" bytes, "+K.size());
- });
+// TestModel[] guiModel = new TestModel[1];
+// List draws = new ObjectArrayList<>();
+// TexturedBuffer buffer = new TexturedBuffer((K, V) -> {
+// draws.addAll(K);
+// guiModel[0] = new TestModel(V);
+// System.out.println("Testing: "+V.length+" bytes, "+K.size());
+// });
// String s = "The Quick brown fox Jumps over the Lazy dog";
float x = 50;
@@ -154,15 +161,79 @@ public class NewInputTest {
float scale = 1F;
y /= scale;
TextStyle style = TextStyle.DEFAULT.size(12).bold(false);
- font.drawText(style, "Testing My Theory", x, y, -1, buffer, scale, true);
+// font.drawText(style, "Testing My Theory", x, y, -1, buffer, scale, true);
// float offset = font.drawText(style, "The Quick ", 50, y, -1, buffer, scale, false);
// offset += font.drawText(style, "Brown ", 50+offset, y, -1, buffer, scale, false);
// offset += font.drawText(style, "§F§ox ", 50+offset, y, -1, buffer, scale, false);
// offset += font.drawText(style, "Jumps ", 50+offset, y, -1, buffer, scale, false);
// offset += font.drawText(style, "over the Lazy dog", 50+offset, y, -1, buffer, scale, true);
-// font.drawText(s, 50, 50, -1, buffer, true);
+// font.drawText(s, 50, 50, -1, buffer, true);
GLStateTracker tracker = GLStateTracker.instance();
GL11.glClearColor(0.2F, 0.55F, 0.66F, 1F);
+ while(!window.shouldClose()) {
+ GLFW.glfwPollEvents();
+ if(window.changed()) {
+ window.updateViewport();
+ applyWindowSize(window);
+ }
+
+ window.beginFrame();
+ GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
+ texture.bind();
+ shaderTest.bind();
+ model.bindArray();
+ GLStateTracker.drawArrays(GLMode.TRIANGLES.glValue(), 6);
+ model.unbindArray();
+// guiModel[0].bindArray();
+// guiShader.bind();
+// tracker.blend.enable();
+// tracker.blend.setFunction(GLBlendFactor.SRC_ALPHA, GLBlendFactor.ONE_MINUS_SRC_ALPHA);
+// for(GLDraw draw : draws) {
+// tracker.textures.bind(draw.texture());
+// GLStateTracker.drawArrays(GLMode.TRIANGLES.glValue(), draw.startVertex(), draw.vertexCount());
+// }
+// GLStateTracker.instance().blend.disable();
+// guiModel[0].unbindArray();
+
+ window.handleInput();
+ window.finishFrame();
+ try { Thread.sleep(100); }
+ catch(InterruptedException e) { e.printStackTrace(); }
+ }
+ window.destroy();
+ manager.destroy();
+ }
+
+ public void drawSecondScreen(Window window) {
+ window.setupContext();
+ assets.addListener(GLStateTracker.instance().shaders);
+ Shader secondShader = Shader.createAndRegister(TestShader::new);
+
+ guiShader.register();
+ window.visible(true);
+ GL11.glClearColor(0.4F, 0.55F, 0.36F, 1F);
+ int size = 512;
+ int half = size >> 1;
+ int base = size >> 3;
+
+ DynamicTexture texture = new DynamicTexture(size, size, DynamicTexture.DEFAULT_PARAMETERS);
+ texture.fill(0, 0, size, size, -1);
+ texture.fill(0, 0, half, half, 255, 0, 0, 255);
+ texture.fill(half, 0, half, half, 0, 255, 0, 255);
+ texture.fill(half, half, half, half, 255, 0, 0, 255);
+ texture.fill(0, half, half, half, 0, 0, 255, 255);
+ texture.process(true);
+
+ VertexBuilder builder = new VertexBuilder(255);
+ builder.start(GLMode.TRIANGLES, VertexTypes.TESTING);
+ builder.pos(-0.5F, -0.5F, 0).tex(0F, 1F).rgba(-1).endVertex();
+ builder.pos(0.5F, -0.5F, 0).tex(1F, 1F).rgba(-1).endVertex();
+ builder.pos(0.5F, 0.5F, 0).tex(1F, 0F).rgba(-1).endVertex();
+ builder.pos(0.5F, 0.5F, 0).tex(1F, 0F).rgba(-1).endVertex();
+ builder.pos(-0.5F, 0.5F, 0).tex(0F, 0F).rgba(-1).endVertex();
+ builder.pos(-0.5F, -0.5F, 0).tex(0F, 1F).rgba(-1).endVertex();
+
+ TestModel model = new TestModel(builder.getBytes());
while(!window.shouldClose()) {
GLFW.glfwPollEvents();
if(window.changed()) {
@@ -172,32 +243,17 @@ public class NewInputTest {
window.beginFrame();
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
texture.bind();
- shaderTest.bind();
+ secondShader.bind();
model.bindArray();
GLStateTracker.drawArrays(GLMode.TRIANGLES.glValue(), 6);
model.unbindArray();
- guiModel[0].bindArray();
- guiShader.bind();
- tracker.blend.enable();
- tracker.blend.setFunction(GLBlendFactor.SRC_ALPHA, GLBlendFactor.ONE_MINUS_SRC_ALPHA);
- for(GLDraw draw : draws) {
- tracker.textures.bind(draw.texture());
- GLStateTracker.drawArrays(GLMode.TRIANGLES.glValue(), draw.startVertex(), draw.vertexCount());
- }
- GLStateTracker.instance().blend.disable();
- guiModel[0].unbindArray();
-// NanoVG.nvgBeginFrame(vg, window.width(), window.height(), 1F);
-// NanoVG.nvgFontSize(vg, 64);
-// NanoVG.nvgText(vg, 50, 520, "Testing My Theory");
-// NanoVG.nvgEndFrame(vg);
-
+
window.handleInput();
window.finishFrame();
try { Thread.sleep(100); }
catch(InterruptedException e) { e.printStackTrace(); }
}
window.destroy();
- manager.destroy();
}
public static class TexturedBuffer implements Font.TexturedBuffer {
diff --git a/src/main/java/speiger/src/coreengine/assets/base/PackReloadingTask.java b/src/main/java/speiger/src/coreengine/assets/base/PackReloadingTask.java
index 26741dd..359ef26 100644
--- a/src/main/java/speiger/src/coreengine/assets/base/PackReloadingTask.java
+++ b/src/main/java/speiger/src/coreengine/assets/base/PackReloadingTask.java
@@ -45,7 +45,7 @@ public class PackReloadingTask {
syncStep.complete(new Object());
}
});
- return syncStep.thenCombine(currentStep, (k, v) -> value);
+ return syncStep.thenCombine(currentStep, (_, _) -> value);
}
}
}
diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/components/base/IListableComponent.java b/src/main/java/speiger/src/coreengine/rendering/gui/components/base/IListableComponent.java
index e1f7c6b..d3fe95f 100644
--- a/src/main/java/speiger/src/coreengine/rendering/gui/components/base/IListableComponent.java
+++ b/src/main/java/speiger/src/coreengine/rendering/gui/components/base/IListableComponent.java
@@ -38,7 +38,7 @@ public sealed interface IListableComponent permits GuiComponent {
}
public default GuiComponent addListener(Runnable runnable, int index) {
- return addListener(T -> runnable.run(), index);
+ return addListener(_ -> runnable.run(), index);
}
public default GuiComponent removeUserActionListener(Consumer listener) {
diff --git a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/SimpleUIRenderer.java b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/SimpleUIRenderer.java
index ab3abeb..a8e8406 100644
--- a/src/main/java/speiger/src/coreengine/rendering/gui/renderer/SimpleUIRenderer.java
+++ b/src/main/java/speiger/src/coreengine/rendering/gui/renderer/SimpleUIRenderer.java
@@ -10,6 +10,7 @@ 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.rendering.guiOld.helper.box.IGuiBox;
+import speiger.src.coreengine.rendering.input.window.Window;
import speiger.src.coreengine.rendering.models.DrawCall;
import speiger.src.coreengine.rendering.tesselation.buffer.VertexBuilder;
import speiger.src.coreengine.rendering.tesselation.format.VertexFormat;
@@ -26,8 +27,13 @@ public class SimpleUIRenderer implements IUIRenderer, AutoCloseable {
List drawCalls = new ObjectArrayList<>();
VertexBuilder builder = new VertexBuilder(Short.MAX_VALUE);
ScissorsManager manager = new ScissorsManager(32);
+ Window window;
+ public SimpleUIRenderer(Window window) {
+ this.window = window;
+ }
+
@Override
public void close() throws Exception {
builder.close();
diff --git a/src/main/java/speiger/src/coreengine/rendering/guiOld/base/GuiScreenBase.java b/src/main/java/speiger/src/coreengine/rendering/guiOld/base/GuiScreenBase.java
index ed999f2..0377595 100644
--- a/src/main/java/speiger/src/coreengine/rendering/guiOld/base/GuiScreenBase.java
+++ b/src/main/java/speiger/src/coreengine/rendering/guiOld/base/GuiScreenBase.java
@@ -485,7 +485,7 @@ public class GuiScreenBase extends GuiBase
@Override
public boolean isComponentInFront(GuiComponent comp)
{
- if(!hasFocus() || renderOrder.last() == comp || (renderOrder.last() instanceof IButtonComponent && ((IButtonComponent)renderOrder.last()).isPopup()))
+ if(!hasFocus() || renderOrder.getLast() == comp || (renderOrder.getLast() instanceof IButtonComponent && ((IButtonComponent)renderOrder.getLast()).isPopup()))
{
return true;
}
diff --git a/src/main/java/speiger/src/coreengine/rendering/guiOld/components/ListComponent.java b/src/main/java/speiger/src/coreengine/rendering/guiOld/components/ListComponent.java
index 44ef3a9..c773a9f 100644
--- a/src/main/java/speiger/src/coreengine/rendering/guiOld/components/ListComponent.java
+++ b/src/main/java/speiger/src/coreengine/rendering/guiOld/components/ListComponent.java
@@ -181,11 +181,11 @@ public class ListComponent extends GuiComponent
{
if(selectionMode == SELECTION_MODE_MULTI && Keyboard.isShiftDown())
{
- for(int i = selectedIndexes.lastInt();iindex;i--)
+ for(int i = selectedIndexes.getLastInt();i>index;i--)
{
selectedIndexes.add(i);
}
diff --git a/src/main/java/speiger/src/coreengine/rendering/input/window/Window.java b/src/main/java/speiger/src/coreengine/rendering/input/window/Window.java
index 3862192..a4dbb40 100644
--- a/src/main/java/speiger/src/coreengine/rendering/input/window/Window.java
+++ b/src/main/java/speiger/src/coreengine/rendering/input/window/Window.java
@@ -144,8 +144,14 @@ public class Window {
}
}
- public void beginFrame() {
+ public void setupContext() {
+ GL.setCapabilities(capabilities);
GLFW.glfwMakeContextCurrent(id);
+
+ }
+
+ public void beginFrame() {
+ setupContext();
if(flags.isFlagSet(WINDOW_CHANGE)) updateViewport();
}
diff --git a/src/main/java/speiger/src/coreengine/rendering/inputOld/Mouse.java b/src/main/java/speiger/src/coreengine/rendering/inputOld/Mouse.java
index 2ae2ca0..c0b0d1f 100644
--- a/src/main/java/speiger/src/coreengine/rendering/inputOld/Mouse.java
+++ b/src/main/java/speiger/src/coreengine/rendering/inputOld/Mouse.java
@@ -38,7 +38,7 @@ public class Mouse
window.addCallback(T -> GLFW.glfwSetCursorPosCallback(T, Mouse.this::onDrag));
window.addCallback(T -> GLFW.glfwSetMouseButtonCallback(T, Mouse.this::onClick));
window.addCallback(T -> GLFW.glfwSetScrollCallback(T, Mouse.this::onScroll));
- window.addCallback(T -> GLFW.glfwSetCursorEnterCallback(T, (K, V) -> active = V));
+ window.addCallback(T -> GLFW.glfwSetCursorEnterCallback(T, (_, V) -> active = V));
}
protected void onDrag(long window, double xpos, double ypos) {
diff --git a/src/main/java/speiger/src/coreengine/rendering/shader/Shader.java b/src/main/java/speiger/src/coreengine/rendering/shader/Shader.java
index f5cf095..3738459 100644
--- a/src/main/java/speiger/src/coreengine/rendering/shader/Shader.java
+++ b/src/main/java/speiger/src/coreengine/rendering/shader/Shader.java
@@ -7,7 +7,6 @@ import speiger.src.coreengine.assets.base.IAssetProvider;
import speiger.src.coreengine.rendering.utils.GLStateTracker;
public class Shader implements Supplier {
- boolean registered = false;
T program;
Function provider;
@@ -36,8 +35,6 @@ public class Shader implements Supplier {
}
public void register() {
- if(registered) throw new IllegalStateException("Shader is already registered!");
- registered = true;
GLStateTracker.instance().shaders.register(this);
}
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 0d1c89e..2b8cb52 100644
--- a/src/main/java/speiger/src/coreengine/rendering/shader/ShaderTracker.java
+++ b/src/main/java/speiger/src/coreengine/rendering/shader/ShaderTracker.java
@@ -14,6 +14,7 @@ public class ShaderTracker implements ISimpleRealodableAsset, IManagedAsset {
IAssetProvider provider;
public void register(Shader> shader) {
+ if(shaders.contains(shader)) throw new IllegalStateException("Shader is already registered!");
shaders.add(shader);
load(provider, shader);
}
diff --git a/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java b/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java
index af59914..99b499c 100644
--- a/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java
+++ b/src/main/java/speiger/src/coreengine/utils/eventbus/EventBus.java
@@ -45,8 +45,9 @@ public class EventBus
SubscribeEvent data = t.getAnnotation(SubscribeEvent.class);
if(data == null) return;
Consumer listener = new MethodListener(LOOKUP.unreflect(t).bindTo(obj));
- getListeners(castClass(t.getParameterTypes()[0])).addListener(data.priority(), listener);
- list.add(new EventListener(data.value(), listener));
+ Class clz = castClass(t.getParameterTypes()[0]);
+ getListeners(clz).addListener(data.priority(), listener);
+ list.add(new EventListener(clz, listener));
}
catch(Exception e) { e.printStackTrace(); }
});
@@ -99,11 +100,12 @@ public class EventBus
}
protected Listeners getListeners(Class extends Event> event) {
- //TODO this is abusing undefined behavior!
- return listeners.computeIfAbsent(event, T -> {
- if(T == Event.class) return new Listeners();
- else return new Listeners(getListeners(castClass(event.getSuperclass())));
- });
+ Listeners result = listeners.get(event);
+ if(result == null) {
+ result = event == Event.class ? new Listeners() : new Listeners(getListeners(castClass(event.getSuperclass())));
+ listeners.put(event, result);
+ }
+ return result;
}
@SuppressWarnings("unchecked")
@@ -117,22 +119,11 @@ public class EventBus
}
public static record EventListener(Class extends Event> event, Consumer listener) {}
-
- public static class MethodListener implements Consumer {
- MethodHandle handle;
-
- public MethodListener(MethodHandle handle) {
- this.handle = handle;
- }
-
+ public static record MethodListener(MethodHandle handle) implements Consumer {
@Override
public void accept(Event t) {
- try {
- handle.invoke(t);
- }
- catch(Throwable e) {
- e.printStackTrace();
- }
+ try { handle.invoke(t); }
+ catch(Throwable e) { e.printStackTrace(); }
}
}
}
diff --git a/src/main/java/speiger/src/coreengine/utils/eventbus/Listeners.java b/src/main/java/speiger/src/coreengine/utils/eventbus/Listeners.java
index f485e42..467b5ba 100644
--- a/src/main/java/speiger/src/coreengine/utils/eventbus/Listeners.java
+++ b/src/main/java/speiger/src/coreengine/utils/eventbus/Listeners.java
@@ -49,8 +49,7 @@ public class Listeners
if(parent != null) parent.getListeners(entry, events);
}
- public Consumer[] getListeners()
- {
+ public Consumer[] getListeners() {
if(rebuild) rebuildListeners();
return listeners;
}
diff --git a/src/main/java/speiger/src/coreengine/utils/io/finders/JavaFileFinder.java b/src/main/java/speiger/src/coreengine/utils/io/finders/JavaFileFinder.java
index 3994f6e..334eccc 100644
--- a/src/main/java/speiger/src/coreengine/utils/io/finders/JavaFileFinder.java
+++ b/src/main/java/speiger/src/coreengine/utils/io/finders/JavaFileFinder.java
@@ -21,7 +21,7 @@ public class JavaFileFinder implements IFileFinder {
if((flags & MULTI_FILE) != 0) file.setMultiSelectionEnabled(true);
file.setFileHidingEnabled(false);
file.setFileFilter(new Filter(description, validFormats));
- if((flags & SAVE) != 0 && file.showSaveDialog(null) == 0) return ObjectArrayList.wrap(sanitize(file.getSelectedFiles(), validFormats.first()));
+ if((flags & SAVE) != 0 && file.showSaveDialog(null) == 0) return ObjectArrayList.wrap(sanitize(file.getSelectedFiles(), validFormats.getFirst()));
else if((flags & SAVE) == 0 && file.showOpenDialog(null) == 0) return ObjectArrayList.wrap(file.getSelectedFiles());
return new ObjectArrayList<>();
}
diff --git a/src/main/java/speiger/src/coreengine/utils/io/finders/NativeFileFinder.java b/src/main/java/speiger/src/coreengine/utils/io/finders/NativeFileFinder.java
index 290871a..f4ca256 100644
--- a/src/main/java/speiger/src/coreengine/utils/io/finders/NativeFileFinder.java
+++ b/src/main/java/speiger/src/coreengine/utils/io/finders/NativeFileFinder.java
@@ -22,7 +22,7 @@ public class NativeFileFinder implements IFileFinder {
PointerBuffer output = stack.mallocPointer(1);
if(NativeFileDialog.NFD_SaveDialog(output, toFileFormat(stack, validFormats, description), startPath, "") == NativeFileDialog.NFD_OKAY) {
File file = new File(output.getStringUTF8());
- if(file.getName().lastIndexOf(".") == -1) file = new File(file.getParent(), file.getName()+"."+validFormats.first());
+ if(file.getName().lastIndexOf(".") == -1) file = new File(file.getParent(), file.getName()+"."+validFormats.getFirst());
files.add(file);
}
}