Witam,
Synchronizacja do ramki jest w PLusie możliwa tylko dla trybów DirectDraw (zarówno pełnoekranowych, jak i okienkowych). Sposób jej realizacji może być różny w zależności od konfiguracji konkretnej maszyny oraz ustawień opcji emulatora. Ogólna zasada jest taka, że przy aktywnym "Synchronize blits with monitor vertical refresh" i częstotliwości odświeżania monitora powyżej 85Hz, emulator "wyświetla" kolejny ekran emulowanej Atarynki co drugą ramkę.
1. W najlepszej sytuacji są użytkownicy kart graficznych wspierających funkcję przełączania buforów z pominięciem co drugiej ramki. PLus w oknie logu (Misc/View log file) informuje o dostępności takowej ("Can delay a flip: (yes|no)"). W celu jej wykorzystania konieczne jest zainstalowanie DirectX 7.0 i wybranie "Use flipping surfaces for fulscreen modes" w oknie "Advanced Graphics Options". Emulator wykorzystuje w tym trybie 3 bufory, które są przełączane przez DirectDraw podczas przerwania synchronizacji pionowej.
2. Jeśli wspomniana wyżej funkcja nie jest przez sprzęt/sterownik wspierana, trzeba będzie pogodzić się z gorszą wydajnością (2 razy więcej blitów przy 100Hz), jednak pozostanie przy "Use flipping..." nadal wydaje się dobrym pomysłem (zauważalnie większa płynność niż przy "Blit from display memory...").
3. "Blit from display memory to primary surface" to wariant najmniej godny polecenia. W tym przypadku emulator czeka na rozpoczęcie VBI i dopiero wtedy wykonuje blit na ekran z przygotowanego wcześniej bufora (a czasu ma na to niewiele). Szczęśliwie przy 100Hz blity wykonywane są co dwie ramki.
Punkty 1-2 dotyczą tylko trybów pełnoekranowych, metoda opisana w punkcie 3 może być wykorzystywana w trybach pełnoekranowych i jest jedyną możliwą w trybach okienkowych. W Windows 2000 i wyższych (być może także 98 ) znacznie poprawiono wydajność GDI, dlatego zachęcam do używania "GDI for windows", chyba że komuś bardzo zależy na synchronizacji również przy pracy w okienku. Wówczas jednak należy zadbać o to, by ustawić odświeżanie okna pulpitu na 100Hz (PAL).
Tak na marginesie: czasem może się okazać, że synchronizacji nie ma pomimo włączenia odpowiednich opcji w emulatorze. Trzeba pamiętać, że producenci kart często dają możliwość wyłączenia synchronizacji z poziomu sterowników. Warto więc sprawdzić w zaawansowanych opcjach sterownika - lub przy użyciu innego oprogramowania - czy możliwość uzyskania synchronizacji nie została wyłączona "centralnie". Łatwo sprawdzić, czy karta pozwala na synchronizację z VBLK - jeśli dla "Refresh rate" = 1 włączenie 'full speed' powoduje znaczne przyspieszenie pracy emulatora, to znak, że podsystem video jest źle skonfigurowany (wywołania WaitForVBLK są ignorowane). Tryb 'full speed' jest bowiem również synchronizowany (czasem ma to swoje zalety), a podstawową niedogodność (tj. ograniczenie maksymalnej prędkości przez częstotliwość pracy monitora) można łatwo usunąć, ustawiając "Full speed mode refresh rate" w "Performance Options" na wartość większą od 1.
Skąd biorą się zgłaszane problemy z wydajnością? Szczerze odpowiem, że nie wiem. Prawda jest taka, że co inna karta graficzna/sterownik/instalacja Windows, to inne problemy :-) Jeden z moich znajomych skarżył się kiedyś, że emulator wyciąga ledwie 60% w trybie pełnoekranowym na jego nowiuśkim marketowym PC. Okazało się, że pomogło włączenie interpolacji (View/Stretching/Smooth), bowiem procesor 350MHz był w stanie znacznie szybciej wyrysować docelowy obraz "ręcznie", niż karta graficzna dokonać blitu ze skalowaniem (prawdopodobnie brak wsparcia sprzętowego + kiepska emulacja programowa). Inny użytkownik emulatora skarżył się, że po przejściu do trybu pełnoekranowego na ekranie pojawiają się ikony pulpitu, a kliknięcie myszką powoduje przełączenie do tegoż. Takie zachowanie udało mi się zaobserwować dopiero pod Windows XP po zainstalowaniu najnowszych sterowników. Jeszcze inne problemy, również związane z wydajnością, zgłaszał mi swego czasu Fretless... Wówczas również nie miałem pomysłów, jak mu pomóc.
Eru: Dziwią mnie odnotowane przez Ciebie problemy. Być może - tak jak piszesz - oczekiwanie na VBLK jest na Twojej maszynie z jakichś powodów bardzo procesorożerne... Jaki masz sprzęt? Wersję DirectX? Sterownik karty, jak się domyślam, najświeższy? Nie masz czasem uaktywnionej opcji "Misc/Preferences/Run at high priority"?
LewiS: Nie mam pomysłów. Uroki Windows na konkretnym sprzęcie? Czasem otwarcie okienka wyboru plików potrafi trwać kilkanaście sekund. Mam wrażenie, że Windows przeczesuje wtedy cały Internet. Oczywiście nie jest wykluczone, że to jakiś błąd w PLusie, jednak do tej pory nie zetknąłem się z takim problemem.
Podsumowując: zachęcam do eksperymentowania. Pomóc może np. zmiana "Display memory type" na "System", "AGP" lub "Video". Ja np. po ustawieniu typu pamięci na "Video" nie mogłem uzyskać synchronizacji pod Windows 2000 (pomogło przełączenia na "System"; pod XP na tym samym komputerze synchronizacja działa jak należy także dla "Video"...). Wybranie "Video" skutkuje też często rozmyciem tekstury w podwójnym okienku, o czym pisze Eru. Wiem, że można o to DirectDraw przy blicie jawnie poprosić, jednak pojęcia nie mam, jak to wyłączyć (być może uda mi się o tym doczytać).
Pozdrawiam,
Tomek
Często bywam leniwy, ale za to intensywnie sypiam