Я пытаюсь создать код Python OpenGL на основе следующего примера: https://www.opengl.org/wiki/Tutorial2:_VAOs,_VBOs,_Vertex_and_Fragment_Shaders_(C_/_SDL)
Я столкнулся со сбоем приложения при вызове glBufferData.
Проблема, с которой я сталкиваюсь, такая же, как и упомянутые здесь: Сбой в glBufferData и http://www.cplusplus.com/forum/beginner/47978/
Однако решения, упомянутые на этих страницах, не по-прежнему работают. Я использую PyQt5.5, Python 3.4.0 с PyOpenGL 3.1. Кроме того, 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_() )
GL.GL_NO_ERROR
. Я устанавливаю эту проверку в нескольких местах: при создании привязки VAO, при создании привязки VBO и после вызоваglBindVertexArray
иglEnableVertexAttribArray
. - person Pralines And Cream   schedule 08.04.2016