Esempio n. 1
0
    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
Esempio n. 2
0
 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)