在Python中尝试在GTK中使用OpenGL时出现 "无效操作 "错误。

问题描述 投票:0回答:1

我试图在GTK中嵌入我的OpenGL应用程序,但我不能让这个简单的例子工作。我使用的是来自 这里. 我的代码。

class MyWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Hello World")

        area = Gtk.GLArea()
        self.add(area)

        area.connect('render', self.on_render)

    def on_render(self, area, context):
        glViewport(0, 0, 100, 100)

        glClearColor(1, 1, 1, 0)
        glClear(GL_COLOR_BUFFER_BIT)

        try:
            glColor3f(0, 0, 0)
        except Error as err:
            print("Error: {0}".format(err))  # invalid operation
        glBegin(GL_TRIANGLES)
        glVertex3f(0.0, 1.0, 0.0)
        glVertex3f(-1.0, -1.0, 0.0)
        glVertex3f(1.0, -1.0, 0.0)
        try:
            glEnd()
        except Error as err:
            print("Error: {0}".format(err))  # invalid operation

        return True


win = MyWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

我在 "glColor3f "和 "glEnd "这两行得到了1282错误 "无效操作", 有什么线索表明我做错了什么吗?

python-3.x opengl gtk pygtk
1个回答
0
投票

你使用的是过时的GL1GL2 API,例如 glBeginglVertex但是GTK会创建一个GL 3.2+的上下文,而这个上下文没有这个API。

你只能在传统的GL上下文上使用废弃的GL API;如果你的GL驱动不支持现代的、非废弃的GL上下文,GTK会回到传统的上下文。你可以通过以下方法检查GL上下文是否是遗留的。Gdk.GLContext.is_legacy() 方法。

一般来说,你不应该一开始就使用GL 3.2之前的API。如果你想在GL中创建一个三角形,你将不得不使用顶点缓冲器和GLSL着色器。

© www.soinside.com 2019 - 2024. All rights reserved.