def draw_shadow_lem(self): with push_attrib(gl.GL_STENCIL_BUFFER_BIT | gl.GL_COLOR_BUFFER_BIT): gl.glStencilFunc(gl.GL_NOTEQUAL, 1, 1) gl.glStencilOp(gl.GL_KEEP, gl.GL_KEEP, gl.GL_REPLACE) gl.glEnable(gl.GL_STENCIL_TEST) gl.glEnable(gl.GL_BLEND) gl.glBlendFunc(gl.GL_ZERO, gl.GL_CONSTANT_ALPHA) gl.glBlendColor(1.0, 1.0, 1.0, 0.3) with push_matrix(gl.GL_MODELVIEW): gl.glMultTransposeMatrixf( float_ctype_array(1.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0)) self.draw_lem_model()
def draw_shadow_lem (self): with push_attrib(gl.GL_STENCIL_BUFFER_BIT | gl.GL_COLOR_BUFFER_BIT): gl.glStencilFunc(gl.GL_NOTEQUAL, 1, 1) gl.glStencilOp(gl.GL_KEEP, gl.GL_KEEP, gl.GL_REPLACE) gl.glEnable(gl.GL_STENCIL_TEST) gl.glEnable(gl.GL_BLEND) gl.glBlendFunc(gl.GL_ZERO, gl.GL_CONSTANT_ALPHA) gl.glBlendColor(1.0, 1.0, 1.0, 0.3) with push_matrix(gl.GL_MODELVIEW): gl.glMultTransposeMatrixf(float_ctype_array(1.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0)) self.draw_lem_model()
def draw(self): glPushMatrix() glPushAttrib(GL_STENCIL_BUFFER_BIT) glClear(GL_STENCIL_BUFFER_BIT) glTranslatef(self.parent.x, self.parent.y, 0) glDisable(GL_TEXTURE_2D) loader = self.loader if loader.shape == LINE_SHAPE: glEnable(GL_LINE_SMOOTH) glEnable(GL_POINT_SMOOTH) glLineWidth(loader.borderSize) glPointSize(loader.borderSize) self.vertex.draw(GL_LINES) self.vertex.draw(GL_POINTS) elif loader.shape == RECTANGLE_SHAPE: width = self.parent.width height = self.parent.height if loader.fillType != NONE_FILL: # for counters if self.counter_stencil: glEnable(GL_STENCIL_TEST) glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) glStencilFunc(GL_ALWAYS, 1, 1) glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE) self.counter_stencil.draw(GL_QUADS) glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) glStencilFunc(GL_EQUAL, 1, 1) self.draw_rectangle() glDisable(GL_STENCIL_TEST) else: self.draw_rectangle() if self.border is not None: self.border.draw(GL_QUADS) elif loader.shape == ELLIPSE_SHAPE: if loader.fillType != NONE_FILL: glEnable(GL_STENCIL_TEST) glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) glStencilFunc(GL_ALWAYS, 1, 1) glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE) self.stencil.draw(GL_TRIANGLES) glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) glStencilFunc(GL_EQUAL, 1, 1) self.draw_rectangle(True) glDisable(GL_STENCIL_TEST) if self.border: self.border.draw(GL_QUADS) glPopAttrib() glPopMatrix()
def draw_rectangle(self, ellipse=False): loader = self.loader if loader.fillType == MOTIF_FILL: if ellipse: self.motif_batch.draw() else: glEnable(GL_STENCIL_TEST) glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) glStencilFunc(GL_ALWAYS, 1, 1) glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE) self.motif_stencil.draw(GL_QUADS) glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE) glStencilFunc(GL_EQUAL, 1, 1) self.motif_batch.draw() else: self.vertex.draw(GL_QUADS)
def enable(self): gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT | gl.GL_STENCIL_BUFFER_BIT) gl.glDisable(gl.GL_DEPTH_TEST) gl.glColorMask(gl.GL_FALSE, gl.GL_FALSE, gl.GL_FALSE, gl.GL_FALSE) gl.glEnable(gl.GL_STENCIL_TEST) gl.glStencilOp(gl.GL_REPLACE, gl.GL_REPLACE, gl.GL_REPLACE) gl.glStencilFunc(gl.GL_ALWAYS, 1, 0xffffffff) gl.glEnable(gl.GL_BLEND) gl.glBlendFunc(Blend.SRC_ALPHA, Blend.ONE_MINUS_SRC_ALPHA) self.ground.draw() gl.glColorMask(gl.GL_TRUE, gl.GL_TRUE, gl.GL_TRUE, gl.GL_TRUE) gl.glEnable(gl.GL_DEPTH_TEST) gl.glStencilFunc(gl.GL_EQUAL, 1, 0xffffffff) gl.glStencilOp(gl.GL_KEEP, gl.GL_KEEP, gl.GL_KEEP) gl.glPushMatrix() gl.glCullFace(gl.GL_FRONT) gl.glEnable(gl.GL_NORMALIZE) gl.glEnable(gl.GL_BLEND) gl.glBlendFunc(Blend.SRC_ALPHA, Blend.ONE_MINUS_SRC_ALPHA) self.camera.render(lights=self.lights, effect_pass=1, before_render=self._before_visible) gl.glDisable(gl.GL_NORMALIZE) gl.glCullFace(gl.GL_BACK) gl.glPopMatrix() gl.glDisable(gl.GL_STENCIL_TEST) gl.glEnable(gl.GL_BLEND) gl.glBlendFunc(Blend.SRC_ALPHA, Blend.ONE_MINUS_SRC_ALPHA) self.ground.draw()