我想使用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包装器的bug?这是我的测试代码。
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()
验证您的上下文的GL_VERSION
字符串实际上是您所假设的。
Mesa通常只为您提供OpenGL 2.1上下文,除非您特别要求版本化的Core上下文,尽管随着时间的推移,更多的驱动程序正在获得兼容性上下文支持。
使用GLFW,您通常会在创建窗口之前通过hints设置GL版本,特别是您需要为GLFW_CONTEXT_VERSION_MAJOR
,GLFW_CONTEXT_VERSION_MINOR
和GLFW_OPENGL_PROFILE
设置值。