6.3OpenGLCoreProfile


文档摘要

## 6.3 OpenGL Core Profile OpenGL有着很重的历史包袱,需要开发可编程管线新特性,还需要兼容之前固定管线。 从OpenGL3.3开始,开始使用Profiler来区分,抛弃了历史API的版本称之为Core Profile。 都2021年了,其实没有必要再兼容老旧的API。 在前面的章节,介绍的OpenGL知识都是老版本的,所以用了2.0版本在跑。 后面章节用到了新的版本API,所以后续我也使用Core Profile。 使用Core Profile 3.3 在初始化glfw的时候需要指定OpenGL版本为3.3,然后指定为Core Profile。 新的特性 从Core Profile 3.

6.3 OpenGL Core Profile

OpenGL有着很重的历史包袱,需要开发可编程管线新特性,还需要兼容之前固定管线。

从OpenGL3.3开始,开始使用Profiler来区分,抛弃了历史API的版本称之为Core Profile。

都2021年了,其实没有必要再兼容老旧的API。

在前面的章节,介绍的OpenGL知识都是老版本的,所以用了2.0版本在跑。

后面章节用到了新的版本API,所以后续我也使用Core Profile。

MacOS 从3.3开始只支持Core Profile。 Windows 支持OpenGL所有版本。

1. 使用Core Profile 3.3

在初始化glfw的时候需要指定OpenGL版本为3.3,然后指定为Core Profile。

//初始化OpenGL void init_opengl() { ...... glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); #ifdef __APPLE__ glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); #endif ...... }

2. 新的特性

从Core Profile 3.0开始,增加了顶点数组对象(Vertex Array Object,简称VAO)。

下一小节马上用到。

3. Shader语法变化

切换到OpenGL3.3 Core Profile之后,Shader语法也迎来了以下变化:

  1. #version 110 升级为 #version 330
  2. 使用关键字in 替代 attribute
  3. 使用关键字out 替代varying
  4. 采样函数从texture2D变为texture
  5. 片段着色器的输出,可以使用关键字out指定自定义变量。

下面是一个升级后的例子。

顶点着色器:

#version 330 core uniform mat4 u_mvp; layout(location = 0) in vec3 a_pos; layout(location = 1) in vec4 a_color; out vec4 v_color; void main() { gl_Position = u_mvp * vec4(a_pos, 1.0); v_color = a_color; };

片段着色器:

#version 330 core in vec4 v_color; layout(location = 0) out vec4 o_fragColor; void main() { o_fragColor = v_color; }

发布者: 作者: 转发
评论区 (0)
U