2011-07-27 5 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를 호출하고 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* 

어떤 아이디어를 swaping?

+2

오류가 있습니까? glGetError()로 실험하십시오. –

+0

@Martinho 오류가 없습니다 – kaiken

+1

"고무 밴드"는 무엇을 의미합니까? 질문에 대한 성취도에 대한 설명을 추가 할 수 있습니까? –

답변

1

나는 이런 식으로 할 거라고 :

  • 가 (백 버퍼 또는 다른) 오프 스크린 버퍼에 장면을 그려
  • 사용 glReadPixels는 메인 메모리
  • 에 이미지를 읽어 밖으로 텍스처를 만들기 위해 메인 메모리에있는 이미지의 이미지

이렇게하면 화면에 이미지를 그릴 때 생성 된 텍스처로 텍스처 된 전체 렌더링 영역을 덮는 단일 쿼드를 그릴 수 있습니다. 이렇게하면 이미지를 화면에 그릴 때 실제 장면을 다시 렌더링 할 필요가 없습니다.

최신 OpenGL 구현은 이미지를 주 메모리로 이동하거나 뒤로 이동할 필요없이 텍스처로 렌더링 할 수도 있습니다. 다시 말해, 장면 렌더링이 이미 느린 경우 성능 차이가 눈에 띄지 않습니다.