ios - 在iPhone4上使用OpenGL ES加载大纹理时出现glError 0x0501

标签 ios opengl-es cocos2d-x texturepacker

尝试在设备上加载PVR图像时出现此错误。它可以在iPhone 5s,5、4s和iPad上很好地工作,但在4s中则不起作用。我的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

我从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/

相关文章:

ios - 当应用程序在后台时,AVAssetReader 将无法正确初始化,因此无法开始阅读

opengl - 我可以有两个统一的缓冲区指向 OpenGL 中的同一个 block 吗?

c++ - Cocos2d-x runAction 报错

c++ - 如何在 cocos2d-x 中为 CCMenu 设置背景图片

ios - 在 iPhone 模拟器上使用可达性并且没有 wifi

ios - 哪些 iOS 版本让您无需手动管理内存即可进行开发?

ios - 如何在 Objective-C 中更改标签栏的背景图像?

javascript - iOS矩阵和向量运算

android - 跨平台 openGLES?

c++ - Cocos2d-x c++ - 在继续之前等待 Action 完成