使用 PVRTC 压缩格式创建纹理(Creating textures in the PVRTC compression format)
来源:互联网 发布:notepad配置java 编辑:程序博客网 时间:2024/04/30 02:23
使用 PVRTC 压缩格式创建纹理(Creating textures in the PVRTC compression format)
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
转载请保留此句:太阳火神的美丽人生 - 本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
有关该篇官方文档的相关信息,可以看到很久一直保持应用着,下面具体来看一下 PVRTC 是否能解决纹理加载过程中的延迟大的问题,以便能使其它方法处理结果速度有所提升。
针对于跨平台的 OpenGLES 应用,尚不知这种压缩后的纹理是否能正常工作,有待进一步证实。
Technical Q&A QA1611
使用 PVRTC 压缩格式创建纹理
Creating textures in the PVRTC compression format
Q: 我如何使用 PVRTC 压缩格式创建纹理?
Q: How do I create textures in the PVRTC compression format?
Q: How do I create textures in the PVRTC compression format?
A: 我如何使用 PVRTC 压缩格式创建纹理?
A: How do I create textures in the PVRTC compression format?
Important: This document has been superseded by the corresponding chapter Using Texturetool to Compress Textures in the OpenGL ES Programming Guide for iPhone. For updates and further information, please refer to that document.
The iPhone SDK includes a tool that allows you to create textures in the PVRTC compression format, aptly named texturetool
. If you have Xcode installed with the iPhone OS 2.2 SDK in the default location (/Developer/Platforms/
), then texturetool
is located at: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/texturetool
.
texturetool
allows you to create four variants of PVRTC data, the primary difference being tradeoffs between quality and size. You will have to experiment with these variants to determine which setting is the best compromise for each individual texture image.
Important: If you are using PVRTexTool, then you must create textures that are square and a power of two in length. The results of using non-square or non-power-of-two PVRTC texture data on iPhone OS are undefined.
The parameters that may be passed to texturetool
and their function is presented in the rest of this document.
Note: The encoders, formats and options available with texturetool
are subject to change. This document describes those options available as of iPhone OS 2.2. Options not compatible with previous versions of iPhone OS are noted.
Note: The -p option indicates that it requires the -e option. It also requires the -o option.
Encoding Options.
user$ texturetool -l Encoders: PVRTC --channel-weighting-linear --channel-weighting-perceptual --bits-per-pixel-2 --bits-per-pixel-4 Formats: Raw PVR
The texturetool
will default to --bits-per-pixel-4
, --channel-weighting-linear
, and -f
Raw if no other options are provided.
The --bits-per-pixel-2
and --bits-per-pixel-4
options create PVRTC data that encodes source pixels into 2 or 4 bits per pixel. These options represent a fixed 16:1 and 8:1 compression ratio over the uncompressed 32-bit RGBA image data. There is a minimum data size of 32 bytes; the compressor will never produce files smaller than this, and at least that many bytes are expected when uploading compressed texture data.
When compressing specifying --channel-weighting-linear
will spread compression error equally across all channels. By contrast specifying --channel-weighting-perceptual
attempts to reduce error in the green channel compared to the linear option. In general, PVRTC compression does better with photographic images than with line art.
The -m
option allows you to automatically generate mipmap levels for the source image. This levels are provided as additional image data in the archive created. If you use the Raw image format, then each level of image data will be appended one after another to the archive. If you use the PVR archive format, then each mipmap image will be provided as a separate image in the archive.
Warning: Valid PVRTC data is at least 32 bytes in size. This means that images that are 8x8 or smaller will be padded to 32 bytes total before being written to the archive. For example, compressing a 4x4 image consumes 32 bytes, even though it only requires 8 bytes of storage. If you are using the mipmap option with Raw data files, ensure that you take this into consideration as you are reading them.
With iPhone OS 2.2, the texturetool
now additional supports a format (-f
) parameter that allows you to control the format of its output file. While this parameter is not available with iPhone OS 2.1 or earlier, the data files produced are compatible with those versions if iPhone OS.
The default format is Raw, which is equivalent to the format that texturetool
produced under iPhone SDK 2.0 and 2.1. This format is raw compressed texture data, either for a single texture level (without the -m
option) or for each texture level concatenated together (with the -m
option). Each texture level stored in the file will be at least 32 bytes in size, and must be uploaded to the GPU in its entirety.
The PVR format is the same format that the PVRTexTool from the Imagination Technologies PowerVR SDK produces, and requires parsing to obtain the actual texture data. See the PVRTextureLoader sample for an example of working with texture data in this format.
Important: Source images for the encoder must satisfy these requirements:
Height and Width must be a power of 2.
Must be square (height==width).
Source images must be in a format that Image IO accepts. This includes PNG, JPG, TIFF and others.
Encoding images into the PVRTC compression format.
Encode Image.png into PVRTC using linear weights and 4 bpp, and saving as ImageL4.pvrtcuser$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-4 -o ImageL4.pvrtc Image.pngEncode Image.png into PVRTC using perceptual weights and 4 bpp, and saving as ImageP4.pvrtcuser$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-4 -o ImageP4.pvrtc Image.pngEncode Image.png into PVRTC using linear weights and 2 bpp, and saving as ImageL2.pvrtcuser$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-2 -o ImageL2.pvrtc Image.pngEncode Image.png into PVRTC using perceptual weights and 2 bpp, and saving as ImageP2.pvrtcuser$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-2 -o ImageP2.pvrtc Image.png
Encoding images into the PVRTC compression format while creating a preview.
Encode Image.png into PVRTC using linear weights and 4 bpp, and saving the output as ImageL4.pvrtc and a PNG preview as ImageL4.pnguser$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-4 -o ImageL4.pvrtc -p ImageL4.png Image.pngEncode Image.png into PVRTC using perceptual weights and 4 bpp, and saving the output as ImageP4.pvrtc and a PNG preview as ImageP4.pnguser$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-4 -o ImageP4.pvrtc -p ImageP4.png Image.pngEncode Image.png into PVRTC using linear weights and 2 bpp, and saving the output as ImageL2.pvrtc and a PNG preview as ImageL2.pnguser$ texturetool -e PVRTC --channel-weighting-linear --bits-per-pixel-2 -o ImageL2.pvrtc -p ImageL2.png Image.pngEncode Image.png into PVRTC using perceptual weights and 2 bpp, and saving the output as ImageP2.pvrtc and a PNG preview as ImageP2.pnguser$ texturetool -e PVRTC --channel-weighting-perceptual --bits-per-pixel-2 -o ImageP2.pvrtc -p ImageP2.png Image.png
Note: It is not possible to create a preview without also specifying the -o parameter and a valid output file. Preview images are always in PNG format.
The sample images produced by these settings are shown below.
4bpp, Linear
Original
4bpp, Perceptual
2bpp, Linear
Original
2bpp, Perceptual
Listing 4 demonstrates how you can upload Raw PVRTC data to the GPU via the texImage2DPVRTC
sample function. Typically on iPhone OS you would use NSBundle and NSData methods to load data from a file. For a complete example demonstrating how to upload texture data from a PVR formatted data file, see the PVRTextureLoader sample.
Example of uploading PVRTC data to the graphics chip.
void texImage2DPVRTC(GLint level, GLsizei bpp, GLboolean hasAlpha, GLsizei width, GLsizei height, void *pvrtcData){ GLenum format; GLsizei size = width * height * bpp / 8; if(hasAlpha) { format = (bpp == 4) ? GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG : GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; } else { format = (bpp == 4) ? GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG : GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG; } if(size < 32) { size = 32; } glCompressedTexImage2D(GL_TEXTURE_2D, level, format, width, height, 0, size, data);}
For sample code see the PVRTextureLoader sample.
Document Revision History
Revised to point to the OpenGL ES Programming Guide. Please refer to that documentation for further updates.
2009-01-27Clarified non-square texture support (it isn't supported). Linked to the PVRTextureLoader sample.
2008-11-24Changes for iPhone SDK 2.2, which include the new location for the texturetool and new options for its use.
2008-10-13New document that describes how to create textures in the PVRTC compression format.
Copyright © 2009 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2009-07-14
- 使用 PVRTC 压缩格式创建纹理(Creating textures in the PVRTC compression format)
- 使用 PVRTC 压缩格式创建纹理 Creating textures in the PVRTC compression format
- PVRTC compression
- PVRTC compression
- PVRTC 纹理
- PVRTC 纹理
- PVRTC 纹理
- (牛帖)PVRTC compression increasing the file sizes of PNG
- Improve Performance and Reduce Memory with PVRTC Textures and Cocos2d
- S3TC(S3 Texture Compression)纹理压缩格式详解
- Only POT texture can be compressed to PVRTC format
- 纹理压缩(Texture compression) -- DDS
- 纹理压缩(Texture compression) -- DDS
- UE4,纹理压缩(Texture compression)
- 纹理(Textures)
- DirectX11 压缩纹理格式
- ETC1压缩纹理格式
- 常用纹理和纹理压缩格式
- start bluestacks模拟器中文版 v0.8.9 官方PC版
- linux脚本 随机数
- Wireless Tools for Linux
- 启动文件rc.local、/etc/bash.bashrc、~/bashrc、/etc/profile、~/.profile【转载from joyride】值得了解
- 虚拟机ubuntukylin 13.10 忘记root密码解决办法
- 使用 PVRTC 压缩格式创建纹理(Creating textures in the PVRTC compression format)
- 鞋子的风水
- 鞋子心理学
- struts拦截器includeMethods或excludeMethods没起作用
- 如何让别人PING不通你的机器
- 91手机助手官网iPhone版 v5.3.2 官方版
- 豆瓣 飞机
- 越来越多的Chromebook,让免费Windows离我们越来越近
- struts2中的类型转换器