def __init__(self, xmlFiles): self.xmlStateGroups = XMLStateGroups() self.xmlMaterials = XMLMaterials(self.xmlStateGroups) self.xmlSegments = XMLSegments(self.xmlStateGroups) self.lights = [] self.xmlModels = XMLModels(self.lights, self.xmlSegments, self.xmlStateGroups, self.xmlMaterials) # join results from all files for f in xmlFiles: (stat, mat, seg, mod, lights) = _loadXMLModels(f) self.lights = unique( self.lights + lights) self.xmlStateGroups = self.xmlStateGroups.join(stat) self.xmlMaterials = self.xmlMaterials.join(mat) self.xmlMaterials.xmlStateGroups = self.xmlStateGroups self.xmlSegments = self.xmlSegments.join(seg) self.xmlSegments.xmlStateGroups = self.xmlStateGroups self.xmlModels = self.xmlModels.join(mod) self.xmlModels.xmlMaterials = self.xmlMaterials self.xmlModels.xmlSegments =self.xmlSegments self.xmlModels.xmlStateGroups = self.xmlStateGroups self.xmlModels.lights = self.lights
def __init__(self, funcs): MyShader.__init__(self, funcs) self.attributes = [] for func in funcs: self.attributes += func.attributes self.attributes = unique(self.attributes, lambda x: x[0]+x[1])
def join(self, other): xmlStateGroups = self.xmlStateGroups.join(other.xmlStateGroups) xmlSegments = self.xmlSegments.join(other.xmlSegments) xmlMaterials = self.xmlMaterials.join(other.xmlMaterials) lights = unique( self.lights + other.lights ) buf = XMLModels(lights, xmlSegments, xmlStateGroups, xmlMaterials) nodes = self.modelNodes.copy() for n in other.modelNodes.keys(): nodes[n] = other.modelNodes[n] buf.modelNodes = nodes return buf
def addModel(self, model): """ adds a model to this application. """ self.models.append(model) self.lights += model.lights self.lights = unique(self.lights) for s in model.segments: if s.usesProjectiveTexture(): self.enableProjectiveTextures() break
def __init__(self, funcs): funcNames = {} self.deps = [] self.funcs = funcs self.suffixes = [] self.localVars = [] self.varyings = [] self.uniforms = [] self.exports = [] self.constants = [] self.enabledExtensions = [] self.disabledExtensions = [] self.minVersion = None for func in funcs: if func.name in funcNames: print "WARNING: shader function '%s' added multiple times!" % func.name continue funcNames[func.name] = 1 self.enabledExtensions += func.enabledExtensions self.disabledExtensions += func.disabledExtensions if self.minVersion==None and func.minVersion!=None: self.minVersion = int(func.minVersion) elif func.minVersion!=None and int(func.minVersion)>self.minVersion: self.minVersion = int(func.minVersion) self.deps = self.deps + func.deps self.varyings = self.varyings + func.varying self.uniforms = self.uniforms + func.uniforms for fUniName in func.flexibleUniforms.keys(): (fUniType, fUniVal) = func.flexibleUniforms[fUniName] if fUniVal==None: self.uniforms.append((fUniType, fUniName)) else: self.constants.append((fUniType, fUniName, fUniVal)) self.suffixes = unique(self.suffixes) self.enabledExtensions = unique(self.enabledExtensions) self.disabledExtensions = unique(self.disabledExtensions) self.deps = unique(self.deps, lambda x: x[0]) self.varyings = unique(self.varyings, lambda x: x[0]+x[1]) self.uniforms = unique(self.uniforms, lambda x: x[0]+x[1]) self.localVars = unique(self.localVars, lambda x: str(x[0])+str(x[1])+str(x[2])) self.constants = unique(self.constants, lambda x: str(x[0])+str(x[1])+str(x[2]))