gpt4 book ai didi

python - 在 PyQt 中编译着色器

转载 作者:太空狗 更新时间:2023-10-29 21:47:14 25 4
gpt4 key购买 nike

我无法获得在 PyQt 中运行的基本着色器程序。我认为这至少应该正确编译着色器代码(我不是这里的专家),但是无论我尝试什么,addShaderFromSourceFile() 总是返回 false。着色器程序日志也总是空的。

我在 Ubuntu 12.04 上,我可以用 C++ 编译和运行 GLSL 着色器程序。所以我认为这不是系统问题。

文件 shader.vert

void main(void)
{
gl_Position = ftransform();
}

文件 shader.frag

void main(void)
{
gl_FragColor = vec4(1.0,0.0,0.0,1.0);
}

文件 test_shaders.py

from OpenGL.GL import *
from OpenGL.GLU import *
from PyQt4 import QtCore, QtGui
from PyQt4.QtOpenGL import *

class ExampleQGLWidget(QGLWidget):

def __init__(self, parent):
QGLWidget.__init__(self, parent)
self.shaderProgram = QGLShaderProgram()
print self.shaderProgram.addShaderFromSourceFile(QGLShader.Vertex, "shader.vert")
print self.shaderProgram.addShaderFromSourceFile(QGLShader.Fragment, "shader.frag")
print self.shaderProgram.log()
self.shaderProgram.link()
glViewport(0,0, 640, 480)

def paintGL(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
self.shaderProgram.bind()

def resizeGL(self, w, h):
glViewport(0, 0, w, h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()

def initializeGL(self):
glClearColor(0.0, 0.0, 0.0, 1.0)
glClearDepth(1.0)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()

class TestContainer(QtGui.QMainWindow):

def __init__(self):
QtGui.QMainWindow.__init__(self)
widget = ExampleQGLWidget(self)
self.setCentralWidget(widget)

if __name__ == '__main__':
app = QtGui.QApplication(['Shader Example'])
window = TestContainer()
window.show()
app.exec_()

最佳答案

OpenGL 上下文不是在构造函数中设置的,它仅在 paintGL、resizeGL 和 initializeGL 方法中有效且当前有效,因此您应该在 initializeGL 方法中加载和编译着色器,而不是在其他任何地方。

关于python - 在 PyQt 中编译着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11192938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com