两个问题真的..。
。
我正在为一个针对Windows,Mac和iPad的应用程序编写着色器,我希望不必为每个着色器添加更多的版本--无论如何,更简单的着色器。
发布于 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序言如下所示:
#version 100 //Must start with a version specifier.您的桌面GLSL 1.20序言如下所示:
#version 120
#define lowp
#define mediump
#define highp也许还有其他一些明智的#defines。这样,您的着色器就可以设置这些精确限定符,并且在使用桌面GLSL时,它们只是#defined。
这非常类似于C/C++中与平台无关的编码,在C/C++中,您通常有一些特定于平台的标头,它可以更改定义和/或具有可以对代码进行条件设置的#define。
发布于 2021-04-13 10:54:43
简单地说,Opengl的ES嵌入式系统是在移动电话等嵌入式设备上运行的,移动电话系统面临着与90年代pc机相同的问题,即计算问题和gpu结构上的差异。
(TileBasedDeferred)
(大型tiles)
https://stackoverflow.com/questions/10383113
复制相似问题