在 OS X 上的 pyglet 中启用 OpenGL Core Profile
Enabling the OpenGL Core Profile in pyglet on OS X
我试图让最小的 OpenGL 着色器在 pyglet 中工作,但在编译时出现以下错误:
ERROR: 0:1: '' : version '420' is not supported
这似乎是因为 pyglet 使用旧版 OpenGL 配置文件,如 this question,但如果是这种情况,我如何让 pyglet 使用不同的配置文件?我无法在任何地方找到它的记录,感觉我一定遗漏了一些明显的东西。
以下代码重现了该问题(改编自 this example):
import pyglet
import pyglet.gl as gl
import ctypes
window = pyglet.window.Window()
handle = gl.glCreateProgram()
shader = gl.glCreateShader(gl.GL_VERTEX_SHADER)
source = """
#version 420
in vec3 vertex_position;
void main() {
gl_Position = vec4(vertex_position, 1.0);
}
"""
src = ctypes.c_char_p(source)
gl.glShaderSource(shader, 1,
ctypes.cast(ctypes.pointer(src),
ctypes.POINTER(ctypes.POINTER(ctypes.c_char))), None)
gl.glCompileShader(shader)
# Retrieve compilation status
status = ctypes.c_int(0)
gl.glGetShaderiv(shader, gl.GL_COMPILE_STATUS, ctypes.byref(status))
# If compilation failed, print the log
if not status:
gl.glGetShaderiv(shader, gl.GL_INFO_LOG_LENGTH, ctypes.byref(status))
buffer = ctypes.create_string_buffer(status.value)
gl.glGetShaderInfoLog(shader, status, None, buffer)
print buffer.value
pyglet.app.run()
- 硬件:MacBook Air(13 英寸,2012 年中)Intel HD Graphics 4000 1024 MB
- OSX: 10.10.1
- Python: 2.7.6
- pyglet: 1.2.4
我试图让最小的 OpenGL 着色器在 pyglet 中工作,但在编译时出现以下错误:
ERROR: 0:1: '' : version '420' is not supported
这似乎是因为 pyglet 使用旧版 OpenGL 配置文件,如 this question,但如果是这种情况,我如何让 pyglet 使用不同的配置文件?我无法在任何地方找到它的记录,感觉我一定遗漏了一些明显的东西。
以下代码重现了该问题(改编自 this example):
import pyglet
import pyglet.gl as gl
import ctypes
window = pyglet.window.Window()
handle = gl.glCreateProgram()
shader = gl.glCreateShader(gl.GL_VERTEX_SHADER)
source = """
#version 420
in vec3 vertex_position;
void main() {
gl_Position = vec4(vertex_position, 1.0);
}
"""
src = ctypes.c_char_p(source)
gl.glShaderSource(shader, 1,
ctypes.cast(ctypes.pointer(src),
ctypes.POINTER(ctypes.POINTER(ctypes.c_char))), None)
gl.glCompileShader(shader)
# Retrieve compilation status
status = ctypes.c_int(0)
gl.glGetShaderiv(shader, gl.GL_COMPILE_STATUS, ctypes.byref(status))
# If compilation failed, print the log
if not status:
gl.glGetShaderiv(shader, gl.GL_INFO_LOG_LENGTH, ctypes.byref(status))
buffer = ctypes.create_string_buffer(status.value)
gl.glGetShaderInfoLog(shader, status, None, buffer)
print buffer.value
pyglet.app.run()
- 硬件:MacBook Air(13 英寸,2012 年中)Intel HD Graphics 4000 1024 MB
- OSX: 10.10.1
- Python: 2.7.6
- pyglet: 1.2.4