在 Web 服务器上使用 OpenGL 进行渲染

Rendering with OpenGL on a web server

本文关键字:OpenGL Web 服务器      更新时间:2023-10-16

我有一个在任天堂3DS上运行的应用程序 - 它使用OpenGL的变体来渲染3D动画。 用户可以将这些场景在线存储为数据文件。 也就是说,仅存储渲染场景所需的数据 - 图像帧在设备上渲染。

此外,我希望人们能够在线查看这些场景。 一种方法可能是通过WebGL在浏览器中呈现它们,但我担心这需要多少时间和内存。 我宁愿让服务器将场景渲染成可以从网页播放的电影文件。

我在服务器端编程方面没有很多经验 - 服务器程序是否可以将帧渲染到 OpenGL 上下文? 它们将是屏幕外的帧缓冲区,因为没有屏幕。

关于这样做的方法有什么建议吗? 我主要将PHP用于Web编程,但似乎这不可行。 理想情况下,我想编写一个在服务器上运行的C++程序,这样我就可以重用 3DS 中的代码。 这可能吗? 我在哪里可以阅读有关执行此操作的信息?

服务器端渲染是可能的,并且会为用户提供更一致的结果,而不是依赖于跨不同浏览器和平台的一致WebGL行为(以及您已经提到的时间/内存性能问题)。 拥有功能强大的浏览器和平台的用户不会获得任何好处,因此您需要考虑用户想要什么以及他们正在使用的平台。

对于基于 Windows 的服务器,使用"无屏幕"的 OpenGL(带屏幕外帧缓冲)将是一个挑战。 您需要从窗口开始以建立图形上下文。 (可能有一项规定为 Linux 建立"无窗口"图形上下文。 您还需要确定如何管理任何用于渲染的 GPU 资源,因为在减慢和/或无法分配资源(例如帧缓冲内存)之前,它可以支持的并发渲染请求数量会有限制。

一种替代方法可能是使用 Mesa(软件 OpenGL)实现 - 这不会那么快,但从理论上讲,这将随着服务器 CPU 和内存的增加而扩展,这与大多数 Web 服务器的横向扩展方式相匹配: 台面屏幕外渲染信息

看起来一旦编写,使用 PHP 中的 args 生成C++可执行文件是微不足道的 - 尽管您可能希望将任何长时间运行的渲染路由到单独的渲染服务器以保持您的 Web 服务器响应。