Skocz do zawartości

Draw texture flush


pankracy

Rekomendowane odpowiedzi

Cześć wszystkim..

chciałbym w końcu skorzystać z tej funkcji,załóżmy jestem w pierwszym pokoju,i kiedy przejdę do kolejnego pokoju chciałbym zwolnić pamięć żeby niepotrzebnie ładowały się zasoby z pokoju1

Moje pytanie,gdzie to zastosować? czy w create utworzyć pusty obiekt,gdzie będzie np if room end dra_texture_flush();

 

 

GML
if room_exists draw_texture_flush();

{

room_goto(room2);

}

 

 

Kurcze nie wiem jak to dokładnie zrobić żeby prawidłowo zwalniało pamięć z poprzedniego pokoju.

Pomóżcie proszę

Odnośnik do komentarza
Udostępnij na innych stronach

Wystarczy że użyjesz raz w create jakiegoś obiektu. Upewnij się jednak czy ten obiekt występuje tylko raz.

 

Ale problem jest taki że ta funkcja wcale Ci nie pomoże. Ona nie czyści pamięci. Ona jedynie zwalnia z pamięci poprzednio wczytane texturepages. Wszystkie. Po czym one zostają od razu wczytane ponownie. Samo wczytanie jest dość ciężką akcją więc nie powinno nigdy być używane co step.

Tak więc użycie draw_texture_flush() pomoże TYLKO w wypadku gdy masz perfekcyjnie rozdzielone sprite na texturepages. Co przez to rozumiem? Masz np osobny do grafik z menu i osobny dla map. I żadna z grafik użytych na tym od menu nie jest nigdzie użyta w mapach. Wtedy ten pierwszy zostanie wyrzucony z pamięci, ale jeżeli odniesiesz się gdzieś do jakiejś grafiki z menu to znów zostanie on wczytany.

 

Więcej optymizacji uzyskasz jeżeli spakujesz jak najwięcej grafik na jak najmniej texturepages.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeżeli użyjesz na końcu to jak znam życie zdąży się jeszcze wczytać. Zawsze używać na początku nowego.

 

Każdy z wbudowanych rodzai particle jest na osobnym texturepage. Jak użyjesz gwiazdki i wybuchu to zostaną dodane 2 nowe texturepages. Dlatego YYG zaleca używanie zawsze własnych grafik do particle. Wtedy grafika jest pobierana z texturepage który już istnieje. YYG jako przykład podaje nawet że te podstawowe są zapisane w folderze GM i mozna sobie je dodać do projektu jako grafiki.

 

W dokumentacji jest wszystko napisane.

Odnośnik do komentarza
Udostępnij na innych stronach

Wystarczy że użyjesz raz w create jakiegoś obiektu. Upewnij się jednak czy ten obiekt występuje tylko raz.

 

Ale problem jest taki że ta funkcja wcale Ci nie pomoże. Ona nie czyści pamięci. Ona jedynie zwalnia z pamięci poprzednio wczytane texturepages. Wszystkie. Po czym one zostają od razu wczytane ponownie. Samo wczytanie jest dość ciężką akcją więc nie powinno nigdy być używane co step.

Tak więc użycie draw_texture_flush() pomoże TYLKO w wypadku gdy masz perfekcyjnie rozdzielone sprite na texturepages. Co przez to rozumiem? Masz np osobny do grafik z menu i osobny dla map. I żadna z grafik użytych na tym od menu nie jest nigdzie użyta w mapach. Wtedy ten pierwszy zostanie wyrzucony z pamięci, ale jeżeli odniesiesz się gdzieś do jakiejś grafiki z menu to znów zostanie on wczytany.

 

Więcej optymizacji uzyskasz jeżeli spakujesz jak najwięcej grafik na jak najmniej texturepages.

 

 

 

Właśnie u mnie jest tak,że grafikę do menu i grafikę do poszczególnych map mam osobno pookładana,(sprity.tła itp)więc defakto powinno to trochę pomóc.

