介绍了各种移动设备所使用的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. 压缩纹理的必要性
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容量的游戏在移动平台上是不容易被接受的(当然,还是有1、2G的大作的,里面包含了几千张的纹理)。

聪明的设计师们在想,有没有其他办法,既能表现丰富的色彩和细节,又能是最小失真的情况下,达到更小的纹理容量呢。压缩纹理格式应运而生(当然,并不是在移动平台后才有的产物)。

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格式的压缩纹理,而且该纹理不支持透明通道,有一定局限性。
以上压缩纹理格式每个像素大小相对A8R8G8B8格式的比例,最高压缩比是16:1,最低压缩比是4:1,对于减小纹理的数据容量有明显作用,相应在显存带宽上也有明显优势,从而提高游戏的运行效率(此特性没有绝对数值,根据每个游戏的用法和瓶颈点不同而有差别)。

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. 可视化转换工具 (给美工或小白少量使用)
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 /?

转载自: http://www.cnblogs.com/luming1979/archive/2013/02/04/2891421.html

一、最简单的方法,使用QT自带的命令:

macdeployqt appname.app/ -verbose=1 -dmg

二、

1、查看程序中依赖的库

终端中运行 otool -L appname.app/contents/MacOS/appname

2、拷贝非系统自带的库,如QtCore

cp -R /Library/Frameworks/QtCore.framework appname.app/Contents/Frameworks/

3、改变路径

install_name_tool -id @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore appname.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore

install_name_tool -change QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore appname.app/Contents/MacOS/appname
如果有些库还依赖其他库时,也要改变此库中的依赖库路径,不然运行时也有问题的
转自:http://blog.csdn.net/weiren2006/article/details/6547039

文章目录

使用了Submine Text的同学,有件事情可能困扰着你。如果Submine Text有新版更新,每次打开它的时候就会弹出一个框框,问你要不要更新。鉴于某种不齿的原因,很多同学不会去更新。我也是这样的同学,哈哈。

工具/原料

  • Submine Text

方法/步骤

  1. 1

    打开Submine Text,找到Preferences -> Settings-User

  2. 2

    打开后类似这样

  3. 3

    在最后的花括号(“}”)前添加一句:”update_check”:false。

    如果你的配置文件和我一样,有多条配置信息,你必须多加一个英文逗号(,)。

    像这样 ,”update_check”:false

  4. 4

    下次打开Submine Text,就不会再弹出更新提醒了。

    END

注意事项

  • 如果你的配置文件里面已经有其他配置信息,在”update_check”:false的上一句,应该加一个英文逗号(,)。(配置文件使用的json语法)

 转载自:http://jingyan.baidu.com/article/ca00d56c8988f1e99eebcf06.html

方法一:
解决方法很简单:
打开/Applications/Qt5.3.2/5.3/clang_64/mkspecs/qdevice.pri文件, 把下面的这句:
!host_build:QMAKE_MAC_SDK = macosx10.8
改成
!host_build:QMAKE_MAC_SDK = macosx10.9
就可以了。

方法二:
export SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk

出现这个的原因是窗口继承的是QMainwindow,需要设置
setCentralWidget();
如下:

    m_wMainWidget = new QWidget();
    //QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which already has a layout
    setCentralWidget(m_wMainWidget);

    setWindowTitle(tr("资源转换工具"));
    setMinimumSize(800, 600);

    QVBoxLayout * mainLayout = new QVBoxLayout();
    mainLayout->addWidget(m_gbInputGroup);

    m_wMainWidget->setLayout(mainLayout);

设置好一个widget即可

