1# coding: utf-8 2 3import sys,getopt 4from base64 import * 5 6def usage(): 7 print "usage:" 8 print " CsdrUpdater.py [OPTION] BinaryFileName" 9 print " [OPTION]" 10 print " -i --intermediate= : Input editable .csdr file name, otherwise use DefaultShader.csdr." 11 print " -o --output= : Input output file name." 12 print " -h --help : Print help message." 13 print "" 14 15def main(): 16 try: 17 options, arguments = getopt.getopt(sys.argv[1:], "i:o:s:h:", ["intermediate=", "output=", "shader=", "help="]) 18 except getopt.GetoptError: 19 sys.exit() 20 21 binaryFileName = None 22 intermediateFileName = None 23 shaderName = None 24 25 for option, argument in options: 26 if option in ("-i", "--intermediate"): 27 intermediateFileName = argument 28 if option in ("-o", "--output"): 29 shaderName = argument 30 if option in ("-h", "--help"): 31 usage() 32 sys.exit() 33 34 if arguments: 35 binaryFileName = arguments[0] 36 else: 37 print "Please input binary file name." 38 sys.exit() 39 40 if intermediateFileName == None: 41 intermediateFileName = "DefaultShader.csdr" 42 43 try: 44 intermediateInput = open(intermediateFileName, 'rb') 45 binaryInput = open(binaryFileName, 'rb') 46 except IOError as error: 47 print(error) 48 sys.exit() 49 50 binary = binaryInput.read() 51 base64Binary = b64encode(binary) 52 53 binaryFileNameSplit = binaryFileName.split('.') 54 if shaderName == None: 55 shaderName = binaryFileNameSplit[0] 56 57 intermediate = intermediateInput.read() 58 59 if intermediate.find("<BinaryData>") < 0: 60 print("Intermediate file has no <BinaryData> Tag.") 61 sys.exit() 62 elif intermediate.find("</BinaryData>") < 0: 63 print("Intermediate file has no </BinaryData> Tag.") 64 sys.exit() 65 66 frontIntermediate = intermediate.split("<BinaryData>")[0] 67 backIntermediate = intermediate.split("</BinaryData>")[1] 68 69 70 csdrString = frontIntermediate + "<BinaryData>" + base64Binary + "</BinaryData>" + backIntermediate 71 72 if not shaderName.endswith(".csdr") and not shaderName.endswith(".cmdl"): 73 shaderName += ".csdr" 74 75 try: 76 output = open(shaderName, 'wb') 77 output.write(csdrString) 78 except: 79 print("Cannot write shader file.") 80 81if __name__ == "__main__": 82 if len(sys.argv) == 1: 83 exit(1) 84 else: 85 main() 86