使用 python opengl (PyOpenGL) 创建几何着色器失败

Posted

技术标签:

【中文标题】使用 python opengl (PyOpenGL) 创建几何着色器失败【英文标题】:Create geometry shader using python opengl (PyOpenGL) failed 【发布时间】:2019-03-01 07:03:43 【问题描述】:

我想使用 glCreateShader(GL_GEOMETRY_SHADER) 创建geometry_shader,但出现错误。

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    geometry_shader = glCreateShader(GL_GEOMETRY_SHADER)
  File "errorchecker.pyx", line 53, in OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError (src/errorchecker.c:1218)
OpenGL.error.GLError: GLError(
        err = 1280,
        description = b'invalid enumerant',
        baseOperation = glCreateShader,
        cArguments = (GL_GEOMETRY_SHADER,),
        result = 0
)

我的环境: Python版本:3.6.7 OpenGL 核心配置文件版本字符串:4.5(核心配置文件)Mesa 18.0.5 操作系统版本:ubuntu 18.04(ubuntu 16.04 测试相同) 从this site我知道最低版本是3.2。所以应该不是版本问题。 是否可能是opengl的python包装器的错误? 这是我的测试代码。

import glfw
from OpenGL.GL import *
glfw.init()
glfw.window_hint(glfw.SAMPLES, 4)
window_size = (800, 600)
window = glfw.create_window(*window_size, 'Vehicle Model', None, None)
glfw.make_context_current(window)
vertice_shader = glCreateShader(GL_VERTEX_SHADER)
geometry_shader = glCreateShader(GL_GEOMETRY_SHADER)
glfw.terminate()

【问题讨论】:

【参考方案1】:

验证您的上下文的 GL_VERSION 字符串实际上是您假设的内容。

Mesa 通常只为您提供 OpenGL 2.1 上下文,除非您特别要求版本化核心上下文,但随着时间的推移,越来越多的驱动程序正在获得兼容性上下文支持。

使用 GLFW,您通常在创建窗口之前通过设置 hints 请求 GL 版本,特别是您需要设置 GLFW_CONTEXT_VERSION_MAJORGLFW_CONTEXT_VERSION_MINORGLFW_OPENGL_PROFILE 的值。

【讨论】:

以上是关于使用 python opengl (PyOpenGL) 创建几何着色器失败的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 和 Python 在 OpenGL 中进行资源管理

Python中的Tkinter OpenGL上下文

尝试使用opengl函数glMapBufferRange在python中制作外星人

Python环境搭建之OpenGL

使用 python opengl (PyOpenGL) 创建几何着色器失败

使用python在OpenGL中仅渲染立方体内的一部分球体?