Estoy buscando una forma portátil de hacer un SwapBuffers sin bloqueo() incluso si VSync está activado.
En otras palabras, ¿es posible recibir una notificación por un evento o conocer la demora hasta la próxima VSync?SwapBuffers sin bloqueo() con VSync = en
Respuesta
IIRC esta extensión ayuda: http://www.opengl.org/registry/specs/SGI/video_sync.txt, pero es muy poco compatible con los controladores actuales.
Lamentablemente tiene razón, esta característica es muy poco compatible. –
En primer lugar, ¿por qué no simplemente llama a SwapBuffers() al comienzo del cuadro? O de alguna manera cambiar la tubería para
Render();
Update(); //Update before swapping buffers
SwapBuffers();
Mientras OpenGL está trabajando lejos en todos los comandos que acaba de lanzar en él, usted puede hacer todo de su lógica de actualización.
De lo contrario, hay algunas maneras de solucionar este problema.
Sé que XNA tiene una propiedad ScanLine, que le dice qué línea de exploración está actualmente ocupando la pantalla. No sé si OpenGL expone esto también, pero estoy bastante seguro de que debe hacerlo. (¿Correcto?)
Utilice la representación de subprocesos múltiples. Muchos motores modernos dedican un hilo completo solo para renderizar. Si bloquea, está bien, no molesta al hilo principal. Alternativamente, una forma más sencilla es manejar la entrada, etc. en un nuevo hilo, esto evita complicaciones con los contextos gráficos.
Use triple buffering. Usar triple buffering significa que tienes 2 buffers de respaldo. Después de llamar a SwapBuffers, la pantalla puede continuar escaneando el buffer frontal, con el búfer recién terminado esperando, y el tercer búfer para que represente el siguiente fotograma. Por supuesto, si ya ha procesado dos fotogramas, se bloqueará SwapBuffers().
- 1. Evitar esperar en SwapBuffers
- 2. Bloqueo sin bloqueo
- 3. Vsync en Flex/Flash/AS3?
- 4. Cómo deshabilitar vsync en macOS
- 5. Tubos con nombre sin bloqueo
- 6. Sincronización de varias ventanas de OpenGL a vsync
- 7. Qt y vsync/lagrimeo
- 8. Acceso a archivos sin bloqueo con Twisted
- 9. Obsesión con secuencias de comandos sin bloqueo
- 10. zócalo Java sin bloqueo
- 11. Construcciones sin bloqueo en .net
- 12. ¿Colección concurrente sin bloqueo?
- 13. Archivo sin bloqueo lee
- 14. Javascript sin bloqueo
- 15. Sin bloqueo pthread_join
- 16. getch sin bloqueo(), ncurses
- 17. Rieles: ¿solicitudes HTTP sin bloqueo?
- 18. Cerraduras de bloqueo frente a cerraduras sin bloqueo
- 19. Diálogo modal de bloqueo sin bloqueo Swing progress
- 20. Descarga de javascript sin bloqueo
- 21. Programación multiprocesador: pilas sin bloqueo
- 22. ¿Probar un bloqueo sin adquirirlo?
- 23. Registro remoto asíncrono sin bloqueo en Java?
- 24. cocos2d 0x0502 error de OpenGL en - [EAGLView swapBuffers]
- 25. C fork/exec con tubería sin bloqueo IO
- 26. ¿Cuál es la diferencia entre el bloqueo con síncrono, sin bloqueo y asíncrono?
- 27. Java Serializable, ObjectInputstream, E/S sin bloqueo
- 28. jQuery llamadas sincrónicas ajax sin bloqueo
- 29. ¿Cómo puedo obtener socket connect() sin bloqueo?
- 30. Lectores múltiples sin bloqueo único escritor
Esto va a ser específico de la plataforma, si es posible. Por lo tanto, especifique su plataforma, etiquetando al menos. – unwind
Me gustaría encontrar una forma portátil de implementar esta característica (Win32/Linux/MacOSX) –
¿De qué manera la demora hasta la próxima vsync lo ayuda? No es como si la llamada swapbuffer hiciera el intercambio en el momento de la llamada. – Bahbar