F1                         查看帮助
F2                         跳转到函数定义(和Ctrl+鼠标左键一样的效果)
Shift+F2                声明和定义之间切换
F4                         头文件和源文件之间切换
Ctrl+1                   欢迎模式
Ctrl+2                   编辑模式
Ctrl+3                   调试模式
Ctrl+4                   项目设置模式
Ctrl+5                   帮助模式
Ctrl+6                   输出模式
Alt+0                    显示或者隐藏侧边条,编辑模式下起作用(有时写的函数太长,屏幕不够大,就用这个)
Ctrl+Space           自动补全(貌似会和输入法的切换冲突)
ESc                       切换到编辑模式
Alt+1                    创建细节窗口
Alt+2                    搜索结果窗口
Alt+3                    程序输出窗口
Alt+4                    编译输出窗口
Ctrl+B                   编译工程
Ctrl+R                   运行工程
Ctrl+I                   自动对齐
Ctrl+/                   注释行,取消注释行
Ctrl+Shift+<         折叠代码块
Ctrl+Shift+>         展开代码块
Ctrl+[                   跳到代码块的头部
Ctrl+]                   跳到代码块的尾部
Ctrl+L                  跳到某一行
Ctrl+F                  查找替换当前选中的内容,按下Ctrl+F,会列出所有和你选的内容一样的语句
Ctrl+Shift+F         查找内容
F5                        开始调试
Shift+F5               停止调试
F9                        设置和取消断点
F10                      单步前进
F11                      单步进入函数
Shift + F11           单步跳出函数

问题:Git仓库中的.gitignore文件失效

解决方案:

曲线救国,在每个clone下来的仓库中手动设置不要检查特定文件的更改情况,命令如下:

git update-index –assume-unchanged PATH

在PATH处输入要忽略的文件。

注:

建立.gitignore文件,写入文件名或目录名,编译器就可以忽略这些文件的修改,例如:

.gitignore .classpath .project bin/

在我的情况里,这些文件一般是载入工程时,Eclipse自动修改的文件,当然还有.gitignore文件本身。

本文基于Mac OS X Lion.

编辑文件/etc/rc.common

View Code BASH

1 sudo vim /etc/rc.common

尾部添加内容:

View Code BASH

1 2 3 if [ -f /etc/rc.local ]; then     sh /etc/rc.local fi

创建文件/etc/rc.local

View Code BASH

1 sudo touch /etc/rc.local

然后就可以像Linux一样使用/etc/rc.local了。

/etc/rc.local示例:

View Code SH

1 2 3 4 5 6 7 8 9 10 11 12 13 ############################ # rc.local ############################ # # Gearmand Server #

/usr/local/sbin/gearmand -d -u root

# # Nginx Web Server #

/usr/local/bin/nginx

因为我们的svn服务器的版本太低(1.4.2版本),而我们需要用到1.6以上版本的目录合并功能,因此,需要对我们的svn服务器进行了升级。按照以前的安装方法进行了安装,发现出了不少问题。

原因是以前安装的时候操作系统是32位的系统,此次安装的为64位的系统。

再次记录上此次成功安装的步骤:

  1. 下载、编译和安装openssl [可选]

如果想让svn服务器支持https等加密的ssl链接,需要编译此模块

[flavorzhu@self ~]$ wget http://www.openssl.org/source/openssl-1.0.0d.tar.gz

[flavorzhu@self ~]$tar -zxvf openssl-1.0.0d.tar.gz

[flavorzhu@self ~]$cd openssl-1.0.0d

[flavorzhu@self ~]$./config –prefix=/usr/local/openssl

[flavorzhu@self ~]$sudo make  && make install

  1. 下载、编译和安装apache

[flavorzhu@self ~]$wget http://mirror.bjtu.edu.cn/apache/httpd/httpd-2.2.19.tar.gz

[flavorzhu@self ~]$tar  -zxvf  httpd-2.2.19.tar.gz

[flavorzhu@self ~]$cd httpd-2.2.19

[flavorzhu@self ~]$./configure –prefix=/usr/local/apache \

–enable-lib64 \

–enable-mods-shared=all

[flavorzhu@self ~]$ sudo make && make install

  1. 下载、编译和安装BerkeleyDB

http://www.oracle.com/technetwork/database/berkeleydb/downloads/index.html 下载Berkeley db,编译并安装

比如我下载的是4.8.24版本

[flavorzhu@self ~]$tar -zxvf db-4.8.24.tar.gz

[flavorzhu@self ~]$cd db-4.8.24/build_unix/

[flavorzhu@self ~]$../dist/configure –/usr/local/BerkeleyDB.4.8

[flavorzhu@self ~]$sudo make && make install

将Berkeley DB的.so加入到ld.so.conf中

