In meiner Galerie-Anwendung lade ich häufig Bilder asynchron, die in den CCTextureCache geladen werden, auf den der Dateiname verweist. Die Sache ist, ich muss meine Texturen maskieren - und diese Maskierung muss wirklich nur einmal gemacht werden, also dachte ich, der beste Platz, um es in den Selektor zu setzen, der addImageAsync
ruft. Ich musste CCTexture modifizieren, indem ich eine boolesche Variable hinzufügte, die mir mitteilt, ob die spezifische Textur bereits maskiert wurde oder nicht, und das funktioniert sehr gut.CCTextureCache-Texturdaten aktualisieren
In der Tat funktioniert auch der Maskierungscode selbst (der mit einem CCRenderTexture nach dem Maskierungs-Tutorial von Ray erreicht wird) auch innerhalb des Selektor-Codes. Das Problem, das ich jetzt habe, ist, sobald ich meine Maskenlogik angewendet habe, habe ich die CCRenderTexture.sprite.texture und ich muss meinen CCTextureCache mit dieser aktualisierten, maskierten Textur aktualisieren, damit in Zukunft jeder andere Sprite oder Call das Verweise auf den angegebenen Dateinamen verwenden die vollständig vorbereitete Textur.
Wie kann ich die Texturdaten in CCTextureCache aktualisieren? Oder genauer gesagt, wie kann ich eine vorhandene, zwischengespeicherte Textur durch die in meiner Render-Textur gespeicherte ersetzen?
Ich weiß, dass die Texturen selbst (ihre Daten) tatsächlich in OpenGL und nicht innerhalb der Cocos2D-Klassen gespeichert sind; also würde ich mir etwas vorstellen, wie die OpenGL-Textur mit dem Namen (GLuint) der zwischengespeicherten Textur entfernt wird und dann den Namen der zwischengespeicherten Textur (GLuint) auf den Namen des Sprite.texture der RenderTexture setzt ... aber ich ' Ich habe keine Ahnung, wie ich das tatsächlich bewerkstelligen kann (OpenGL-Code, cocos2d thread safe code, Änderung des cctexturecache-Wörterbuchs usw.).
Oder vielleicht gibt es einen einfacheren Weg, ohne Cocos2D zu ändern (z. B. opengl verwenden, um die Textur Textur Textur durch den Textur-Cache ersetzen Textur, dann lassen Sie die lokale RT-Variable sterben und automatisch bereinigt werden?
Die Sache ist - ich musste in der Lage sein, eine bestehende Textur mit einem prozeduralen zu aktualisieren; Die von der Festplatte geladene Textur war unvollständig und einige Operationen mussten noch ausgeführt werden. Nachdem diese Operationen abgeschlossen waren, musste ich die Änderungen mit dem gleichen/Originalschlüssel in den Textur-Cache zurückgeben. Ich glaube nicht, dass es derzeit eine eingebaute Methode gibt, eine Textur in den Textur-Cache einzufügen (zu aktualisieren), ohne zuerst das Bild in eine Datei zu schreiben und es erneut zu laden.Diese zusätzlichen Schreibverzögerungen hätten mein Programm zerstört. –