私のギャラリー アプリでは、頻繁に画像を非同期で読み込みます。画像は、ファイル名で参照される CCTextureCache にダンプされます。addImageAsync
問題は、テクスチャをマスクする必要があるということです。このマスキングは、実際には 1 回だけ行う必要があるため、理想的には、呼び出すセレクターに配置するのが最適な場所であると考えました。特定のテクスチャが既にマスクされているかどうかを通知するブール変数を追加して、CCTexture を変更する必要がありましたが、これは非常にうまく機能します。
実際、マスキング コード自体 (Ray のマスキング チュートリアルに従って CCRenderTexture を使用して実行されます) も、セレクター コード内で適切に機能します。私が今抱えている問題は、マスク ロジックを適用すると、CCRenderTexture.sprite.texture があり、この更新されたマスクされたテクスチャで CCTextureCache を更新する必要があるため、将来、他のスプライトまたはそれを呼び出すことができます。指定されたファイル名を参照すると、完全に準備されたテクスチャが使用されます。
CCTextureCache のテクスチャ データを更新するにはどうすればよいですか? より具体的には、既存のキャッシュされたテクスチャをレンダー テクスチャに保存されているテクスチャに置き換えるにはどうすればよいですか?
テクスチャ自体 (それらのデータ) は実際には OpenGL に格納されており、Cocos2D クラス内には格納されていません。したがって、キャッシュされたテクスチャの名前 (GLuint) を持つ OpenGL テクスチャを削除し、キャッシュされたテクスチャの名前 (GLuint) を RenderTexture の sprite.texture の名前に設定するという行に沿って何かを想像します... しかし、私は '実際にそれを達成する方法について途方に暮れています (opengl コード、cocos2d スレッドセーフ コード、cctexturecache の辞書の変更など)。
または、Cocos2D を変更せずにそれを実行する簡単な方法があるかもしれません (たとえば、opengl を使用して、テクスチャ キャッシュによって参照されるテクスチャをレンダー テクスチャのテクスチャに置き換え、ローカル RT 変数を停止させて自動的にクリーンアップしますか?