Dobrze rozumiem,że wrzucam w pierwszym roomie,gdzie zaczyna się plansza z grą..w create dowolnego obiektu draw_texture_flush(); bez żadnego warunku if? itp?

Sprawdziłem też,nigdzie u mnie w kodzie gry nie występuje funkcja draw_texture_flush();

 

 

Threff dokładnie co masz na myśli,że lepszą optymalizację uzyskam spakowanie grafiki jak najmniej w texturepages?

 

załózmy teraz mam scenera i tło w rozdzielczości 3000x1500 tak samo w tej rozdzielczości mam scenerie i na nią nałożone niewidzialne solidy,wiem wiem zbyt duża sceneria,ale kolejne mam już mniejsze po 2000x800 texturepage mam ustawioną na 4096x4096 ale chyba lepiej ją zmniejszyć i próbować to upychać? mógłbyś mi to konkretnie wyjaśnić co dokładnie zrobić?

Odnośnik do komentarza
Udostępnij na innych stronach

Tylko słowem upewnienia, kiedy mówisz, że masz osobno poukładane, masz na myśli, że w Global Game Settings>Textures masz porobione dodatkowe "Texture Groups" i przypisujesz spirty/tła do tych grup na podstawie tego które z którymi się pojawiają?

Odnośnik do komentarza
Udostępnij na innych stronach

Tylko słowem upewnienia, kiedy mówisz, że masz osobno poukładane, masz na myśli, że w Global Game Settings>Textures masz porobione dodatkowe "Texture Groups" i przypisujesz spirty/tła do tych grup na podstawie tego które z którymi się pojawiają?

 

 

Tak dokładnia tak sobie pogrupowałem w ustawieniach sprity,tła,dźwięk.

W kazdym swiecie mam przypisana odpowiednia grupe spritow,dzwiekow,i tla.

Odnośnik do komentarza
Udostępnij na innych stronach

Po prostu wejdź w Global Game Settings i tam gdzieś będziesz mieć opcję podglądu twoich texturepages. Otworzy Ci się folder z nimi i sam będziesz mógł zobaczyć czy wszystko jest ok. Pamiętaj że jak będziesz próbować wsadzić grafikę o większy rozmiarze niż texturepage to zostanie ona zeskalowana.

 

Twój cel jest taki aby w jednym room było jak najmniej zmian texturepages. Jeżeli na jednym zmieścisz wszystkie postaci, elementy interfejsu, particle, etc. To na drugim możesz wciskać grafiki pierwszego zestawu leveli. Pierwszy atlas (tak poprawnie się nazywają texturepages) będzie w grze wczytany zawsze, ale drugi tylko na odpowiednim levelu.

 

Tylko nie próbuj na przykład wrzucać wszystkich teł na jeden atlas. To nie ma sensu, więc spróbuj odpowiednie tło wcisnąć na odpowiedni atlas. Jak jedna mapa nie zmieści Ci się na jednym atlasie, to zrób tak aby ten dodatkowy zawierał jak najwięcej uniwersalnych elementów. Bo posiadanie wczytanych atlasów: postaci, pierwszego levelu i atlasu ze "śmieciami" jest lepsze niż wczytywanie 6 różnych z których czasami pobierasz jedną grafikę.

Odnośnik do komentarza
Udostępnij na innych stronach

Po prostu wejdź w Global Game Settings i tam gdzieś będziesz mieć opcję podglądu twoich texturepages. Otworzy Ci się folder z nimi i sam będziesz mógł zobaczyć czy wszystko jest ok. Pamiętaj że jak będziesz próbować wsadzić grafikę o większy rozmiarze niż texturepage to zostanie ona zeskalowana.

 

Twój cel jest taki aby w jednym room było jak najmniej zmian texturepages. Jeżeli na jednym zmieścisz wszystkie postaci, elementy interfejsu, particle, etc. To na drugim możesz wciskać grafiki pierwszego zestawu leveli. Pierwszy atlas (tak poprawnie się nazywają texturepages) będzie w grze wczytany zawsze, ale drugi tylko na odpowiednim levelu.

 

