Sto cercando un modo portatile per creare uno SwapBuffer() non bloccante anche se VSync è attivato.
In altre parole, è possibile essere avvisati da un evento o conoscere il ritardo fino al prossimo VSync?SwapBuffers non bloccanti() con VSync = on
risposta
IIRC questa estensione aiuta: http://www.opengl.org/registry/specs/SGI/video_sync.txt, ma è molto mal supportato con i driver correnti.
Purtroppo hai ragione, questa funzione è molto mal supportata. –
In primo luogo, perché non si chiama SwapBuffers() all'inizio del frame? O in qualche modo cambiare la pipeline per
Render();
Update(); //Update before swapping buffers
SwapBuffers();
Mentre OpenGL funziona via a tutti i comandi che appena gettato a esso, si può fare tutta la tua logica di aggiornamento.
Altrimenti ci sono alcuni modi per risolvere questo problema.
So che XNA ha una proprietà ScanLine, che indica quale scanline lo schermo è attualmente in grado di. Non so se OpenGL esponga anche questo, ma sono abbastanza sicuro che sia necessario. (Destra?)
Usa rendering multithread. Molti motori moderni dedicano un'intera discussione solo per il rendering. Se blocca, va bene, non disturba il thread principale. In alternativa, un modo più semplice è semplicemente gestire l'input, ecc. Su un nuovo thread, evitando così complicazioni con i contesti grafici.
Utilizzare triple buffering. L'uso del buffering triplo significa che hai 2 buffer posteriori. Dopo aver chiamato SwapBuffers, lo schermo può continuare a scansionare il buffer frontale, con il buffer appena finito in attesa e il terzo buffer per il rendering del fotogramma successivo. Ovviamente, se hai già eseguito il prerendering di due frame, SwapBuffers() verrà bloccato.
- 1. Obsession con script non bloccanti
- 2. GLFW VSync non funziona
- 3. Sincronizzazione di più finestre OpenGL su vsync
- 4. Letture file non bloccanti
- 5. Play Framework: caricamenti di file - bloccanti o non bloccanti?
- 6. Perché dovrei usare socket non bloccanti o bloccanti?
- 7. Rails: richieste HTTP non bloccanti?
- 8. Celery + Eventlet + richieste non bloccanti
- 9. Abilitazione VSync in Vulkan
- 10. Scrittura di applicazioni PHP non bloccanti
- 11. Blocchi di blocco contro blocchi non bloccanti
- 12. cocos2d Errore OpenGL 0x0502 in - [EAGLView swapBuffers]
- 13. Come disabilitare vsync su macOS
- 14. jQuery chiamate ajax sincroni non bloccanti
- 15. Esecuzione di richieste non bloccanti? - Django
- 16. Vsync in Flex/Flash/AS3?
- 17. Come posso ottenere socket non bloccanti connect()?
- 18. Informazioni su NodeJS e non bloccanti IO
- 19. Come creare metodi non bloccanti in Scala?
- 20. recvfrom() errore 10035 utilizzando socket non bloccanti
- 21. È possibile eseguire pubub Redis non bloccanti?
- 22. Lettura due iteratori bloccanti
- 23. Comprendere la necessità dei segnali VSYNC Android
- 24. Come gestire OpenSSL SSL_ERROR_WANT_READ/WANT_WRITE su socket non bloccanti
- 25. AsyncHttpClient può eseguire chiamate HTTP asincrone e non bloccanti?
- 26. Come scrivere su un file usando IO non bloccanti?
- 27. Come eseguire query MySQL asincrone/non bloccanti in Play framework?
- 28. select(), recv() e EWOULDBLOCK su socket non bloccanti
- 29. Zoccoli non bloccanti: i messaggi sono in coda?
- 30. Che cosa succede quando una singola richiesta impiega molto tempo con questi server io non bloccanti?
Questo sarà specifico della piattaforma, se possibile. Quindi per favore specifica la tua piattaforma, taggando almeno. – unwind
Mi piacerebbe trovare un modo portabile per implementare questa funzione (Win32/Linux/MacOSX) –
come ti aiuta il ritardo fino al prossimo vsync? Non è come quando la chiamata swap fa lo scambio al momento della chiamata. – Bahbar