PySide QGLBuffer分配输入数据

时间:2012-11-09 20:57:42

标签: python qt opengl pyside

我正在尝试运行PySide版本的OpenGL Core Profile Qt演示 - How_to_use_OpenGL_Core_Profile_with_Qt

它使用QGLBuffer.allocate()方法(C ++代码)

float points[] = { -0.5f, -0.5f, 0.0f, 1.0f,
                    0.5f, -0.5f, 0.0f, 1.0f,
                    0.0f,  0.5f, 0.0f, 1.0f };
m_vertexBuffer.allocate( points, 3 * 4 * sizeof( float ) );

Pythonic方式将是:

points = [-0.5, -0.5, 0.0, 1.0,
           0.5, -0.5, 0.0, 1.0,
           0.0,  0.5, 0.0, 1.0]
m_vertexBuffer.allocate(points)

但是当我运行此代码时,我收到以下错误

TypeError: 'PySide.QtOpenGL.QGLBuffer.allocate' called with wrong argument types:
  PySide.QtOpenGL.QGLBuffer.allocate(list)
Supported signatures:
  PySide.QtOpenGL.QGLBuffer.allocate(void, int = -1)
  PySide.QtOpenGL.QGLBuffer.allocate(int) 

我发现unit test用于此功能 - 它使用QByteArray。

data = QByteArray("12345")
b.allocate(data)

但我不明白如何将Python列表转换为QByteArray或使用allocate with list。或者它是PySide包装函数中的错误吗?

1 个答案:

答案 0 :(得分:2)

我似乎找到了解决方案。我们应该使用像struct或array这样的python模块。例如:

from array import *

points = [0.5, 1, -0.5]
data = array('f', points)
# data.tostring() - returns packed data with size of len(data.tostring())