2011-07-27 113 views
5

我想找到一种方法来在OpenGL和Visual Studio C++橡皮筋。我遇到的问题是一些Win 7电脑(即我的老板)不会让我读取或绘制到前端缓冲区,从而直接杀死绘图。如何在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* 

或复制前缓冲区到后台缓冲区(要重新绘制它会采取长)调用swapbuffers绘图,然后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* 

什么想法?

+2

是否有任何错误?请试用glGetError()。 –

+0

@Martinho没有错误 – kaiken

+1

“橡皮筋”是什么意思?你能否给你的问题添加一个解释,说明你正在试图完成什么? –

回答

1

我会做这样的:

  • 绘制场景到离屏缓冲区(后缓冲器或其他)
  • 使用glReadPixels读取图像到主内存
  • 做出来的质感主存储器中的图像

之后,要在屏幕上绘制图像,可以绘制一个覆盖整个渲染区域的单个四边形,并使用创建的纹理进行纹理处理。这样,当将图像绘制到屏幕上时,不需要重新渲染实际场景。

现代OpenGL实现也可以渲染到纹理,而不需要将图像移动到主内存并返回。再说一遍,如果渲染场景已经很慢,那么这里的性能差异将不会引人注目。