Javascript 浏览器WebGL和node.js server';s节点WebGL相同吗?

Javascript 浏览器WebGL和node.js server';s节点WebGL相同吗?,javascript,node.js,cross-browser,webgl,Javascript,Node.js,Cross Browser,Webgl,目前,我正在尝试将基于浏览器的客户端体绘制代码转换为基于服务器端纯javascript的绘制。我在服务器端使用节点webgl 我使用基于WebGL的开源浏览器实现。我的问题是,基于浏览器的WebGL的功能是否与node.js node WebGL的功能相同?如果我在服务器上使用,是否需要更改代码(除了浏览器交互)。启动着色器、立方体缓冲区、帧缓冲区对象初始化等功能。它们是否会更改 我的整个项目都是基于这样一个假设,即它是有效的,而目前我面临着一些错误,所以我想问我做的是正确的吗 问候,, Pra

目前,我正在尝试将基于浏览器的客户端体绘制代码转换为基于服务器端纯javascript的绘制。我在服务器端使用节点webgl

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

我的整个项目都是基于这样一个假设,即它是有效的,而目前我面临着一些错误,所以我想问我做的是正确的吗

问候,,
Prajwal

是的,功能与node相同,webgl是一个webgl实现,但是……服务器中的OpenGL驱动程序可能与客户端中的驱动程序有很大不同。很可能服务器没有启用OpenGL的图形卡,甚至根本没有图形卡。这可能就是你出错的原因。您应该尝试发布这些错误,以便我们获得更多信息


此外,您可以尝试运行节点webgl测试(at),以查看服务器是否能够正确运行它们。

读取文档节点webgl与实际的webgl并不真正兼容

WebGL基于OpenGL ES,这是针对嵌入式系统的桌面OpenGL的限制。因为这个模块包装了OpenGL,所以可以做一些在web浏览器上不起作用的事情

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

在真正的WebGL实现中,有大量的变通方法来解决这些差异。所有WebGL实现上的着色器都是重新编写的,但从节点WebGL的实现来看,它们没有重新编写着色器,因此无法解决这些差异

例如,OpenGL GLSL中保留的单词在WebGL中没有保留。WebGL实现可以解决这个问题。节点webgl将不可用

除此之外,还有一些功能缺失。例如,WebGL的
texImage2D
texSubImage2D
版本采用
HTMLImageElement
、或
htmlCanvaElement
HTMLVideoElement
,但这些元素在node.js中不存在

另一个是

另一个是没有人支持

还有许多其他类似的问题

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

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

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

WebGL防范所有这些情况

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


可以说,他们应该将其命名为opengl节点,因为它在任何形式上都不是真正的WebGL。要成为WebGL,他们至少需要通过测试才能声称自己与WebGL兼容。

是的,测试程序工作正常。我已经发布了错误,这里是链接:谢谢你的评论。看起来我还有希望1.功能相似但不尽相同。有些甚至不见了。谢谢你这么详细的回答。是的,甚至我认为存在一些功能不匹配或完全兼容的问题。但是,我仍然尝试将基于浏览器的webgl转换为node.js node webgl代码。必须做一些修改。Like toDataURL()在节点webgl中不可用,因此根据该组成员的建议,我使用gl.readPixels从gl缓冲区提取数据并将其复制到画布。我观察到的是,我只得到渲染图像的1/4部分。(不知道会是什么问题)。这是兼容性问题吗?我是否要为同样的内容创建另一个帖子?