后来的OpenGL规范 - 超过着色器?

时间:2011-03-29 23:48:40

标签: opengl shader specifications

我几乎完全按照2规范编写OpenGL,并且对3和4规格知之甚少。 我在一些论坛上看到,OpenGL的后期规范基本上只是为着色器提供数据,这些都是真正的工作。 这与我所理解的OpenGL形成鲜明对比,而着色器则作为照明,水和其他效果等辅助工具 我充其量只是对着色器的基本理解,并且在前面提到的任何主题中被证明是错误的并不会感到惊讶。我只是想要更好的理解

由于

4 个答案:

答案 0 :(得分:6)

您的理解是正确的。在OpenGL 3.0中,几乎所有固定功能都被弃用,转而使用着色器。即使是可从着色器访问的内置东西也不推荐使用,例如模型视图/投影矩阵,顶点坐标,法线,灯光等。

基本工作流程应该如下:

  • 通过VBO加载几何体和每顶点属性
  • 加载纹理,着色器
  • 通过制服传递像矩阵,灯光这样的东西
  • 通过顶点坐标,纹理坐标,法线,通过通用属性数组(在VBOs中)传递每个顶点值
  • 致电glDrawElementsglDrawArrays

因此,您将要进行的大多数OpenGL调用只是推动通用数据。而不是像glLightfv这样的状态函数,您将调用像glUniform4f这样的泛型函数。

答案 1 :(得分:2)

如果您已经在使用着色器,则没有太多变化。你遇到了一些缺失的东西,在渲染代码中添加了一个矩阵,在着色器中添加了两行(或者更有可能是半行)并且生活还在继续。

如果像我一样,你愚蠢地尝试使用OpenGL来提高效率(即以高帧率渲染科学数据,而不是游戏),那么你就会受到一点伤害。您将需要编写(我的意思是剪切+粘贴示例)几十行着色器代码来替换固定功能管道,并且需要接近一百行设置代码来编译,链接和激活这些代码着色器(连同调试输出,你不会在第一次尝试时得到它)。

在任何一种情况下,仍然没有任何作用。然后你发现你需要绑定一个VAO。你实际上并不需要对它做任何事情(除非你想使用多个VAO进行状态管理),你只需要一个,因为没有它的其他属性/ VBO东西都没有。

但是,当你完成后,你可以开始考虑使用着色器或OpenCL集成GPGPU计算,并将所有数据移交给图形内存中的所有内容。

答案 2 :(得分:1)

我认为这个想法很简单。我们已经击败几何到死。存在发动机以处理几何结构。

现在,真正的挑战是我们如何使几何看起来更逼真?这种工作最好用着色器完成,所以这就是专业的重点所在。

答案 3 :(得分:0)

目前的OpenGL规范仍然可以完成大部分相同的几何体。他们不再做的是(自动)处理着色器中相当容易做的事情。例如,它们不再在顶点颜色之间自动插值以获得每个像素的颜色。插值硬件仍然存在,因此着色器很简单,但仍然是必需的。

相关问题