Source code for glooey.drawing.stencil

#!/usr/bin/env python3

from pyglet.gl import *
from pyglet.graphics import Group, OrderedGroup
from glooey.helpers import *

[docs]class StencilGroup(Group):
[docs] def __init__(self, parent=None): Group.__init__(self, parent)
[docs] def set_state(self): glEnable(GL_STENCIL_TEST) glClear(GL_DEPTH_BUFFER_BIT) glClear(GL_STENCIL_BUFFER_BIT)
[docs] def unset_state(self): glDisable(GL_STENCIL_TEST)
[docs]class StencilMask(OrderedGroup):
[docs] def __init__(self, parent=None, order=0): super().__init__(order, parent)
[docs] def set_state(self): # Disable writing the to color or depth buffers. glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) glDepthMask(GL_FALSE) glStencilFunc(GL_NEVER, 1, 0xFF) glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP) glStencilMask(0xFF)
[docs] def unset_state(self): glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) glDepthMask(GL_TRUE);
[docs]class WhereStencilIs(OrderedGroup):
[docs] def __init__(self, parent=None, order=1): super().__init__(order, parent)
[docs] def set_state(self): glStencilMask(0x00) glStencilFunc(GL_EQUAL, 1, 0xFF)
[docs] def unset_state(self): pass
[docs]class WhereStencilIsnt(OrderedGroup):
[docs] def __init__(self, parent=None, order=1): super().__init__(order, parent)
[docs] def set_state(self): glStencilMask(0x00); glStencilFunc(GL_EQUAL, 0, 0xFF)
[docs] def unset_state(self): pass
[docs]class ScissorGroup(Group):
[docs] def __init__(self, rect=None, parent=None): super().__init__(parent) self.rect = rect
[docs] def set_state(self): glPushAttrib(GL_ENABLE_BIT) glEnable(GL_SCISSOR_TEST) glScissor( int(self.rect.left), int(self.rect.bottom), int(self.rect.width), int(self.rect.height), )
[docs] def unset_state(self): glPopAttrib()