OpenGL ES和OpenGL兼容着色器

Mir*_*pas 5 opengl opengl-es opengl-es-2.0

我想为OpenGL ES和OpenGL(Windows)提供相同的着色器源.为此,我想定义自定义数据类型并仅使用OpenGL ES函数.

一种方法是定义:

#define highp
#define mediump
#define lowp
Run Code Online (Sandbox Code Playgroud)

对于Windows着色器,并为OpenGL ES编写着色器.

其他方法是为OpenGL ES定义这样的自定义数据类型:

#define hvec2 highp vec2
Run Code Online (Sandbox Code Playgroud)

和这样的Windows

#define hvec2 vec2
Run Code Online (Sandbox Code Playgroud)

你觉得哪个更好?你有这个问题的其他解决方案吗?

Stu*_*rey 5

您可以使用http://www.opengl.org/registry/specs/ARB/ES2_compatibility.txt

此扩展添加了对 OpenGL 3.x 中缺少的 OpenGL ES 2.0 功能的支持。启用这些功能将简化将应用程序从 OpenGL ES 2.0 移植到 OpenGL 的过程。


Ric*_*ney 5

我的解决方案是编写与这两个 API 兼容的着色器代码,然后在将片段着色器源代码上传到 OpenGL ES 时,只需添加以下行:

precision mediump float;
Run Code Online (Sandbox Code Playgroud)

这将默认浮点精度设置为中等。在 OpenGL ES 片段着色器中,浮点值没有默认精度级别,这意味着您需要在每个浮点声明上指定精度,或者显式设置默认精度。如果这对您的应用程序更有意义,您可以使用lowphighp代替。

有关更多详细信息,请参阅 OpenGL ES 着色语言规范的第 4.5.3 节:http : //www.khronos.org/files/opengles_shading_language.pdf

#define如果您需要更好地控制着色器的精度,也可以将此方法与您的方法混合使用。