armory/blender/arm/lib/make_variants.py
2017-12-20 15:37:58 +01:00

55 lines
2.2 KiB
Python

import os
def write_variant(path, name, defs, lines):
with open(path + '/' + name, "w") as f:
defs_written = False
for line in lines:
f.write(line + '\n')
# Append defs after #version
if defs_written == False and line.startswith('#version '):
for d in defs:
f.write('#define ' + d + '\n')
defs_written = True
def make(base_name, json_data, fp, defs):
shaders = []
path = fp + '/compiled/Shaders'
# Go through every context shaders and gather ifdefs
for c in json_data['contexts']:
shader = {}
shaders.append(shader)
shader['vert_name'] = c['vertex_shader'].split('.', 1)[0]
with open(c['vertex_shader']) as f:
shader['vert'] = f.read().splitlines()
shader['frag_name'] = c['fragment_shader'].split('.', 1)[0]
with open(c['fragment_shader']) as f:
shader['frag'] = f.read().splitlines()
if 'geometry_shader' in c:
shader['geom_name'] = c['geometry_shader'].split('.', 1)[0]
with open(c['geometry_shader']) as f:
shader['geom'] = f.read().splitlines()
if 'tesscontrol_shader' in c:
shader['tesc_name'] = c['tesscontrol_shader'].split('.', 1)[0]
with open(c['tesscontrol_shader']) as f:
shader['tesc'] = f.read().splitlines()
if 'tesseval_shader' in c:
shader['tese_name'] = c['tesseval_shader'].split('.', 1)[0]
with open(c['tesseval_shader']) as f:
shader['tese'] = f.read().splitlines()
for shader in shaders:
write_variant(path, c['vertex_shader'].split('/')[-1], defs, shader['vert'])
write_variant(path, c['fragment_shader'].split('/')[-1], defs, shader['frag'])
if 'geom' in shader:
write_variant(path, c['geometry_shader'].split('/')[-1], defs, shader['geom'])
if 'tesc' in shader:
write_variant(path, c['tesscontrol_shader'].split('/')[-1], defs, shader['tesc'])
if 'tese' in shader:
write_variant(path, c['tesseval_shader'].split('/')[-1], defs, shader['tese'])