【问题标题】:Best way to load images for OpenGL in NaCl在 NaCl 中为 OpenGL 加载图像的最佳方法
【发布时间】:2023-03-28 15:59:01
【问题描述】:

从 .png 或 .jpg 文件加载实际图像数据以在 Chromes NaCl 中用于 OpenGL 的最佳方法是什么??

是否有可以做到这一点的 PPAPI 功能?没想到有。

我正在考虑使用 javaScript 加载图像数据并将其传递回 NaCl。这可能吗?如果是这样,您使用什么 javaScript 方法将图像数据传递给 NaCl,因为我不认为 postMessage 是我想要的?

令人沮丧的是,Chrome 必须有一个图像加载后端,但无法通过 NaCl 访问它。

【问题讨论】:

  • 注意:我还制作了自己的格式,占用的文件大小与 .png 文件差不多。只需将原始 rgba 数据压缩为 zip 并将其加载回来是处理不占用太多纹理的无损图像的最简单方法。

标签: google-chrome opengl png jpeg google-nativeclient


【解决方案1】:

有3种方法。

  1. 您可以使用 nacl-mounts 库从服务器加载文件并将其存储在本地以在您的应用中使用。
  2. 也可以看到GetUrl example in nacl sdk从服务器加载文件直接使用。
  3. pepper_21 中还有一个新示例,它加载纹理并将其设置为立方体。

【讨论】:

  • 这个新的pepper_21演示......它需要不间断的异步加载吗?或者你能停止主线程来加载图像数据吗?这对我来说是 NaCl 现在最大的问题,因为它无法停止主线程来加载数据文件。使跨平台应用程序变得很痛苦。我通过在列表中缓冲所有需要的文件对象,然后使用普通流从那里读取内存(因此它伪造了真实的系统 IO),找到了一种异步方法。尽管这实际上只是对 NaCl 中缺少的功能的一种破解。
  • 实际上在任何情况下都没有直接的方法来停止主线程。由于文件必须从服务器加载,因此您实际上无法停止主线程,这会使浏览器挂起一段时间。但是您可以使用线程和 isImagesLoaded 布尔值轻松伪造它。
【解决方案2】:

如果你有 Javascript 文件,你也可以创建一个 blob url,然后按照描述使用 GetUrl 从 NaCL 加载它。

【讨论】:

  • 是的,当我再次开始在 NaCl 中做更多的事情时,我可能会使用 javaScript 来加载 .png、.jpg 文件等... 现在写我自己制作了名为 .bmpc 的图像格式,基本上是一个带有 Alpha 通道的压缩 .bmp 文件以替换 .png。在大多数情况下,它的大小实际上与 .png 几乎相同。我还使用自己的加载器来处理 .dds/dxt 文件。
猜你喜欢
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
相关资源
最近更新 更多