( SDL_GL_SwapBuffers()
en particular)
Cuando ha dibujado una escena, y llama buffers de intercambio, es una rutina entonces glClear()
la escena antes de dibujar cualquier cosa; si no lo borras, ¿cuál es el contenido del búfer? ¿Está definido por alguna especificación o varía según el controlador?
opengl
sdl
double-buffering
Será
fuente
fuente
Respuestas:
Los detalles de cómo intercambiar el búfer frontal y posterior varían de una plataforma a otra, por lo que la respuesta depende de la plataforma.
De acuerdo con la documentación de referencia de GLX glXSwapBuffers :
Sin embargo, existe la extensión GLX_EXT_buffer_age :
Pero Win32 SwapBuffers solo dice:
Y CGLFlushDrawable, para OS X Core Graphics dice:
Finalmente, en la función de intercambio de búfer estándar de OpenGL ES eglSwapBuffers :
Entonces, ¿qué significa todo esto?
Dadas las limitaciones de GLX y CGL, y el deseo de minimizar los cambios entre OpenGL y OpenGL ES, también podría suponer que el contenido es basura.
fuente
Por lo que he leído, el único comportamiento es INDEFINIDO. Por lo tanto, supongo que no hay garantía sobre cuál será el contenido del búfer. Sin mencionar que algunas bibliotecas realmente envuelven una llamada clara en la llamada de buffers de intercambio.
fuente
El comportamiento es INDEFINIDO, por lo que si va a llenar toda la pantalla de todos modos, puede considerar eliminar el borrado ... excepto, en algunos entornos (ciertas arquitecturas de mosaico al menos), eso realmente degradará el rendimiento. La pantalla completa al inicio del renderizado es una operación tan común que me sorprendería si no se optimizara bien en todas las plataformas de destino.
La razón por la que NO ESTÁ DEFINIDO es que para muchas arquitecturas, hacer que el estado del contenido definido sea una sobrecarga adicional, independientemente de cómo se defina el estándar.
En cuanto a lo que encontrarás allí, puedo adivinar en función de la experiencia;
En arquitecturas con doble (o múltiples) memorias intermedias, como la mayoría del hardware de video para PC de escritorio, es probable que encuentre los "otros" datos de la memoria intermedia. Sin embargo, esto no está garantizado, ya que no está en la especificación, si algunos de los beneficios de optimización extraños se beneficiarán de ellos, van a confundir los datos.
En arquitecturas en mosaico, puede encontrar los mismos datos que el último cuadro, algunos datos extrañamente confusos basados en el tamaño del mosaico, o casi cualquier otra cosa.
Entonces tienes algunas arquitecturas extrañas (como el NDS) que pueden darte casi cualquier cosa, ya que su definición del búfer no es exactamente lo que esperarías.
fuente