def draw_simple(text, xyz): fontid = FontManager._last_fontid blf.position(fontid, *xyz) # blf.draw overwrites blend settings! store so we can restore bgl.glGetBooleanv(bgl.GL_BLEND_SRC_RGB, FontManager._pre_src_rgb) bgl.glGetIntegerv(bgl.GL_BLEND_DST_RGB, FontManager._pre_dst_rgb) bgl.glGetBooleanv(bgl.GL_BLEND_SRC_ALPHA, FontManager._pre_src_a) bgl.glGetIntegerv(bgl.GL_BLEND_DST_ALPHA, FontManager._pre_dst_a) bgl.glGetIntegerv(bgl.GL_BLEND, FontManager._pre_blend) ret = blf.draw(fontid, text) # restore blend settings! if FontManager._pre_blend[0]: bgl.glEnable(bgl.GL_BLEND) else: bgl.glDisable(bgl.GL_BLEND) bgl.glBlendFunc(FontManager._pre_src_rgb[0], FontManager._pre_dst_rgb[0]) #bgl.glBlendEquationSeparate(FontManager._pre_src_rgb[0], FontManager._pre_dst_rgb[0], FontManager._pre_src_a[0], FontManager._pre_dst_a[0]) return ret
def __init__(self, parent, configuration): base.Base.__init__(self, parent) try: if configuration['viewport'] is not None: self._viewport = configuration['viewport'] except: pass self._focus = configuration['keep_focus'] if self._focus: self.logger.info('Focus forced on this screen') buffers = configuration['graphic_buffer'] self._buffers = {} self._users = [] for information in buffers: user = self.BlenderVR.getUserByName(information['user']) if user not in self._users: self._users.append(user) if information['eye'] == 'left': eye = -1.0 elif information['eye'] == 'right': eye = 1.0 else: eye = 0 self._buffers[information['buffer']] = {'user': user, 'eye': eye} stereo_mode = bgl.Buffer(bgl.GL_BYTE, 1) bgl.glGetBooleanv(bgl.GL_STEREO, stereo_mode) if ((not 'left' in self._buffers) or (not 'right' in self._buffers)) \ and (stereo_mode == 1): raise exceptions.VirtualEnvironment('Stereo window but buffer ' 'is missing !') if (not 'middle' in self._buffers) and (stereo_mode == 0): raise exceptions.VirtualEnvironment('Monoscopic window but ' '"middle" buffer is missing !')
def __init__(self, parent, configuration): super(Screen, self).__init__(parent) if 'viewport' in configuration: self._viewport = configuration['viewport'] corners = configuration['corners'] self._buffers = {} for bufferName in configuration['buffers']: user = self.getBlenderCave().getUserByName(configuration['buffers'][bufferName]['user']) self._buffers[bufferName] = {'user' : user, 'eye': configuration['buffers'][bufferName]['eye']} stereo_mode = bgl.Buffer(bgl.GL_BYTE, 1) bgl.glGetBooleanv(bgl.GL_STEREO, stereo_mode) if ((not 'left' in self._buffers) or (not 'right' in self._buffers)) and (stereo_mode == 1): raise blender_cave.exceptions.VirtualEnvironment('Stereo window but buffer is missing !') if (not 'middle' in self._buffers) and (stereo_mode == 0): raise blender_cave.exceptions.VirtualEnvironment('Monoscopic window but "middle" buffer is missing !') # First, check corners validity ! XVector = corners['topRightCorner'] - corners['topLeftCorner'] if XVector.length < (corners['topRightCorner'][0] / 100000): raise blender_cave.exceptions.VirtualEnvironment("top right and left corners are same points !") return YVector = corners['topRightCorner'] - corners['bottomRightCorner'] if YVector.length < (corners['topRightCorner'][0] / 100000): raise blender_cave.exceptions.VirtualEnvironment("top and bottom right corners are same points !") return ZVector = XVector.cross(YVector) if ZVector.length < (corners['topRightCorner'][0] / 100000): raise blender_cave.exceptions.VirtualEnvironment("Three corners are not perpendicular !") return corners['bottomLeftCorner'] = corners['topLeftCorner'] - YVector Center = (corners['bottomLeftCorner'] + corners['topRightCorner']) / 2.0 XVector.normalize() YVector.normalize() ZVector.normalize() self._fromVehicleToLocalScreen = mathutils.Matrix() self._fromVehicleToLocalScreen[0][0] = XVector[0] self._fromVehicleToLocalScreen[1][0] = XVector[1] self._fromVehicleToLocalScreen[2][0] = XVector[2] self._fromVehicleToLocalScreen[0][1] = YVector[0] self._fromVehicleToLocalScreen[1][1] = YVector[1] self._fromVehicleToLocalScreen[2][1] = YVector[2] self._fromVehicleToLocalScreen[0][2] = ZVector[0] self._fromVehicleToLocalScreen[1][2] = ZVector[1] self._fromVehicleToLocalScreen[2][2] = ZVector[2] self._fromVehicleToLocalScreen.invert() self._fromVehicleToLocalScreen = self._fromVehicleToLocalScreen * mathutils.Matrix.Translation((-Center)) self._cornersLocally = {} for key, value in corners.items(): corners[key].resize_4d() self._cornersLocally[key] = self._fromVehicleToLocalScreen * corners[key] self._windowCoordinates = {} self._windowCoordinates['left' ] = self._cornersLocally['topLeftCorner'][0] self._windowCoordinates['right' ] = self._cornersLocally['topRightCorner'][0] self._windowCoordinates['top' ] = self._cornersLocally['topRightCorner'][1] self._windowCoordinates['bottom'] = self._cornersLocally['bottomRightCorner'][1] # Update frame_type of the scene, otherwise, there will be black borders ... scene = bge.logic.getCurrentScene() scene.frame_type="scale" self._focus = configuration['focus'] if self._focus: self.getLogger().info('Focus forced on this screen')
def __init__(self, parent, configuration): super(Screen, self).__init__(parent) if 'viewport' in configuration: self._viewport = configuration['viewport'] corners = configuration['corners'] self._buffers = {} for bufferName in configuration['buffers']: user = self.getBlenderCave().getUserByName( configuration['buffers'][bufferName]['user']) self._buffers[bufferName] = { 'user': user, 'eye': configuration['buffers'][bufferName]['eye'] } stereo_mode = bgl.Buffer(bgl.GL_BYTE, 1) bgl.glGetBooleanv(bgl.GL_STEREO, stereo_mode) if ((not 'left' in self._buffers) or (not 'right' in self._buffers)) and (stereo_mode == 1): raise blender_cave.exceptions.VirtualEnvironment( 'Stereo window but buffer is missing !') if (not 'middle' in self._buffers) and (stereo_mode == 0): raise blender_cave.exceptions.VirtualEnvironment( 'Monoscopic window but "middle" buffer is missing !') # First, check corners validity ! XVector = corners['topRightCorner'] - corners['topLeftCorner'] if XVector.length < (corners['topRightCorner'][0] / 100000): raise blender_cave.exceptions.VirtualEnvironment( "top right and left corners are same points !") return YVector = corners['topRightCorner'] - corners['bottomRightCorner'] if YVector.length < (corners['topRightCorner'][0] / 100000): raise blender_cave.exceptions.VirtualEnvironment( "top and bottom right corners are same points !") return ZVector = XVector.cross(YVector) if ZVector.length < (corners['topRightCorner'][0] / 100000): raise blender_cave.exceptions.VirtualEnvironment( "Three corners are not perpendicular !") return corners['bottomLeftCorner'] = corners['topLeftCorner'] - YVector Center = (corners['bottomLeftCorner'] + corners['topRightCorner']) / 2.0 XVector.normalize() YVector.normalize() ZVector.normalize() self._fromVehicleToLocalScreen = mathutils.Matrix() self._fromVehicleToLocalScreen[0][0] = XVector[0] self._fromVehicleToLocalScreen[1][0] = XVector[1] self._fromVehicleToLocalScreen[2][0] = XVector[2] self._fromVehicleToLocalScreen[0][1] = YVector[0] self._fromVehicleToLocalScreen[1][1] = YVector[1] self._fromVehicleToLocalScreen[2][1] = YVector[2] self._fromVehicleToLocalScreen[0][2] = ZVector[0] self._fromVehicleToLocalScreen[1][2] = ZVector[1] self._fromVehicleToLocalScreen[2][2] = ZVector[2] self._fromVehicleToLocalScreen.invert() self._fromVehicleToLocalScreen = self._fromVehicleToLocalScreen * mathutils.Matrix.Translation( (-Center)) self._cornersLocally = {} for key, value in corners.items(): corners[key].resize_4d() self._cornersLocally[ key] = self._fromVehicleToLocalScreen * corners[key] self._windowCoordinates = {} self._windowCoordinates['left'] = self._cornersLocally[ 'topLeftCorner'][0] self._windowCoordinates['right'] = self._cornersLocally[ 'topRightCorner'][0] self._windowCoordinates['top'] = self._cornersLocally[ 'topRightCorner'][1] self._windowCoordinates['bottom'] = self._cornersLocally[ 'bottomRightCorner'][1] # Update frame_type of the scene, otherwise, there will be black borders ... scene = bge.logic.getCurrentScene() scene.frame_type = "scale" self._focus = configuration['focus'] if self._focus: self.getLogger().info('Focus forced on this screen')