2016-04-07 2 views
1

をクラッシュします。私が直面しているglBufferDataはまだ私は、次の例に基づいて、PythonのOpenGLのコードを作成しようとしています

問題は、ここで述べたものと同じである: Crash on glBufferDatahttp://www.cplusplus.com/forum/beginner/47978/

しかし、これらのページに言及したソリューションはまだ機能していません。 PyOpenGL 3.1でPython 3.4.0とPyQt5.5を使用しています。また、GPU Caps ViewerはOpen GL 4.5が私のマシンで利用可能であると報告しています。

移動するための助けや指針は大変ありがたいです。

注:クラッシュ時にPyDevはデバッガを起動すると、チェック

self.context().isValid() 

は、初期化コードは以下の通りです真

を返しました:

from PyQt5 import QtGui, QtCore 
import sys, array 
from OpenGL import GL 

class PulleysWithWeights3D(QtGui.QOpenGLWindow): 

    def __init__(self): 
     super().__init__() 

     # These are the 4D coordinates of a triangle that needs to be drawn. 
     _vertexPos = [ 0.075, 0.075, 0.075, 0.075, \ 
         0.275, 0.275, 0.275, 0.075, \ 
         0.550, 0.550, 0.550, 0.075 ] 

     # These are the RGBA colours for each vertex. 
     _vertexCols = [ 0.875, 0.525, 0.075, 0.500, \ 
         0.875, 0.525, 0.075, 0.500, \ 
         0.875, 0.525, 0.075, 0.500 ] 

     self._deltaPositions = array.array('f', _vertexPos) 
     self._deltaColours = array.array('f', _vertexCols) 

     self._appSurfaceFormat = QtGui.QSurfaceFormat() 

     self._appSurfaceFormat.setProfile(QtGui.QSurfaceFormat.CoreProfile) 
     self._appSurfaceFormat.setMajorVersion(4) 
     self._appSurfaceFormat.setMinorVersion(2) 
     self._appSurfaceFormat.setRenderableType(QtGui.QSurfaceFormat.OpenGL) 
     self._appSurfaceFormat.setSamples(16)   
     self._appSurfaceFormat.setSwapBehavior(QtGui.QSurfaceFormat.DoubleBuffer) 
     self.setSurfaceType(QtGui.QSurface.OpenGLSurface) 

     self.setFormat(self._appSurfaceFormat) 

     self.setIcon(QtGui.QIcon('OpenGL.png')) 
     self.setTitle('Pulleys3D') 
     self.setMinimumSize(QtCore.QSize(1280, 640)) 
     self.show() 


    def initializeGL(self): 

     GL.glClearColor(0.0, 0.0, 0.0, 0.500) # RGBA 
     GL.glClearDepthf(1.0) 
     GL.glClearStencil(0) 
     GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT | GL.GL_STENCIL_BUFFER_BIT) 

     self._vaoColouredDelta = GL.glGenVertexArrays(1) 
     GL.glBindVertexArray(self._vaoColouredDelta) 

     self._vboPositions = GL.glGenBuffers(1) 
     GL.glBindBuffer(GL.GL_ARRAY_BUFFER, self._vboPositions) 

     GL.glBufferData(GL.GL_ARRAY_BUFFER, \ 
         self._deltaPositions.buffer_info()[1] * self._deltaPositions.itemsize, \ 
         self._deltaPositions.tolist(), GL.GL_STATIC_DRAW) 

     # PS: Code has been stopped here. 

    def resizeGL(self, wd, ht): 
     GL.glViewport(0, 0, wd, ht) 


    def paintGL(self): 
     pass 


if __name__ == '__main__': 
    _pww3dApp = QtGui.QGuiApplication(sys.argv) 
    _pww3d = PulleysWithWeights3D() 
    sys.exit(_pww3dApp.exec_()) 
+0

次のコードのコードでは、3つのパラメータでglBufferDataを使用していますが、PyOpenGLでは4を指定しています。[リンク](http://stackoverflow.com/questions/11125827/how-to-use-glbufferdata-in-pyopengl?rq = 1)。私はこれを試しています。 –

+0

glBufferDataの前にOpenGLエラーが登録されていませんか? – Andreas

+0

@Andreasいいえ、コードをシングルステップ実行すると、デバッグコンソールにエラーが表示されません。 –

答えて

0

問題解決されました。

への呼び出しがこの問題を引き起こしていました。私はそれを

self._deltaPositions.tostring() 

に置き換え、クラッシュは消え去る。

関連する問題