def draw_texture(x=0, y=0, w=30, h=10, texname=texname): # function to draw a texture bgl.glDisable(bgl.GL_DEPTH_TEST) act_tex = bgl.Buffer(bgl.GL_INT, 1) bgl.glGetIntegerv(bgl.GL_TEXTURE_2D, act_tex) bgl.glEnable(bgl.GL_TEXTURE_2D) bgl.glActiveTexture(bgl.GL_TEXTURE0) bgl.glTexEnvf(bgl.GL_TEXTURE_ENV, bgl.GL_TEXTURE_ENV_MODE, bgl.GL_REPLACE) bgl.glBindTexture(bgl.GL_TEXTURE_2D, texname) texco = [(0, 1), (1, 1), (1, 0), (0, 0)] verco = [(x, y), (x + w, y), (x + w, y - h), (x, y - h)] bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_FILL) bgl.glBegin(bgl.GL_QUADS) for i in range(4): bgl.glTexCoord3f(texco[i][0], texco[i][1], 0.0) bgl.glVertex2f(verco[i][0], verco[i][1]) bgl.glEnd() # restoring settings bgl.glBindTexture(bgl.GL_TEXTURE_2D, act_tex[0]) bgl.glDisable(bgl.GL_TEXTURE_2D)
def draw_faces(context, args): geom, config = args if config.display_faces: if config.draw_gl_wireframe: bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_LINE) if config.shade == "flat": draw_uniform('TRIS', geom.verts, geom.faces, config.face4f) elif config.shade == "facet": draw_smooth(geom.facet_verts, geom.facet_verts_vcols) elif config.shade == "smooth": draw_smooth(geom.verts, geom.smooth_vcols, indices=geom.faces) elif config.shade == 'fragment': if config.draw_fragment_function: config.draw_fragment_function(context, args) else: draw_fragment(context, args) if config.draw_gl_wireframe: bgl.glPolygonMode(bgl.GL_FRONT, bgl.GL_FILL) if config.display_edges: draw_uniform('LINES', geom.verts, geom.edges, config.line4f, config.line_width) if config.display_verts: draw_uniform('POINTS', geom.verts, None, config.vcol, config.point_size)
def draw_faces(context, args): geom, config = args if config.draw_gl_polygonoffset: bgl.glDisable(bgl.GL_POLYGON_OFFSET_FILL) if config.display_edges: draw_lines_uniform(context, config, geom.verts, geom.edges, config.line4f, config.line_width) if config.display_faces: if config.draw_gl_wireframe: bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_LINE) if config.draw_gl_polygonoffset: bgl.glEnable(bgl.GL_POLYGON_OFFSET_FILL) bgl.glPolygonOffset(1.0, 1.0) if config.shade == "flat": draw_uniform('TRIS', geom.verts, geom.faces, config.face4f) elif config.shade == "facet": draw_smooth(geom.facet_verts, geom.facet_verts_vcols) elif config.shade == "smooth": draw_smooth(geom.verts, geom.smooth_vcols, indices=geom.faces) elif config.shade == 'fragment': if config.draw_fragment_function: config.draw_fragment_function(context, args) else: draw_fragment(context, args) if config.draw_gl_wireframe: bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_FILL) if config.display_verts: draw_uniform('POINTS', geom.verts, None, config.vcol, config.point_size) if config.draw_gl_polygonoffset: # or restore to the state found when entering this function. TODO! bgl.glDisable(bgl.GL_POLYGON_OFFSET_FILL)
def draw_faces_uniform(context, args): geom, config = args # print(geom.f_faces, config.shade) if config.draw_gl_wireframe: bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_LINE) if config.draw_gl_polygonoffset: bgl.glEnable(bgl.GL_POLYGON_OFFSET_FILL) bgl.glPolygonOffset(1.0, 1.0) if config.shade == "flat": draw_uniform('TRIS', geom.f_verts, geom.f_faces, config.face4f) elif config.shade == "facet": draw_smooth(geom.facet_verts, geom.facet_verts_vcols) elif config.shade == "smooth": draw_smooth(geom.f_verts, geom.smooth_vcols, indices=geom.f_faces) elif config.shade == 'normals': draw_smooth(geom.f_verts, geom.smooth_vnorms, indices=geom.f_faces) if config.draw_gl_wireframe: bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_FILL)
def draw_callback(self, op, context): # Force Stop if self.is_handler_list_empty(): self.unregister_handler() return bgl.glEnable(bgl.GL_BLEND) bgl.glEnable(bgl.GL_LINE_SMOOTH) bgl.glHint(bgl.GL_LINE_SMOOTH_HINT, bgl.GL_NICEST) bgl.glBlendFunc(bgl.GL_SRC_ALPHA, bgl.GL_ONE_MINUS_SRC_ALPHA) bgl.glEnable(bgl.GL_DEPTH_TEST) bgl.glEnable(bgl.GL_POLYGON_OFFSET_FILL) bgl.glPolygonOffset(1.0, 1.0) bgl.glColorMask(bgl.GL_FALSE, bgl.GL_FALSE, bgl.GL_FALSE, bgl.GL_FALSE) bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_FILL) self.fill_batch.draw(self.fill_shader) bgl.glColorMask(bgl.GL_TRUE, bgl.GL_TRUE, bgl.GL_TRUE, bgl.GL_TRUE) bgl.glDisable(bgl.GL_POLYGON_OFFSET_FILL) bgl.glDepthMask(bgl.GL_FALSE) bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_LINE) self.line_batch.draw(self.line_shader) bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_FILL) bgl.glDepthMask(bgl.GL_TRUE) bgl.glDisable(bgl.GL_DEPTH_TEST)
def draw_callback(self, op, context): if not self.is_visible(): return # Force Stop wireframe_image = find_bpy_image_by_name(Config.coloring_texture_name) if self.is_handler_list_empty() or \ not self._check_coloring_image(wireframe_image): self.unregister_handler() return bgl.glEnable(bgl.GL_BLEND) bgl.glEnable(bgl.GL_LINE_SMOOTH) bgl.glHint(bgl.GL_LINE_SMOOTH_HINT, bgl.GL_NICEST) bgl.glBlendFunc(bgl.GL_SRC_ALPHA, bgl.GL_ONE_MINUS_SRC_ALPHA) bgl.glEnable(bgl.GL_DEPTH_TEST) bgl.glEnable(bgl.GL_POLYGON_OFFSET_FILL) bgl.glPolygonOffset(1.0, 1.0) bgl.glColorMask(bgl.GL_FALSE, bgl.GL_FALSE, bgl.GL_FALSE, bgl.GL_FALSE) bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_FILL) self.fill_batch.draw(self.fill_shader) bgl.glColorMask(bgl.GL_TRUE, bgl.GL_TRUE, bgl.GL_TRUE, bgl.GL_TRUE) bgl.glDisable(bgl.GL_POLYGON_OFFSET_FILL) bgl.glDepthMask(bgl.GL_FALSE) bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_LINE) bgl.glEnable(bgl.GL_DEPTH_TEST) if not self._use_simple_shader: # coloring_image.bindcode should not be zero # if we don't want to destroy video driver in Blender if not wireframe_image or wireframe_image.bindcode == 0: self.switch_to_simple_shader() else: bgl.glActiveTexture(bgl.GL_TEXTURE0) bgl.glBindTexture(bgl.GL_TEXTURE_2D, wireframe_image.bindcode) self.line_shader.bind() self.line_shader.uniform_int('image', 0) self.line_shader.uniform_float('opacity', self._opacity) self.line_batch.draw(self.line_shader) if self._use_simple_shader: self.simple_line_shader.bind() self.simple_line_shader.uniform_float( 'color', ((*self._colors[0][:3], self._opacity))) self.simple_line_batch.draw(self.simple_line_shader) bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_FILL) bgl.glDepthMask(bgl.GL_TRUE) bgl.glDisable(bgl.GL_DEPTH_TEST)
def view_3d_geom(context, args): """ draws the batches """ geom, config = args bgl.glEnable(bgl.GL_BLEND) if config.draw_polys: if config.draw_gl_wireframe: bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_LINE) if config.draw_gl_polygonoffset: bgl.glEnable(bgl.GL_POLYGON_OFFSET_FILL) bgl.glPolygonOffset(1.0, 1.0) if config.shade_mode == 'fragment': p_batch = batch_for_shader(config.p_shader, 'TRIS', {"position": geom.p_vertices}, indices=geom.p_indices) config.p_shader.bind() matrix = context.region_data.perspective_matrix config.p_shader.uniform_float("viewProjectionMatrix", matrix) config.p_shader.uniform_float("brightness", 0.5) else: p_batch = batch_for_shader(config.p_shader, 'TRIS', { "pos": geom.p_vertices, "color": geom.p_vertex_colors }, indices=geom.p_indices) config.p_shader.bind() p_batch.draw(config.p_shader) if config.draw_gl_polygonoffset: bgl.glDisable(bgl.GL_POLYGON_OFFSET_FILL) if config.draw_gl_wireframe: bgl.glPolygonMode(bgl.GL_FRONT_AND_BACK, bgl.GL_FILL) if config.draw_edges: bgl.glLineWidth(config.line_width) if config.draw_dashed: shader = config.dashed_shader batch = batch_for_shader(shader, 'LINES', {"inPos": geom.e_vertices}, indices=geom.e_indices) shader.bind() matrix = context.region_data.perspective_matrix shader.uniform_float("u_mvp", matrix) shader.uniform_float("u_resolution", config.u_resolution) shader.uniform_float("u_dashSize", config.u_dash_size) shader.uniform_float("u_gapSize", config.u_gap_size) shader.uniform_float("m_color", geom.e_vertex_colors[0]) batch.draw(shader) else: e_batch = batch_for_shader(config.e_shader, 'LINES', { "pos": geom.e_vertices, "color": geom.e_vertex_colors }, indices=geom.e_indices) config.e_shader.bind() e_batch.draw(config.e_shader) bgl.glLineWidth(1) if config.draw_verts: bgl.glPointSize(config.point_size) v_batch = batch_for_shader(config.v_shader, 'POINTS', { "pos": geom.v_vertices, "color": geom.points_color }) config.v_shader.bind() v_batch.draw(config.v_shader) bgl.glPointSize(1) bgl.glEnable(bgl.GL_BLEND)