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) ]
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 = []
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 = []
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)]