diff --git a/buildNumber.properties b/buildNumber.properties index 0c3b76f3..a7af7434 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,3 @@ #maven.buildNumber.plugin properties file -#Wed Aug 28 13:34:16 EDT 2024 -buildNumber=298 +#Wed Aug 28 20:50:08 EDT 2024 +buildNumber=300 diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index aecfe115..656a9b81 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -604,6 +604,7 @@ public class Globals { Globals.clientSceneWrapper = new ClientSceneWrapper(Globals.clientScene, new CollisionEngine()); Globals.clientSynchronizationManager = new ClientSynchronizationManager(); Globals.realmManager = null; + Globals.assetManager = null; } diff --git a/src/main/java/electrosphere/engine/threads/ThreadManager.java b/src/main/java/electrosphere/engine/threads/ThreadManager.java index 5f7e74b0..c48300a5 100644 --- a/src/main/java/electrosphere/engine/threads/ThreadManager.java +++ b/src/main/java/electrosphere/engine/threads/ThreadManager.java @@ -102,7 +102,10 @@ public class ThreadManager { try { thread.getThread().join(10); if(thread.getThread().isAlive()){ - throw new IllegalStateException("Failed to interrupt thread! " + thread.getLabel()); + String errorMessage = "Failed to interrupt thread! " + thread.getLabel(); + System.err.println(errorMessage); + new IllegalStateException().printStackTrace(); + System.exit(1); } } catch (InterruptedException e) { CodeUtils.todo(e, "Think about how to handle this"); diff --git a/src/main/java/electrosphere/renderer/RenderingEngine.java b/src/main/java/electrosphere/renderer/RenderingEngine.java index f9d1568d..55aa95c7 100644 --- a/src/main/java/electrosphere/renderer/RenderingEngine.java +++ b/src/main/java/electrosphere/renderer/RenderingEngine.java @@ -231,7 +231,7 @@ public class RenderingEngine { //Gives hints to glfw to control how opengl will be used glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); - glslVersion = "#version 410"; + glslVersion = "#version 430"; glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //headless option if(Globals.RUN_HIDDEN){ diff --git a/src/main/java/electrosphere/renderer/model/Mesh.java b/src/main/java/electrosphere/renderer/model/Mesh.java index a330c9e5..13bd430d 100644 --- a/src/main/java/electrosphere/renderer/model/Mesh.java +++ b/src/main/java/electrosphere/renderer/model/Mesh.java @@ -411,8 +411,7 @@ public class Mesh { if(texture != null){ texture.bind(openGLState,5+i); } - glUniform1i(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), textureMask.getUniformNames().get(i)),5+i); - Globals.renderingEngine.checkError(); + openGLState.getActiveShader().setUniform(openGLState, textureMask.getUniformNames().get(i), 5+i); i++; } } else if(textureMask.getTexturePaths() != null){ @@ -435,8 +434,7 @@ public class Mesh { Globals.renderingEngine.checkError(); openGLState.glBindTexture(GL_TEXTURE_2D, RenderingEngine.lightBufferDepthTexture.getTexturePointer()); Globals.renderingEngine.checkError(); - glUniform1i(glGetUniformLocation(openGLState.getActiveShader().getShaderId(), "shadowMap"), 3); - Globals.renderingEngine.checkError(); + openGLState.getActiveShader().setUniform(openGLState, "shadowMap", 3); } diff --git a/src/main/java/electrosphere/renderer/shader/ShaderProgram.java b/src/main/java/electrosphere/renderer/shader/ShaderProgram.java index df90f2ac..f3dd527a 100644 --- a/src/main/java/electrosphere/renderer/shader/ShaderProgram.java +++ b/src/main/java/electrosphere/renderer/shader/ShaderProgram.java @@ -39,6 +39,7 @@ import org.lwjgl.system.MemoryStack; import electrosphere.engine.Globals; import electrosphere.logger.LoggerInterface; import electrosphere.renderer.OpenGLState; +import electrosphere.renderer.RenderingEngine; import electrosphere.util.FileUtils; /** @@ -159,7 +160,7 @@ public class ShaderProgram { LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader))); } //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram - rVal.shaderId = glCreateProgram(); + rVal.shaderId = GL40.glCreateProgram(); //This attaches the vertex and fragment shaders to the program glAttachShader(rVal.shaderId, rVal.vertexShader); glAttachShader(rVal.shaderId, rVal.fragmentShader); @@ -279,7 +280,7 @@ public class ShaderProgram { LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader))); } //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram - rVal.shaderId = glCreateProgram(); + rVal.shaderId = GL40.glCreateProgram(); //This attaches the vertex and fragment shaders to the program glAttachShader(rVal.shaderId, rVal.vertexShader); glAttachShader(rVal.shaderId, rVal.fragmentShader); @@ -380,7 +381,7 @@ public class ShaderProgram { LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader))); } //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram - rVal.shaderId = glCreateProgram(); + rVal.shaderId = GL40.glCreateProgram(); //This attaches the vertex and fragment shaders to the program glAttachShader(rVal.shaderId, rVal.vertexShader); glAttachShader(rVal.shaderId, rVal.fragmentShader); @@ -557,7 +558,7 @@ public class ShaderProgram { } } //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram - rVal.shaderId = glCreateProgram(); + rVal.shaderId = GL40.glCreateProgram(); //This attaches the vertex and fragment shaders to the program glAttachShader(rVal.shaderId, rVal.vertexShader); glAttachShader(rVal.shaderId, rVal.fragmentShader); @@ -646,7 +647,7 @@ public class ShaderProgram { LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader))); } //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram - rVal.shaderId = glCreateProgram(); + rVal.shaderId = GL40.glCreateProgram(); //This attaches the vertex and fragment shaders to the program glAttachShader(rVal.shaderId, rVal.vertexShader); glAttachShader(rVal.shaderId, rVal.geometryShader); @@ -719,13 +720,27 @@ public class ShaderProgram { * @param value The value to set the uniform to */ public void setUniform(OpenGLState openGLState, String uniformName, Object value){ + // + //Error checking if(uniformName == null || uniformName.equals("")){ throw new IllegalArgumentException("Trying to set invalid uniform name"); } + if(this.getShaderId() != openGLState.getActiveShader().getShaderId()){ + throw new IllegalStateException("Trying to set uniform on shader that is not active"); + } + + // + //get uniform location int uniformLocation = GL40.glGetUniformLocation(this.getShaderId(), uniformName); - if(Globals.renderingEngine.checkError()){ + int glErrorCode = Globals.renderingEngine.getError(); + //TODO: fix manually ignoring GL_INVALID_VALUE from call + if(glErrorCode != 0 && glErrorCode != GL40.GL_INVALID_VALUE){ + LoggerInterface.loggerRenderer.DEBUG_LOOP(RenderingEngine.getErrorInEnglish(glErrorCode)); LoggerInterface.loggerRenderer.WARNING("Shader id: " + this.getShaderId()); } + + // + //set the uniform if(uniformLocation == INVALID_UNIFORM_NAME){ LoggerInterface.loggerRenderer.DEBUG_LOOP("Searched for uniform in a shader that does not contain it. Uniform name: \"" + uniformName + "\""); } else {