Как получить импульс обновления дисплея VSync в Linux? - PullRequest
0 голосов
/ 12 июня 2019

Я программирую некоторые подпрограммы на асм-коде Linux NASM x86-64.

Как получить импульс обновления дисплея, VSync?

Полагаю, возможно, с помощью syscall я смогу достичь импульса, но я принимаю другие предложения, не спрашивайте меня, почему, мне действительно нужен импульс, чтобы избежать мерцания на дисплее.

Я знаю, каксделать это для окон, как показано в коде ниже, но Linux не поддерживает D3D.

;;;;; WINDOWS VERSION EXAMPLE!
;ENABLE VSYNC
Therraszeta3:
CMP BYTE [RY_X+0x1003],255
jnz .L1232321
mov rcx,0
mov rax, [GetDC__]
mov [D3DKMT_OPENADAPTERFROMHDC_hDc], rax
lea rcx, [D3DKMT_OPENADAPTERFROMHDC]
call [GetProcAddress_LoadLibrary_Gdi32_dll_D3DKMTOpenAdapterFromHdc_]
mov [D3DKMTOpenAdapterFromHdc__], rax
;;
mov eax, dword [D3DKMT_OPENADAPTERFROMHDC_hAdapter]
mov dword [D3DKMT_WAITFORVERTICALBLANKEVENT_hAdapter], eax
mov dword [D3DKMT_WAITFORVERTICALBLANKEVENT_hDevice],0
mov eax, dword [D3DKMT_OPENADAPTERFROMHDC_VidPnSourceId]
mov dword [D3DKMT_WAITFORVERTICALBLANKEVENT_VidPnSourceId], eax
lea rcx, [D3DKMT_WAITFORVERTICALBLANKEVENT]
call [GetProcAddress_LoadLibrary_Gdi32_dll_D3DKMTWaitForVerticalBlankEvent_]
mov [D3DKMTWaitForVerticalBlankEvent__], rax
.L1232321
;;;;;

Я ожидаю получить импульс в бесконечном цикле, указывая начало каждого кадра.

...