【发布时间】:2011-01-04 07:15:19
【问题描述】:
我是 Open GL 的新手。
是否需要在运行时进行纹理压缩?
当然,它的工作方式是在构建时压缩一个大的纹理文件。在运行时,您可以根据需要扩展压缩纹理文件的一部分以应用于表面。
在任何(可信的)情况下,您已经扩展了纹理数据,并且需要在运行时对其进行压缩?
谢谢!
【问题讨论】:
标签: opengl compression textures
我是 Open GL 的新手。
是否需要在运行时进行纹理压缩?
当然,它的工作方式是在构建时压缩一个大的纹理文件。在运行时,您可以根据需要扩展压缩纹理文件的一部分以应用于表面。
在任何(可信的)情况下,您已经扩展了纹理数据,并且需要在运行时对其进行压缩?
谢谢!
【问题讨论】:
标签: opengl compression textures
您是在谈论压缩图像格式(如 JPEG 甚至包含图像的 zip 文件)还是压缩纹理格式(如 DXT1 等)?当您拥有压缩纹理(例如 DXT)时,您不必在运行时对其进行解压缩,显卡可以在对纹理进行采样时即时进行解压缩。
对于可以提前预编译所有资产的游戏,通常最好在(资产)构建时应用 DXT 压缩之类的东西,这样您就可以获得纹理压缩的所有好处(更快的加载时间、更少的内存带宽使用等),而无需在运行时实际执行压缩。也就是说,在您想使用压缩纹理进行渲染但无法访问您将提前使用的图像(也许您让用户从他们的机器或其他东西中选择图像文件)的任何情况下,您将拥有别无选择,只能在运行时进行压缩。
编辑:
在运行时进行 DXT 压缩的方法是调用 glTexImage2D,为“格式”参数指定源图像的实际格式(GL_RGBA 等),为“内部格式”参数指定压缩格式,例如 DXT1 的 GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,假设您的卡支持 gl_ext_texture_compression_s3tc 扩展。
如果你有预压缩的纹理数据,那么你可以直接使用 glCompressedTexImage2D 加载它。
【讨论】: