|
|
@ -502,19 +502,25 @@ public final class GLRenderer implements Renderer { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (hasExtension("GL_OES_geometry_shader") || hasExtension("GL_EXT_geometry_shader")) { |
|
|
|
|
|
|
|
caps.add(Caps.GeometryShader); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (hasExtension("GL_OES_tessellation_shader") || hasExtension("GL_EXT_tessellation_shader")) { |
|
|
|
|
|
|
|
caps.add(Caps.TesselationShader); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (hasExtension("GL_ARB_shader_storage_buffer_object")) { |
|
|
|
if (hasExtension("GL_ARB_shader_storage_buffer_object")) { |
|
|
|
caps.add(Caps.ShaderStorageBufferObject); |
|
|
|
caps.add(Caps.ShaderStorageBufferObject); |
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxBlockSize, getInteger(GL4.GL_MAX_SHADER_STORAGE_BLOCK_SIZE)); |
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxBlockSize, getInteger(GL4.GL_MAX_SHADER_STORAGE_BLOCK_SIZE)); |
|
|
|
if (hasExtension("GL_ARB_compute_shader" ) || caps.contains(Caps.OpenGL43)) { |
|
|
|
// Commented out until we support ComputeShaders and the ComputeShader Cap
|
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxComputeBlocks, getInteger(GL4.GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS)); |
|
|
|
// limits.put(Limits.ShaderStorageBufferObjectMaxComputeBlocks, getInteger(GL4.GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS));
|
|
|
|
} |
|
|
|
if (caps.contains(Caps.GeometryShader)) { |
|
|
|
if (hasExtension("GL_ARB_geometry_shader_4") || caps.contains(Caps.OpenGL32)) { |
|
|
|
|
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxGeometryBlocks, getInteger(GL4.GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS)); |
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxGeometryBlocks, getInteger(GL4.GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS)); |
|
|
|
} |
|
|
|
} |
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxFragmentBlocks, getInteger(GL4.GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS)); |
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxFragmentBlocks, getInteger(GL4.GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS)); |
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxVertexBlocks, getInteger(GL4.GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS)); |
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxVertexBlocks, getInteger(GL4.GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS)); |
|
|
|
|
|
|
|
if (caps.contains(Caps.TesselationShader)) { |
|
|
|
if (hasExtension("GL_ARB_tessellation_shader") || caps.contains(Caps.OpenGL40)) { |
|
|
|
|
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxTessControlBlocks, getInteger(GL4.GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS)); |
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxTessControlBlocks, getInteger(GL4.GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS)); |
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxTessEvaluationBlocks, getInteger(GL4.GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS)); |
|
|
|
limits.put(Limits.ShaderStorageBufferObjectMaxTessEvaluationBlocks, getInteger(GL4.GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS)); |
|
|
|
} |
|
|
|
} |
|
|
@ -524,20 +530,14 @@ public final class GLRenderer implements Renderer { |
|
|
|
if (hasExtension("GL_ARB_uniform_buffer_object")) { |
|
|
|
if (hasExtension("GL_ARB_uniform_buffer_object")) { |
|
|
|
caps.add(Caps.UniformBufferObject); |
|
|
|
caps.add(Caps.UniformBufferObject); |
|
|
|
limits.put(Limits.UniformBufferObjectMaxBlockSize, getInteger(GL3.GL_MAX_UNIFORM_BLOCK_SIZE)); |
|
|
|
limits.put(Limits.UniformBufferObjectMaxBlockSize, getInteger(GL3.GL_MAX_UNIFORM_BLOCK_SIZE)); |
|
|
|
if (hasExtension("GL_ARB_geometry_shader_4") || caps.contains(Caps.OpenGL32)) { |
|
|
|
if (caps.contains(Caps.GeometryShader)) { |
|
|
|
limits.put(Limits.UniformBufferObjectMaxGeometryBlocks, getInteger(GL3.GL_MAX_GEOMETRY_UNIFORM_BLOCKS)); |
|
|
|
limits.put(Limits.UniformBufferObjectMaxGeometryBlocks, getInteger(GL3.GL_MAX_GEOMETRY_UNIFORM_BLOCKS)); |
|
|
|
} |
|
|
|
} |
|
|
|
limits.put(Limits.UniformBufferObjectMaxFragmentBlocks, getInteger(GL3.GL_MAX_FRAGMENT_UNIFORM_BLOCKS)); |
|
|
|
limits.put(Limits.UniformBufferObjectMaxFragmentBlocks, getInteger(GL3.GL_MAX_FRAGMENT_UNIFORM_BLOCKS)); |
|
|
|
limits.put(Limits.UniformBufferObjectMaxVertexBlocks, getInteger(GL3.GL_MAX_VERTEX_UNIFORM_BLOCKS)); |
|
|
|
limits.put(Limits.UniformBufferObjectMaxVertexBlocks, getInteger(GL3.GL_MAX_VERTEX_UNIFORM_BLOCKS)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (hasExtension("GL_OES_geometry_shader") || hasExtension("GL_EXT_geometry_shader")) { |
|
|
|
|
|
|
|
caps.add(Caps.GeometryShader); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (hasExtension("GL_OES_tessellation_shader") || hasExtension("GL_EXT_tessellation_shader")) { |
|
|
|
|
|
|
|
caps.add(Caps.TesselationShader); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(caps.contains(Caps.OpenGL20)){ |
|
|
|
if(caps.contains(Caps.OpenGL20)){ |
|
|
|
caps.add(Caps.UnpackRowLength); |
|
|
|
caps.add(Caps.UnpackRowLength); |
|
|
|