【问题标题】:How can I use OpenGL to handle texture compression and mipmap generation?如何使用 OpenGL 处理纹理压缩和 mipmap 生成?
【发布时间】:2014-03-24 03:41:32
【问题描述】:

这是我想要做的:我想加载一个普通图像文件(.png、.tga、.bmp 等),将此图像作为纹理上传到 OpenGL,告诉 OpenGL 为纹理生成 mipmap,告诉OpenGL 压缩图像(使用 S3TC/RGTC),然后下载整个压缩/mipmapped 纹理,将其保存到一个文件中,以后可以一次将整个纹理加载到 OpenGL 中。

我已经完成了前 3 个步骤。我使用SDL2_Image 处理图像加载,我可以通过glTexImage2D() 上传所述图像,我可以使用glGenerateMipmap() 创建mipmaps。从那里开始,我几乎迷路了,但我可以毫不费力地弄清楚如何压缩图像。

我需要帮助的是最后一点 - 将整个压缩+mipmapped 纹理下载为单个连续的数据块,将其保存到文件(在内容创作阶段),然后一次上传整个内容(在运行时)。关于我可以从哪里开始的任何建议?

PS。我使用 OpenGL 3.3 作为我的最低版本。

【问题讨论】:

    标签: c++ opengl compression textures


    【解决方案1】:

    您可以使用 rygDXT 实时压缩器压缩到 S3TC 或 DXT,因为驱动程序中没有嵌入 DXT 压缩。大多数 DXT 压缩器都处于离线状态(不是实时),需要几秒钟或几分钟才能运行。

    你也有 nvdxt,nvidia SDK 提供了完整的代码示例来压缩 DXT 中的纹理,但我警告你它的速度很慢。 ryg DXT 应该更快。

    然后对于向上复制,您应该能够将纹理复制到动态(DX 术语中的“暂存”)缓冲区,然后使用一些锁(glMapBuffer?)然后 memcopy 将动态缓冲区映射到内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      相关资源
      最近更新 更多