Tylko nie próbuj na przykład wrzucać wszystkich teł na jeden atlas. To nie ma sensu, więc spróbuj odpowiednie tło wcisnąć na odpowiedni atlas. Jak jedna mapa nie zmieści Ci się na jednym atlasie, to zrób tak aby ten dodatkowy zawierał jak najwięcej uniwersalnych elementów. Bo posiadanie wczytanych atlasów: postaci, pierwszego levelu i atlasu ze "śmieciami" jest lepsze niż wczytywanie 6 różnych z których czasami pobierasz jedną grafikę.

 

 

 

No tak parę map mam w grze 3000x1500(background u mnie ustawiony jako mapa scenerii z nałożonymi niewidzialnymi solidami) wobec tego zmuszony byłem texturepage ustawić na 4096x4096 wiem,że to już sporo,ale kiedy próbuje pociąć mapę 3000x1500 na pół to wychodzi źle,bo pojawiają się wtedy linie pionowe w grze mimo,że przycięte było dobrze czyli na 1500x750.Czytałem,że to muszą być kwadraty czyli np tych linii nie było by wtedy,kiedy moja sceneria załóżmy miała by rozmiar 4096x1024 wtedy podzieliłbym to na cztery części po 1024x1024 i linii pionowych by nie było,a przy takich proporcjach jak mam 3000x1500 to linie powstają poprawcie mnie jeśli się mylę.

Dlatego zmuszony byłem zostać przy texturepage 4096x4096.

 

Threef cały świat jeden pogrupowałem sobie w texture group tak i przypisałem do odpowiednich folderów:

 

Świat 1 podzielony na 5 folderów a w nich

1.folder pierwszy zawiera mapę 3000x1500 ze sceneria i tło tez o tej wielkości

2.folder drugi zawiera kolejną mapę 3000x1500 ze scenerią i tło o tej wielkości

3.folder trzeci zawiera kolejną mapę 3000x1500 ze scenerią i tło o tej wielkości

4 folder czwarty zawiera kolejną mapę 3000x1500 ze scenerią i tło o tej wielkości

5 folder piąty zawiera mapę 1000x1000 ze scenerią i tło o tej wielkości

 

 

kolejny folder to elementy menu które praktycznie nie występują już w czasie gry czyli:

 

folder elementy menu a w nim

 

grafika sprity menu loga,tła od menu i czcionka użyta w menu gry i w intro

 

 

 

Następny folder elementy stałe gry a w nim wszystkie elementy,które występują w całym świecie w pięciu planszach

czyli hud,elementy do zbierania jak punkty,monety,wrogowie efekty cząsteczkowe sprite bohatera,czcionka użyta w danym świecie.

 

 

Dobrze by było zrobić tak,że np kończę scenerie 1 no i przechodzę do drugiej i żeby nie ładowało niepotrzebnie do pamięci scenerie 1 bo to w końcu spora mapa sceneria 3000x1500 i tło do niej też i tak z kolejnymi sceneriami,bo jest ich pięć.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ładowanie do pamięci niepotrzebnie to akurat nie problem, problem to przeskakiwanie między teksturami - np. rysowanie na różnych depth-ach tego samego sprite, podczas gdy pomiędzy przeskakujemy. Ja się swego czasu zastanawiałem, czy nie zrobić jednego obiektu który pokolei rysuje obiekty z tym samym sprite za pomocą with(), a wszystkie obiekty mają visible na false. To by świetnie przyspieszyło grę, ale w pizdu roboty.

Odnośnik do komentarza
Udostępnij na innych stronach

Ładowanie do pamięci niepotrzebnie to akurat nie problem, problem to przeskakiwanie między teksturami - np. rysowanie na różnych depth-ach tego samego sprite, podczas gdy pomiędzy przeskakujemy. Ja się swego czasu zastanawiałem, czy nie zrobić jednego obiektu który pokolei rysuje obiekty z tym samym sprite za pomocą with(), a wszystkie obiekty mają visible na false. To by świetnie przyspieszyło grę, ale w pizdu roboty.

 

 

