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

我已经完成了前3个步骤。我使用SDL2_Image来处理图像加载,我可以通过glTexImage2D()上传所述图像,也可以使用glGenerateMipmap()创建mipmap。从那里,我几乎迷失了,但是我可以弄清楚如何压缩图像而没有太多麻烦。

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

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

最佳答案

您可以使用rygDXT实时压缩器将其压缩为S3TC或DXT,因为驱动程序中没有嵌入DXT压缩。大多数DXT压缩器都是脱机的(不是实时的),需要几秒钟或几分钟的时间才能运行。

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

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

关于c++ - 如何使用OpenGL处理​​纹理压缩和mipmap生成?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22600698/

10-12 00:10
查看更多