1

当我尝试在设备上加载 PVR 图像时出现此错误。它在 iPhone 5s、5、4s 和 iPad 上运行良好,但在 4 上就不行了。我的 PVR 图像大小是:width = 4096height = 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

我得到这个表格这个链接

支持的尺寸为:iPhone 3gs / iPhone 4 / iPad 1 / iPod 3 / 4 : 2048x2048 iPad 2 / 3 / 4 / Mini / 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);
4

1 回答 1

4

好吧,你尝试创建一个大于 的纹理GL_MAX_TEXTURE_SIZE,所以它会失败。没有办法解决这个问题。

顺便说一句,您可以导入 4096x4096 的纹理并打开 mip 贴图,这将在旧设备上自动使用较小分辨率的纹理。

你不能。这不是 mipmap 的用途。它们在对纹理进行采样时使用,以避免在纹理显示较小时由于稀疏采样而造成的伪影。您仍在尝试创建 4096x4096 纹理,这根本无法在该设备上运行。

为了解决这个问题,您应该将纹理大小限制为您要支持的所有目标设备的最小支持大小,或者GL_MAX_TEXTURE_SIZE在尝试将数据发送到 GL 之前动态查询限制并缩小数据,或者提供不同的分辨率以供选择从。

如果您绝对需要这么多像素,您还可以使用一些纹理平铺方法并将其拆分为多个平铺 - 但这可能需要对渲染代码进行一些重大更改,并且还可能导致性能问题。

于 2014-08-10T11:26:36.530 回答