0

I am try to Limit OpenGL draw to part of the window. In order to do it I am trying to use GL_STENCIL_TEST option. Here is my code:

// 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);

The problem is that glClear(GL_STENCIL_BUFFER_BIT) function is very time consuming, and since I am drawing with 25 fps, it really slows down the application.

I tried to remove this function - this solves the slowness problem but it causes flickering when I initialize the application - For about 10 seconds. Than it disappears and works ok.

Can someone suggest why the flickering is or what other function may I use that not so time-consuming?

genpfault
  • 51,148
  • 11
  • 85
  • 139
Iron-Eagle
  • 1,707
  • 2
  • 17
  • 34

1 Answers1

0

If you're using rectangular clip regions, it's probably MUCH easier and faster to use glScissor. http://www.opengl.org/sdk/docs/man/xhtml/glScissor.xml

As noted in the link above, also call glEnable(GL_SCISSOR_TEST) to enable scissor testing.

Thanks to @datenwolf

Ani
  • 10,826
  • 3
  • 27
  • 46
  • The viewport doesn't clip. Drawing operations outside the viewport are undefined and things may be changed outside the viewport. You need an additional scissor (glScissor and glEnable(GL_SCISSOR_TEST)). – datenwolf Feb 17 '12 at 00:56
  • Ah, you're right. I'll edit my answer and add that info. Thanks! – Ani Feb 17 '12 at 03:46
  • Yeah, I know about this, but I have problem with SCISSOR, since it works on Windows coordinates, which I do not have :) – Iron-Eagle Feb 19 '12 at 11:47
  • Couldn't you perform a projection to get them? – Ani Feb 19 '12 at 15:03
  • See this post and @erjot's answer. http://stackoverflow.com/questions/3792481/how-to-get-screen-coordinates-from-a-3d-point-opengl – Ani Feb 20 '12 at 15:21