2011-07-27 10 views
5

Estoy tratando de encontrar una forma de banda elástica en OpenGL y Visual Studio C++. El problema con el que me estoy cruzando es que algunas computadoras Win 7 (es decir, mi jefe) no me permiten leer o dibujar en el buffer frontal, lo que mata el dibujo directo hacia él.How to Rubber band en OpenGl

glDrawBuffer(GL_FRONT); 
glEnable(GL_COLOR_LOGIC_OP); 
glLogicOp(GL_XOR); 
glPolygonMode(GL_FRONT, GL_LINE); 
glRecti(X0, Y0, X1, Y1); 
X1 = X; 
Y1 = Y; 
glRecti(X0, Y0, X1, Y1); 
*//Doesn't draw lines* 

o copiar el búfer de entrada a la memoria intermedia de atrás (volver a dibujar a que se necesitaría para largo) llamando a swapbuffers dibujo y luego swaping AGIAN

glReadBuffer(GL_FRONT); 
glDrawBuffer(GL_BACK); 
glCopyPixels(0, 0, Width, Height, GL_COLOR); 

glEnable(GL_COLOR_LOGIC_OP); 
glLogicOp(GL_XOR); 
glPolygonMode(GL_BACK, GL_LINE); 
SwapBuffers(hdc); 
glRecti(X0, Y0, X1, Y1); 
X1 = X; 
Y1 = Y; 
glRecti(X0, Y0, X1, Y1); 
SwapBuffers(hdc); 
*//Doesn't display original drawing* 

alguna idea?

+2

¿Hay algún error? Experimenta con glGetError(). –

+0

@Martinho no hay errores – kaiken

+1

¿Qué significa "banda de goma"? ¿Puedes agregar una explicación de lo que estás tratando de lograr con tu pregunta? –

Respuesta

1

lo haría así:

  • dibujar la escena a un buffer fuera de pantalla (espalda de amortiguamiento u otras)
  • glReadPixels utilizar para leer la imagen a la memoria principal
  • hacer una textura a cabo de la imagen en la memoria principal

Después de esto, para dibujar la imagen en la pantalla, puede dibujar un solo quad que cubra toda el área de renderizado, texturizada con la textura creada. De esta forma, no es necesario volver a renderizar la escena real al dibujar la imagen en pantalla.

implementaciones de OpenGL modernos también pueden prestar a la textura, sin necesidad de mover la imagen a la memoria principal y la espalda. Por otra parte, si renderizar la escena ya es lento, la diferencia de rendimiento aquí no será notable.

Cuestiones relacionadas