def __init__(self, editorFile, bakeryFolder): """ editorFile is path to file saved by the editor that should contain any specified maps bakeryFolder is path to all project baking resources this should contain all the shaders, and a few other things (This text should get updated as requirements are added) """ # Start a list of output maps # Thses are maps that are needed for mesh placement and rendering d=parseFile(bakeryFolder+'/outputMaps.txt') if "Render" in d: self.renderMapNames=d["Render"] else: self.renderMapNames=[] if "MeshPlacement" in d: self.meshPlacementMapNames=d["MeshPlacement"] else: self.meshPlacementMapNames=[] outputMapNames=self.renderMapNames+self.meshPlacementMapNames # Make an carfully orderd list of MapShaders that will generate all output maps self.shaders=[] sDict={} def addShaders(shaderNames): for shaderName in shaderNames: if shaderName in sDict: s=sDict[shaderName] self.shaders.remove(s) self.shaders.insert(0,s) addShaders(s.inputMapNames) else: s=MapShader(shaderName,bakeryFolder+'/') self.shaders.insert(0,s) sDict[shaderName]=self.shaders[0] addShaders(s.inputMapNames) #print [s.name for s in self.shaders] addShaders(outputMapNames) # Load Editor File self.usedSpecifiedMaps=[] if editorFile!=None: pass
def __init__(self, name, folder): file=folder+'maps/'+name+'.txt' d=parseFile(file) #inputMapNames, tex2DNames, shaderSource if "Input" in d: self.inputMapNames=d["Input"] else: self.inputMapNames=[] if "Tex2D" in d: tex2D=d["Tex2D"] else: tex2D=[] shaderSource='\n'.join(d["Shader"]) self.name=name texLines=[] paramsStrs=[] paramsDefStrs=[] for i in xrange(len(self.inputMapNames)): texLines.append(' in uniform sampler2D tex_'+str(i)+': TEXUNIT'+str(i)+',') paramsStrs.append('tex2D(tex_'+str(i)+', l_tex)') paramsDefStrs.append('float4 map_'+self.inputMapNames[i]) self.shaderTex=[] for t in tex2D: i=len(texLines) texName='tex_'+str(i) texLines.append(' in uniform sampler2D '+texName+': TEXUNIT'+str(i)+',') paramsStrs.append('tex_'+str(i)) paramsDefStrs.append('sampler2D tex2D_'+t) tex=loadTex(folder+'textures/'+t) texStage=TextureStage(t+"stage") self.shaderTex.append((texStage,tex)) texText='\n'.join(texLines) paramsText=', '.join(paramsStrs) paramsDef=', '.join(paramsDefStrs) if len(paramsDef)>0: paramsDef=", "+paramsDef paramsText=", "+paramsText self.source=mapMakerShaderSource.replace('#tex#',texText) self.source=self.source.replace('#params#',paramsText) self.source=self.source.replace('#source#',shaderSource) self.source=self.source.replace('#paramsDef#',paramsDef) if useShaderFiles: outLoc='ShadersOut/'+name+'.sha' fOut=open(outLoc, 'w') fOut.write(self.source) fOut.close() self.shader=loader.loadShader(outLoc) else: self.shader=Shader.make(self.source) self.resolutionScale=1 self.addPixels=0 if "Settings" in d: for s in d["Settings"]: t=s.split() v=t[1] m=t[0] if m=='resolutionScale': self.resolutionScale=float(v) elif m=='addPixels': self.addPixels=int(v)