Gnysek twój pomysł jest całkiem dobry ale dość skomlikowany i pracochłonny.

Ktoś wie jak to rozwiązać? Bo nie chce w pewnym momencie dostać komunikatu,że pamięć video jest zapełniona.

 

 

Threef do Ciebie też będe miał sprawę,ale to napisze w wątku,gdzie daleś przykład...chodzi mi o dezaktywowanie backgrounda poza rejonem widoku,bo opisywaleś to,ale to jest dobre rozwiązanie dla gry,która ma scenerie zbudowaną ze spritów,u mnie background 0 to tło a background1 to sceneria z nałożonymi niewidzialnymi solidami.

Taka dezaktywacja tła przy mojej dość dużej scenerii dałoby dobry efekt i zyskałbym więcej klatek,bo obecnie dezaktywuje tylko obiekty na mapie,co też dało dobry efekt.

Odnośnik do komentarza
Udostępnij na innych stronach

Threef do Ciebie też będe miał sprawę,ale to napisze w wątku,gdzie daleś przykład...chodzi mi o dezaktywowanie backgrounda poza rejonem widoku,bo opisywaleś to,ale to jest dobre rozwiązanie dla gry,która ma scenerie zbudowaną ze spritów,u mnie background 0 to tło a background1 to sceneria z nałożonymi niewidzialnymi solidami.

Taka dezaktywacja tła przy mojej dość dużej scenerii dałoby dobry efekt i zyskałbym więcej klatek,bo obecnie dezaktywuje tylko obiekty na mapie,co też dało dobry efekt.

Jeżeli masz jeden wielki background pokrywający całą mapę to nie da rady. Tamte rozwiązanie ma sens jedynie przy tiled background.
Odnośnik do komentarza
Udostępnij na innych stronach

Jeżeli masz jeden wielki background pokrywający całą mapę to nie da rady. Tamte rozwiązanie ma sens jedynie przy tiled background.

 

No właśnie tak mam,że background jest całą mapą.

Ech szkoda,że nie mogę z tej funkcji skorzystać..no nic pozostaje mi tylko deaktywacja i aktywacja regionów czyli:

 

 

GML
///Aktywacja i dezaktywacja po za widokiem obiektow w grze

instance_activate_all();

instance_deactivate_region(view_xview[0]-128,view_yview[0]-128,// początek regionu, w ktorym dezaktywuje obiekty

view_wview[0]+128,view_hview[0]+128,false,true); // dlugosc i wysokosc regionu

instance_activate_object(obj_kontroler_gry);// tu dodaje wyjątki w grze,które chce żeby się nie dezaktywowały

instance_activate_object(obj_kontroler_pokoju);

instance_activate_object(obj_solid);

instance_activate_object(obj_napis_do_planszy);

instance_activate_object(obj_energia);

instance_activate_object(obj_spawn_potwor);

instance_activate_object(obj_spawn);

instance_activate_object(obj_spawn_ptak);

instance_activate_object(obj_wrog_smok);

instance_activate_object(obj_hazard);

instance_activate_object(obj_spadajace_kolce);

 

 

tak chyba jest dobrze?

 

view mój jest 800x600 ustawiony

Odnośnik do komentarza
Udostępnij na innych stronach

tak chyba jest dobrze?

 

Nie mam pojęcia jak masz elementy ustawione na mapie, ale twój kod dezaktywacji wygląda na przeciwieństwo "dobrze".

 

Te funkcje dezaktywują tylko i wyłącznie obiekty. Napisałeś że twoje mapy składają się na: tło, drugą warstwę tła jako scenerię i ustawione niewidzialne obiekty solid. Więc teraz po twojej liście wyjątków stwierdzam że chyba nic nie dezaktywujesz.

 

