I tak naprawdę nikt z udzielających się na forach nie wie jak on dokładnie działa. Nawet członkowie ACES nie zawsze są w stanie udzielić odpowiedzi na pytania a jeśli już, to często bez dostępu do kodu mogą tylko powiedzieć jakieś ogólniki. Osobną sprawą jest to, czy ogarniali to wszystko podczas prac nad symulatorem, moje prywatne zdanie jest takie, że nie za bardzo.
Masz rację, pierwotnie założyłem, że kod odpowiadający za podsystem generowania i wyświetlania obrazu został napisany spójnie i przy zaprzęgnięciu metod oferowanych przez Direct3D, jednak okazuje się, że kod FSX jest dziwną hybrydą. Dawno nie pisałem nic w C++, ale sięgnąłem po narzędzia do dekompilacji i nawet pomimo tego, że zdekompilowany kod nie ma oryginalnego nazewnictwa zmiennych, widać, że wiele procedur, które mogłyby skorzystać z Direct3D, nawet do niego nie sięga.
Jak dla mnie kod może wykonywać się nawet od końca, byleby było więcej FPS'ów.
Ja mam dwa "profile" latania FSX:
- pierwszy to loty śmigłowcami i tu interesuje mnie głownie technika lotu i manewrowanie - wystarczy mi ładna sceneria lotniska i najbliższych okolic. Zastanawiam się też nad zakupem jakiegoś regionu od OrbX, podoba mi się US CRM i bardzo jestem ciekaw wyglądu US SRM (ma być wydany jako następny po US NCA).
- drugi to latanie turystyczne i tu w grę wchodzą wyłącznie fotoscenerie. W tym przypadku im więcej FPSów tym gorsza jakość widoków - system nie nadąża z dostarczaniem wymaganej ilości tekstur. Co z tego, że w VFRPoland mam, po odblokowaniu FPSów, 100-150 klatek/s jeśli teren jest nieostry. Po ustawieniu limitu na np. 36 FPS wszystko wygląda jak powinno.
Tłumaczenie na temat HIGHMEMFIX może być błędne, ale uważam ten wpis za jeden z lepszych "tweaków". Przed jego aplikacją przekroczenie 2GB użycia pamięci przez grę zwiastowało niedaleki crash (na 100% przy przełączaniu się z fullscreen na tryb okienkowy, ale też w innych sytuacjach). Po dopisaniu tej linijki do FSX.cfg problem zniknął.
U mnie ustawienie HIGHMEMFIX=1 spowodowało fatalny efekt, którego nie potrafię teraz odwrócić. Objawia się to tym, że w widoku zewnętrznym przy przemieszczaniu go góra-dół obraz się w bardzo widoczny sposób "przerysowuje" w centralnej części. Te przerysowania to takie zerwania płynności przesuwania się obrazu i nie dotyczy to całego obrazu tylko części. Przed ruszeniem HIGHMEMFIX efekt ten nie występował.
PS. co trzeba zrobić by FSX doszedł z zajętością pamięci do 2GB? Może to specyfika fotoscenerii ale u mnie 1,2 GB na wątek FSXa to max (pamięci mi nie brakuje mam Win7 64bit i 8GB)
Kwestia ustawienia affinityMask na 3 jajka była chyba gdzieś tam nawet wyjaśniona. Pamiętam, że pierwszy test sprzed kilku lat od którego zaczął się ten wątek pokazał, że najwięcej FPS'ów w grze jest właśnie wtedy, gdy obciążane są 3, a nie 4 rdzenie.
Ustawienie na 3 rdzenie to AffinityMask=14, a ja pisałem o sugestiach Bojote odnośnie ustawiania na czterordzeniowcu AffinityMask=12 czyli pracy na 2 rdzenie.
W przypadku scenerii zbudowanej w oparciu o landclass AffintyMask=14 ma sens, jeśli jedynym celem jest zwiększenie ilości FPS. Następuje wtedy przeniesienie głównego wątku (rendering i symulacja) na core1, a na core0 zostają bliżej nieokreślone resztki fibers i to jest właśnie ten zysk - o tyle zmniejsza się obciążenie głównego wątku (odpowiedzialnego za FPSy). Przy scenerii landclass dwa pozostałe rdzenie core2 i core3 dają sobie radę z ładowaniem tekstur i mesha.
W przypadku fotoscenerii wygląda to zupełnie inaczej - wąskim gardłem wydajności jest tu proces ładowania tekstur terenu i mesha. Do wykonania tej pracy mogą być niewystarczające nawet trzy rdzenie (przy schemacie - core0 główny proces, core1 core2 core3 procesy ładowania tekstur i mesha).
PS. Z tym AffinityMask=12 czyli pracy na 2 rdzenie (na 4 rdzeniowym procesorze) chodzi o przycięcie programowi ilości pobieranych danych, wtedy główny wątek ma mniej pracy i można zwiększyć ilość FPS ale to opcja dla "fetyszystów" ilości FPS.
Za dobre pomysły uważam też ograniczanie FPS'ów w grze do 30-40, ale za pomocą zewnętrznych programów a nie wbudowanego limitera.
U mnie sprawdza się (?) limiter wewnętrzny, zewnętrznego nie testowałem. Na czym polega zaleta/korzyść z zastosowania zewnętrznego limitera?