【问题标题】:OpenGL ES 2.0 loading dynamic texturesOpenGL ES 2.0 加载动态纹理
【发布时间】:2012-03-22 21:15:08
【问题描述】:

我有一个需要一次渲染多个图像的视图,并且我有很多纹理可以使用。 问题是,纹理正在发生变化,因为我在任何给定时间缓存了有限数量的图像,所以我需要动态加载纹理,这会严重阻碍渲染。 我该如何解决这个问题?

【问题讨论】:

  • 您是否使用任何类型的压缩?
  • 我正在通过 565 配置中的 MediaStore 加载缩略图,如果这就是您的意思...我该如何使用压缩?

标签: android opengl-es loading opengl-es-2.0 textures


【解决方案1】:

压缩实际上会阻碍您,因为您必须花时间执行压缩算法才能将图像变成可用的形式。

您使用了多少纹理以及它们的大小?

如果纹理很小,您可以尝试将多个纹理填充到一个大纹理中,然后使用纹理坐标来选择正确的纹理。这将减少您必须使用 glGenTexture 和 glBindTexture 的次数。此外,如果您的纹理访问方式有任何类型的模式,那么您可以利用它智能地将您的纹理分组为更大的纹理。

如果您可以提供有关纹理性质的其他信息,例如它们的内容是否发生变化或其他任何信息,那么您可能会得到更有帮助的答案。

【讨论】:

  • 纹理是来自 SD 卡的图像,平均约为 500x500 像素。它们以方形图像的网格形式呈现。它们由单独的加载线程按重要性顺序加载,然后传递给 GL 线程以加载到 GL 上下文中。我试图将它们分组为行,使每一行都是 GL 纹理,但问题是我需要将从媒体存储加载的小位图绘制到保存行纹理的位图中,并且由于 Canvas 绘制速度很慢,我得到拉回纹理加载时间,当新的位图进入行纹理时,我还必须重新加载行纹理。
  • 如果我的理解正确,那么对于每一行纹理,您需要通过 Android 的 Canvas 类从媒体存储中覆盖一个较小的图像(例如缩略图)?如果是这种情况,为什么不让 OpenGL 绘制行纹理,然后在其顶部绘制缩略图。那你就不用去canvas类把这两种纹理混合在一起了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 2012-04-08
相关资源
最近更新 更多