首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GLSL与GLSL ES 2的差异

GLSL与GLSL ES 2的差异
EN

Stack Overflow用户
提问于 2012-04-30 11:42:10
回答 2查看 11K关注 0票数 32

两个问题真的..。

  1. 是一种完全独立的语言,还是GLSL的一个特殊版本?
  2. ,它们在“标准库”函数、语法和功能方面有什么不同?

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

EN

回答 2

Stack Overflow用户

发布于 2012-04-30 21:41:23

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

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

把它看作是桌面GLSL的叉子。六种版本的GLSL叉子,请注意。

它们在“标准库”函数、语法和功能方面有什么不同?

在哪个版本之间?

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

这意味着您将使用桌面GLSL版本1.20。这类似于GLSL版本1.00 ( GLSL的版本没有给出与匹配的GL版本相同的数字)。好吧,直到桌面GL3.3/4.0和GLSL 3.30/4.00),但还是不同的。在ES中,您有许多桌面GLSL 1.20无法处理的精确限定符。

处理这一点的最佳方法是使用“序言”着色器字符串。看,glShaderSource采用多个着色器字符串,它将这些字符串放在一起并作为一个整体编译。您可以使用您的主着色器字符串(main及其各种代码、attribute定义、uniforms等),并在前面添加一个“序言”着色器字符串。序言将是不同的,取决于您正在编译的内容。

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

代码语言:javascript
复制
#version 100  //Must start with a version specifier.

您的桌面GLSL 1.20序言如下所示:

代码语言:javascript
复制
#version 120
#define lowp
#define mediump
#define highp

也许还有其他一些明智的#defines。这样,您的着色器就可以设置这些精确限定符,并且在使用桌面GLSL时,它们只是#defined。

这非常类似于C/C++中与平台无关的编码,在C/C++中,您通常有一些特定于平台的标头,它可以更改定义和/或具有可以对代码进行条件设置的#define

票数 28
EN

Stack Overflow用户

发布于 2021-04-13 10:54:43

简单地说,Opengl的ES嵌入式系统是在移动电话等嵌入式设备上运行的,移动电话系统面临着与90年代pc机相同的问题,即计算问题和gpu结构上的差异。

(TileBasedDeferred)

  • ImgTech
  • ImgTech PowerVR SGX - TBDR

  • ARM马里瓷砖(小瓷砖)

(大型tiles)

  • Adreno3xx -可以切换到Traditional

  • glHint(GL_BINNING_CONTROL_HINT_QCOM,GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM) NVIDIA Tegra -传统
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10383113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档