我正在使用WGLWidget加载可能尺寸较大的3D模型。为了加快速度,我使用二进制缓冲区选项来传输顶点缓冲区。文档介绍了有关使用二进制缓冲区的信息:
二进制缓冲区传输
在bufferDatafv()中,还有一个布尔值参数 可以表明您希望将数据传输到 二进制形式。为每个缓冲区创建一个WMemoryResource。 如果您知道客户端中不需要所有以前的资源 而且,您可以使用clearBinaryResources()方法释放内存 (也对内存进行管理,因此这不是必需的)。如果你想 完全由您自己管理这些资源,以下方法可以 被使用。
使用createAndLoadArrayBuffer(),您可以在 URL的二进制格式。这将导致客户端获取 给定的网址,并在 ArrayBuffer,然后可由BufferData()将其绑定到 OpenGL缓冲区。这是以更快的方式加载VBO缓冲区的理想选择,因为 它避免了在服务器上将浮点数转换为文本字符串,然后 返回到客户端上的浮动。您可以结合使用 WResource(例如WMemoryResource)将顶点的std :: vector发送到 客户端。请注意,在需要时无法使用ArrayBuffer 服务器端呈现形式的回退。
一切正常,除了一件事情-在加载文件并且在服务器端更新缓冲区数据时,我将状态消息设置为“就绪”。但是,在服务器上设置时间缓冲区数据与将其发送到客户端并在客户端进行更新之间存在一个延迟。
请观看视频,并注意状态和底部之间的延迟设置为“就绪”-渲染模型的时间为Video
我的理解是,当使用二进制缓冲区时,数据作为内存资源进行传输-每个顶点缓冲区一个(顶点,法线,纹理坐标等)。我认为,当客户端上所有二进制缓冲区数据都可用时发出的信号将非常有用,以表明该模型“已实际”准备就绪,以便可以在最合适的时间更新状态消息。
还是可能有其他机制来处理它?</ p>
对于如何处理此问题,我将不胜感激。
在托管网站而非本地主机上,延迟显着增加。