Mój programik jest w DX9 (jest jakiś powód, żeby pisać na starszego DXa? :)) i napisałem go w .NET, bo pisze się w nim szybciej, a czasu za dużo na niego nie miałem. Ma źródełka. Przepisanie go na model COM w C++ nie wymaga specjalnie wysiłku. Wczytywanie plików JPS jest banalne: wystarczy zamiast wczytywać dwa jotpegi wczytać jeden i przekopiować jego połówki do dwóch surface'ów (patrz źródełka). A dlaczego się haczy i nie synchronizuje? Bo jest w okienku i zawartość okienka MUSI być kopiowana, a nie flipowana. Przerabiając go na full-screen rozwiąże problem.
Poza tym, jak napisałem to tylko przykład jak można to zrobić bez karty z 256MB MB RAMu i specjalnych sterowników do OpenGLa i wymaga po prostu dopracowania.
PS: jakby ktoś zerknął do źródełek, to stwierdzi, że stosuję poczwórne buforowanie. Nie mam pojęcia dlaczego, ale z jednym backbufferem mi nie działało a z trzema owszem i już nie dociekałem dlaczego :)
PS2: DX wykorzystuje już sprzętowe procedury karty, więc nie ma co się specjalnie gimnastykować (SwapEffect może być Flip, albo Copy, a jak da się Discard, to w okienku DX sam wybierze Copy, a na full-screenie Flip), chyba, że napiszesz to w VESA ;)