def get_temporary(self, rendertarget_name, reference_rendertarget=None, scale=1.0): temp_rendertarget = None if rendertarget_name in self.temp_rendertargets: temp_rendertarget = self.temp_rendertargets[rendertarget_name] elif reference_rendertarget: rendertarget_datas = reference_rendertarget.get_save_data( get_image_data=False) # don't copy image data if 'data' in rendertarget_datas: rendertarget_datas.pop('data') rendertarget_datas['width'] = int(rendertarget_datas['width'] * scale) rendertarget_datas['height'] = int(rendertarget_datas['height'] * scale) rendertarget_type = rendertarget_datas['texture_type'] temp_rendertarget = rendertarget_type(name=rendertarget_name, **rendertarget_datas) if temp_rendertarget: self.temp_rendertargets[rendertarget_name] = temp_rendertarget # send rendertarget info to GUI self.core_manager.sendRenderTargetInfo(temp_rendertarget.name) if temp_rendertarget is None: logger.warn("Failed to get temporary %s render target." % rendertarget_name) return temp_rendertarget
def CreateUniformDataFromString(data_type, strValue=None): """ return converted data from string or default data """ try: if data_type == 'bool': return np.bool(strValue) if strValue else np.bool(False) elif data_type == 'float': # return float(strValue) if strValue else 0.0 return np.float32(strValue) if strValue else np.float32(0) elif data_type == 'int': # return int(strValue) if strValue else 0 return np.int32(strValue) if strValue else np.int32(0) elif data_type in ('vec2', 'vec3', 'vec4'): componentCount = int(data_type[-1]) if strValue is not None: vecValue = eval( strValue) if type(strValue) is str else strValue if len(vecValue) == componentCount: return np.array(vecValue, dtype=np.float32) else: logger.error( ValueError("%s need %d float members." % (data_type, componentCount))) raise ValueError else: return np.array([ 1.0, ] * componentCount, dtype=np.float32) elif data_type in ('mat2', 'mat3', 'mat4'): componentCount = int(data_type[-1]) if strValue is not None: vecValue = eval( strValue) if type(strValue) is str else strValue if len(vecValue) == componentCount: return np.array(vecValue, dtype=np.float32) else: logger.error( ValueError("%s need %d float members." % (data_type, componentCount))) raise ValueError else: return np.eye(componentCount, dtype=np.float32) elif data_type == 'sampler2D': texture = CoreManager.instance().resource_manager.getTexture( strValue or 'empty') return texture elif data_type == 'sampler2DMS': logger.warn('sampler2DMS need multisample texture.') return CoreManager.instance().resource_manager.getTexture('empty') elif data_type == 'sampler3D': return CoreManager.instance().resource_manager.getTexture( 'default_3d') elif data_type == 'samplerCube': texture = CoreManager.instance().resource_manager.getTexture( strValue or 'default_cube') return texture except ValueError: logger.error(traceback.format_exc()) return None
def bind_uniform_data(self, uniform_name, uniform_data, num=1, transpose=False): uniform = self.linked_uniform_map.get(uniform_name) if uniform: uniform[0].bind_uniform(uniform_data, num, transpose) else: logger.warn('%s material instance has no %s uniform variable.' % (self.name, uniform_name))
def create_uniform_buffers(self, uniforms): # create uniform buffers from source code active_texture_index = 0 for uniform_type, uniform_name in uniforms: uniform_buffer = CreateUniformBuffer(self.program, uniform_type, uniform_name) if uniform_buffer is not None: # Important : set texture binding index if issubclass(uniform_buffer.__class__, UniformTextureBase): uniform_buffer.set_texture_index(active_texture_index) active_texture_index += 1 self.uniform_buffers[uniform_name] = uniform_buffer else: logger.warn( "%s material has no %s uniform variable. (or maybe optimized by compiler.)" % (self.name, uniform_name)) return True
def bind_texture(self): if self.buffer == -1: logger.warn("%s texture is invalid." % self.name) return glBindTexture(self.target, self.buffer)
def generate_mipmap(self): if self.enable_mipmap: glBindTexture(self.target, self.buffer) glGenerateMipmap(self.target) else: logger.warn('%s disable to generate mipmap.' % self.name)
def nothing(cmd_enum, value): logger.warn("Nothing to do for %s(%d)" % (str(cmd_enum), cmd_enum.value))