2012-02-16 2 views
0

OpenGL 그리기를 창의 일부로 제한하려고합니다. 그것을하기 위해 GL_STENCIL_TEST 옵션을 사용하려고합니다.glClear (GL_STENCIL_BUFFER_BIT)를 제거하는 방법

// Enable stencil and clear the stencil buffer 
glClear(GL_STENCIL_BUFFER_BIT); 
glEnable(GL_STENCIL_TEST); 

// Enable func and Op so drawing will effect the stencil buffer 
glStencilFunc(GL_NEVER, 0x0, 0x0); 
glStencilOp(GL_INCR, GL_INCR, GL_INCR); 

// Draw a rect to the stencil 
DrawSolidRect(rectDrawArea); 

// Enable func and Op so drawing will not effect the stencil buffer 
// but will only effect places where the stencil was drawn to in the previous step. 
glStencilFunc(GL_EQUAL, 0x1, 0x1); 
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); 

문제는 glClear (GL_STENCIL_BUFFER_BIT) 함수는 매우 시간이 소모 인 것입니다, 나는 초당 25 프레임으로 그리기하고 있기 때문에, 정말 응용 프로그램 속도가 느려집니다 : 여기 내 코드입니다.

이 기능을 제거하려고 시도했습니다. 느린 문제는 해결되었지만 응용 프로그램을 초기화하면 깜박임이 발생합니다. 약 10 초 동안. 사라지고 잘 작동합니다.

깜박임이 왜 나는지 또는 다른 기능을 사용하면 시간이 오래 걸릴 것이라고 제안 할 수 있습니까?

답변

0

직사각형 클립 영역을 사용하는 경우 glScissor를 사용하는 것이 훨씬 쉽고 빠릅니다. http://www.opengl.org/sdk/docs/man/xhtml/glScissor.xml

위의 링크에서 설명한 것처럼 가위 테스트를 사용하려면 glEnable (GL_SCISSOR_TEST)을 호출하십시오.

감사합니다. @datenwolf

+0

뷰포트가 잘리지 않습니다. 뷰포트 외부의 그리기 작업은 정의되지 않으며 뷰포트 외부에서 사물이 변경 될 수 있습니다. 추가 가위 (glScissor 및 glEnable (GL_SCISSOR_TEST))가 필요합니다. – datenwolf

+0

아, 네 말이 맞아. 내 대답을 편집하고 그 정보를 추가하겠습니다. 감사! – Ani

+0

그래, 나도 알아,하지만 내가 가지고 있지 않은 Windows 좌표에서 작동하기 때문에 나는 SCISSOR에 문제가있다 :) –