gpt4 book ai didi

opengl-es - WebGL 与同一图形堆栈上的 OpenGL 预处理器不同

转载 作者:行者123 更新时间:2023-12-02 10:21:46 25 4
gpt4 key购买 nike

我刚刚通过 Chrome 使用 GLSL 编译器发现了一个有趣的效果。声明内容

#define addf(index) if(weights[i+index]>0.) r+=weights[i+index]*f##index(p);

不编译说明

preprocessor command must not be preceded by any other statement in that line

似乎不支持 ## 语法。然而,在相同的平台(例如 Linux 64 位、Nvidia GPU)上,相同的着色器可以编译并运行良好。为什么这个?我认为着色器编译器是 GPU 驱动程序堆栈的一部分,并且在这两种情况下都会使用。那么为什么会有这种不同的体验呢?

最佳答案

实际上WebGL也被称为“OpenGL ES 2.0 for the Web”,因此与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 运算符。”

因此,无论浏览器的实现在内部做什么,它都遵循标准:)

关于opengl-es - WebGL 与同一图形堆栈上的 OpenGL 预处理器不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9574919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com