PageRenderTime 42ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/webGLSandbox/webGL Study Page/compile.py

https://bitbucket.org/Levantulee/sandbox
Python | 60 lines | 54 code | 6 blank | 0 comment | 3 complexity | 786ff31b2796b8aa24ea1d963379d7be MD5 | raw file
Possible License(s): GPL-3.0
  1. from json import dumps
  2. from os.path import splitext, abspath, dirname, join
  3. from os import listdir
  4. import re
  5. if __name__ == '__main__':
  6. here = dirname(
  7. abspath(__file__)
  8. )
  9. shaders = {}
  10. sectionre = re.compile('^(\w+):$')
  11. files = []
  12. directives = '\n'.join([
  13. '#version 100',
  14. '#ifdef GL_ES',
  15. 'precision highp int;',
  16. 'precision highp float;',
  17. 'precision highp vec2;',
  18. 'precision highp vec3;',
  19. 'precision highp vec4;',
  20. 'precision highp ivec2;',
  21. 'precision highp ivec3;',
  22. 'precision highp ivec4;',
  23. '#endif',
  24. ])
  25. for name in listdir(here):
  26. if name.endswith('.shader'):
  27. fullname = join(here, name)
  28. shortname = splitext(name)[0]
  29. source = open(fullname).read()
  30. lines = source.split('\n')
  31. type = None
  32. types = {None: ''}
  33. filenum = len(files)
  34. for linenum, line in enumerate(lines):
  35. line = line.strip()
  36. if not line:
  37. continue
  38. if line.startswith('//'):
  39. continue
  40. match = sectionre.match(line)
  41. if match:
  42. type = match.group(1)
  43. types.setdefault(type, '')
  44. elif type:
  45. types[type] += '#line %i %i\n%s\n' % (linenum, filenum, line.strip())
  46. files.append({
  47. 'name': shortname,
  48. 'path': fullname,
  49. 'lines': lines,
  50. 'fragment': '%s\n%s' % (directives, types['fragment']),
  51. 'vertex': '%s\n%s' % (directives, types['vertex']),
  52. })
  53. open(join(here, 'shaders.json'), 'w').write(dumps(files))