diff options
author | Sven Gothel <[email protected]> | 2014-02-26 16:54:21 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2014-02-26 16:54:21 +0100 |
commit | 72d44215a266ccb569efbd5af3142385c4442fe9 (patch) | |
tree | 25cb60329e5aea0a09cd15d0647a304d24b66b00 /src | |
parent | 9fb1e46e43900ec9b2f9c9af1fc8984e101c8811 (diff) |
Bug 984 - Fix GLBufferObjectTracker.mapBuffer(..)'s mapBufferImpl(..) parameters for mapBufferRange(..) and mapNamedBufferRange(..)
GLBufferObjectTracker.mapBuffer(..) variant for mapBufferRange(..) and mapNamedBufferRange(..)
used wrong parameters in it's mapBufferImpl(..) call.
Fixed and added mapBufferRange(..) test in TestMapBufferRead01NEWT
Diffstat (limited to 'src')
-rw-r--r-- | src/jogl/classes/jogamp/opengl/GLBufferObjectTracker.java | 4 | ||||
-rw-r--r-- | src/test/com/jogamp/opengl/test/junit/jogl/acore/TestMapBufferRead01NEWT.java | 82 |
2 files changed, 61 insertions, 25 deletions
diff --git a/src/jogl/classes/jogamp/opengl/GLBufferObjectTracker.java b/src/jogl/classes/jogamp/opengl/GLBufferObjectTracker.java index 472bfbd58..2351826cb 100644 --- a/src/jogl/classes/jogamp/opengl/GLBufferObjectTracker.java +++ b/src/jogl/classes/jogamp/opengl/GLBufferObjectTracker.java @@ -298,7 +298,7 @@ public class GLBufferObjectTracker { public synchronized final GLBufferStorage mapBuffer(final GLBufferStateTracker bufferStateTracker, final GL caller, final int target, final long offset, final long length, final int access, final MapBufferRangeDispatch dispatch, final long glProcAddress) throws GLException { - return this.mapBufferImpl(bufferStateTracker, caller, target, true /* useRange */, length, access, access, dispatch, glProcAddress); + return this.mapBufferImpl(bufferStateTracker, caller, target, true /* useRange */, offset, length, access, dispatch, glProcAddress); } /** * Must be called when mapping GL buffer objects via {@link GL2#mapNamedBuffer(int, int)}. @@ -319,7 +319,7 @@ public class GLBufferObjectTracker { */ public synchronized final GLBufferStorage mapBuffer(final int bufferName, final long offset, final long length, final int access, final MapBufferRangeDispatch dispatch, final long glProcAddress) throws GLException { - return this.mapBufferImpl(0 /* target */, bufferName, true /* isNamedBuffer */, false /* useRange */, 0 /* offset */, 0 /* length */, access, dispatch, glProcAddress); + return this.mapBufferImpl(0 /* target */, bufferName, true /* isNamedBuffer */, true /* useRange */, offset, length, access, dispatch, glProcAddress); } /** * @throws GLException if buffer is not bound to target diff --git a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestMapBufferRead01NEWT.java b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestMapBufferRead01NEWT.java index ac82c74ea..23778ecf6 100644 --- a/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestMapBufferRead01NEWT.java +++ b/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestMapBufferRead01NEWT.java @@ -36,6 +36,7 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; import javax.media.opengl.GL; +import javax.media.opengl.GL2ES3; import javax.media.opengl.GL2GL3; import javax.media.opengl.GLBufferStorage; import javax.media.opengl.GLCapabilities; @@ -57,44 +58,65 @@ public class TestMapBufferRead01NEWT extends UITestCase { static final boolean DEBUG = false; @Test - public void testWriteRead01a() throws InterruptedException { + public void testWriteRead01aMap() throws InterruptedException { if(!GLProfile.isAvailable(GLProfile.GL2GL3)) { System.err.println("Test requires GL2/GL3 profile."); return; } ByteBuffer verticiesBB = ByteBuffer.allocate(4*9); verticiesBB.order(ByteOrder.nativeOrder()); - testWriteRead01(verticiesBB); + testWriteRead01(verticiesBB, false /* useRange */); } @Test - public void testWriteRead01b() throws InterruptedException { + public void testWriteRead01bMap() throws InterruptedException { if(!GLProfile.isAvailable(GLProfile.GL2GL3)) { System.err.println("Test requires GL2/GL3 profile."); return; } ByteBuffer verticiesBB = Buffers.newDirectByteBuffer(4*9); - testWriteRead01(verticiesBB); + testWriteRead01(verticiesBB, false /* useRange */); } - private void testWriteRead01(ByteBuffer verticiesBB) throws InterruptedException { + @Test + public void testWriteRead02aMapRange() throws InterruptedException { + if(!GLProfile.isAvailable(GLProfile.GL3) && !!GLProfile.isAvailable(GLProfile.GLES3)) { + System.err.println("Test requires GL3 or GLES3 profile."); + return; + } + ByteBuffer verticiesBB = ByteBuffer.allocate(4*9); + verticiesBB.order(ByteOrder.nativeOrder()); + testWriteRead01(verticiesBB, true/* useRange */); + } + @Test + public void testWriteRead02bMapRange() throws InterruptedException { + if(!GLProfile.isAvailable(GLProfile.GL3) && !!GLProfile.isAvailable(GLProfile.GLES3)) { + System.err.println("Test requires GL3 or GLES3 profile."); + return; + } + ByteBuffer verticiesBB = Buffers.newDirectByteBuffer(4*9); + testWriteRead01(verticiesBB, true /* useRange */); + } + + private void testWriteRead01(ByteBuffer verticiesBB, boolean useRange) throws InterruptedException { + final GLProfile glp = GLProfile.getMaxProgrammable(true); final NEWTGLContext.WindowContext winctx = NEWTGLContext.createOffscreenWindow( - new GLCapabilities(GLProfile.getGL2GL3()), 800, 600, true); + new GLCapabilities(glp), 800, 600, true); try { final GL gl = winctx.context.getGL(); int[] vertexBuffer = new int[1]; - verticiesBB.putFloat(0); - verticiesBB.putFloat(0.5f); - verticiesBB.putFloat(0); + verticiesBB.putFloat(-0.3f); + verticiesBB.putFloat(-0.2f); + verticiesBB.putFloat(-0.1f); - verticiesBB.putFloat(0.5f); - verticiesBB.putFloat(-0.5f); - verticiesBB.putFloat(0); + verticiesBB.putFloat(0.1f); + verticiesBB.putFloat(0.2f); + verticiesBB.putFloat(0.3f); - verticiesBB.putFloat(-0.5f); - verticiesBB.putFloat(-0.5f); - verticiesBB.putFloat(0); + verticiesBB.putFloat(0.4f); + verticiesBB.putFloat(0.5f); + verticiesBB.putFloat(0.6f); verticiesBB.rewind(); if(DEBUG) { for(int i=0; i < verticiesBB.capacity(); i+=4) { @@ -106,28 +128,42 @@ public class TestMapBufferRead01NEWT extends UITestCase { gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vertexBuffer[0]); - // gl.glBufferData(GL.GL_ARRAY_BUFFER, verticiesBB.capacity(), verticiesBB, GL.GL_STATIC_READ); - gl.glBufferData(GL.GL_ARRAY_BUFFER, verticiesBB.capacity(), verticiesBB, GL.GL_STATIC_DRAW); + gl.glBufferData(GL.GL_ARRAY_BUFFER, verticiesBB.capacity(), verticiesBB, GL2ES3.GL_STATIC_READ); + // gl.glBufferData(GL.GL_ARRAY_BUFFER, verticiesBB.capacity(), verticiesBB, GL.GL_STATIC_DRAW); final int bufferName = gl.getBoundBuffer(GL.GL_ARRAY_BUFFER); final GLBufferStorage bufferStorage = gl.getBufferStorage(bufferName); System.err.println("gpu-01 GL_ARRAY_BUFFER -> bufferName "+bufferName+" -> "+bufferStorage); Assert.assertEquals("Buffer storage's bytes-buffer not null before map", null, bufferStorage.getMappedBuffer()); - final ByteBuffer bb = gl.glMapBuffer(GL.GL_ARRAY_BUFFER, GL2GL3.GL_READ_ONLY); - Assert.assertNotNull(bb); - System.err.println("gpu-02 mapped GL_ARRAY_BUFFER -> "+bb); + final int floatOffset, byteOffset, mapByteLength; + final ByteBuffer bb; + if( useRange ) { + floatOffset = 3; + byteOffset = Buffers.SIZEOF_FLOAT*floatOffset; + mapByteLength = verticiesBB.capacity()-byteOffset; + bb = gl.glMapBufferRange(GL.GL_ARRAY_BUFFER, byteOffset, mapByteLength, GL.GL_MAP_READ_BIT); + } else { + floatOffset = 0; + byteOffset = 0; + mapByteLength = verticiesBB.capacity(); + bb = gl.glMapBuffer(GL.GL_ARRAY_BUFFER, GL2GL3.GL_READ_ONLY); + } + System.err.println("gpu-02 mapped GL_ARRAY_BUFFER, floatOffset "+floatOffset+", byteOffset "+byteOffset+", mapByteLength "+mapByteLength+" -> "+bb); System.err.println("gpu-03 GL_ARRAY_BUFFER -> bufferName "+bufferName+" -> "+bufferStorage); - Assert.assertEquals("Buffer storage size not equals buffer storage size", bufferStorage.getSize(), bb.capacity()); - Assert.assertEquals("Buffer storage's bytes-buffer not equal with mapped bytes-buffer", bufferStorage.getMappedBuffer(), bb); + Assert.assertNotNull(bb); + Assert.assertEquals("BufferStorage size less byteOffset not equals buffer storage size", bufferStorage.getSize()-byteOffset, bb.capacity()); + Assert.assertEquals("BufferStorage's bytes-buffer not equal with mapped bytes-buffer", bufferStorage.getMappedBuffer(), bb); + Assert.assertEquals("Buffer storage size not equals mapByteLength", mapByteLength, bb.capacity()); if(DEBUG) { + System.err.println("floatOffset "+floatOffset+", byteOffset "+byteOffset); for(int i=0; i < bb.capacity(); i+=4) { System.err.println("gpu "+i+": "+bb.getFloat(i)); } } for(int i=0; i < bb.capacity(); i+=4) { - Assert.assertEquals(verticiesBB.getFloat(i), bb.getFloat(i), 0.0); + Assert.assertEquals(verticiesBB.getFloat(byteOffset+i), bb.getFloat(i), 0.0001f); } gl.glUnmapBuffer(GL.GL_ARRAY_BUFFER); Assert.assertEquals("Buffer storage's bytes-buffer not null after unmap", null, bufferStorage.getMappedBuffer()); |