jestem pobieranie obrazów przez sieć i dodać je do mojego libgdx UI jako aktorzy zdjęcie za pomocą tego:Jak przeładować libgdx niezarządzanej Texture po OpenGL utraty kontekstowego
Pixmap pm = new Pixmap(data, 0, data.length);
Texture t = new Texture(pm);
TextureRegion tr = new TextureRegion(t,200,300);
TextureRegionDrawable trd = new TextureRegionDrawable(tr);
Image icon = new Image();
icon.setDrawable(trd);
Biorąc pod uwagę to muszę jakiś sposób ponowne ładowanie dane tekstury, ponieważ są tracone, gdy kontekst OpenGL zostanie utracony (np. z powodu przejścia ekranu w stan uśpienia).
Próbowałem dokonywania moje własne klasy menedżera, dodając
DynamicTextureManager.register(t, pm); // Register texture together with the source pixmap
do powyższego fragmentu, w resume()
zrobić:
DynamicTextureManager.reload();
Klasa kierownik:
public class DynamicTextureManager {
private static LinkedHashMap<Texture, Pixmap> theMap = new
LinkedHashMap<Texture,Pixmap>();
public static void reload() {
Set<Entry<Texture,Pixmap>> es = theMap.entrySet();
for(Entry<Texture,Pixmap> e : es) {
Texture t = e.getKey();
Pixmap p = e.getValue();
t.draw(p, 0, 0);
}
}
public static void register(Texture t, Pixmap p) {
theMap.put(t, p);
}
}
Ale to nie pomaga - nadal kończę z rozładowywaną teksturą i białymi obszarami zamiast i Mag.
Jak należy to zrobić? Nie udało mi się znaleźć żadnego kodu demonstrującego to!
Domyślam się, że 'Tekstura' nie _magicznie_ odtwarza uchwyt struktury tekstur. Spróbuj odtworzyć samą teksturę 'Texture' lub przełączyć się na tak zwane dane _managed_ texture (sprawdź podklasy' TextureData'; 'PixmapTextureData' nie obsługuje tego pojęcia –
Mam zadanie, które jest bardzo podobne do tego. zrobiłem to jeszcze, ale jeśli zrobię to działa (co myślę, że będzie wymagać przebudowy Pixmapy z danych binarnych), zaktualizuję to odpowiedzą – Jyro117
@ Jyro117 Dodałem moje aktualne rozwiązanie jako odpowiedź, zachęcamy do poprawy! – johlo