Shaders是否很早就在最新的OpenGL中使用?

时间:2014-05-05 20:45:37

标签: opengl

当我看到第4版本书" OpenGL SuperBible"它从点/线绘制多边形开始,稍后讨论着色器。在本书的第6版中,它直接从Shaders开始作为第一个例子。我很长一段时间没有使用OpenGL,但这是从Shaders开始的方式吗?

为什么会出现转变,这是因为从固定管道转向Shaders?

2 个答案:

答案 0 :(得分:2)

在有限的程度上,它取决于您正在谈论的OpenGL的确切分支。除了着色器之外,OpenGL ES 2.0没有到屏幕的路径 - 没有矩阵堆栈,没有着色器绘制的选项,也没有固定管道绑定的内置变量。 WebGL基于OpenGL ES 2.0,因此它继承了所有这些行为。

根据derhass的评论,所有固定的东西都在现代桌面GL中被弃用,你可以预期它会随着时间的流逝而消失。最快的检查可能是OpenGL 4.4 quick reference card。如果您想要的功能不在那里,那么它不在最新的OpenGL中。

根据您的评论,Kronos将OpenGL定义为:

  

唯一支持开发人员的跨平台图形API   用于创建PC,工作站和超级计算硬件的软件   高性能,视觉引人注目的图形软件应用程序,   在CAD,内容创作,能源,娱乐,游戏等市场中   开发,制造,医疗和虚拟现实。

它或多或少只暴露硬件。没有着色器,硬件无法执行任何操作。业内没有人希望维护着色器,永远模仿旧的固定功能。

答案 1 :(得分:2)

关于您可以使用没有着色器的OpenGL进行的唯一渲染是清除窗口,这可以让您了解使用OpenGL时它们的重要性。” - 来自OpenGL官方指南

在OpenGL 3.1之后,固定功能管道被移除,着色器成为强制性的。

所以SuperBible或OpenGL红皮书首先在讨论的早期描述新的可编程管道。然后他们讲述如何编写和使用顶点和片段着色程序。

对于着色器对象,您现在必须:

  1. 创建着色器(glCreateShader,glShaderSource)
  2. 将着色器源编译为对象(glCompileShader)
  3. 验证着色器(glGetShaderInfoLog)
  4. 然后将着色器对象链接到着色器程序:

    1. 创建着色器程序(glCreateProgram)
    2. 附加着色器对象(glAttachShader)
    3. 链接着色器程序(glLinkProgram)
    4. 验证(glGetProgramInfoLog)
    5. 使用着色器(glUseProgram)
    6. 在渲染之前,还有许多工作要做,而不是之前的固定功能管道。毫无疑问,可编程管道功能更强大,但它确实使得开始渲染变得更加困难。着色器现在是学习的核心概念。