因为项目中使用到了OpenGL ES做绘图,记录一下一些要注意的点:
- glGenTextures()方法申请到的纹理对象ID,会由系统控制其对象的释放(也可以使用glDeleteTextures()进行手动释放),所以在使用之前需要使用glIsTexture()来检测该纹理ID是否可用,当为false时,需要重新生成纹理对象ID,如果继续使用该纹理ID,会无法绘制从而导致绘制时为纯白色。
- iOS下不同的硬件设备,最大的纹理大小是有限制的,如下表(来源于网络):
1024 x 1024 | 2048 x 2048 | 4096 x 4096 |
---|---|---|
iPhone 2G | iPhone 3gs | iPhone 4s |
iPhone 3G | iPhone 4 | iPad 2 |
iPad | iPad 3 |
- 我在最新的iPad Air上测试发现最大也支持4096x4096,所以结合上表来看,从iPhone4S和iPad2开始,到最新的iPhone6s以及最新的iPad Air最大也只能支持4096x4096的大小。所以在使用时要注意,否则会导致无法渲染而变成纯白色。
- 在使用OpenGL时纹理图片的宽高都需要是2的N次方,在一些平台下(PC平台)下没有这样的限制。并且纹理图片不需要非得是正方形的。所以在使用一些不符合大小时,需要手动对图片进行拉伸,然后复制到显存中进行关联,在进行绘制时按对应的坐标进行转换,所以并不用担心图片在渲染时会被拉伸的问题。
我使用的是OpenGL ES 1.x的版本,第一条我在网上没找到太多的资料,都是通过测试发现的,如果有什么不对,还请指正,谢谢。