Jam*_*ord 6 preprocessor opengl-es version glsl opengl-es-2.0
是否有任何方法可以在着色器的源代码中告知是否正在为OpenGL ES编译着色器?我希望能够使用#version预处理器指令将版本定义为OpenGL ES为100(因此着色器为OpenGL ES 2.0编译),但OpenGL 2.1版本为110).
最好的方法是将#version作为一个单独的字符串放在应用程序级别,或者有没有办法在着色器中执行此操作?
另一个有用的,相关的事情就是说
#if version == 100编译这段代码,else编译这段代码.这可能在GLSL中吗?
谢谢.
预先考虑#version从主程序PeterT上述评论所说是唯一的,将工作方式.能够做到这一点(并且能够在没有类似-D编译器开关的情况下定义常量)是glShaderSource获取指针数组而不是简单指针的主要目的char*.
GLSL规范(第3.3章)要求它#version是着色器源中的第一件事,除了空格和注释.
因此,没有这样的事情
#ifdef foo
#version 123
#endif
Run Code Online (Sandbox Code Playgroud)
是有效的,没有这样的东西会编译(除非着色器编译器过于宽松,即破坏).
关于你的第二个问题,条件编译肯定有效并且以你打算做的方式使用它是一件好事.
这也是相关信息:
http://blog.beuc.net/posts/OpenGL_ES_2.0_using_Android_NDK/
例如,您可以:
#ifdef GL_ES
precision mediump float;
#endif
Run Code Online (Sandbox Code Playgroud)
OpenGL ES 2.0 实现需要在着色器中预定义一个 GL_ES 宏。
| 归档时间: |
|
| 查看次数: |
3082 次 |
| 最近记录: |