[flavorzhu@self ~]$sudo  echo /usr/local/BerkeleyDB.4.8 >> /etc/ld.so.conf

[flavorzhu@self ~]$sudo /sbin/ldconfig

svn的存储有Berkeley DB(2001年开始支持) 和 FSFS(2004年开始支持)系统两种存储,默认使用的是FSFS模式的(如果没有安装Berkeley DB)。

详情见:http://www.zhuyanbin.com/?p=74

  1. 下载、编译和安装subversion依赖包

[flavorzhu@self ~]$wget  http://subversion.tigris.org/downloads/subversion-deps-1.6.16.tar.gz

[flavorzhu@self ~]$tar zxvf subversion-deps-1.6.16.tar.gz

[flavorzhu@self ~]$cd subversion-1.6.16

4.1 安装apr

注:Apache Portable Runtime

[flavorzhu@self ~]$cd apr

[flavorzhu@self ~]$./configure –prefix=/usr/local/apache LDFLAGS=”-L/lib6″

[flavorzhu@self ~]$sudo make && make install

4.2 编译和安装apr-util

[flavorzhu@self ~]$cd apr-util

[flavorzhu@self ~]$./configure –prefix=/usr/local/apache –with-apr=/usr/local/apache LDFLAGS=”-L/lib64″ –with-berkeley-db=/usr/local/BerkeleyDB.4.8

[flavorzhu@self ~]$sudo make && make install

4.3 编译和安装neon

注:neon是使得svn客户端支持http和https协议的关键模块

[flavorzhu@self ~]$cd neon/

[flavorzhu@self ~]$./configure –prefix=/usr/local/neon –enable-shared –enable-ssl –with-ssl=openssl LDFLAGS=”-L/lib64″

[flavorzhu@self ~]$sudo make && make install

4.4 编译和安装serf

[flavorzhu@self ~]$cd serf/

[flavorzhu@self ~]$./configure –prefix=/usr/local/serf –with-apr=/usr/local/apache –with-apr-util=/usr/local/apache –with-openssl=/usr/local/openssl LDFLAGS=”-L/lib64″

[flavorzhu@self ~]$sudo make && make install

4.5 编译和安装zlib

[flavorzhu@self ~]$cd zlib/

[flavorzhu@self ~]$./configure –prefix=/usr/local/zlib

[flavorzhu@self ~]$sudo make && make install

4.6 下载、编译和安装subversion

[flavorzhu@self ~]$wget  http://subversion.tigris.org/downloads/subversion-1.6.16.tar.gz

[flavorzhu@self ~]$tar zxvf subversion-1.6.16.tar.gz

[flavorzhu@self ~]$ cd subversion-1.6.16

将subversion依赖包中的sqlite-amalgamation拷贝到subversion-1.6.16里

[flavorzhu@self ~]$./autogen.sh

[flavorzhu@self ~]$./configure  –with-ssl –with-zlib=/usr/local/zlib –with-apr=/usr/local/apache –with-apr-util=/usr/local/apache –with-serf=/usr/local/serf –with-neon=/usr/local/neon LDFLAGS=”-L/lib64″

[flavorzhu@self ~]$sudo make && make install

注:在make之前检查一下,subversion里的Makefile的BerkeleyDB的lib包使用引用正确的版本,具体搜索一下, 比如我的是“-ldb-4.8”

配置apache

修改httpd.conf,增加如下代码

LoadModule dav_module modules/mod_dav.so

LoadModule dav_svn_module     modules/mod_dav_svn.so

LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>

DAV svn

SVNParentPath /absolute/path/to/repository

AuthzSVNAccessFile /my/svn/user/authz.conf

AuthType Basic

AuthName “Subversion”

AuthUserFile  /my/svn/user/passwd/file

Require valid-user

</Location>

 

  1. subversion仓库的升级

5.1 方法一 upgrade方式

svnadmin upgrade /path/to/repository

5.2 方法二 dump/load方式

svnadmin dump your-repository > repository.dump

svnadmin create your-repository

svnadmin load your-repository < repository.dump

经过测试,使用dump/load方式比较靠谱,不管你使用那种方式升级你的仓库,操作之前备份你的仓库都是不可省略的步骤。