From 3fefecbc9ad6854f0522525abc22c691eefe473e Mon Sep 17 00:00:00 2001 From: David Hall Date: Sat, 7 Jan 2023 05:40:31 -0500 Subject: [PATCH 1/7] Add .gitignore Added by Eclipse when project was imported --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/bin/ From d83f672e312df56624e03ef1e7155925f323716c Mon Sep 17 00:00:00 2001 From: David Hall Date: Sat, 7 Jan 2023 05:42:08 -0500 Subject: [PATCH 2/7] Commit Eclipse generated files --- .classpath | 20 ++++++++++++++++++++ .project | 17 +++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 .classpath create mode 100644 .project diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..bb0b9be --- /dev/null +++ b/.classpath @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..c1751e1 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + jogl-compute-shaders-fireworks + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + From 1aad27e0116a65bcde06d54b5690644041c82716 Mon Sep 17 00:00:00 2001 From: David Hall Date: Sat, 7 Jan 2023 05:47:39 -0500 Subject: [PATCH 3/7] Fix compile error in vertex shader Fixes shader compile error when run on Windows 10 with Intel(R) HD Graphics 630 GL_VERSION: 4.4.0 - Build 27.20.100.9664 --- src/com/persesgames/jogl/explosion/explShader.vert | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/persesgames/jogl/explosion/explShader.vert b/src/com/persesgames/jogl/explosion/explShader.vert index d106de2..9d26295 100644 --- a/src/com/persesgames/jogl/explosion/explShader.vert +++ b/src/com/persesgames/jogl/explosion/explShader.vert @@ -16,7 +16,7 @@ varying vec4 varying_Color; void main(void) { mat4 uniform_Projection = mat4(1); - gl_PointSize = 15f; + gl_PointSize = 15.0f; gl_Position = uniform_Projection * attribute_Position; //vec4(attribute_Position.x, attribute_Position.y, 0, 1); varying_Color = attribute_Color; } From 58e8505660b33ab12dccee86e9118fd3a7946c54 Mon Sep 17 00:00:00 2001 From: David Hall Date: Sat, 7 Jan 2023 05:53:16 -0500 Subject: [PATCH 4/7] Terminate background thread when closing window without pressing Escape This avoids a zombie thread with no UI from which to receive keyboard input when the window is closed before pressing . --- src/com/persesgames/jogl/Renderer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/persesgames/jogl/Renderer.java b/src/com/persesgames/jogl/Renderer.java index 5f7117c..11c770c 100644 --- a/src/com/persesgames/jogl/Renderer.java +++ b/src/com/persesgames/jogl/Renderer.java @@ -68,7 +68,7 @@ public class Renderer implements GLEventListener { } } - stopped = keyboard.isPressed(KeyEvent.VK_ESCAPE); + stopped |= keyboard.isPressed(KeyEvent.VK_ESCAPE); } Renderer.this.glWindow.destroy(); @@ -112,6 +112,7 @@ public class Renderer implements GLEventListener { @Override public void dispose(GLAutoDrawable drawable) { + stop(); explosionComputeHandler.dispose(); } From 94a468d9323337d95126ca1dbc377272573dd2ca Mon Sep 17 00:00:00 2001 From: David Hall Date: Thu, 12 Jan 2023 13:28:54 -0500 Subject: [PATCH 5/7] Fix shader limit logging GL_MAX_COMPUTE_WORK_GROUP_SIZE and GL_MAX_COMPUTE_WORK_GROUP_COUNT were throwing exceptions when called with DebugGL4 because the wrong API was being used to retrieve them. --- src/com/persesgames/jogl/Renderer.java | 30 +++++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/com/persesgames/jogl/Renderer.java b/src/com/persesgames/jogl/Renderer.java index 11c770c..37526a1 100644 --- a/src/com/persesgames/jogl/Renderer.java +++ b/src/com/persesgames/jogl/Renderer.java @@ -1,14 +1,22 @@ package com.persesgames.jogl; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +import javax.media.opengl.DebugGL4; +import javax.media.opengl.GL; +import javax.media.opengl.GL2; +import javax.media.opengl.GL2ES2; +import javax.media.opengl.GL4; +import javax.media.opengl.GLAutoDrawable; +import javax.media.opengl.GLEventListener; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.jogamp.newt.event.KeyEvent; import com.jogamp.newt.opengl.GLWindow; import com.persesgames.jogl.explosion.ExplosionComputeHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.media.opengl.*; -import java.util.Random; -import java.util.concurrent.TimeUnit; /** * Date: 10/25/13 @@ -95,10 +103,10 @@ public class Renderer implements GLEventListener { gl.glGetIntegerv(GL2.GL_MAX_VERTEX_ATTRIBS, result, 0); logger.info("GL_MAX_VERTEX_ATTRIBS=" + result[0]); - gl.glGetIntegerv(GL4.GL_MAX_COMPUTE_WORK_GROUP_SIZE, result, 0); + glGetIntegerIndexed(gl, GL4.GL_MAX_COMPUTE_WORK_GROUP_SIZE, result); logger.info("GL_MAX_COMPUTE_WORK_GROUP_SIZE= {},{},{}", result[0], result[1], result[2]); - gl.glGetIntegerv(GL4.GL_MAX_COMPUTE_WORK_GROUP_COUNT, result, 0); + glGetIntegerIndexed(gl, GL4.GL_MAX_COMPUTE_WORK_GROUP_COUNT, result); logger.info("GL_MAX_COMPUTE_WORK_GROUP_COUNT= {},{},{}", result[0], result[1], result[2]); explosionComputeHandler = new ExplosionComputeHandler(gl); @@ -109,6 +117,12 @@ public class Renderer implements GLEventListener { timer.stop("init"); } + // https://stackoverflow.com/questions/39004898/get-maximum-workgroup-size-for-compute-shaders + private static void glGetIntegerIndexed(GL4 gl, int target, int[] data) { + for(int i = 0; i < data.length; i++) { + gl.glGetIntegeri_v(target, i, data, i); + } + } @Override public void dispose(GLAutoDrawable drawable) { From 66ddcb0c989d01cbf6c8110d22f03a66ba379c1b Mon Sep 17 00:00:00 2001 From: David Hall Date: Thu, 12 Jan 2023 13:35:11 -0500 Subject: [PATCH 6/7] Fix all Java compiler warnings * raw types * unused imports and variables --- src/com/persesgames/jogl/Renderer.java | 7 +++---- src/com/persesgames/jogl/Timer.java | 10 +++++----- src/com/persesgames/jogl/Util.java | 2 +- .../explosion/ExplosionComputeHandler.java | 19 +++++++++---------- src/com/persesgames/jogl/shader/Program.java | 7 ++----- 5 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/com/persesgames/jogl/Renderer.java b/src/com/persesgames/jogl/Renderer.java index 37526a1..8b4a9fd 100644 --- a/src/com/persesgames/jogl/Renderer.java +++ b/src/com/persesgames/jogl/Renderer.java @@ -1,6 +1,5 @@ package com.persesgames.jogl; -import java.util.Random; import java.util.concurrent.TimeUnit; import javax.media.opengl.DebugGL4; @@ -25,9 +24,9 @@ import com.persesgames.jogl.explosion.ExplosionComputeHandler; public class Renderer implements GLEventListener { private final static Logger logger = LoggerFactory.getLogger(Renderer.class); - private final static int MAX_ENTITIES_PER_COLOR = 2000000; + //private final static int MAX_ENTITIES_PER_COLOR = 2000000; - private final Random random = new Random(System.nanoTime()); + //private final Random random = new Random(System.nanoTime()); private volatile boolean stopped = false; private volatile boolean dirty = true; @@ -41,7 +40,7 @@ public class Renderer implements GLEventListener { private boolean checkError = false; private long lastLog = System.nanoTime(); - private long start = System.currentTimeMillis(); + //private long start = System.currentTimeMillis(); private Timer timer = new Timer(TimeUnit.SECONDS, 1); private ExplosionComputeHandler explosionComputeHandler; diff --git a/src/com/persesgames/jogl/Timer.java b/src/com/persesgames/jogl/Timer.java index 55fb9a7..e7e7fd2 100644 --- a/src/com/persesgames/jogl/Timer.java +++ b/src/com/persesgames/jogl/Timer.java @@ -1,12 +1,12 @@ package com.persesgames.jogl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * Date: 1/4/14 * Time: 8:00 PM @@ -17,7 +17,7 @@ public class Timer { private Map start = new HashMap<>(); private Map times = new HashMap<>(); private Map calls = new HashMap<>(); - private long nanoStart = System.nanoTime(); + //private long nanoStart = System.nanoTime(); private final TimeUnit unit; private final int units; @@ -93,7 +93,7 @@ public class Timer { if (System.nanoTime() > (lastLog + unit.toNanos(units))) { for (String timer : times.keySet()) { - logger.info("Timer '{}' calls '{}' time '{}ms' time/call '{}ms'", timer, getCalls(timer), (getTime(timer) / 1000000d), (getTime(timer) / 1000000d) / (double)getCalls(timer)); + logger.info("Timer '{}' calls '{}' time '{}ms' time/call '{}ms'", timer, getCalls(timer), (getTime(timer) / 1000000d), (getTime(timer) / 1000000d) / getCalls(timer)); } reset(); diff --git a/src/com/persesgames/jogl/Util.java b/src/com/persesgames/jogl/Util.java index eeda565..636a915 100644 --- a/src/com/persesgames/jogl/Util.java +++ b/src/com/persesgames/jogl/Util.java @@ -10,7 +10,7 @@ import java.io.InputStream; */ public class Util { - public static String loadAsText(Class cls, String name) { + public static String loadAsText(Class cls, String name) { byte [] buffer = new byte[1024]; int nr; try (InputStream in = cls.getResourceAsStream(name); ByteArrayOutputStream out = new ByteArrayOutputStream()) { diff --git a/src/com/persesgames/jogl/explosion/ExplosionComputeHandler.java b/src/com/persesgames/jogl/explosion/ExplosionComputeHandler.java index cf8ea34..da547b1 100644 --- a/src/com/persesgames/jogl/explosion/ExplosionComputeHandler.java +++ b/src/com/persesgames/jogl/explosion/ExplosionComputeHandler.java @@ -1,25 +1,24 @@ package com.persesgames.jogl.explosion; -import com.jogamp.common.nio.Buffers; -import com.persesgames.jogl.shader.ComputeProgram; -import com.persesgames.jogl.shader.ShaderProgram; -import com.persesgames.jogl.Util; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.util.Random; import javax.media.opengl.GL; import javax.media.opengl.GL2ES2; import javax.media.opengl.GL4; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; -import java.util.Random; + +import com.jogamp.common.nio.Buffers; +import com.persesgames.jogl.Util; +import com.persesgames.jogl.shader.ComputeProgram; +import com.persesgames.jogl.shader.ShaderProgram; /** * Date: 1/15/14 * Time: 8:23 PM */ public class ExplosionComputeHandler { - private final static Logger logger = LoggerFactory.getLogger(ExplosionComputeHandler.class); + //private final static Logger logger = LoggerFactory.getLogger(ExplosionComputeHandler.class); private final static int EXPLOSION_PARTICLES = 256; private final static int MAX_EXPLOSION_PARTICLES = 250000; diff --git a/src/com/persesgames/jogl/shader/Program.java b/src/com/persesgames/jogl/shader/Program.java index 36e2a32..4bbadd8 100644 --- a/src/com/persesgames/jogl/shader/Program.java +++ b/src/com/persesgames/jogl/shader/Program.java @@ -1,13 +1,10 @@ package com.persesgames.jogl.shader; -import com.persesgames.jogl.Renderer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.media.opengl.GL2ES2; import java.util.HashMap; import java.util.Map; +import javax.media.opengl.GL2ES2; + public abstract class Program { protected GL2ES2 gl; From 90fc282c7c6543015be180e1c5860e52ba69938d Mon Sep 17 00:00:00 2001 From: David Hall Date: Thu, 12 Jan 2023 13:39:52 -0500 Subject: [PATCH 7/7] Specify eclipse project encoding to be UTF-8 --- .settings/org.eclipse.core.resources.prefs | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .settings/org.eclipse.core.resources.prefs diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8