Example #1
0
    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
Example #2
0
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))
Example #4
0
 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
Example #5
0
 def bind_texture(self):
     if self.buffer == -1:
         logger.warn("%s texture is invalid." % self.name)
         return
     glBindTexture(self.target, self.buffer)
Example #6
0
 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)
Example #7
0
 def nothing(cmd_enum, value):
     logger.warn("Nothing to do for %s(%d)" %
                 (str(cmd_enum), cmd_enum.value))