Poza tym zasięg instance_deactivate_region() masz źle. Argumenty to x, y, szerokość i wysokość. Jako że zaczynasz x i y o 128px wcześniej to musisz w i h zrobić większe, ale nie o 128 bo wtedy kończy się na krawędzi. w i h musisz dać większe. I mam nadzieję że wiesz skąd są te wartości? To ma być połowa szerokości/wysokości największego dezaktywowanego obiektu. (W skrócie, bo to zależy od origin.)

 

 

Edit: Poza tym to wygląda jakbyś na siłę szukał nie istniejącego problemu. Coś wiesz ze jest nie tak, ale nie wiesz gdzie szukasz. Dezaktywacja obiektów nie pomoże w żaden sposób z grafiką. A draw_texture_flush() nie pomoże w czyszczeniu pamięci, bo GM sam zwalnia z pamięci to czego nie potrzebuje. Ilość texturepages nie spowoduje komunikatu o braku pamięci, ale już za duży ich rozmiar tak. I jak gnysek napisał (co też pisałem ale widocznie nie dostatecznie zrozumiale) wolne jest przeskakiwanie pomiędzy różnymi teksturepages podczas rysowania..

Odnośnik do komentarza
Udostępnij na innych stronach

Nie mam pojęcia jak masz elementy ustawione na mapie, ale twój kod dezaktywacji wygląda na przeciwieństwo "dobrze".

 

Te funkcje dezaktywują tylko i wyłącznie obiekty. Napisałeś że twoje mapy składają się na: tło, drugą warstwę tła jako scenerię i ustawione niewidzialne obiekty solid. Więc teraz po twojej liście wyjątków stwierdzam że chyba nic nie dezaktywujesz.

 

Poza tym zasięg instance_deactivate_region() masz źle. Argumenty to x, y, szerokość i wysokość. Jako że zaczynasz x i y o 128px wcześniej to musisz w i h zrobić większe, ale nie o 128 bo wtedy kończy się na krawędzi. w i h musisz dać większe. I mam nadzieję że wiesz skąd są te wartości? To ma być połowa szerokości/wysokości największego dezaktywowanego obiektu. (W skrócie, bo to zależy od origin.)

 

 

Edit: Poza tym to wygląda jakbyś na siłę szukał nie istniejącego problemu. Coś wiesz ze jest nie tak, ale nie wiesz gdzie szukasz. Dezaktywacja obiektów nie pomoże w żaden sposób z grafiką. A draw_texture_flush() nie pomoże w czyszczeniu pamięci, bo GM sam zwalnia z pamięci to czego nie potrzebuje. Ilość texturepages nie spowoduje komunikatu o braku pamięci, ale już za duży ich rozmiar tak. I jak gnysek napisał (co też pisałem ale widocznie nie dostatecznie zrozumiale) wolne jest przeskakiwanie pomiędzy różnymi teksturepages podczas rysowania..

 

 

 

 

Dobrze mapa to background,ale obiekty to sprity,jak wrogowie,pułapki ruchome przeszkody,itp elementy na tej mapie,więc ma to jakiś sens cokolwiek dezaktywować.

No dobrze...czyli muszę poprawić h view_hview i w view_wview na większy niż mam ustawione pozostałe. Np na 192?

Co do pamięci grafiki to poprostu tne scenerie na równe kwadraty po 1024x1024 i powinno być dobrze..wiem,że to wyżej nie pomaga z pamięcia grafiki,ale doczepiłem to do tego tematu;) za to zyskać w grze każdą cenną klatkę gry bezcenne;]

 

 

GML
///Aktywacja i dezaktywacja po za widokiem obiektow w grze

instance_activate_all();

instance_deactivate_region(view_xview[0]-128,view_yview[0]-128,// początek regionu, w ktorym dezaktywuje obiekty

view_wview[0]+192,view_hview[0]+192,false,true); // dlugosc i wysokosc regionu

instance_activate_object(obj_kontroler_gry);// tu dodaje wyjątki w grze,które chce żeby się nie dezaktywowały

