2016-04-07 12 views
1

çöker.glBufferData hala Aşağıdaki örnekte dayalı Python OpenGL kodu oluşturmak için çalışıyorum

ben yüz mesele burada sözü olanlar aynıdır: Crash on glBufferData ve

http://www.cplusplus.com/forum/beginner/47978/ Ancak, bu sayfaların belirtilen çözümler hala çalışıyor değildir. PyOpenGL 3.1 ile PyQt5.5, Python 3.4.0 kullanıyorum. Ayrıca, GPU Caps Viewer, Open GL 4.5 cihazının makinemde olduğunu bildiriyor.

Taşımak için herhangi bir yardım veya işaretçi çok takdir edilmektedir.

Not: kilitlenme sırasında Pydev debugger

self.context().isValid() 

başlatma kod aşağıda Gerçek dönen çek çalıştırırken:

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

Aşağıdaki örnekteki kod, 3 parametresiyle glBufferData kullanıyor, PyOpenGL ise 4. belirtir [[link] (http://stackoverflow.com/questions/11125827/how-to-use-glbufferdata-in-pyopengl?rq = 1). Bunu deniyorum. –

+0

GlBufferData'dan önce kayıtlı herhangi bir OpenGL hatası var mı? – Andreas

+0

@Andreas Hayır, kodda tek adım attığında hata ayıklama konsolunda listelenen hata yok. –

cevap

0

sorunu çözüldü. Soruna,

numaralı çağrı neden oldu. Ben onu

self._deltaPositions.tostring() 

ile değiştirin ve kilitlenme gider.

İlgili konular