gpt4 book ai didi

javascript - 浏览器 WebGL 和 node.js 服务器的 node-WebGL 中可用的功能是否相同?

转载 作者:行者123 更新时间:2023-11-29 21:15:20 26 4
gpt4 key购买 nike

目前我正在尝试将基于浏览器的客户端体积渲染代码转换为服务器端纯基于 javascript 的渲染。我在服务器端使用 node-webgl。

我使用基于开源 WebGL 的浏览器实现。我的问题是,基于浏览器的 WebGL 功能是否与 node.js node-WebGL 功能相同?如果我在服务器上使用(除了浏览器交互),是否需要更改代码?着色器启动、立方体缓冲区、帧缓冲区对象初始化等功能。它们会改变吗?

我的整个项目都是基于这样的假设,即它可以工作,但目前我遇到了一些错误,所以我想问问我做的是否正确?

问候,般若

最佳答案

阅读文档 node-webgl 并不真正兼容实际的 WebGL

WebGL is based on OpenGL ES, a restriction of OpenGL found on desktops, for embedded systems. Because this module wraps OpenGL, it is possible to do things that may not work on web browsers

它没有说但应该说的是,还有一些 WebGL 所做的事情在 DesktopGL 上不起作用。

在实际的 WebGL 实现中有大量变通方法来解决这些差异。所有 WebGL 实现上的着色器都被重写,但查看 node-webgl 的实现时,它们并没有重写着色器,因此它们无法解决差异。

举个例子,OpenGL GLSL 中有一些保留字在 WebGL 中没有保留。 WebGL 实现解决了这个问题。 node-webgl 不会。

最重要的是会缺少一些功能。例如,WebGL 的 texImage2DtexSubImage2D 版本采用 HTMLImageElementHTMLCanvasElement HTMLVideoElement 但这些元素在 node.js 中不存在

另一个是the whole interaction with depth and stencil buffer formats for renderbuffers

另一个不支持the various pixelStorei additions in WebGL

类似的问题还有很多。

安全

最大的问题是 WebGL 旨在确保安全,而 OpenGL 则不然。 WebGL 的主要目标之一是安全性,因为允许任意网页在您的机器上运行 GPU 代码。 WebGL 非常重视安全性,这就是为什么从最初的概念(只需调用 OpenGL)到在浏览器中实际发布 WebGL 需要几年的时间。这也是许多驱动程序被列入黑名单的原因,也是重写着色器的另一个原因。

例如,重写着色器以确保着色器满足某些要求并且在传递给驱动程序之前不超过某些限制。检查标识符是否太长。它们都被临时标识符取代,以确保没有奇怪的交互。检查字段和数组表达式,它们不是太复杂。添加了数组索引钳制指令。 Unicode 被剥离(OpenGL 着色器仅支持 ASCII)。需要启用/禁用的着色器功能是。还有很多其他的东西。

另一个示例是检查所有缓冲区和纹理是否指向有效内存,以及所有将由着色器访问的数据是否已被考虑在内。分配的内存被清除。否则,您可能会使用该驱动程序监视所有 CPU 和 GPU 内存。

WebGL 防范所有这些情况。

另一方面,node-webgl 只是直接调用 OpenGL 驱动程序,而不考虑安全性。如果您通过 node-webgl 传递用户数据,您可能会使您的服务器面临严重的安全问题。即使您不传递用户数据,您也可能会意外地允许从未清除的缓冲区和纹理中读取未初始化的数据。

可以说他们应该将其命名为 node-opengl 因为它在任何形状或形式上都不是真正的 WebGL。要成为 WebGL,至少需要通过 WebGL conformance tests声称与 WebGL 兼容。

关于javascript - 浏览器 WebGL 和 node.js 服务器的 node-WebGL 中可用的功能是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39658677/

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