2011-07-27 109 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實現也可以渲染到紋理,而不需要將圖像移動到主內存並返回。再說一遍,如果渲染場景已經很慢,那麼這裏的性能差異將不會引人注目。