private ExtendedGLSLProgram compileGLSL( String vertexShaderCode, String fragmentShaderCode, String geometryShaderCode, String tcsShaderCode, String tesShaderCode, ProgramAssemblyInfo assemblyInfo) { int vertexShader = compileShader(GL20.GL_VERTEX_SHADER, vertexShaderCode, assemblyInfo); int fragmentShader = compileShader(GL20.GL_FRAGMENT_SHADER, fragmentShaderCode, assemblyInfo); int geometryShader = compileShader(GL32.GL_GEOMETRY_SHADER, geometryShaderCode, assemblyInfo); int tcsShader = compileShader(GL40.GL_TESS_CONTROL_SHADER, tcsShaderCode, assemblyInfo); int tesShader = compileShader(GL40.GL_TESS_EVALUATION_SHADER, tesShaderCode, assemblyInfo); int program; String[] outNames = ProgramOutputResolver.getOutput(fragmentShaderCode); program = GLSLShaderCompiler.createProgram( new int[]{vertexShader, tcsShader, tesShader, geometryShader, fragmentShader}, outNames, assemblyInfo.getProgramName() ); return new ExtendedGLSLProgram(fragmentShader, vertexShader, geometryShader, tcsShader, tesShader, program); }
private void getDeviceProperties(){ System.out.println("OpenGL version: " + GL11.glGetString(GL11.GL_VERSION) + " bytes"); System.out.println("Max Geometry Uniform Blocks: " + GL31.GL_MAX_GEOMETRY_UNIFORM_BLOCKS+ " bytes"); System.out.println("Max Geometry Shader Invocations: " + GL40.GL_MAX_GEOMETRY_SHADER_INVOCATIONS + " bytes"); System.out.println("Max Uniform Buffer Bindings: " + GL31.GL_MAX_UNIFORM_BUFFER_BINDINGS + " bytes"); System.out.println("Max Uniform Block Size: " + GL31.GL_MAX_UNIFORM_BLOCK_SIZE + " bytes"); System.out.println("Max SSBO Block Size: " + GL43.GL_MAX_SHADER_STORAGE_BLOCK_SIZE + " bytes"); }
private static void buildMapping() { if (mapping != null) return; Multimap<Integer, String> map = HashMultimap.create(); List<Class<?>> classes = ImmutableList.of( GL11.class, GL12.class, GL13.class, GL14.class, GL15.class, GL20.class, GL21.class, GL30.class, GL31.class, GL32.class, GL33.class, GL40.class, GL41.class, GL42.class, GL43.class, GL44.class, GL45.class, GLFW.class ); for (Class<?> clazz : classes) { for (Field f : clazz.getDeclaredFields()) { if (f.getName().toUpperCase(Locale.ROOT).equals(f.getName()) && f.getType() == int.class && Modifier.isPublic(f.getModifiers()) && Modifier.isStatic(f.getModifiers())) { List<String> li = Splitter.on('_').splitToList(f.getName()); li = li.subList(1, li.size()); String clean = Joiner.on(' ').join( li.stream() .map(Errors::toTitleCase) .iterator()); try { map.put(f.getInt(null), clean); } catch (Throwable t) { t.printStackTrace(); } } } } mapping = map; }
private void getDeviceProperties(){ System.out.println("OpenGL version: " + GL11.glGetString(GL11.GL_VERSION) + " bytes"); System.out.println("Max Geometry Uniform Blocks: " + GL11.glGetInteger(GL31.GL_MAX_GEOMETRY_UNIFORM_BLOCKS)); System.out.println("Max Geometry Shader Invocations: " + GL11.glGetInteger(GL40.GL_MAX_GEOMETRY_SHADER_INVOCATIONS)); System.out.println("Max Uniform Buffer Bindings: " + GL11.glGetInteger(GL31.GL_MAX_UNIFORM_BUFFER_BINDINGS)); System.out.println("Max Uniform Block Size: " + GL11.glGetInteger(GL31.GL_MAX_UNIFORM_BLOCK_SIZE) + " bytes"); System.out.println("Max SSBO Block Size: " + GL11.glGetInteger(GL43.GL_MAX_SHADER_STORAGE_BLOCK_SIZE) + " bytes"); System.out.println("Max Image Bindings: " + GL11.glGetInteger(GL42.GL_MAX_IMAGE_UNITS)); }
@Override public void glBindTransformFeedback (int target, int id) { GL40.glBindTransformFeedback(target, id); }
@Override public void glDeleteTransformFeedbacks (int n, int[] ids, int offset) { for(int i = offset; i < offset + n; i++) { GL40.glDeleteTransformFeedbacks(ids[i]); } }
@Override public void glDeleteTransformFeedbacks (int n, IntBuffer ids) { GL40.glDeleteTransformFeedbacks(ids); }
@Override public void glGenTransformFeedbacks (int n, int[] ids, int offset) { for(int i = offset; i < offset + n; i++) { ids[i] = GL40.glGenTransformFeedbacks(); } }
@Override public void glGenTransformFeedbacks (int n, IntBuffer ids) { GL40.glGenTransformFeedbacks(ids); }
@Override public boolean glIsTransformFeedback (int id) { return GL40.glIsTransformFeedback(id); }
@Override public void glPauseTransformFeedback () { GL40.glPauseTransformFeedback(); }
@Override public void glResumeTransformFeedback () { GL40.glResumeTransformFeedback(); }
public static void glDrawElementsIndirect(int mode, int type, long indirect_buffer_offset) throws GLException { GL40.glDrawElementsIndirect(mode, type, indirect_buffer_offset);//TODO Move to GL4 RenderHelper.checkForGLError(); }