在我的图库应用程序中,我经常异步加载图像,这些图像被转储到其文件名引用的 CCTextureCache 中。问题是,我需要屏蔽我的纹理——而且这种屏蔽实际上只需要进行一次,所以理想情况下,我认为最好的放置位置是在addImageAsync
调用的选择器中。我必须通过添加一个布尔变量来修改 CCTexture,该变量会通知我特定纹理是否已被屏蔽,并且效果很好。
事实上,即使是屏蔽代码本身(按照 Ray 的屏蔽教程使用 CCRenderTexture 完成)在选择器代码中也能正常工作。我现在遇到的问题是,一旦我应用了我的遮罩逻辑,我就有了 CCRenderTexture.sprite.texture 并且我需要用这个更新的遮罩纹理更新我的 CCTextureCache 以便将来,任何其他 Sprite 或调用它引用指定的文件名将使用完全准备好的纹理。
如何更新 CCTextureCache 中的纹理数据?或者更具体地说,如何将现有的缓存纹理替换为存储在渲染纹理中的纹理?
我知道纹理本身(它们的数据)实际上存储在 OpenGL 中,而不是存储在 Cocos2D 类中;所以我想像删除带有缓存纹理名称(GLuint)的OpenGL纹理,然后将缓存纹理的名称(GLuint)设置为RenderTexture的sprite.texture的名称......但我' m 不知道如何实际实现这一点(opengl 代码、cocos2d 线程安全代码、更改 cctexturecache 的字典等)。
或者也许有一种更简单的方法可以在不改变 Cocos2D 的情况下进行处理(例如,利用 opengl 将纹理缓存引用的纹理替换为渲染纹理的纹理,然后让局部 RT 变量消失并自动清理?