1
をクラッシュします。私が直面しているglBufferDataはまだ私は、次の例に基づいて、PythonのOpenGLのコードを作成しようとしています
問題は、ここで述べたものと同じである: Crash on glBufferDataとhttp://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_())
次のコードのコードでは、3つのパラメータでglBufferDataを使用していますが、PyOpenGLでは4を指定しています。[リンク](http://stackoverflow.com/questions/11125827/how-to-use-glbufferdata-in-pyopengl?rq = 1)。私はこれを試しています。 –
glBufferDataの前にOpenGLエラーが登録されていませんか? – Andreas
@Andreasいいえ、コードをシングルステップ実行すると、デバッグコンソールにエラーが表示されません。 –