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 でインポートしてミップ マップをオンにすることができます。これにより、古いデバイスでは解像度の低いテクスチャが自動的に使用されます。

しかし、ミップマップをオンにする方法..そしてこれは何をしますか?

// 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 でインポートしてミップ マップをオンにすることができます。これにより、古いデバイスでは解像度の低いテクスチャが自動的に使用されます。

いいえ、あなたがすることはできません。それはミップマップの目的ではありません。これらは、テクスチャをサンプリングするときに使用され、テクスチャが小さく表示されるときのまばらなサンプリングによるアーティファクトを回避します。あなたはまだ 4096x4096 のテクスチャを作成しようとしていますが、これは単にそのデバイスでは機能しません。

これを解決するには、テクスチャ サイズを、サポートするすべてのターゲット デバイスでサポートされている最小サイズに制限するかGL_MAX_TEXTURE_SIZE、GL に試す前に制限を動的にクエリしてデータをダウンスケールするか、選択する別の解像度を提供する必要があります。から。

絶対に多くのピクセルが必要な場合は、テクスチャ タイリング アプローチを使用して複数のタイルに分割することもできますが、レンダリング コードに大きな変更が必要になる可能性があり、パフォーマンスの問題も発生する可能性があります。

于 2014-08-10T11:26:36.530 に答える