저는 리눅스에서 잘 작동하는 것처럼 보이는 jupyter notebook 기반 API를 개발했지만 일부에서는 제안 된이 오류가 발생하여 창문이 그려지지 않고 있습니다. , 또는 glClearColor()가 호출 될 때까지 컨텍스트가 존재하지 않는다.Windows에서 PyOpenGL glClearColor 오류가 발생했습니다.
리눅스 환경에서 처리 할 수있는 이유는 모르겠지만 Windows의 jupyter에는 문제가 없습니다.
제안 사항? 이것은 OpenGL의 버그입니까? 편집
C:\Python27\biovis\biovis\biovis\glwindow.py in initializeGL(self)
132
133 if self.background=='black': GL.glClearColor(0.0, 0.0, 0.0, 1.0) # Black/White toggle switch
--> 134 if self.background=='white': GL.glClearColor(1.0, 1.0, 1.0, 1.0)
135
136 GL.glClearDepth(10.0) # same as default
C:\Users\cm\Anaconda2\lib\site-packages\pyopengl-3.1.1a1-py2.7.egg\OpenGL\platform\baseplatform.pyc in __call__(self, *args, **named)
400 def __call__(self, *args, **named):
401 if self.load():
--> 402 return self(*args, **named)
403 else:
404 from OpenGL import error
C:\Users\cm\Anaconda2\lib\site-packages\pyopengl-3.1.1a1-py2.7.egg\OpenGL\error.pyc in glCheckError(self, result, baseOperation, cArguments, *args)
230 result,
231 cArguments = cArguments,
--> 232 baseOperation = baseOperation,
233 )
234 return result
GLError: GLError(
err = 1282,
description = 'invalid operation',
baseOperation = glClearColor,
cArguments = (1.0, 1.0, 1.0, 1.0)
)
:
위의 몇 가지 코드를 추가 명확히하기 위해이 호출 체인 차례로 일부 데이터를로드하는 위젯을 호출 GLWindow 통과 명시 적으로 initializeGL(), updateGL는()를 호출 및 paintGL().
initializeGL()을 호출 할 때 오류가 발생하고 함수가 작동하지 않습니다. 위젯이 아직 플롯 할 준비가되지 않았습니까? 위젯이로드되면서 위젯이로드되지만 주석이 제대로 표시되지 않습니다. 화면이 검게 보이며 회전하는 동안에 만 그림이 깜박 거리는 것을 볼 수 있습니다 (회전 코드에 자체 updateGL() 호출이 있음).
어딘가에 show()가 없거나 함수가 잘못되었습니다. 그런데 왜 리눅스 환경은 윈도우가 아닌 ok입니까? (어쩌면 설치된 모듈 버전은 약간 다릅니다?)
class GLWindow(QtGui.QWidget):
def __init__(self, fig, parent=None):
QtGui.QWidget.__init__(self, parent)
self.glWidget = GLWidget(fig, parent=self)
mainLayout = QtGui.QHBoxLayout()
mainLayout.addWidget(self.glWidget)
self.setLayout(mainLayout)
self.setWindowTitle(self.tr("Biovis"))
self.show()
class GLWidget(QtOpenGL.QGLWidget):
def __init__(self, fig, parent=None):
QtOpenGL.QGLWidget.__init__(self, parent)
self.setFocusPolicy(Qt.StrongFocus)
self.lastPos = QtCore.QPoint()
self.load_data_from_fig(fig)
format = QtOpenGL.QGLFormat()
format.setDoubleBuffer(True) # works fine
self.setFormat(format)
def load_data_from_fig(self, fig):
self.background = fig.background
...
self.initializeGL() #Can comment these out and code works, but, the screen is black and the figure flickers in/out of existence while rotating
self.updateGL()
self.paintGL()
def initializeGL(self):
GL.glClearColor(1.0, 1.0, 1.0, 1.0)
GL.glClearDepth(10.0) # same as default
GL.glEnable(GL.GL_DEPTH_TEST) #
...
이 문제를 복제하는 짧은 코드 샘플을 게시 할 수 있습니까? GLError 1282는 꽤 일반적이고 많은 도움이되는 정보를 제공하지 않습니다. glClearColor를 호출하기 전에 OpenGL이 렌더링 할 창을 이미 만들었다 고 추측합니다. 어떻게 그 창을 만들고 OpenGL을 설정하고 있습니까? – CodeSurgeon
좋아, 코드 덩어리를 업로드했다. 도움이 되길 바랍니다. –
죄송합니다. 지금은 단지 그것을보고 있습니다. qt4 또는 qt5를 사용하고 있습니까? 이 리눅스에서 실행되도록 노력하고 있지만 올바르게 PyQt4 가져 오기 QtOpenGL 및 qglwidget 가져 오기 함께 고군분투입니다. – CodeSurgeon