是纯OpenGL还是GLSL?[关闭]


11

我对研究图形编程很感兴趣,因此显而易见的切入点是学习OpenGL。但是,在论坛和站点周围收集分散的信息时,似乎似乎已经淘汰了纯OpenGL实现,因为3.0版之前的大多数内容已被弃用,并引用了Amazon的评论,“自3.0版以来,所有内容均与着色器有关”。在我所见过的书中,看起来只有上篇涵盖了较新的版本,而部分原因是因为书中很大一部分讲授了过时的功能,并且有专门针对GLSL的书。

这是我遇到的第一个问题,某些硬件不支持GLSL,包括我计划使用的具有英特尔集成显卡的笔记本电脑。功能

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

导致分段错误,从它的外观看,我的驱动程序不支持着色器

所以我的问题是,仅在OpenGL中制作游戏的可行性是什么?着色器语言会缺少不可替代的良好功能吗?我期望什么样的硬件(旧的i3,i5,i7,旧的VGA)可以正确运行带有着色器的游戏?


1
GLSL OpenGL,我想您的问题与您打算使用的硬件是否兼容OpenGL 3,而不是GLSL兼容有关。
deceleratedcaviar

@Daniel,如果硬件/驱动程序与OpenGL 3.0兼容,那么它是否与GLSL兼容?
ibrabeicker 2011年

1
GLSL是OpenGL 3.0规范的一部分,是的,确实如此。
deceleratedcaviar

1
您说,“从外观上看,我的驱动程序不支持着色器。” 您将获得什么版本的OpenGL?您是否正确加载了所有可用的OpenGL函数?
Nicol Bolas

1
@Papavoikos:如果返回NULL,你有很多比是否使用着色器更大的问题。您是否正确创建了OpenGL上下文?请记住:在创建有效上下文并使其成为当前上下文之前,您不能调用任何GL函数。
Nicol Bolas

Answers:


9

着色器代码绝对比一堆glTexEnv,glTexGen和纹理矩阵调用更清晰,更容易理解,并且具有的好处是,您可以使用它来表达或多或少的任意数学运算(这是固定的,不能做到)管道-您所说的“纯OpenGL”)。唯一的潜在缺点是,在开始使用它们之前,您需要在代码中编写一定数量的支持基础结构,而采用旧方法,您几乎可以直接参与其中。我称之为“潜在”缺点,因为我实际上以为它可以使您做好准备并提前学习更多东西-OpenGL以“轻松”而著称,您偶尔会看到人们被这个愚弄而潜入水中而又不真正知道他们在做什么,

在硬件方面,您几乎可以依赖过去5/6/7年中发布的所有内容来获得一定程度的着色器支持,但是-对于较旧的Intel(某些9xx系列)而言-不会是GLSL,而是较旧的GL_ARB_vertex_programGL_ARB_fragment_program扩展。它们使用类似于汇编语言的着色器语言,但是-坦白的时间-我个人非常喜欢它。如果缺少一些更现代的功能(例如分支)并且需要更多行着色器代码来完成同一操作,则它实际上非常易于使用。这些扩展在主程序中所需的支持基础结构也比GLSL轻得多。

但这并不是说我会推荐它们而不是GLSL,但是如果您确实需要在此类硬件上运行,那么可以使用它们,并且意识到它们的存在非常有用,这使我得出了最后的结论。 。您是否真的确定确实需要在此类硬件上运行(例如,在笔记本电脑中,您可能只是忽略了获取入口点)?


我完全忽略了Mesa3d仍在opengl 2.1规范中的事实。我会解决
ibrabeicker

6

还应注意,不再有“纯OpenGL”。

OpenGL ES 2.0放弃了所有非着色器的功能,并且由于WebGL基于它,因此它也只能与着色器一起使用。OpenGL 3.0不推荐使用所有固定功能的东西,而3.1则将其删除(在核心配置文件中。大多数实现都支持兼容性配置文件,但MacOSX并不支持其3.2实现)。

所以我不建议学习非着色器OpenGL。


6

如果您过去做过任何编程,那么使用GLSL编写自己的着色器代码将更加有趣。我最初尝试学习固定功能的OpenGL,但对我而言却比较困难,因为它没有意义。然后,我尝试使用橙皮书学习GLSL,自此以后,它变得容易得多,并且功能更多。只是我的2美分。

由于可以为GPU编写程序,因此我肯定会选择GLSL。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.