diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 7f93ea52..be0b5413 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1160,6 +1160,7 @@ Add texture atlasing to blocks Remove unused import Geometry mesh generation class Cloud shader +VisualShader refactoring # TODO diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index 7de1d0dd..7cbbda62 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -647,7 +647,7 @@ public class Globals { //initialize required windows WindowUtils.initBaseWindows(); //init default shaderProgram - defaultMeshShader = VisualShader.smart_assemble_shader(false,true); + defaultMeshShader = VisualShader.smartAssembleShader(false,true); //init terrain shader program terrainShaderProgram = VisualShader.loadSpecificShader("/Shaders/entities/terrain2/terrain2.vs", "/Shaders/entities/terrain2/terrain2.fs"); blockShader = VisualShader.loadSpecificShader("/Shaders/entities/block/block.vs", "/Shaders/entities/block/block.fs"); diff --git a/src/main/java/electrosphere/renderer/RenderUtils.java b/src/main/java/electrosphere/renderer/RenderUtils.java index 5e2fbf71..90c58db6 100644 --- a/src/main/java/electrosphere/renderer/RenderUtils.java +++ b/src/main/java/electrosphere/renderer/RenderUtils.java @@ -386,7 +386,7 @@ public class RenderUtils { Material mat = new Material(); mat.set_diffuse("Textures/color/transparent_teal.png"); sphereMesh.setMaterial(mat); - sphereMesh.setShader(VisualShader.smart_assemble_shader(false, true)); + sphereMesh.setShader(VisualShader.smartAssembleShader(false, true)); GL40.glBindVertexArray(0); sphereMesh.setParent(model); model.getMeshes().add(sphereMesh); @@ -441,7 +441,7 @@ public class RenderUtils { Material mat = new Material(); mat.set_diffuse("Textures/color/transparent_teal.png"); sphereMesh.setMaterial(mat); - sphereMesh.setShader(VisualShader.smart_assemble_shader(false, true)); + sphereMesh.setShader(VisualShader.smartAssembleShader(false, true)); GL40.glBindVertexArray(0); sphereMesh.setParent(model); model.getMeshes().add(sphereMesh); @@ -528,7 +528,7 @@ public class RenderUtils { Material mat = new Material(); mat.set_diffuse("Textures/color/transparent_teal.png"); sphereMesh.setMaterial(mat); - sphereMesh.setShader(VisualShader.smart_assemble_shader(false, true)); + sphereMesh.setShader(VisualShader.smartAssembleShader(false, true)); GL40.glBindVertexArray(0); sphereMesh.setParent(model); model.getMeshes().add(sphereMesh); diff --git a/src/main/java/electrosphere/renderer/meshgen/MeshLoader.java b/src/main/java/electrosphere/renderer/meshgen/MeshLoader.java index ff0638ad..28277ba1 100644 --- a/src/main/java/electrosphere/renderer/meshgen/MeshLoader.java +++ b/src/main/java/electrosphere/renderer/meshgen/MeshLoader.java @@ -331,8 +331,8 @@ public class MeshLoader { if(!Globals.HEADLESS){ - rVal.setShader(VisualShader.smart_assemble_shader(has_bones, apply_lighting)); - rVal.setShader(VisualShader.smart_assemble_shader(has_bones, apply_lighting)); + rVal.setShader(VisualShader.smartAssembleShader(has_bones, apply_lighting)); + rVal.setShader(VisualShader.smartAssembleShader(has_bones, apply_lighting)); rVal.setOITShader(VisualShader.smartAssembleOITProgram(has_bones, apply_lighting)); } diff --git a/src/main/java/electrosphere/renderer/shader/VisualShader.java b/src/main/java/electrosphere/renderer/shader/VisualShader.java index 6e433f7a..f226675a 100644 --- a/src/main/java/electrosphere/renderer/shader/VisualShader.java +++ b/src/main/java/electrosphere/renderer/shader/VisualShader.java @@ -1,21 +1,5 @@ package electrosphere.renderer.shader; -import static org.lwjgl.opengl.GL11.GL_TRUE; -import static org.lwjgl.opengl.GL20.GL_COMPILE_STATUS; -import static org.lwjgl.opengl.GL20.GL_FRAGMENT_SHADER; -import static org.lwjgl.opengl.GL20.GL_LINK_STATUS; -import static org.lwjgl.opengl.GL20.GL_VERTEX_SHADER; -import static org.lwjgl.opengl.GL20.glAttachShader; -import static org.lwjgl.opengl.GL20.glCompileShader; -import static org.lwjgl.opengl.GL20.glCreateShader; -import static org.lwjgl.opengl.GL20.glDeleteShader; -import static org.lwjgl.opengl.GL20.glGetProgramInfoLog; -import static org.lwjgl.opengl.GL20.glGetProgrami; -import static org.lwjgl.opengl.GL20.glGetShaderi; -import static org.lwjgl.opengl.GL20.glLinkProgram; -import static org.lwjgl.opengl.GL20.glShaderSource; -import static org.lwjgl.opengl.GL32.GL_GEOMETRY_SHADER; - import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; @@ -27,7 +11,6 @@ import java.util.Map; import javax.management.RuntimeErrorException; -import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL40; import electrosphere.engine.Globals; @@ -37,31 +20,44 @@ import electrosphere.renderer.RenderingEngine; import electrosphere.util.FileUtils; /** - * A shader program + * A visual shader program */ public class VisualShader implements Shader { - // - //Program stuff - // + /** + * The vertex shader location + */ int vertexShader; - int geometryShader; + + /** + * The fragment shader location + */ int fragmentShader; + + /** + * The shader's ID + */ int shaderId; - // - //Uniform locations - // - - //Uniforms + /** + * The map of uniform location -> current value of uniform + */ public Map uniformMap = new HashMap(); - //keeps track of programs that have already been compiled and returns them instead of recompiling from scratch + /** + * The map of path -> already compiled shader + */ static Map alreadyCompiledMap = new HashMap(); - public static VisualShader smart_assemble_shader(boolean ContainsBones, boolean apply_lighting){ + /** + * Smart assembles a shader + * @param ContainsBones true if the mesh contains bones + * @param apply_lighting true if lighting should be applied + * @return The visual shader + */ + public static VisualShader smartAssembleShader(boolean ContainsBones, boolean apply_lighting){ //return shader if it has already been compiled String shaderKey = ContainsBones + "-" + apply_lighting; @@ -122,50 +118,50 @@ public class VisualShader implements Shader { } String fragmentShaderSource = tempForReadingShaders; //Creates a new shader object and assigns its 'pointer' to the integer "vertexShader" - rVal.vertexShader = glCreateShader(GL20.GL_VERTEX_SHADER); + rVal.vertexShader = GL40.glCreateShader(GL40.GL_VERTEX_SHADER); //This alerts openGL to the presence of a vertex shader and points the shader at its source - glShaderSource(rVal.vertexShader, vertexShaderSource); + GL40.glShaderSource(rVal.vertexShader, vertexShaderSource); //Compiles the source for the vertex shader object - glCompileShader(rVal.vertexShader); + GL40.glCompileShader(rVal.vertexShader); //The following tests if the vertex shader compiles successfully int success; - success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS); - if (success != GL_TRUE) { + success = GL40.glGetShaderi(rVal.vertexShader, GL40.GL_COMPILE_STATUS); + if (success != GL40.GL_TRUE) { LoggerInterface.loggerRenderer.WARNING("Vertex Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Source is: "); - LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.vertexShader)); - LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader))); + LoggerInterface.loggerRenderer.WARNING(GL40.glGetShaderSource(rVal.vertexShader)); + LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL40.glGetShaderInfoLog(rVal.vertexShader))); } //Creates and opengl object for a fragment shader and assigns its 'pointer' to the integer fragmentShader - rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + rVal.fragmentShader = GL40.glCreateShader(GL40.GL_FRAGMENT_SHADER); //This points the opengl shadder object to its proper source - glShaderSource(rVal.fragmentShader, fragmentShaderSource); + GL40.glShaderSource(rVal.fragmentShader, fragmentShaderSource); //This compiles the shader object - glCompileShader(rVal.fragmentShader); + GL40.glCompileShader(rVal.fragmentShader); //This tests for the success of the compile attempt - success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS); - if (success != GL_TRUE) { + success = GL40.glGetShaderi(rVal.fragmentShader, GL40.GL_COMPILE_STATUS); + if (success != GL40.GL_TRUE) { LoggerInterface.loggerRenderer.WARNING("Fragment Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Source is: "); - LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.fragmentShader)); - LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader))); + LoggerInterface.loggerRenderer.WARNING(GL40.glGetShaderSource(rVal.fragmentShader)); + LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL40.glGetShaderInfoLog(rVal.fragmentShader))); } //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram rVal.shaderId = GL40.glCreateProgram(); //This attaches the vertex and fragment shaders to the program - glAttachShader(rVal.shaderId, rVal.vertexShader); - glAttachShader(rVal.shaderId, rVal.fragmentShader); + GL40.glAttachShader(rVal.shaderId, rVal.vertexShader); + GL40.glAttachShader(rVal.shaderId, rVal.fragmentShader); //This links the program to the GPU (I think its to the GPU anyway) - glLinkProgram(rVal.shaderId); + GL40.glLinkProgram(rVal.shaderId); //Tests for the success of the shader program creation - success = glGetProgrami(rVal.shaderId, GL_LINK_STATUS); - if (success != GL_TRUE) { - throw new RuntimeException(glGetProgramInfoLog(rVal.shaderId)); + success = GL40.glGetProgrami(rVal.shaderId, GL40.GL_LINK_STATUS); + if (success != GL40.GL_TRUE) { + throw new RuntimeException(GL40.glGetProgramInfoLog(rVal.shaderId)); } //Deletes the individual shader objects to free up memory - glDeleteShader(rVal.vertexShader); - glDeleteShader(rVal.fragmentShader); + GL40.glDeleteShader(rVal.vertexShader); + GL40.glDeleteShader(rVal.fragmentShader); @@ -242,50 +238,50 @@ public class VisualShader implements Shader { } String fragmentShaderSource = tempForReadingShaders; //Creates a new shader object and assigns its 'pointer' to the integer "vertexShader" - rVal.vertexShader = glCreateShader(GL20.GL_VERTEX_SHADER); + rVal.vertexShader = GL40.glCreateShader(GL40.GL_VERTEX_SHADER); //This alerts openGL to the presence of a vertex shader and points the shader at its source - glShaderSource(rVal.vertexShader, vertexShaderSource); + GL40.glShaderSource(rVal.vertexShader, vertexShaderSource); //Compiles the source for the vertex shader object - glCompileShader(rVal.vertexShader); + GL40. glCompileShader(rVal.vertexShader); //The following tests if the vertex shader compiles successfully int success; - success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS); - if (success != GL_TRUE) { + success = GL40.glGetShaderi(rVal.vertexShader, GL40.GL_COMPILE_STATUS); + if (success != GL40.GL_TRUE) { LoggerInterface.loggerRenderer.WARNING("Vertex Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Source is: "); - LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.vertexShader)); - LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader))); + LoggerInterface.loggerRenderer.WARNING(GL40.glGetShaderSource(rVal.vertexShader)); + LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL40.glGetShaderInfoLog(rVal.vertexShader))); } //Creates and opengl object for a fragment shader and assigns its 'pointer' to the integer fragmentShader - rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + rVal.fragmentShader = GL40.glCreateShader(GL40.GL_FRAGMENT_SHADER); //This points the opengl shadder object to its proper source - glShaderSource(rVal.fragmentShader, fragmentShaderSource); + GL40.glShaderSource(rVal.fragmentShader, fragmentShaderSource); //This compiles the shader object - glCompileShader(rVal.fragmentShader); + GL40.glCompileShader(rVal.fragmentShader); //This tests for the success of the compile attempt - success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS); - if (success != GL_TRUE) { + success = GL40.glGetShaderi(rVal.fragmentShader, GL40.GL_COMPILE_STATUS); + if (success != GL40.GL_TRUE) { LoggerInterface.loggerRenderer.WARNING("Fragment Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Source is: "); - LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.fragmentShader)); - LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader))); + LoggerInterface.loggerRenderer.WARNING(GL40.glGetShaderSource(rVal.fragmentShader)); + LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL40.glGetShaderInfoLog(rVal.fragmentShader))); } //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram rVal.shaderId = GL40.glCreateProgram(); //This attaches the vertex and fragment shaders to the program - glAttachShader(rVal.shaderId, rVal.vertexShader); - glAttachShader(rVal.shaderId, rVal.fragmentShader); + GL40.glAttachShader(rVal.shaderId, rVal.vertexShader); + GL40.glAttachShader(rVal.shaderId, rVal.fragmentShader); //This links the program to the GPU (I think its to the GPU anyway) - glLinkProgram(rVal.shaderId); + GL40. glLinkProgram(rVal.shaderId); //Tests for the success of the shader program creation - success = glGetProgrami(rVal.shaderId, GL_LINK_STATUS); - if (success != GL_TRUE) { - throw new RuntimeException(glGetProgramInfoLog(rVal.shaderId)); + success = GL40.glGetProgrami(rVal.shaderId, GL40.GL_LINK_STATUS); + if (success != GL40.GL_TRUE) { + throw new RuntimeException(GL40.glGetProgramInfoLog(rVal.shaderId)); } //Deletes the individual shader objects to free up memory - glDeleteShader(rVal.vertexShader); - glDeleteShader(rVal.fragmentShader); + GL40.glDeleteShader(rVal.vertexShader); + GL40.glDeleteShader(rVal.fragmentShader); @@ -295,7 +291,11 @@ public class VisualShader implements Shader { } - public static VisualShader load_default_shader_program(){ + /** + * Loads the default shader program + * @return The default shader + */ + public static VisualShader loadDefaultShaderProgram(){ // @@ -343,56 +343,62 @@ public class VisualShader implements Shader { } String fragmentShaderSource = tempForReadingShaders; //Creates a new shader object and assigns its 'pointer' to the integer "vertexShader" - rVal.vertexShader = glCreateShader(GL_VERTEX_SHADER); + rVal.vertexShader = GL40.glCreateShader(GL40.GL_VERTEX_SHADER); //This alerts openGL to the presence of a vertex shader and points the shader at its source - glShaderSource(rVal.vertexShader, vertexShaderSource); + GL40.glShaderSource(rVal.vertexShader, vertexShaderSource); //Compiles the source for the vertex shader object - glCompileShader(rVal.vertexShader); + GL40.glCompileShader(rVal.vertexShader); //The following tests if the vertex shader compiles successfully int success; - success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS); - if (success != GL_TRUE) { + success = GL40.glGetShaderi(rVal.vertexShader, GL40.GL_COMPILE_STATUS); + if (success != GL40.GL_TRUE) { LoggerInterface.loggerRenderer.WARNING("Vertex Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Source is: "); - LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.vertexShader)); - LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader))); + LoggerInterface.loggerRenderer.WARNING(GL40.glGetShaderSource(rVal.vertexShader)); + LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL40.glGetShaderInfoLog(rVal.vertexShader))); } //Creates and opengl object for a fragment shader and assigns its 'pointer' to the integer fragmentShader - rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + rVal.fragmentShader = GL40.glCreateShader(GL40.GL_FRAGMENT_SHADER); //This points the opengl shadder object to its proper source - glShaderSource(rVal.fragmentShader, fragmentShaderSource); + GL40.glShaderSource(rVal.fragmentShader, fragmentShaderSource); //This compiles the shader object - glCompileShader(rVal.fragmentShader); + GL40.glCompileShader(rVal.fragmentShader); //This tests for the success of the compile attempt - success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS); - if (success != GL_TRUE) { + success = GL40.glGetShaderi(rVal.fragmentShader, GL40.GL_COMPILE_STATUS); + if (success != GL40.GL_TRUE) { LoggerInterface.loggerRenderer.WARNING("Fragment Shader failed to compile!"); LoggerInterface.loggerRenderer.WARNING("Source is: "); - LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.fragmentShader)); - LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader))); + LoggerInterface.loggerRenderer.WARNING(GL40.glGetShaderSource(rVal.fragmentShader)); + LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL40.glGetShaderInfoLog(rVal.fragmentShader))); } //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram rVal.shaderId = GL40.glCreateProgram(); //This attaches the vertex and fragment shaders to the program - glAttachShader(rVal.shaderId, rVal.vertexShader); - glAttachShader(rVal.shaderId, rVal.fragmentShader); + GL40.glAttachShader(rVal.shaderId, rVal.vertexShader); + GL40.glAttachShader(rVal.shaderId, rVal.fragmentShader); //This links the program to the GPU (I think its to the GPU anyway) - glLinkProgram(rVal.shaderId); + GL40.glLinkProgram(rVal.shaderId); //Tests for the success of the shader program creation - success = glGetProgrami(rVal.shaderId, GL_LINK_STATUS); - if (success != GL_TRUE) { - throw new RuntimeException(glGetProgramInfoLog(rVal.shaderId)); + success = GL40.glGetProgrami(rVal.shaderId, GL40.GL_LINK_STATUS); + if (success != GL40.GL_TRUE) { + throw new RuntimeException(GL40.glGetProgramInfoLog(rVal.shaderId)); } //Deletes the individual shader objects to free up memory - glDeleteShader(rVal.vertexShader); - glDeleteShader(rVal.fragmentShader); + GL40.glDeleteShader(rVal.vertexShader); + GL40.glDeleteShader(rVal.fragmentShader); return rVal; } + /** + * Loads a specific shader + * @param vertexPath The vertex shader's path + * @param fragmentPath The fragment shader's path + * @return The visual shader + */ public static VisualShader loadSpecificShader(String vertexPath, String fragmentPath){ VisualShader rVal = new VisualShader(); @@ -408,28 +414,23 @@ public class VisualShader implements Shader { } //Creates a new shader object and assigns its 'pointer' to the integer "vertexShader" - rVal.vertexShader = glCreateShader(GL_VERTEX_SHADER); + rVal.vertexShader = GL40.glCreateShader(GL40.GL_VERTEX_SHADER); //This alerts openGL to the presence of a vertex shader and points the shader at its source - glShaderSource(rVal.vertexShader, vertexShaderSource); + GL40.glShaderSource(rVal.vertexShader, vertexShaderSource); //Compiles the source for the vertex shader object - glCompileShader(rVal.vertexShader); + GL40.glCompileShader(rVal.vertexShader); //The following tests if the vertex shader compiles successfully int success; - success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS); - if (success != GL_TRUE) { + success = GL40.glGetShaderi(rVal.vertexShader, GL40.GL_COMPILE_STATUS); + if (success != GL40.GL_TRUE) { List errorLines = new LinkedList(); LoggerInterface.loggerRenderer.WARNING("Failed to load " + vertexPath + " ... attempting alternatives"); //report failed to load shader errorLines.add("Vertex Shader failed to compile!"); errorLines.add("Source File is: " + vertexPath); errorLines.add("Source is: "); - errorLines.add(GL20.glGetShaderSource(rVal.vertexShader)); - errorLines.add(new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader))); - // LoggerInterface.loggerRenderer.WARNING("Vertex Shader failed to compile!"); - // LoggerInterface.loggerRenderer.WARNING("Source File is: " + vertexPath); - // LoggerInterface.loggerRenderer.WARNING("Source is: "); - // LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.vertexShader)); - // LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader))); + errorLines.add(GL40.glGetShaderSource(rVal.vertexShader)); + errorLines.add(new RuntimeException(GL40.glGetShaderInfoLog(rVal.vertexShader))); //attempt loading alternative shaders List availableAlternatives = Globals.shaderOptionMap.getAlternativesForFile(vertexPath); int alternativesAttempted = 0; @@ -443,30 +444,25 @@ public class VisualShader implements Shader { LoggerInterface.loggerEngine.ERROR("Failed to load shader alternative " + alternative, e); } //Creates a new shader object and assigns its 'pointer' to the integer "vertexShader" - rVal.vertexShader = glCreateShader(GL_VERTEX_SHADER); + rVal.vertexShader = GL40.glCreateShader(GL40.GL_VERTEX_SHADER); //This alerts openGL to the presence of a vertex shader and points the shader at its source - glShaderSource(rVal.vertexShader, vertexShaderSource); + GL40.glShaderSource(rVal.vertexShader, vertexShaderSource); //Compiles the source for the vertex shader object - glCompileShader(rVal.vertexShader); + GL40.glCompileShader(rVal.vertexShader); //The following tests if the vertex shader compiles successfully - success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS); - if (success == GL_TRUE) { + success = GL40.glGetShaderi(rVal.vertexShader, GL40.GL_COMPILE_STATUS); + if (success == GL40.GL_TRUE) { LoggerInterface.loggerRenderer.WARNING("Successfully loaded alternative shader " + alternative); break; } else { errorLines.add("Vertex Shader failed to compile!"); errorLines.add("Source File is: " + vertexPath); errorLines.add("Source is: "); - errorLines.add(GL20.glGetShaderSource(rVal.vertexShader)); - errorLines.add(new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader))); - // LoggerInterface.loggerRenderer.WARNING("Vertex Shader failed to compile!"); - // LoggerInterface.loggerRenderer.WARNING("Source File is: " + vertexPath); - // LoggerInterface.loggerRenderer.WARNING("Source is: "); - // LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.vertexShader)); - // LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader))); + errorLines.add(GL40.glGetShaderSource(rVal.vertexShader)); + errorLines.add(new RuntimeException(GL40.glGetShaderInfoLog(rVal.vertexShader))); } } - if(success != GL_TRUE){ + if(success != GL40.GL_TRUE){ for(Object object : errorLines){ if(object instanceof String){ LoggerInterface.loggerRenderer.WARNING((String)object); @@ -479,27 +475,22 @@ public class VisualShader implements Shader { } } //Creates and opengl object for a fragment shader and assigns its 'pointer' to the integer fragmentShader - rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + rVal.fragmentShader = GL40.glCreateShader(GL40.GL_FRAGMENT_SHADER); //This points the opengl shadder object to its proper source - glShaderSource(rVal.fragmentShader, fragmentShaderSource); + GL40.glShaderSource(rVal.fragmentShader, fragmentShaderSource); //This compiles the shader object - glCompileShader(rVal.fragmentShader); + GL40.glCompileShader(rVal.fragmentShader); //This tests for the success of the compile attempt - success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS); - if (success != GL_TRUE) { + success = GL40.glGetShaderi(rVal.fragmentShader, GL40.GL_COMPILE_STATUS); + if (success != GL40.GL_TRUE) { List errorLines = new LinkedList(); LoggerInterface.loggerRenderer.WARNING("Failed to load " + fragmentPath + " ... attempting alternatives"); //report failed to load shader errorLines.add("Fragment Shader failed to compile!"); errorLines.add("Source File is: " + fragmentPath); errorLines.add("Source is: "); - errorLines.add(GL20.glGetShaderSource(rVal.fragmentShader)); - errorLines.add(new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader))); - // LoggerInterface.loggerRenderer.WARNING("Fragment Shader failed to compile!"); - // LoggerInterface.loggerRenderer.WARNING("Source File is: " + fragmentPath); - // LoggerInterface.loggerRenderer.WARNING("Source is: "); - // LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.fragmentShader)); - // LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader))); + errorLines.add(GL40.glGetShaderSource(rVal.fragmentShader)); + errorLines.add(new RuntimeException(GL40.glGetShaderInfoLog(rVal.fragmentShader))); //attempt loading alternative shaders List availableAlternatives = Globals.shaderOptionMap.getAlternativesForFile(fragmentPath); int alternativesAttempted = 0; @@ -513,30 +504,25 @@ public class VisualShader implements Shader { LoggerInterface.loggerEngine.ERROR("Failed to load shader alternative " + alternative, e); } //Creates a new shader object and assigns its 'pointer' to the integer "vertexShader" - rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + rVal.fragmentShader = GL40.glCreateShader(GL40.GL_FRAGMENT_SHADER); //This alerts openGL to the presence of a vertex shader and points the shader at its source - glShaderSource(rVal.fragmentShader, fragmentShaderSource); + GL40.glShaderSource(rVal.fragmentShader, fragmentShaderSource); //Compiles the source for the vertex shader object - glCompileShader(rVal.fragmentShader); + GL40.glCompileShader(rVal.fragmentShader); //The following tests if the vertex shader compiles successfully - success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS); - if (success == GL_TRUE) { + success = GL40.glGetShaderi(rVal.fragmentShader, GL40.GL_COMPILE_STATUS); + if (success == GL40.GL_TRUE) { LoggerInterface.loggerRenderer.WARNING("Successfully loaded alternative shader " + alternative); break; } else { errorLines.add("Fragment Shader failed to compile!"); errorLines.add("Source File is: " + fragmentPath); errorLines.add("Source is: "); - errorLines.add(GL20.glGetShaderSource(rVal.fragmentShader)); - errorLines.add(new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader))); - // LoggerInterface.loggerRenderer.WARNING("Fragment Shader failed to compile!"); - // LoggerInterface.loggerRenderer.WARNING("Source File is: " + fragmentPath); - // LoggerInterface.loggerRenderer.WARNING("Source is: "); - // LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.fragmentShader)); - // LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.fragmentShader))); + errorLines.add(GL40.glGetShaderSource(rVal.fragmentShader)); + errorLines.add(new RuntimeException(GL40.glGetShaderInfoLog(rVal.fragmentShader))); } } - if(success != GL_TRUE){ + if(success != GL40.GL_TRUE){ for(Object object : errorLines){ if(object instanceof String){ LoggerInterface.loggerRenderer.WARNING((String)object); @@ -551,117 +537,28 @@ public class VisualShader implements Shader { //This creates a shader program opengl object and assigns its 'pointer' to the integer shaderProgram rVal.shaderId = GL40.glCreateProgram(); //This attaches the vertex and fragment shaders to the program - glAttachShader(rVal.shaderId, rVal.vertexShader); - glAttachShader(rVal.shaderId, rVal.fragmentShader); + GL40.glAttachShader(rVal.shaderId, rVal.vertexShader); + GL40.glAttachShader(rVal.shaderId, rVal.fragmentShader); //This links the program to the GPU (I think its to the GPU anyway) - glLinkProgram(rVal.shaderId); + GL40.glLinkProgram(rVal.shaderId); //Tests for the success of the shader program creation - success = glGetProgrami(rVal.shaderId, GL_LINK_STATUS); - if (success != GL_TRUE) { - LoggerInterface.loggerRenderer.ERROR(glGetProgramInfoLog(rVal.shaderId), new RuntimeException(glGetProgramInfoLog(rVal.shaderId))); + success = GL40.glGetProgrami(rVal.shaderId, GL40.GL_LINK_STATUS); + if (success != GL40.GL_TRUE) { + LoggerInterface.loggerRenderer.ERROR(GL40.glGetProgramInfoLog(rVal.shaderId), new RuntimeException(GL40.glGetProgramInfoLog(rVal.shaderId))); LoggerInterface.loggerRenderer.WARNING("Shader sources: " + vertexPath + " " + fragmentPath); return Globals.defaultMeshShader; // throw new RuntimeException(glGetProgramInfoLog(rVal.shaderProgram)); } //Deletes the individual shader objects to free up memory - glDeleteShader(rVal.vertexShader); - glDeleteShader(rVal.fragmentShader); + GL40.glDeleteShader(rVal.vertexShader); + GL40.glDeleteShader(rVal.fragmentShader); Globals.renderingEngine.checkError(); return rVal; } - - public static VisualShader loadSpecificShader(String vertexPath, String geometryPath, String fragmentPath){ - VisualShader rVal = new VisualShader(); - - // - //Read in shader programs - // - String vertexShaderSource = ""; - String geometryShaderSource = ""; - String fragmentShaderSource = ""; - try { - vertexShaderSource = FileUtils.getAssetFileAsString(vertexPath); - geometryShaderSource = FileUtils.getAssetFileAsString(geometryPath); - fragmentShaderSource = FileUtils.getAssetFileAsString(fragmentPath); - } catch(IOException ex){ - - } - //Creates a new shader object and assigns its 'pointer' to the integer "vertexShader" - rVal.vertexShader = glCreateShader(GL_VERTEX_SHADER); - //This alerts openGL to the presence of a vertex shader and points the shader at its source - glShaderSource(rVal.vertexShader, vertexShaderSource); - //Compiles the source for the vertex shader object - glCompileShader(rVal.vertexShader); - //The following tests if the vertex shader compiles successfully - int success; - success = glGetShaderi(rVal.vertexShader, GL_COMPILE_STATUS); - if (success != GL_TRUE) { - LoggerInterface.loggerRenderer.WARNING("Vertex Shader failed to compile!"); - LoggerInterface.loggerRenderer.WARNING("Source is: "); - LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.vertexShader)); - LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.vertexShader))); - } - - - //Creates a new shader object and assigns its 'pointer' to the integer "vertexShader" - rVal.geometryShader = glCreateShader(GL_GEOMETRY_SHADER); - //This alerts openGL to the presence of a vertex shader and points the shader at its source - glShaderSource(rVal.geometryShader, geometryShaderSource); - //Compiles the source for the vertex shader object - glCompileShader(rVal.geometryShader); - //The following tests if the vertex shader compiles successfully - success = glGetShaderi(rVal.geometryShader, GL_COMPILE_STATUS); - if (success != GL_TRUE) { - LoggerInterface.loggerRenderer.WARNING("Geometry Shader failed to compile!"); - LoggerInterface.loggerRenderer.WARNING("Source is: "); - LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.geometryShader)); - LoggerInterface.loggerRenderer.ERROR("Runtime Exception", new RuntimeException(GL20.glGetShaderInfoLog(rVal.geometryShader))); - } - - - - //Creates and opengl object for a fragment shader and assigns its 'pointer' to the integer fragmentShader - rVal.fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); - //This points the opengl shadder object to its proper source - glShaderSource(rVal.fragmentShader, fragmentShaderSource); - //This compiles the shader object - glCompileShader(rVal.fragmentShader); - //This tests for the success of the compile attempt - success = glGetShaderi(rVal.fragmentShader, GL_COMPILE_STATUS); - if (success != GL_TRUE) { - LoggerInterface.loggerRenderer.WARNING("Fragment Shader failed to compile!"); - LoggerInterface.loggerRenderer.WARNING("Source is: "); - LoggerInterface.loggerRenderer.WARNING(GL20.glGetShaderSource(rVal.fragmentShader)); - 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 = GL40.glCreateProgram(); - //This attaches the vertex and fragment shaders to the program - glAttachShader(rVal.shaderId, rVal.vertexShader); - glAttachShader(rVal.shaderId, rVal.geometryShader); - glAttachShader(rVal.shaderId, rVal.fragmentShader); - //This links the program to the GPU (I think its to the GPU anyway) - glLinkProgram(rVal.shaderId); - //Tests for the success of the shader program creation - success = glGetProgrami(rVal.shaderId, GL_LINK_STATUS); - if (success != GL_TRUE) { - throw new RuntimeException(glGetProgramInfoLog(rVal.shaderId)); - } - - //Deletes the individual shader objects to free up memory - glDeleteShader(rVal.vertexShader); - glDeleteShader(rVal.geometryShader); - glDeleteShader(rVal.fragmentShader); - - - - return rVal; - } - /**