diff options
author | Sven Gothel <[email protected]> | 2019-12-27 03:50:32 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2019-12-27 03:50:32 +0100 |
commit | 50f9c9e113b09ab54ba40abba6b2face27c9a139 (patch) | |
tree | e4e3089ea225c68d59c695d5f9460eae779aa668 | |
parent | 95ca88ba975c7296098bbd34bec2d922aeb2b563 (diff) |
Bug 1287 - Complete Immutable glNamedBufferStorage support in GLBufferObjectTracker
As of the time of implementation, named immutable buffers were not fully supported within GL 4.4.
This has changed, i.e. GL 4.5 supports glNamedBufferStorage.
This patch adds support for the immutable named buffer storage case.
jogl commit 09fc7aa5539731bb0fba835caee61f6eb837ecff,
added GLBufferObjectTracker allowing to keep required references to NIO object.
This tracker complements the NIO buffer lifecycle with the GL semantics.
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLBufferObjectTracker.java | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/jogl/classes/jogamp/opengl/GLBufferObjectTracker.java b/src/jogl/classes/jogamp/opengl/GLBufferObjectTracker.java index 717ee2cab..fb8b14697 100644 --- a/src/jogl/classes/jogamp/opengl/GLBufferObjectTracker.java +++ b/src/jogl/classes/jogamp/opengl/GLBufferObjectTracker.java @@ -167,7 +167,8 @@ public class GLBufferObjectTracker { final boolean invalidSize = ( mutableBuffer && 0 > size ) // glBufferData, glNamedBufferData || ( !mutableBuffer && 0 >= size ); // glBufferStorage if( invalidSize ) { - throw new GLException(String.format("%s: Invalid size %d for buffer %d on target 0x%X", GL_INVALID_VALUE, size, bufferName, target)); + throw new GLException(String.format("%s: Invalid size %d for %s buffer %d on target 0x%X", + GL_INVALID_VALUE, size, mutableBuffer ? "mutable" : "immutable", bufferName, target)); } dispatch.create(target, size, data, mutableBuffer ? mutableUsage : immutableFlags); @@ -211,18 +212,18 @@ public class GLBufferObjectTracker { if (DEBUG && GL.GL_NO_ERROR != glerrPre) { System.err.printf("%s.%s glerr-pre 0x%X%n", msgClazzName, msgCreateNamed, glerrPre); } - if ( 0 > size ) { // glBufferData, glNamedBufferData - throw new GLException(String.format("%s: Invalid size %d for buffer %d", GL_INVALID_VALUE, size, bufferName)); - } final boolean mutableBuffer = 0 != mutableUsage; - if( !mutableBuffer ) { - throw new InternalError("Immutable glNamedBufferStorage not supported yet"); + final boolean invalidSize = ( mutableBuffer && 0 > size ) // glBufferData, glNamedBufferData + || ( !mutableBuffer && 0 >= size ); // glBufferStorage + if( invalidSize ) { + throw new GLException(String.format("%s: Invalid size %d for %s buffer %d", + GL_INVALID_VALUE, size, mutableBuffer ? "mutable" : "immutable", bufferName)); } - dispatch.create(bufferName, size, data, mutableUsage); + dispatch.create(bufferName, size, data, mutableBuffer ? mutableUsage : immutableFlags); final int glerrPost = caller.glGetError(); // be safe, catch failure! if(GL.GL_NO_ERROR != glerrPost) { throw new GLException(String.format("GL-Error 0x%X while creating %s storage for buffer %d of size %d with data %s", - glerrPost, "mutable", bufferName, size, data)); + glerrPost, mutableBuffer ? "mutable" : "immutable", bufferName, size, data)); } final GLBufferStorageImpl objOld = (GLBufferStorageImpl) bufferName2StorageMap.get(bufferName); if( null != objOld ) { |