尝试在设备上加载PVR图像时出现此错误。它可以在iPhone 5s,5、4s和iPad上很好地工作,但在4s中则不起作用。我的PVR图片大小为:width = 4096
和height = 2048
。
Cocos2d: cocos2d: TexturePVR: Error uploading compressed texture level: 0 . glError: 0x0501
Cocos2d: cocos2d: Couldn't load PVR image /var/mobile/Applications/7CF6C347-8B63-4C1E-857A-41F48C8ACBEF/Race.app/Images/BackGround/bg1.pvr.ccz
Cocos2d: cocos2d: Couldn't add PVRImage:Images/BackGround/bg1.pvr.ccz in CCTextureCache
我从link得到这个表格:
支持的尺寸为:iPhone 3gs / iPhone 4 / iPad 1 / iPod 3/4:2048x2048 iPad 2/3/4 /迷你/ iPhone 4S / 5 / iPod 5:4096x4096
顺便说一句,您可以导入4096x4096的纹理并打开mip贴图,这将在较旧的设备上自动使用较小分辨率的纹理。
但是如何打开mip-maps ..,这是做什么的呢?
// support mipmap filtering
sprite->getTexture()->generateMipmap();
ccTexParams texParams = { GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE };
sprite->getTexture()->setTexParameters(&texParams);
最佳答案
好吧,您尝试创建一个大于GL_MAX_TEXTURE_SIZE
的纹理,因此它将失败。没有办法解决。
顺便说一句,您可以导入4096x4096的纹理并启用Mip贴图,
会在较旧的设备上自动使用较小分辨率的纹理。
你不能。那不是mipmap的目的。在对纹理进行采样时使用它们,以避免在显示较小的纹理时因稀疏采样而导致伪影。您仍在尝试创建4096x4096的纹理,该纹理在该设备上根本无法使用。
要解决此问题,您应该将纹理大小限制为要支持的所有目标设备的最小支持大小,或者在尝试将其应用于GL之前动态查询GL_MAX_TEXTURE_SIZE
限制并缩小数据的大小,或者提供不同的分辨率从中选择。
如果您绝对需要那么多像素,则还可以使用某种纹理平铺方法将其拆分为多个图块-但这可能需要对渲染代码进行一些重大更改,这也可能导致性能问题。
关于ios - 在iPhone4上使用OpenGL ES加载大纹理时出现glError 0x0501,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25226653/