GLSL和GLSL ES 2之间的差异

GLSL和GLSL ES 2之间的差异,glsl,opengl-es-2.0,Glsl,Opengl Es 2.0,两个问题真的 GLSL ES 2是一种完全独立的语言,还是GLSL的特殊版本 在“标准库”函数、语法和功能方面,它们之间有什么区别 我正在为一个针对Windows、Mac和iPad的应用程序编写着色器,我希望不必为每个着色器添加更多版本——无论如何,更简单的着色器 GLSL ES 2是一种完全独立的语言,还是GLSL的特殊版本 GLSL的每个版本最终都是一种“完全独立的语言”;有些甚至与以前的版本不向后兼容。然而,GLSL的ES变异更为严重 可以将其视为桌面GLSL的一个分支。请注意,六个版本前

两个问题真的

  • GLSL ES 2是一种完全独立的语言,还是GLSL的特殊版本
  • 在“标准库”函数、语法和功能方面,它们之间有什么区别
  • 我正在为一个针对Windows、Mac和iPad的应用程序编写着色器,我希望不必为每个着色器添加更多版本——无论如何,更简单的着色器

    GLSL ES 2是一种完全独立的语言,还是GLSL的特殊版本

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

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

    在“标准库”函数、语法和功能方面,它们之间有什么区别

    在哪个版本之间

    您必须尝试在这些平台之间共享着色器的唯一可能原因是,您正在尝试在它们之间共享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无法处理许多精度限定符

    处理该问题的最佳方法是使用“序言”着色器字符串。请参见,获取多个着色器字符串,它将这些字符串拍打在一起并编译为一个。您可以获取主着色器字符串(
    main
    及其各种代码、
    属性
    定义、
    制服
    等),并在其前面粘贴一个“序言”着色器字符串。序言将根据您编译的目的而有所不同

    您的ES GLSL 1.00序言如下所示:

    #version 100  //Must start with a version specifier.
    
    #version 120
    #define lowp
    #define mediump
    #define highp
    
    您的桌面GLSL 1.20序言如下所示:

    #version 100  //Must start with a version specifier.
    
    #version 120
    #define lowp
    #define mediump
    #define highp
    
    也许还有其他一些明智的定义。这样,您的着色器就可以设置这些精度限定符,并且在使用桌面GLSL时,这些限定符只需
    #define
    d即可


    这很像C/C++中的平台无关编码,其中,您通常会有一些特定于平台的标题,这些标题会更改定义和/或有定义,您可以根据这些标题来调整代码。

    更简单地说,Opengl ES即Opengl嵌入式系统是为了在嵌入式设备(如手机)上运行而设计的。移动电话系统面临的问题与90年代的pc相同,即计算问题以及gpu架构的差异

    • ImgTech PowerVR SGX-TBDR(TILEBASEDD)
    • ImgTech PowerVR MBX-TBDR(固定功能)
    • 手臂-瓷砖(小瓷砖)
    • Qualcomm Adreno-瓷砖(大瓷砖)
    • 肾上腺3xx-可以切换到传统
    • glHint(GL\u BINNING\u CONTROL\u HINT\u QCOM、GL\u RENDER\u DIRECT\u TO\u FRAMEBUFFER\u QCOM) NVIDIA Tegra-传统

    除了Nicol的答案之外,我还发现查看各种API版本的快速参考卡,看看是否有特定的功能或功能是很方便的。OpenGL ES 2.0版本位于此处,例如:“不包含#version指令的着色器将被视为目标版本1.10。指定#version 100的着色器将被视为目标版本1.00的OpenGL ES着色语言,这是版本1.50的严格子集。”来自ES2兼容性