instance_activate_object(obj_kontroler_pokoju);

instance_activate_object(obj_solid);

instance_activate_object(obj_napis_do_planszy);

instance_activate_object(obj_energia);

instance_activate_object(obj_spawn_potwor);

instance_activate_object(obj_spawn);

instance_activate_object(obj_spawn_ptak);

instance_activate_object(obj_wrog_smok);

instance_activate_object(obj_hazard);

instance_activate_object(obj_spadajace_kolce);

Odnośnik do komentarza
Udostępnij na innych stronach

Chcę zauważyć że wykonanie

aktywuj wszystko
dezaktywuj wszystko poza view
aktywuj wszystkie obj_solid

w pewnym momencie będzie bardziej zamulało grę niż zostawienie tego bez dezaktywacji. Jeżeli masz dużo takich obiektów to podczas jednego step wykonasz 3 operacje na każdym z tych obiektów w room. Zastanów się jak wiele jest takich obiektów. Może efektywniej będzie robienie tego na opak? Czyli dezaktywowanie tylko wybranych rodzai obiektów a potem aktywowanie wszystkiego w zasięgu view?

Zrób teraz profilowanie, zobacz co i ile Ci zżera czasu na operacje. Potem wywal wszystko dotyczące dezaktywacji i sprawdź ponownie.

Odnośnik do komentarza
Udostępnij na innych stronach

Chcę zauważyć że wykonanie
aktywuj wszystko
  dezaktywuj wszystko poza view
  aktywuj wszystkie obj_solid

w pewnym momencie będzie bardziej zamulało grę niż zostawienie tego bez dezaktywacji. Jeżeli masz dużo takich obiektów to podczas jednego step wykonasz 3 operacje na każdym z tych obiektów w room. Zastanów się jak wiele jest takich obiektów. Może efektywniej będzie robienie tego na opak? Czyli dezaktywowanie tylko wybranych rodzai obiektów a potem aktywowanie wszystkiego w zasięgu view?

Zrób teraz profilowanie, zobacz co i ile Ci zżera czasu na operacje. Potem wywal wszystko dotyczące dezaktywacji i sprawdź ponownie.

 

 

 

 

Threef to dobry pomysł zrobić to odwrotnie...bardziej efektywniej,czyli tak jak mówisz dezaktywowanie tylko wybranych rodzai obiektów, a potem aktywowanie wszystkiego w zasięgu view.

 

czyli coś takiego?

 

 

GML
instance_deactivate_object(obj_wrog_smok);//deaktywuje np wroga,który jest poza zasięgiem mojego view

itd

 

instance_activate_region (view_xview[0]-128,view_yview[0]-128,

view_wview[0]+192,view_hview[0]+192,false,true); // aktywuje tu wszystko w moim zasięgu

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Tak, ale wszystko zależy od tego co się dzieje u ciebie w grze. Musisz najpierw sprawdzić czy to ma jakikolwiek sens. I jeszcze raz powtarzam: Spróbuj całkiem bez dezaktywacji.

No i wszystko sprawdzaj profilerem w debugerze!

Odnośnik do komentarza
Udostępnij na innych stronach

Tak, ale wszystko zależy od tego co się dzieje u ciebie w grze. Musisz najpierw sprawdzić czy to ma jakikolwiek sens. I jeszcze raz powtarzam: Spróbuj całkiem bez dezaktywacji.

No i wszystko sprawdzaj profilerem w debugerze!

 

Dzięki za informację zaraz sprawdzę w debugerze.

 

 

Zrobiłem tak i zyskałem ponad 10 klatek..sporo jest dobrze;)

W debugerze też sprawdzałem;)

 

GML
instance_deactivate_all(false);

instance_activate_region(view_xview[0]-128,view_yview[0]-128,// początek regionu, w ktorym aktywuje obiekty

view_wview[0]+192,view_hview[0]+192,true); // dlugosc i wysokosc regionu

//niżej dodałem kilka obiektów stałych w grze,których niedezaktywuje</span>

 

 

