2010-04-21 12 views
5

Tworzę grę w java i używam BufferedImages do renderowania treści na ekranie. Miałem problemy z wydajnością na komputerach o niskim końcu, gdzie gra ma działać, więc przełączyłem się na VolatileImage, które zwykle są szybsze. Chyba że spowalniają całą sprawę.Java: VolatileImage wolniej niż BufferedImage

Obrazy są tworzone za pomocą GraphicsConfiguration.createCompatibleVolatileImage (...) i są rysowane na ekranie za pomocą Graphics.drawImage(...) (należy kliknąć link, aby zobaczyć, który konkretnie). Są rysowane na płótnie za pomocą podwójnego buforowania.

Czy ktoś ma pojęcie, co dzieje się tutaj?

+0

Zauważyłem to samo. – Hardcoded

+0

Jeśli brakuje ci pamięci na karcie graficznej, to oczywiście nie pomoże. IIRC, "BufferedImage" miał kilka przyspieszeń, więc różnica może nie być tak duża jak kiedyś. –

+0

@Norswap: Naprawdę uważam, że znalezienie na to świetnej odpowiedzi polega na znalezieniu najlepszych gier Java w Open Source (na pewno jest ich kilka) lub świetnym świetnym demo Java (z "sceny demo") i spróbowania zrozumieć zrobili. Kiedyś programowałem gry i dema na * bardzo * egzotycznym sprzęcie (takim jak Amiga, SNES, tryb 13x itd.) I nadal nie wiem jak poprawnie "wypychać piksele" w Javie. Jest to po raz kolejny domena, w której Java została "nadmiernie wyolbrzymiona" i jest niepotrzebnie skomplikowana. Nie wstrzymuję oddechu dla kogoś, kto jest tutaj na tyle, by móc naprawdę pomóc. – SyntaxT3rr0r

Odpowiedz

6

Najprawdopodobniej Twój kod miesza operacje przyspieszone i nieprzydzielone.

Ta document jest koniecznością. Sekcja 3.2 jest szczególnie ważna dla każdego, kto pracuje z przyspieszoną grafiką Java.

+0

Czy jest możliwe, że skalowanie (w sensie przycinania, patrz link w pytaniu) obraz jest taką nieprzydzieloną operacją? Ponieważ używam arkuszy sprite, każde losowanie musi skutecznie wybrać część obrazu, aby narysować na ekranie. – Norswap

Powiązane problemy