From 280d68ca34debebfeb9172420598a15ba576eb7e Mon Sep 17 00:00:00 2001 From: Hugo Parente Lima Date: Tue, 8 Feb 2011 14:35:38 -0200 Subject: Fix QGLBuffer::map code injection and test. --- PySide/QtOpenGL/typesystem_opengl.xml | 18 ++++++++++++------ tests/QtOpenGL/qglbuffer_test.py | 34 ++++++++++++++-------------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/PySide/QtOpenGL/typesystem_opengl.xml b/PySide/QtOpenGL/typesystem_opengl.xml index cef742dcd..6ff9614db 100644 --- a/PySide/QtOpenGL/typesystem_opengl.xml +++ b/PySide/QtOpenGL/typesystem_opengl.xml @@ -123,12 +123,18 @@ - - void *data = %CPPSELF.map(%1); - QByteArray ret; - if (data) - ret.append((const char*)data, %CPPSELF.size()); - %PYARG_0 = %CONVERTTOPYTHON[QByteArray](ret); + + Py_ssize_t dataSize = %CPPSELF.size(); + void* data = %CPPSELF.map(%1); + + if (!data) { + Py_INCREF(Py_None); + %PYARG_0 = Py_None; + } else if (%1 == QGLBuffer::ReadOnly) { + %PYARG_0 = PyBuffer_FromMemory(data, dataSize); + } else { + %PYARG_0 = PyBuffer_FromReadWriteMemory(data, dataSize); + } diff --git a/tests/QtOpenGL/qglbuffer_test.py b/tests/QtOpenGL/qglbuffer_test.py index ae23fbdf3..2cf06027f 100644 --- a/tests/QtOpenGL/qglbuffer_test.py +++ b/tests/QtOpenGL/qglbuffer_test.py @@ -9,12 +9,11 @@ from PySide.QtOpenGL import QGLBuffer, QGLWidget from helper import UsesQApplication class QGLBufferTest(UsesQApplication): - def usageCheck(self, t): + def testIt(self): w = QGLWidget() w.makeCurrent() - b = QGLBuffer(t) - self.assertEqual(b.usagePattern(), QGLBuffer.StaticDraw) + b = QGLBuffer() b.setUsagePattern(QGLBuffer.DynamicDraw) self.assert_(b.create()) @@ -26,24 +25,19 @@ class QGLBufferTest(UsesQApplication): self.assertEqual(b.size(), data.size()) m = b.map(QGLBuffer.ReadOnly) - self.assertEqual(m.data(), data.data()) - b.unmap() - - other_data = QByteArray("67") - b.write(0, other_data) - m = b.map(QGLBuffer.ReadOnly) - self.assertEqual(m.mid(0, other_data.size()).data(), other_data.data()) - b.unmap() - - result, rdata = b.read(0, other_data.size()) - print result, rdata - self.assert_(result) - self.assertEqual(other_data.data(), rdata.data()) - + if m: + self.assertEqual(m, buffer(data.data())) + b.unmap() + + m = b.map(QGLBuffer.ReadWrite) + m[3] = 'A' + b.unmap() + result, rdata = b.read(3, 1) + self.assertTrue(result) + self.assertEqual('A', rdata.data()) + else: + print " memory mapping is not possible in this OpenGL implementation." b.release() - def testUsage(self): - self.usageCheck(QGLBuffer.IndexBuffer) - if __name__ == '__main__': unittest.main() -- cgit v1.2.3