gpt4 book ai didi

glsl - GLSL 和 GLSL ES 2 之间的差异

转载 作者:行者123 更新时间:2023-12-03 09:29:27 30 4
gpt4 key购买 nike

真的有两个问题...

  • GLSL ES 2 是完全独立的语言,还是 GLSL 的特殊版本?
  • 在“标准库”函数、语法和功能方面,它们之间有什么区别?

  • 我正在为一个针对 Windows、Mac 和 iPad 的应用程序编写着色器,我不希望为每个着色器添加更多版本——无论如何,着色器更简单。

    最佳答案

    Is GLSL ES 2 a totally separate language, or a special version of GLSL?



    每个版本的 GLSL 最终都是一种“完全独立的语言”;有些甚至不向后兼容以前的版本。然而,GLSL 的 ES 变体更是如此。

    将其视为桌面 GLSL 的一个分支。请注意,六个版本之前的 GLSL 分支。

    What are the differences between them, in terms of "standard library" functions, syntax and capabilities?



    在哪些版本之间?

    您必须尝试在这些平台之间共享着色器的唯一可能原因是您尝试在它们之间共享 OpenGL 代码。因此,您必须将自己限制在桌面 OpenGL 2.1 功能上。

    这意味着您将使用桌面 GLSL 1.20 版。这类似于 GLSL ES 版本 1.00(GLSL 的版本没有与匹配的 GL 版本相同的编号。嗯,直到桌面 GL 3.3/4.0 和 GLSL 3.30/4.00),但仍然不同。在 ES 中,您有很多桌面 GLSL 1.20 无法处理的精度限定符。

    处理这个问题的最好方法是使用“前导”着色器字符串。见, glShaderSource 接受多个着色器字符串,将它们拼接在一起并编译为一个。您可以使用您的主要着色器字符串( main 及其各种代码、 attribute 定义、 uniforms 等)并在其前面粘贴一个“前导”着色器字符串。根据您要编译的内容,序言会有所不同。

    您的 ES GLSL 1.00 序言如下所示:
    #version 100  //Must start with a version specifier.

    您的桌面 GLSL 1.20 序言如下所示:
    #version 120
    #define lowp
    #define mediump
    #define highp

    也许还有其他一些明智的 #defines .这样,您的着色器可以设置这些精度限定符,它们将只是 #define d 离开时使用桌面 GLSL。

    这很像 C/C++ 中的平台中立编码,您经常有一些特定于平台的 header 会更改定义和/或有 #define s,您可以根据这些条件设置代码。

    关于glsl - GLSL 和 GLSL ES 2 之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383113/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com