Ich versuche, Python OpenGL-Code zu erstellen, die auf das folgende Beispiel basiert: https://www.opengl.org/wiki/Tutorial2:_VAOs,_VBOs,_Vertex_and_Fragment_Shaders_(C_/_SDL)glBufferData stürzt noch
ich einen Absturz der Anwendung bin vor, wenn glBufferData aufgerufen wird.
Das Problem, das ich Gesicht ist das gleiche wie die, die hier erwähnt: Crash on glBufferData und http://www.cplusplus.com/forum/beginner/47978/
jedoch die in diesen Seiten erwähnten Lösungen sind nicht noch arbeiten. Ich benutze PyQt5.5, Python 3.4.0 mit PyOpenGL 3.1. Außerdem meldet GPU Caps Viewer, dass Open GL 4.5 auf meinem Computer verfügbar ist.
Jede Hilfe oder Hinweise, um in Bewegung zu kommen, wird sehr geschätzt.
Hinweis: Beim Starten des PyDev Debugger zum Zeitpunkt des Absturzes, das Kontroll
self.context().isValid()
Der Initialisierungscode unter Wahr zurückgegeben wird:
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_())
Der Code im folgenden Beispiel scheint glBufferData mit 3 Parametern zu verwenden, während PyOpenGL 4 angibt. [Link] (http://stackoverflow.com/questions/11125827/how-to-use-glbufferdata-in-pyopengl?rq = 1). Ich probiere das aus. –
Gibt es irgendwelche registrierten OpenGL-Fehler vor glBufferData? – Andreas
@Andreas Nein, in der Debug-Konsole sind keine Fehler aufgeführt, wenn Sie den Code einzeln durchlaufen. –