def paintGL(self): """Paint the scene.""" # pass if the framebuffer isn't complete yet or if not initialized if not (gl.glCheckFramebufferStatus(gl.GL_FRAMEBUFFER) == gl.GL_FRAMEBUFFER_COMPLETE and self.initialized and self.isVisible()): return # Set the viewport and clear the framebuffer gl.glViewport(*self.viewport) gl.glClear(gl.GL_COLOR_BUFFER_BIT) # Select the non-textured shader self.color_shader.use() self.globaldata.set_vertex_modifiers(VERTEX_IS_GLXY, False) self.arcs.draw() self.globaldata.set_vertex_modifiers(VERTEX_IS_METERS, False) self.protectedzone.draw(n_instances=self.n_aircraft) self.globaldata.set_vertex_modifiers(VERTEX_IS_SCREEN, True) self.ac_symbol.draw(n_instances=self.n_aircraft) self.globaldata.set_vertex_modifiers(VERTEX_IS_SCREEN, False) self.waypoints.bind() gl.glVertexAttrib3f(ATTRIB_COLOR, *lightblue2) self.waypoints.draw() self.airports.bind() gl.glVertexAttrib3f(ATTRIB_COLOR, *lightblue2) self.airports.draw() self.text_shader.use() self.font.use() self.font.set_char_size(self.wptlabels.char_size) self.font.set_block_size(self.wptlabels.block_size) self.wptlabels.bind() gl.glVertexAttrib3f(ATTRIB_COLOR, *lightblue3) self.wptlabels.draw(n_instances=self.waypoints.n_instances) self.font.set_char_size(self.aptlabels.char_size) self.font.set_block_size(self.aptlabels.block_size) self.aptlabels.bind() gl.glVertexAttrib3f(ATTRIB_COLOR, *lightblue3) self.aptlabels.draw(n_instances=self.airports.n_instances) self.font.set_char_size(self.aclabels.char_size) self.font.set_block_size(self.aclabels.block_size) self.aclabels.draw(n_instances=self.n_aircraft) self.color_shader.use() self.globaldata.set_vertex_modifiers(VERTEX_IS_GLXY, False) self.ownship.draw() self.mask.draw() self.edge.draw() self.globaldata.set_vertex_modifiers(VERTEX_IS_GLXY, True) self.ticks.draw() # Select the text shader self.text_shader.use() self.font.use() self.font.set_block_size((0, 0)) self.ticklbls.draw() self.globaldata.set_vertex_modifiers(VERTEX_IS_GLXY, False) self.spdlabel_text.draw() self.spdlabel_val.draw() # Unbind everything RenderObject.unbind_all() gl.glUseProgram(0)
def paintGL(self): """Paint the scene.""" # pass if the framebuffer isn't complete yet or if not initialized if not (gl.glCheckFramebufferStatus(gl.GL_FRAMEBUFFER) == gl.GL_FRAMEBUFFER_COMPLETE and self.initialized and self.isVisible()): return # Set the viewport and clear the framebuffer gl.glViewport(*self.viewport) gl.glClear(gl.GL_COLOR_BUFFER_BIT) # Send the (possibly) updated global uniforms to the buffer self.globaldata.set_vertex_scale_type(VERTEX_IS_LATLON) # --- DRAW THE MAP AND COASTLINES --------------------------------------------- # Map and coastlines: don't wrap around in the shader self.globaldata.enable_wrap(False) if self.show_map: # Select the texture shader self.texture_shader.use() # Draw map texture gl.glActiveTexture(gl.GL_TEXTURE0 + 0) gl.glBindTexture(gl.GL_TEXTURE_2D, self.map_texture) self.map.draw() # Select the non-textured shader self.color_shader.use() # Draw coastlines if self.show_coast: if self.wrapdir == 0: # Normal case, no wrap around self.coastlines.draw(first_vertex=0, vertex_count=self.vcount_coast) else: self.coastlines.bind() wrapindex = np.uint32(self.coastindices[int(self.wraplon)+180]) if self.wrapdir == 1: gl.glVertexAttrib1f(ATTRIB_LON, 360.0) self.coastlines.draw(first_vertex=0, vertex_count=wrapindex) gl.glVertexAttrib1f(ATTRIB_LON, 0.0) self.coastlines.draw(first_vertex=wrapindex, vertex_count=self.vcount_coast - wrapindex) else: gl.glVertexAttrib1f(ATTRIB_LON, -360.0) self.coastlines.draw(first_vertex=wrapindex, vertex_count=self.vcount_coast - wrapindex) gl.glVertexAttrib1f(ATTRIB_LON, 0.0) self.coastlines.draw(first_vertex=0, vertex_count=wrapindex) # --- DRAW PREVIEW SHAPE (WHEN AVAILABLE) ----------------------------- self.polyprev.draw() # --- DRAW CUSTOM SHAPES (WHEN AVAILABLE) ----------------------------- for i in self.polys.iteritems(): i[1].draw() # --- DRAW THE SELECTED AIRCRAFT ROUTE (WHEN AVAILABLE) --------------- if self.show_traf: self.route.draw() if self.show_traf: self.cpalines.draw() # --- DRAW AIRPORT DETAILS (RUNWAYS, TAXIWAYS, PAVEMENTS) ------------- self.runways.draw() if self.zoom >= 1.0: for idx in self.apt_inrange: self.taxiways.draw(first_vertex=idx[0], vertex_count=idx[1]) self.pavement.draw(first_vertex=idx[2], vertex_count=idx[3]) # --- DRAW THE INSTANCED AIRCRAFT SHAPES ------------------------------ # update wrap longitude and direction for the instanced objects self.globaldata.enable_wrap(True) # PZ circles only when they are bigger than the A/C symbols if self.naircraft > 0 and self.show_traf and self.show_pz and self.zoom >= 0.15: self.globaldata.set_vertex_scale_type(VERTEX_IS_METERS) self.protectedzone.draw(n_instances=self.naircraft) self.globaldata.set_vertex_scale_type(VERTEX_IS_SCREEN) # Draw traffic symbols if self.naircraft > 0 and self.show_traf: self.ac_symbol.draw(n_instances=self.naircraft) if self.zoom >= 0.5: nairports = self.nairports[2] elif self.zoom >= 0.25: nairports = self.nairports[1] else: nairports = self.nairports[0] if self.zoom >= 3: nwaypoints = self.nwaypoints else: nwaypoints = self.nnavaids # Draw waypoint symbols if self.show_wpt: self.waypoints.bind() gl.glVertexAttrib3f(ATTRIB_COLOR, *lightblue3) self.waypoints.draw(n_instances=nwaypoints) # Draw airport symbols if self.show_apt: self.airports.bind() gl.glVertexAttrib3f(ATTRIB_COLOR, *lightblue3) self.airports.draw(n_instances=nairports) if self.do_text: self.text_shader.use() self.font.use() if self.show_apt: self.font.set_char_size(self.aptlabels.char_size) self.font.set_block_size(self.aptlabels.block_size) self.aptlabels.bind() gl.glVertexAttrib3f(ATTRIB_COLOR, *lightblue4) self.aptlabels.draw(n_instances=nairports) if self.show_wpt: self.font.set_char_size(self.wptlabels.char_size) self.font.set_block_size(self.wptlabels.block_size) self.wptlabels.bind() gl.glVertexAttrib3f(ATTRIB_COLOR, *lightblue4) self.wptlabels.draw(n_instances=nwaypoints) if self.naircraft > 0 and self.show_traf and self.show_lbl: self.font.set_char_size(self.aclabels.char_size) self.font.set_block_size(self.aclabels.block_size) self.aclabels.draw(n_instances=self.naircraft) if self.show_traf and self.route.vertex_count > 1: gl.glVertexAttrib3f(ATTRIB_COLOR, *magenta) self.routelbl.draw(n_instances=self.route.vertex_count-1) # SSD if self.ssd_all or len(self.ssd_ownship) > 0: self.ssd_shader.use() gl.glUniform3f(self.ssd_shader.loc_vlimits, 1e4, 4e4, 200.0) if self.ssd_all: self.ssd.draw(first_vertex=0, vertex_count=self.naircraft, n_instances=self.naircraft) else: self.ssd.draw(first_vertex=self.ssd_ownship[-1], vertex_count=1, n_instances=self.naircraft) # Unbind everything RenderObject.unbind_all() gl.glUseProgram(0)