#!/usr/bin/env python # # writes out shaders from apitrace dump import re, os, sys dumpname = sys.argv[1] prefix = os.path.basename(dumpname) prefix = prefix[:prefix.rfind('.')] # 356 glShaderSource(1, 1, &"... shader_start1 = re.compile('^.*\(([0-9]+),.*"([^"]*)$') # 356 glShaderSource(shader = 1, count = 1, string = &"... shader_start2 = re.compile('^.*shader = ([0-9]+),.*"([^"]*)$') idx = 1 shader = None shader_start = shader_start1 for line in open(dumpname).readlines(): if shader: if line[0].isdigit(): sh_line = sh_line.split('"')[0] shader.write(sh_line) print "written." shader = None continue shader.write(sh_line) sh_line = line continue if "glShaderSource(" in line: match = shader_start.match(line) if not match: match = shader_start2.match(line) if not match: print "ERROR: shader source line didn't match regex:\n\t%s" % line continue shader_start = shader_start2 num = int(match.group(1)) sh_line = match.group(2) name = "%s-%d-%d.shader" % (prefix, idx, num) if os.path.exists(name): print "WARNING: shader %d already exists, overwriting!" % num print "%s ..." % name, shader = open(name, "w") idx += 1 continue