Ejemplo n.º 1
0
    def getShaderInfo(self, shader):
        """Read the shader parameters from a given shader.
        """
        sloargs = self._sloargs

        # Split path and file name
        shaderPath, shaderFileName = os.path.split(shader)
        if shaderPath == "":
            shaderPath = "."
        # Remove the extension
        shader = os.path.splitext(shaderFileName)[0]

        sloargs.Slo_SetPath(shaderPath)
        # Try the shader name with extension first...
        if sloargs.Slo_SetShader(shaderFileName) != 0:
            # If the above failed, try the shader name without extension (prman)...
            if sloargs.Slo_SetShader(shader) != 0:
                raise IOError('Failed to open shader "%s"' % shader)

        shaderName = sloargs.Slo_GetName()
        shaderType = sloargs.Slo_TypetoStr(sloargs.Slo_GetType())
        metaData = self._getMetaData()
        params = []
        numParams = sloargs.Slo_GetNArgs()
        for i in range(1, numParams + 1):
            res = sloargs.Slo_GetArgById(i)
            symdef = res.contents

            if sloargs.Slo_StortoStr(symdef.storage).startswith("output"):
                output = "output"
            else:
                output = ""
            storage = sloargs.Slo_DetailtoStr(symdef.detail)
            paramType = sloargs.Slo_TypetoStr(symdef.type)
            arrLen = symdef.arraylen
            if arrLen == 0:
                arrLen = None
            name = symdef.name
            space = self._getSpace(symdef)
            if space == "":
                space = None
            defaultVal = self._getDefaultVal(symdef)
            params.append(
                _ShaderParam(output, storage, paramType, arrLen, name, space,
                             defaultVal))

        sloargs.Slo_EndShader()
        return [
            _ShaderInfo(type=shaderType,
                        name=shaderName,
                        params=params,
                        meta=metaData)
        ]
Ejemplo n.º 2
0
    def storeParam(self):
        """Store the current set of attributes as a new parameter.

        The attributes are reset so that a new parameter can begin.
        """
        if self.arraylen==None:
            if self.space==None:
                self.space = self.defaultSpace(self.type)
            self.params.append(_ShaderParam(self.output, self.detail, self.type, None,
                            self.name, self.space, self.default))
        else:
            spaces = self.spaces
            if self.defaultSpace(self.type)==None:
                spaces = None
            self.params.append(_ShaderParam(self.output, self.detail, self.type,
                               self.arraylen, self.name, spaces, self.default))
        self.arraylen = None
        self.name = ""
        self.space = None
        self.default = ""
        self.spaces   = []
Ejemplo n.º 3
0
    def storeParam(self):
        """Store the current set of attributes as a new parameter.

        The attributes are reset so that a new parameter can begin.
        """
        if self.arraylen == None:
            if self.space == None:
                self.space = self.defaultSpace(self.type)
            self.params.append(
                _ShaderParam(self.output, self.detail, self.type, None,
                             self.name, self.space, self.default))
        else:
            spaces = self.spaces
            if self.defaultSpace(self.type) == None:
                spaces = None
            self.params.append(
                _ShaderParam(self.output, self.detail, self.type,
                             self.arraylen, self.name, spaces, self.default))
        self.arraylen = None
        self.name = ""
        self.space = None
        self.default = ""
        self.spaces = []
Ejemplo n.º 4
0
    def getShaderInfo(self, shader):
        """Read the shader parameters from a given shader.
        """
        sloargs = self._sloargs
        
        # Split path and file name
        shaderPath,shaderFileName = os.path.split(shader)
        if shaderPath=="":
            shaderPath = "."
        # Remove the extension
        shader = os.path.splitext(shaderFileName)[0]

        sloargs.Slo_SetPath(shaderPath)
        # Try the shader name with extension first...
        if sloargs.Slo_SetShader(shaderFileName)!=0:
            # If the above failed, try the shader name without extension (prman)...
            if sloargs.Slo_SetShader(shader)!=0:
                raise IOError('Failed to open shader "%s"'%shader)
        
        shaderName = sloargs.Slo_GetName()
        shaderType = sloargs.Slo_TypetoStr(sloargs.Slo_GetType())
        metaData = self._getMetaData()
        params = []
        numParams = sloargs.Slo_GetNArgs()
        for i in range(1, numParams+1):
            res = sloargs.Slo_GetArgById(i)
            symdef = res.contents
            
            if sloargs.Slo_StortoStr(symdef.storage).startswith("output"):
                output = "output"
            else:
                output = ""
            storage = sloargs.Slo_DetailtoStr(symdef.detail)
            paramType = sloargs.Slo_TypetoStr(symdef.type)
            arrLen = symdef.arraylen
            if arrLen==0:
                arrLen = None
            name = symdef.name
            space = self._getSpace(symdef)
            if space=="":
                space = None
            defaultVal = self._getDefaultVal(symdef)
            params.append(_ShaderParam(output,storage,paramType,arrLen,name,space,defaultVal))
            
        sloargs.Slo_EndShader()
        return [_ShaderInfo(type=shaderType, name=shaderName, params=params, meta=metaData)]