2010-06-11 55 views
10

¿Es posible no borrar toda la pantalla cuando se usa la función glClear()? Necesito borrar solo una parte de la pantalla para ahorrar algo de tiempo de renderizado, de lo contrario tendría que volver a dibujar la mitad de la pantalla en cada fotograma, incluso si no sucede nada en la otra mitad.OpenGL: ¿Cómo borrar solo una parte de la pantalla?

Por supuesto, esto debe hacerse tan rápido (o más rápido) como el glClear() es ahora.

+0

Sólo una idea: ¿Podría definir el área de visualización a la mitad de la pantalla? –

+1

@chris_l: viewport no afecta a Borrar. – Bahbar

Respuesta

10

Es posible que desee ver en glScissor. De la documentación:

Mientras se habilita la prueba de tijera, solo los píxeles que se encuentran dentro de la caja de tijeras pueden modificarse mediante comandos de dibujo.

+4

y específicamente, de la documentación de Clear: [...], la prueba de tijera, [...] afecta el funcionamiento de glClear. +1. – Bahbar

0

Dibuja un quad gigante :) Aplica esto a solo la mitad de tu pantalla.

http://www.opengl.org/resources/faq/technical/transformations.htm#tran0090

+1

¿No está cuadrando el quad un poco demasiado lento para esto? – Newbie

+0

@Newbie ¿Obtuvieron medidas para mostrar que un claro de tijera es más rápido que un cuadrangular? Esperaría que dibujar fuera la ruta principal optimizada. Esperaría que tijera clara fuera un caso de esquina lejos en una tierra hipotética. No estoy diciendo que dibujar sea más rápido tampoco, por cierto. – doug65536

1

Para borrar solo una región rectangular específica, habilite ScissorTest y llame al Clear. Una vez habilitado, solo los píxeles dentro de la caja de tijera se verán afectados por los comandos de dibujo, por lo tanto, desactive ScissorTest cuando necesite modificar el área exterior nuevamente.

OpenTK ejemplo:

GL.Enable (EnableCap.ScissorTest); 
GL.Scissor (ViewportX, ViewportY, ViewportWidth, ViewportHeight); 
GL.Clear (ClearBufferMask.ColorBufferBit); 
GL.Disable (EnableCap.ScissorTest); 
Cuestiones relacionadas