我是 Open GL 的新手。
是否需要在运行时进行纹理压缩?
当然,它的工作方式是在构建时压缩一个大的纹理文件。在运行时,您可以根据需要扩展压缩纹理文件的部分以应用于表面。
是否有任何(可信的)情况下您扩展了纹理数据,并且需要在运行时对其进行压缩?
谢谢!
最佳答案
您是在谈论压缩图像格式(如 JPEG 甚至包含图像的 zip 文件)还是压缩纹理格式(如 DXT1 等)?当您拥有压缩纹理(例如 DXT)时,您不必在运行时对其进行解压缩,图形卡可以在对纹理进行采样时即时进行解压缩。
对于可以提前预编译所有 Assets 的游戏,在( Assets )构建时应用 DXT 压缩之类的东西通常是个好主意,这样您就可以获得纹理压缩的所有好处(更快的加载时间,更少的内存带宽使用,等)而无需在运行时实际执行压缩的成本。也就是说,在任何情况下,您想使用压缩纹理进行渲染,但您无法访问将要提前使用的图像(也许您让用户从他们的机器或其他东西中选择图像文件),您将拥有别无选择,只能在运行时进行压缩。
编辑:
在运行时进行 DXT 压缩的方法是调用 glTexImage2D,为“格式”参数指定源图像的实际格式(GL_RGBA 等),为“内部格式”参数指定压缩格式,例如GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 用于 DXT1,假设您的卡支持 gl_ext_texture_compression_s3tc 扩展。
如果您有预压缩的纹理数据,那么您可以直接使用 glCompressedTexImage2D 加载它。
关于opengl - 打开 GL 纹理压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4589177/