Skocz do zawartości

Pytanie techniczne o zajętość pamięci graficznej dla obiektów i sprajtów


Rekomendowane odpowiedzi

Witam!

Czy jak zrobię sprajta dwuklatkowego (każda klatka ok. 256kb pamięci) zajmującego łącznie 500kb pamięci i użyję go w 2 instancjach obiektu z tym że w pierwszym użyję tylko klatki pierwszej a w drugim tylko klatki drugiej to ile pamięci zużywa GM? Czy jest to po 256kb/obiekt bo używam tylko po jednej klatce czy jednak zużywa 512kb na obiekt czyli łącznie 1mb?

Chodzi mi o to czy kumulować w jednym sprajcie kilka klatek używanych niezależnie ale w obiekcie tego samego typu czy robić osobne sprajty po jednej klatce? Przykładowo mam 4 rodzaje krzeseł różniące się tylko wyglądem i czy lepiej je wpakować do 4-ro klatkowego sprajta i przy tworzeniu instancji obiektu ustawiać odpowiednią klatkę (image_index oraz image_speed=0) czy lepiej rozbić to na 4 osobne sprajty i przy tworzeniu obiektu ustawiać odpowiedni sprajt (sprite_index).

W którym przypadku użycie pamięci graficznej będzie mniejsze? A może nie ma różnicy bo liczy się użyta pojedyncza klatka niezależnie od ilości klatek z jakiej składa się sprite?

Odnośnik do komentarza
Udostępnij na innych stronach

Po pierwsze - gm zawsze wczytuje całego sprita. Nie ma czegoś takiego jak "wczytam tylko drugą klatkę bo tylko z takiej będę korzystał" - gm nie będzie zgadywał której klatki gdzie będziesz używał i czy przypadkiem w połowie gry nie zachce Ci się zmienić jej na inną.

Po drugie - nie wiem skąd wymyśliłeś to

Czy jest to po 256kb/obiekt bo używam tylko po jednej klatce czy jednak zużywa 512kb na obiekt czyli łącznie 1mb?
. Choćbyś miał tysiąc tych krzeseł to i tak do pamięci będzie wczytany jeden sprite.

 

Także odpowiedź: obojętne, ale raczej wygodniej będzie mieć te różne warianty krzeseł w jednym spricie i osobnych klatkach, więc proponuję wybrać tę właśnie opcję.

 

A, i po trzecie: sprity są przechowywane po prostu w ramie. Chyba że to nazywasz pamięcią graficzną, to ok.

Odnośnik do komentarza
Udostępnij na innych stronach

No chyba nie do końca jest tak że GM wczytuje od razu wszystkie zasoby. Z tego co pamiętam to sprajt jest ładowany dopiero w momencie użycia czyli mogę mieć zdefiniowanych (w resorces) 20 sprajtów a póki ich nie załaduję do obiektu i nie użyję tego obiektu to sprajt nie zajmuje pamięci graficznej.

Wiadomo, że cała grafika zawarta w exe jest zaczytywana do RAMu ale nie jest od razu wrzucana do pamięci grafiki a o to mi najbardziej chodzi czyli dokładnie o optymalizację gry w taki sposób aby uruchamiała się na słabym sprzęcie (np. z kartą grafiki np riva tnt m64 z 64MB ramu czy innych niewiele lepszych wbudowanych w NETbooki czy słabe laptopy).

Podobnie jest z backgroundami - możesz mieć ich dziesiątki ale póki ich się nie użyje to siedzą sobie w RAMie a nie w pamięci karty graficznej.

 

Dlatego też rozważam podzielenie tych przykładowych krzeseł na osobne sprajty bo wg mnie w przypadku gdybym miał jednego dużego sprajta (ze wszystkimi klatkami), użycie pamięci będzie takie same jedynie wtedy kiedy na aktywnym ekranie będą obiekty wykorzystujące wszystkie osobne sprajty a już w przypadku gdy na aktywnym widoku będą tylko niektóre rodzaje krzeseł to tej pamięci powinien GM zużywać mniej dla obiektów używających sprajtów jednoklatkowych (wszelkie obiekty poza aktualnym widokiem zawsze dezaktywuję).

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

W GM8 opcja wyłączania preloadu grafik zniknęła.

Btw. pamiętaj, że GM wczytuje grafiki do pamięci jako bitmapy BMP nawet gdy to jest gif, bo na bitmapach operuje się karcie graficznej najszybciej. Oznacza to, że dobrze skompresowany gif czy jpeg i tak zajmie sporo pamięci.

 

Poza tym, raz wczytany sprite już zostaje w pamięci, nawet, jak go nie wyświetlasz.

Odnośnik do komentarza
Udostępnij na innych stronach

W GM8 opcja wyłączania preloadu grafik zniknęła.

 

Czyli w takim razie co? W GM8 grafika od razu ładowana jest do video memory czy wręcz przeciwnie dopiero w momencie użycia? I czy to się zmieniło od GM v8 czy w v7 też już tak było?

 

EDIT:

Znalazłem, że to zmieniło się od v8 ale dalej nie wiem czy obecnie ładują się wszelkie grafiki od razu do pamięci graficznej.

 

Czy mam rozumieć że w przypadku jeśli jednak od razu grafika ładowana jest do pamięci video to jak stworze sobie w resorces 90 backgroundow to one od razu są zasysane do video memory? Wydaje mi się że chyba nie do końca.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...