ok,to już działa jak należy,a wracając do tego draw_texture_flush();

wrzucić,to na mapie,gdzie jesc sceneria w jakiś pusty obiekt w create?

czy posłużyć się obiektem w który zarządza moimi życiami,energią,hudem itp elementami gry i tam w create to wrzucić?

czy wystarczy wtedy samo draw_texture_flush();? czy może ma być to w jakimś warunku,że np jeśli opuszczam pokój,to wtedy draw_texture_flush();? jak to w końcu ma być???

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobiłem tak i zyskałem ponad 10 klatek..sporo jest dobrze;)

W debugerze też sprawdzałem;)

Tak jak myślałem. Na siłę próbowałeś optymalizować coś co nie wymagało optymalizacji. Mam nadzieję że sprawdziłeś jak wypada to bez dezaktywacji?

Następny krok jaki możesz zrobić to wykonywać dezaktywację nie co step, a w alarmie. Tylko wtedy nie zapominaj że rozmiar aktywnego obszaru musi być adekwatnie większy.

 

ok,to już działa jak należy,a wracając do tego draw_texture_flush();

wrzucić,to na mapie,gdzie jesc sceneria w jakiś pusty obiekt w create?

czy posłużyć się obiektem w który zarządza moimi życiami,energią,hudem itp elementami gry i tam w create to wrzucić?

czy wystarczy wtedy samo draw_texture_flush();? czy może ma być to w jakimś warunku,że np jeśli opuszczam pokój,to wtedy draw_texture_flush();? jak to w końcu ma być???

Wrzuć gdziekolwiek w create gdzie wykona się tylko raz. Nie musisz robić żadnych warunków, bo ta funkcja od niczego nie zależy. Nie ma czym zaszkodzić, a najwyżej się nie powiedzie. Tak czy inaczej użycie jej oznacza wczytanie wszystkich potrzebnych atlasów od nowa. Nie twórz nowego obiektu bo to nie ma sensu. Nie potrzebne dodatkowe dane.

 

I jeszcze raz powtarzam. draw_texture_flush() Nic Ci nie da. Nie poczujesz żadnej różnic. Nawet nie będziesz wiedział czy zadziałało poprawnie czy nie. Jest bardzo mało przypadków w których ta funkcja na prawdę pomoże (np: wyrzucenie z pamięci nie używanej już czcionki) ale to nie będzie miało wpływu na grę.

Odnośnik do komentarza
Udostępnij na innych stronach

Tak jak myślałem. Na siłę próbowałeś optymalizować coś co nie wymagało optymalizacji. Mam nadzieję że sprawdziłeś jak wypada to bez dezaktywacji?

Następny krok jaki możesz zrobić to wykonywać dezaktywację nie co step, a w alarmie. Tylko wtedy nie zapominaj że rozmiar aktywnego obszaru musi być adekwatnie większy.

 

Wrzuć gdziekolwiek w create gdzie wykona się tylko raz. Nie musisz robić żadnych warunków, bo ta funkcja od niczego nie zależy. Nie ma czym zaszkodzić, a najwyżej się nie powiedzie. Tak czy inaczej użycie jej oznacza wczytanie wszystkich potrzebnych atlasów od nowa. Nie twórz nowego obiektu bo to nie ma sensu. Nie potrzebne dodatkowe dane.

 

I jeszcze raz powtarzam. draw_texture_flush() Nic Ci nie da. Nie poczujesz żadnej różnic. Nawet nie będziesz wiedział czy zadziałało poprawnie czy nie. Jest bardzo mało przypadków w których ta funkcja na prawdę pomoże (np: wyrzucenie z pamięci nie używanej już czcionki) ale to nie będzie miało wpływu na grę.

 

 

 

Dzięki Threef za cenne uwagi.

Tak sprawdziłem jak to wygląda bez dezaktywacji.

W tej formie jest lepiej niż bez dezaktywacji,bo zyskuje więcej klatek.Sprawdzałem,testowałem...

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ę...