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

时间:2019-03-01 07:03:43

标签: python opengl shader

我想使用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 个答案:

答案 0 :(得分:1)

验证上下文中的GL_VERSION字符串确实是您所假设的。

Mesa通常只为您提供OpenGL 2.1上下文,除非您明确要求版本化的Core上下文,尽管随着时间的流逝,越来越多的驱动程序将获得Compatibility上下文支持。

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