[cgkit-commits] cgkit2/cgkit rmshader.py,1.8,1.9
Brought to you by:
mbaas
From: Matthias B. <mb...@us...> - 2006-05-26 21:33:38
|
Update of /cvsroot/cgkit/cgkit2/cgkit In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv11528 Modified Files: rmshader.py Log Message: Modified the RM shader class so that string params can also take render passes as value Index: rmshader.py =================================================================== RCS file: /cvsroot/cgkit/cgkit2/cgkit/rmshader.py,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** rmshader.py 27 Apr 2006 16:57:22 -0000 1.8 --- rmshader.py 26 May 2006 21:33:29 -0000 1.9 *************** *** 94,97 **** --- 94,102 ---- self.shaderparams = {} + # String parameters are not stored as slots because they can either + # contain a string or a RenderPass object + # str_params: Key:Parameter name / Value:Value + self.str_params = {} + # Params for which there is no declaration # Key: Param name Value:Value *************** *** 142,159 **** # getattr def __getattr__(self, name): slot = self.__dict__.get("%s_slot"%name, None) ! if slot==None: ! raise AttributeError, 'shader "%s" has no attribute "%s"'%(self.shadername, name) ! return slot.getValue() # setattr def __setattr__(self, name, val): slot = self.__dict__.get("%s_slot"%name, None) ! if slot==None: ! object.__setattr__(self, name, val) ! return ! slot.setValue(val) --- 147,177 ---- # getattr def __getattr__(self, name): + # Shader parameter? slot = self.__dict__.get("%s_slot"%name, None) ! if slot!=None: ! return slot.getValue() ! # String parameter? ! str_params = self.__dict__.get("str_params", {}) ! if name in str_params: ! return str_params[name] ! ! raise AttributeError, 'shader "%s" has no attribute "%s"'%(self.shadername, name) # setattr def __setattr__(self, name, val): + # Shader parameter? slot = self.__dict__.get("%s_slot"%name, None) ! if slot!=None: ! slot.setValue(val) ! return ! # String parameter? ! str_params = self.__dict__.get("str_params", {}) ! if name in str_params: ! str_params[name] = val ! return ! ! object.__setattr__(self, name, val) *************** *** 177,181 **** # params ! def params(self): """Return the parameter dictionary for the current time. --- 195,199 ---- # params ! def params(self, passes=None): """Return the parameter dictionary for the current time. *************** *** 190,197 **** decl = self.shaderparams[name] p = "%s %s"%(decl, name) ! res[p] = getattr(self, name) return res # declare def declare(self, name, type=None, cls=None, arraysize=None, default=None): --- 208,233 ---- decl = self.shaderparams[name] p = "%s %s"%(decl, name) ! val = getattr(self, name) ! if isinstance(val, ribexport.RenderPass): ! if val.done(): ! mapname = val.realFilename(val.output[0][0]) ! # mapname = os.path.splitext(mapname)[0]+".map" ! val = mapname ! else: ! val = "" ! res[p] = val return res + # getPasses + def getPasses(self): + """Return a list containing the passes required for this shader. + """ + res = [] + for val in self.str_params.values(): + if isinstance(val, ribexport.RenderPass): + res.append(val) + return res + # declare def declare(self, name, type=None, cls=None, arraysize=None, default=None): *************** *** 214,217 **** --- 250,255 ---- shader.declare('Ka', type='float') """ + + # print 'declare("%s", type=%s, cls=%s, arraysize=%s, default=%s)'%(name, type, cls, arraysize, default) # Create a "dummy shader" which will be passed to slparams to parse *************** *** 274,282 **** if pytype=="double": pytype = "float" ! pdefault = eval("%s(%s)"%(pytype, repr(self.undeclared[pname]))) del self.undeclared[pname] # Create the slot and add the variable to the params dictionary ! self.createSlot(pname, slottype, parraylen, pdefault) self.shaderparams[pname] = decl --- 312,328 ---- if pytype=="double": pytype = "float" ! ! # Don't cast strings because they might contain a RenderPass ! if pytype=="str": ! pdefault = self.undeclared[pname] ! else: ! pdefault = eval("%s(%s)"%(pytype, repr(self.undeclared[pname]))) del self.undeclared[pname] # Create the slot and add the variable to the params dictionary ! if ptype=="string": ! self.str_params[pname] = pdefault ! else: ! self.createSlot(pname, slottype, parraylen, pdefault) self.shaderparams[pname] = decl *************** *** 448,452 **** def createPasses(self): """Returns a list of RenderPass objects.""" ! return [] def preProcess(self, exporter): --- 494,501 ---- def createPasses(self): """Returns a list of RenderPass objects.""" ! res = self.surface.getPasses() ! res += self.displacement.getPasses() ! res += self.interior.getPasses() ! return res def preProcess(self, exporter): *************** *** 475,479 **** def surfaceShaderParams(self, passes): """Return a dictionary with shader parameters and their values.""" ! return self.surface.params() def surfaceShaderTransform(self): --- 524,528 ---- def surfaceShaderParams(self, passes): """Return a dictionary with shader parameters and their values.""" ! return self.surface.params(passes) def surfaceShaderTransform(self): *************** *** 488,492 **** def displacementShaderParams(self, passes): ! return self.displacement.params() def displacementBound(self): --- 537,541 ---- def displacementShaderParams(self, passes): ! return self.displacement.params(passes) def displacementBound(self): *************** *** 504,508 **** def interiorShaderParams(self, passes): ! return self.interior.params() def interiorShaderTransform(self): --- 553,557 ---- def interiorShaderParams(self, passes): ! return self.interior.params(passes) def interiorShaderTransform(self): *************** *** 575,579 **** def createPasses(self): """Returns a list of RenderPass objects.""" ! return [] # shaderName --- 624,628 ---- def createPasses(self): """Returns a list of RenderPass objects.""" ! return self.shader.getPasses() # shaderName *************** *** 590,594 **** def shaderParams(self, passes): """Return a dictionary with shader parameters and their values.""" ! return self.shader.params() --- 639,643 ---- def shaderParams(self, passes): """Return a dictionary with shader parameters and their values.""" ! return self.shader.params(passes) |