我正在从JPG格式加载非常大的纹理,在iOS5之前我会使用Apple示例Texture2D类将RGBG65格式转换为RGB565格式,以将所需的内存空间减半.然后它将以RGB565格式上传到GPU w/glTexImage2D.
使用iOS5,我正在转换调用以使用新的GLKTextureLoader.然而,即使JPG没有alpha通道,它似乎只使用RGB888,因此在GPU中占用了两倍的内存.
有没有办法让GLKTextureLoader在上传到GPU时使用RGB565?我现在正在使用[GLKTextureLoader textureWithContentsOfFile:jpgFile].我还尝试了[GLKTextureLoader textureWithContentsOfData:data]并将其传递给原始RGB565位图的NSData,但是当我尝试时,我收到错误"{GLKTextureLoaderErrorKey =图像解码失败}".
"textureWithContentsOfData"似乎是一个破碎的方法(请注意:它缺少文档 - 没有规范说它接受了什么)Apple还没有实现 - 它对我尝试的所有标准NSData输入都失败了.
然后,我使用标准的gl*方法调用将它们直接传递给OpenGL,并且它们工作正常,因此错误在GLKit中.
我已经向Apple记录了一个支持请求,要求他们解释他们的方法,并记录它接受的内容.在那之前,我强烈建议你忽略GLTextureInfo类(这是一个不错的主意,但它是如此错误,它不值得 - 放弃这个课程给了我5倍的性能提升,立即!)
更新:来自Apple的回复(释义)"嗯.我们也不知道.请将其记录为错误".
......并且:Apple在收到错误时的反应:"这不是一个错误,它的设计,我们觉得不需要记录它.它显然是什么"
(他们的"显而易见的"是:你必须发送它只有 PNG或JPG或PVR的数据......(只有你在特定硬件上运行时才允许PVR)其他任何东西都会崩溃.)
他们的最终建议是:使用OpenGL纹理调用来上传纹理,即在纹理加载时完全忽略GLKit - 因为OpenGL可以工作,记录等等.令人失望,但似乎是真的 - 并且在实时项目中, OpenGL纹理调用通常比Apple的GLKit TextureInfo类快十倍.说真的 - 不要用它,这太可怕了:(.
| 归档时间: |
|
| 查看次数: |
1904 次 |
| 最近记录: |