dro*_*nus 2 preprocessor opengl-es glsl webgl
我只是通过Chrome使用GLSL编译器发现了一个有趣的效果.该声明
#define addf(index) if(weights[i+index]>0.) r+=weights[i+index]*f##index(p);
Run Code Online (Sandbox Code Playgroud)
没有编译说明
preprocessor command must not be preceded by any other statement in that line
Run Code Online (Sandbox Code Playgroud)
似乎##语法不受支持.但是,在同一平台(例如Linux 64bit,Nvidia GPU)上,相同的着色器编译并运行良好.为什么这个?我认为着色器编译器是GPU驱动程序堆栈的一部分,并且将在两种情况下使用.为什么这种不同的体验?
Tob*_*gel 11
实际上WebGL也被称为"用于Web的OpenGL ES 2.0",因此OpenGL存在一些差异.
WebGL规范(https://www.khronos.org/registry/webgl/specs/1.0/)告诉我们:"WebGL实现必须只接受符合OpenGL ES着色语言版本1.00的着色器."
展望GLSL ES 1.0规范(https://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf),我发现:
3.4节定义了预处理器,并指出"没有基于数字符号的运算符(没有#,#@,##等),也没有sizeof运算符."
所以无论浏览器的内部实现如何,都遵循标准:)
| 归档时间: |
|
| 查看次数: |
1364 次 |
| 最近记录: |