为什么 WebGL 使用 GLSL 代码块的字符串表示形式?

Dan*_*Dan 2 javascript string shader webgl

因此,我查找了一些学习 WebGL 的基本教程,并注意到它们都将 GLSL 代码块的字符串表示形式作为参数传递(例如thisthis)。

我查看了WebGLRenderingContext的文档,果然,shaderSource方法的源参数描述是:

包含要设置的 GLSL 源代码的 DOMString。

我一直认为这种事情是可能的,但不是一个好的编码实践。

这是一个有意的设计选择,还是 Javascript 的其他功能确实没有提供可能的替代方案?(即最后的选择)

这种情况在其他语言中也会发生吗?或者通常应该避免这种情况?

编辑:误认为 GLSL 为 Javascript

Nor*_*ard 5

着色器将作为文本(或作为字节缓冲区,或其他)加载,无论它存储在哪里。它不是JS,它是GLSL;一种非常不同的语言,更像是专门的 C。您的 PC 无法理解顶点/片段/计算 OpenGL 着色器的文件类型,事实上,没有正式的类型,只是建议。

OpenGL 最终进行编译,这意味着您将传递程序文本进行编译,而不是 JS 对象。

现在,无论您将其编写为应用程序中的 JS 字符串,还是编写为不同类型的脚本标记,或者手动将它们全部作为文本获取并传入,这都取决于您。

大多数人选择在教程中使用脚本标签,因为……懒惰?阻力最小的路径?真的相信他们想要一个 50,000 行的索引文件吗?我不知道。

但总的来说,它们是代表文本的一些字节组,在应用程序内部解析和编译,或者预编译并存储为缓存(不确定这在 WebGL 中是否有效;很高兴以其他方式显示)。