首页 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
资讯 业界资讯 软件杂谈 编程开发 网站建设 网络观查 搜索引擎 移动应用 网站运营 网络地图
开发 移动开发 Web前端 架构设计 编程语言 互联网 数据库 系统运维 云计算 开发杂谈
[架构设计] 各种移动GPU压缩纹理的使用方法
各种移动GPU压缩纹理的使用方法

http://imgtec.eetrend.com/blog/2213
http://news.mydrivers.com/1/266/266555_all.htm#3
介绍了各种移动设备所使用的GPU,以及各个GPU所支持的压缩纹理的格式和使用方法。
1. 移动GPU大全
目前移动市场的GPU主要有四大厂商系列:
1)Imagination Technologies的PowerVR SGX系列

    

代表型号:PowerVR SGX 535、PowerVR SGX 540、PowerVR SGX 543MP、PowerVR SGX 554MP等
代表作  :Apple iPhone全系
、iPad全系,三星I9000、P3100等
2)Qualcomm(高通)的Adreno系列

    

代表型号:Adreno 200、Adreno 205、Adreno 220、Adreno 320等
代表作  :HTC G10、G14,小米1、2等
3)ARM的Mali系列

    

代表型号:Mali-400、Mali-T604等
代表作  :三星Galaxy SII、Galaxy SIII、Galaxy Note1、Galaxy Note2(亚版)等
4)nVIDIA(英伟达)的Tegra系列

    

代表型号:nVIDIA Tegra2、nVIDIA Tegra3等
代表作  :Google Nexus 7,HTC One X等
2. 压缩纹理的必要xìng
1)首先要说一下图像文件格式和纹理格式的区别。
常用的图像文件格式有BMP,TGA,JPG,GIF,PNG等;
常用的纹理格式有R5G6B5,A4R4G4B4,A1R5G5B5,R8G8B8, A8R8G8B8等。
    文件格式是图像为了存储信息而使用的对信息的特殊编码方式,它存储在磁盘中,或者内存中,但是并不能被GPU所识别,因为以向量计算见长的GPU对于这些复杂的计算无能为力。这些文件格式当被游戏读入后,还是需要经过CPU解压成R5G6B5,A4R4G4B4,A1R5G5B5,R8G8B8, A8R8G8B8等像素格式,再传送到GPU端进行使用。
    纹理格式是能被GPU所识别的像素格式,能被快速寻址并采样。
举个例子,DDS文件是游戏开发中常用的文件格式,它内部可以包含A4R4G4B4的纹理格式,也可以包含A8R8G8B8的纹理格式,甚至可以包含DXT1的纹理格式。在这里DDS文件有点容器的意味。
    OpenGL ES 2.0支持以上提到的R5G6B5,A4R4G4B4,A1R5G5B5,R8G8B8,A8R8G8B8等纹理格式,其中 R5G6B5,A4R4G4B4,A1R5G5B5每个像素占用2个字节(BYTE),R8G8B8每个像素占用3个字节,A8R8G8B8每个像素占用 4个字节。

    

    对于一张512*512的纹理的话,R5G6B5格式的文件需要占用512KB的容量,A8R8G8B8格式的文件需要占用1MB的容量;如果是1024*1024的纹理,则各需要2M和4M的容量,这对于动辄需要几十、几百张甚至更多纹理的游戏,上G容量的游戏在移动píng台上是不容易被接受的(当然,还是有1、2G的大作的,里面包含了几千张的纹理)。
    聪明的设计师们在想,有没有其他办法,既能表现丰富的sè彩和细节,又能是最小失真的情况下,达到更小的纹理容量呢。压缩纹理格式应运而生(当然,并不是在移动píng台后才有的产物)。
3. 常见的压缩纹理格式
基于OpenGL ES的压缩纹理有常见的如下几种实现:
1
)ETC1(Ericsson texture compression)
2
)PVRTC (PowerVR texture compression)
3
)ATITC (ATI texture compression)
4
)S3TC (S3 texture compression)
ETC1:
ETC1格式是OpenGL ES图形标准的一部分,并且被所有的Android设备所支持。
扩展名为: GL_OES_compressed_ETC1_RGB8_texture,不支持透明通道,所以仅能用于不透明纹理。
当加载压缩纹理时,<internal format>参数支持如下格式:
    GL_ETC1_RGB8_OES(RGB,每个像素0.5个字节)
PVRTC:
支持的GPU为Imagination Technologies的PowerVR SGX系列。
OpenGL ES的扩展名为: GL_IMG_texture_compression_pvrtc。
当加载压缩纹理时,<internal format>参数支持如下几种格式:
    GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG (RGB,每个像素0.5个字节)
    GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG (RGB,每个像素0.25个字节)
    GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG (RGBA,每个像素0.5个字节)
    GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG (RGBA,每个像素0.25个字节)
ATITC:
支持的GPU为Qualcomm的Adreno系列。
支持的OpenGL ES扩展名为: GL_ATI_texture_compression_atitc。
当加载压缩纹理时,<internal format>参数支持如下类型的纹理:
    GL_ATC_RGB_AMD (RGB,每个像素0.5个字节)
    GL_ATC_RGBA_EXPLICIT_ALPHA_AMD (RGBA,每个像素1个字节)
    GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD (RGBA,每个像素1个字节)
