diff options
author | Kenneth Russel <[email protected]> | 2005-10-24 19:21:03 +0000 |
---|---|---|
committer | Kenneth Russel <[email protected]> | 2005-10-24 19:21:03 +0000 |
commit | d6f9dbc493df725d3d574403549de142c5e1222a (patch) | |
tree | 8eb152b0627f8d1897a27c5204d6ce2efb4963e4 /make/gl-impl-CustomJavaCode.java | |
parent | 42843c3290d64c41c9c8a18b93f5ad3c00d35ddc (diff) |
Merged JSR-231 branch on to the main JOGL trunk. The main trunk now
contains the evolving JSR-231 Reference Implementation and the JSR-231
branch is permanently closed.
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/trunk@401 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'make/gl-impl-CustomJavaCode.java')
-rw-r--r-- | make/gl-impl-CustomJavaCode.java | 136 |
1 files changed, 134 insertions, 2 deletions
diff --git a/make/gl-impl-CustomJavaCode.java b/make/gl-impl-CustomJavaCode.java index a4709fde4..5b4a3fa17 100644 --- a/make/gl-impl-CustomJavaCode.java +++ b/make/gl-impl-CustomJavaCode.java @@ -1,3 +1,135 @@ +// Tracks glBegin/glEnd calls to determine whether it is legal to +// query Vertex Buffer Object state +private boolean inBeginEndPair; + +public GLImpl(GLContextImpl context) { + this._context = context; +} + +public boolean isFunctionAvailable(String glFunctionName) { + return _context.isFunctionAvailable(glFunctionName); +} + +public boolean isExtensionAvailable(String glExtensionName) { + return _context.isExtensionAvailable(glExtensionName); +} + +public Object getExtension(String extensionName) { + // At this point we don't expose any extensions using this mechanism + return null; +} + +private GLContextImpl _context; + +/** + * Provides platform-independent access to the wglAllocateMemoryNV / + * glXAllocateMemoryNV extension. + */ +public java.nio.ByteBuffer glAllocateMemoryNV(int arg0, float arg1, float arg2, float arg3) { + return _context.glAllocateMemoryNV(arg0, arg1, arg2, arg3); +} + +public void setSwapInterval(int interval) { + _context.setSwapInterval(interval); +} + +public Object getPlatformGLExtensions() { + return _context.getPlatformGLExtensions(); +} + +private void checkBufferObject(String extension1, + String extension2, + boolean enabled, + int state, + String kind) { + if (inBeginEndPair) { + throw new GLException("May not call this between glBegin and glEnd"); + } + boolean avail = ((extension1 != null && isExtensionAvailable(extension1)) || + (extension2 != null && isExtensionAvailable(extension2))); + if (!avail) { + if (!enabled) + return; + throw new GLException("Required extensions not available to call this function"); + } + int[] val = new int[1]; + glGetIntegerv(state, val, 0); + if (enabled) { + if (val[0] == 0) { + throw new GLException(kind + " must be enabled to call this method"); + } + } else { + if (val[0] != 0) { + throw new GLException(kind + " must be disabled to call this method"); + } + } +} + +private void checkUnpackPBODisabled() { + checkBufferObject("GL_ARB_pixel_buffer_object", + "GL_EXT_pixel_buffer_object", + false, + GL.GL_PIXEL_UNPACK_BUFFER_BINDING_ARB, + "unpack pixel_buffer_object"); +} + +private void checkUnpackPBOEnabled() { + checkBufferObject("GL_ARB_pixel_buffer_object", + "GL_EXT_pixel_buffer_object", + true, + GL.GL_PIXEL_UNPACK_BUFFER_BINDING_ARB, + "unpack pixel_buffer_object"); +} + +private void checkPackPBODisabled() { + checkBufferObject("GL_ARB_pixel_buffer_object", + "GL_EXT_pixel_buffer_object", + false, + GL.GL_PIXEL_PACK_BUFFER_BINDING_ARB, + "pack pixel_buffer_object"); +} + +private void checkPackPBOEnabled() { + checkBufferObject("GL_ARB_pixel_buffer_object", + "GL_EXT_pixel_buffer_object", + true, + GL.GL_PIXEL_PACK_BUFFER_BINDING_ARB, + "pack pixel_buffer_object"); +} + + +private void checkArrayVBODisabled() { + checkBufferObject("GL_VERSION_1_5", + "GL_ARB_vertex_buffer_object", + false, + GL.GL_ARRAY_BUFFER_BINDING, + "array vertex_buffer_object"); +} + +private void checkArrayVBOEnabled() { + checkBufferObject("GL_VERSION_1_5", + "GL_ARB_vertex_buffer_object", + true, + GL.GL_ARRAY_BUFFER_BINDING, + "array vertex_buffer_object"); +} + +private void checkElementVBODisabled() { + checkBufferObject("GL_VERSION_1_5", + "GL_ARB_vertex_buffer_object", + false, + GL.GL_ELEMENT_ARRAY_BUFFER_BINDING, + "element vertex_buffer_object"); +} + +private void checkElementVBOEnabled() { + checkBufferObject("GL_VERSION_1_5", + "GL_ARB_vertex_buffer_object", + true, + GL.GL_ELEMENT_ARRAY_BUFFER_BINDING, + "element vertex_buffer_object"); +} + // Attempt to return the same ByteBuffer object from glMapBufferARB if // the vertex buffer object's base address and size haven't changed private static class ARBVBOKey { @@ -32,7 +164,7 @@ public java.nio.ByteBuffer glMapBuffer(int target, int access) { throw new GLException("Method \"glMapBuffer\" not available"); } int[] sz = new int[1]; - glGetBufferParameteriv(target, GL_BUFFER_SIZE_ARB, sz); + glGetBufferParameteriv(target, GL_BUFFER_SIZE_ARB, sz, 0); long addr; addr = dispatch_glMapBuffer(target, access, __addr_); if (addr == 0 || sz[0] == 0) { @@ -55,7 +187,7 @@ public java.nio.ByteBuffer glMapBufferARB(int target, int access) { throw new GLException("Method \"glMapBufferARB\" not available"); } int[] sz = new int[1]; - glGetBufferParameterivARB(target, GL_BUFFER_SIZE_ARB, sz); + glGetBufferParameterivARB(target, GL_BUFFER_SIZE_ARB, sz, 0); long addr; addr = dispatch_glMapBufferARB(target, access, __addr_); if (addr == 0 || sz[0] == 0) { |