我试图在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错误 "无效操作", 有什么线索表明我做错了什么吗?
你使用的是过时的GL1GL2 API,例如 glBegin
和 glVertex
但是GTK会创建一个GL 3.2+的上下文,而这个上下文没有这个API。
你只能在传统的GL上下文上使用废弃的GL API;如果你的GL驱动不支持现代的、非废弃的GL上下文,GTK会回到传统的上下文。你可以通过以下方法检查GL上下文是否是遗留的。Gdk.GLContext.is_legacy()
方法。
一般来说,你不应该一开始就使用GL 3.2之前的API。如果你想在GL中创建一个三角形,你将不得不使用顶点缓冲器和GLSL着色器。