S3TC
也被称为DXTC,在PC上广泛被使用,但是在移动设备上还是属于新鲜事物。支持的GPU为NVIDIA Tegra系列。
OpenGL ES扩展名为:
GL_EXT_texture_compression_dxt1和GL_EXT_texture_compression_s3tc。
当加载压缩纹理时,<internal format>的参数有如下几种格式:
    GL_COMPRESSED_RGB_S3TC_DXT1 (RGB,每个像素0.5个字节)
    GL_COMPRESSED_RGBA_S3TC_DXT1 (RGBA,每个像素0.5个字节)
    GL_COMPRESSED_RGBA_S3TC_DXT3 (RGBA,每个像素1个字节)
    GL_COMPRESSED_RGBA_S3TC_DXT5 (RGBA,每个像素1个字节)
    由此可见,Mali系列GPU只支持ETC1格式的压缩纹理,而且该纹理不支持透明通道,有一定局限xìng。
    以上压缩纹理格式每个像素大小相对A8R8G8B8格式的比例,最高压缩比是16:1,最低压缩比是4:1,对于减小纹理的数据容量有明显作用,相应在显存带宽上也有明显优势,从而提高游戏的运行效率(此特xìng没有绝对数值,根据每个游戏的用法和píng颈点不同而有差别)。

4. OpenGL中相关API的使用
1) 获得GPU的型号
    glGetString(GL_RENDERER)

2) 获得GPU的生产厂商
    glGetString(GL_VENDOR);

3) 获取GPU支持哪些压缩纹理
    string extensions = (const char*)glGetString(GL_EXTENSIONS);

    a. 判断是否支持ETC1格式的压缩纹理
    return (extensions.find("GL_OES_compressed_ETC1_RGB8_texture")!= string::npos);

    b. 判断是否支持DXT格式的压缩纹理
    return (extensions.find("GL_EXT_texture_compression_dxt1")!= string::npos ||
            extensions.find("GL_EXT_texture_compression_s3tc")!= string::npos);

    c. 判断是否支持PVRTC格式的压缩纹理
    return (extensions.find("GL_IMG_texture_compression_pvrtc")!= string::npos);

    d. 判断是否支持ATITC格式的压缩纹理
    return (extensions.find("GL_AMD_compressed_ATC_texture")!= string::npos ||
            extensions.find("GL_ATI_texture_compression_atitc")!= string::npos);

4) 填充压缩纹理数据
    void glCompressedTexImage2D (
         GLenum target,
         GLint level,
         GLenum internalformat,
         GLsizei width,
         GLsizei height,
         GLint border,
         GLsizei imageSize,
         const GLvoid * data);
    这里的参数不做详细解释,其中internalformat即是压缩纹理格式的类型。

5. 压缩纹理工具的使用
   每种压缩纹理以及相应的厂商都提供了压缩纹理的工具,工具都分两个版本:
   a. 可视化转换工具 (给美工或小白shao量使用)
   b. 命令行转换工具 (给程序批量使用)
下面对每个工具的用法进行说明。
1)Imagination Technologies PowerVR
工具下载地址
http://www.imgtec.com/powervr/insider/sdkdownloads/index.asp?installer=Windows%20Installer
可视化转换界面

    

命令行转换脚本
for %%i in (*.tga) do PVRTexTool.exe -f PVRTC4 -i %%i
(将本目录下的所有tga文件,转换成"PVRTC4"编码格式的pvr文件,不带mipmap)
详细使用说明:PvrTexTool.exe /?
2)Qualcomm Adreno
工具下载地址
https://developer.qualcomm.com/mobile-development/mobile-technologies/gaming-graphics-optimization-adreno/tools-and-resources
可视化转换界面

    

命令行转换脚本
for %%i in (*.tga) do QCompressCmd.exe %%i %%i.ktx "ATC RGBA Explicit" yes 
(将本目录下的所有tga文件,转换成"ATC RGBA Explicit"编码格式的ktx文件,带mipmap)
详细使用说明:QCompressCmd.exe /?
3)ARM Mali
工具下载地址
http://malideveloper.arm.com/develop-for-mali/mali-gpu-texture-compression-tool/
可视化转换界面

    

命令行转换脚本
for %%i in (*.tga) do PVRTexTool.exe -f ETC -i %%i
(将本目录下的所有tga文件,转换成"ETC"编码格式的pvr文件,不带mipmap这里还是使用的PVRTexTool.exe,也可以使用QCompressCmd.exe)
详细使用说明:PVRTexTool.exe /?
4)nVIDIA Tegra
可以使用DirectX SDK中自带的DirectX Texture Tool进行转换
可视化转换界面

    

命令行转换脚本
for %%i in (*.tga) do texconv.exe -f DXT5 %%i
(将本目录下的所有tga文件,转换成"DXT5"编码格式的dds文件,不带mipmap)
详细使用说明:TexConv.exe /?



 此文从网络中自动搜索生成,不代表本网站赞成被搜索网站的内容或立场    查看原文
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 新闻资讯 小游戏 Chinese Culture 股票 三丰软件 开发 中国文化 网文精选 阅读网 看图 日历 万年历 2018年12日历
2018-12-11 3:29:45
 
  网站联系 软件世界网-www.sjsjw.com ©2014 蜀ICP备06016416号 三峰网旗下网站