Wracam do temamu, który niegdyś (łohoo to już grubo ponad pół roku) sam rozpocząłem, ponieważ stałem się szczęsliwym posiadaczem sprzętu z ekranem VGA. No cóż, bardzo się zdziwiłem, gdy moje gry napisane wczesniej w GAPI i działające super szybko (wykorzystywałem wstawki w assemblerze) na ekranach QVGA - tu (na VGA) po prostu umierały z mułowacenia się - wyswietlały co 3-cią klatkę.
Problem tkwi w tym, że GAPI wykrywając ekran VGA włącza warstwę emulacji gdzie dubluje piksele - co jest dobre, bo softy napisane pod QVGA działają również na VGA.
Niestety emulacja ta jest tragicznie powolna. Dla przykładu powiem, że narysowanie jednej klatki w mojej gierce zajmowało na procku niecałe 200 MHz (Wizard, QTEK 9100) ok. 4-5ms, a na procku ponad 500 MHz i ekranie VGA (Universal, QTEK 9000) w warstwie emulacji GAPI to samo rysuje się... 35ms (!!!). Taaa, różnica jest straszna.
Jak się okazało, problemem nie jest ekran VGA tylko rozwiązanie, które dubluje piksele w warstwie emulacji GAPI. Tak więc problem tkwi w samej bibliotece GAPI.
Nie wiem jakie doładnie procesy zachodzą podczas tworzenia obrazu w trybie emulacji, jednak zrobiłem mały test i zamiast wykorzystywać GAPI zastosowałem funkcję ExtEscape i wykorzystałem tryb RAW, "ręcznie" dublując piksele. Tzn. zamiast rysować jeden piksel przez GAPI, które go samo zmieniało w 4 piksele tego samego koloru, po prostu sam je narysowałem (wszystkie 4 piksele) bez wykorzystywania GAPI - tylko w trybie RAW.
Efekt był taki, że ten sam obraz, który w warstwie emulacji był rysowany w prawie 40ms teraz rysuje się w 6ms. I jest OK, bo czas jest bardzo zbliżony do tego który był w GAPI na QVGA

To mi dało dużo do myslenia, ponieważ wydaje mi się, iż pewnie dałoby się stworzyć na nowo biblioteki GAPI - nieco zmodyfikowane, tak aby dużo szybciej dublowały piksele. Wtedy na ekranach VGA stare programy fullscreen'owe i gry chodziły by pewnie dużo lepiej - wystarczyłoby podmienic bibliotekę gx.dll.
Wiem, że z dniem dzisiejszym nie zaleca się już korzytać z GAPI, bo po prostu nie jest wspierany, tym bardziej, że tryb RAW działa już nawet na maszynkach QVGA z WM 5.0, a jest tak samo szybki jak GAPI i dodatkowo daje możliwość pracy na VGA. Jednak jest całkiem sporo starych gierek i progsów na GAPI, które nadal chciałbym używać mając ekran VGA, ale na razie nie za bardzo się da widząc co drugą albo nawet co trzecią klatkę.
Nie żądam żadnych odpowiedzi - po prostu ponad pół roku temu taki post jak ten bardzo ułatwiłby mi życie, gdy szukałem mądrego rozwiązania na szybką grafikę, ale wtedy jeszcze nie miałem takiej wiedzy.
Tak więc wszyscy młodzi stażem programiści GAPI - dodajcie dodatkowo obługe trybu RAW do Waszych programów jeśli pracujecie na QVGA, bo inaczej na VGA Wasze programy będą działać bardzo powoli...
Oczywiście nie mówię tutaj o programach pisanych z wykorzystaniem GDI, bo tu akurat większych problemów nie zauważyłem. Działają dobrze zarówno na QVGA jak i VGA (może są jakieś wyjątki ale na razie mam zbyt krótko VGA żeby się na coś nadziać).
Mam nadzieję, że kiedyś komuś się to przyda, bo niestety na tym forum jest bardzo mało na temat grafiki HIRES.