2016-10-19 13:28:06 +02:00
|
|
|
import shutil
|
|
|
|
import os
|
2017-10-21 16:09:06 +02:00
|
|
|
import stat
|
2017-01-18 14:52:51 +01:00
|
|
|
import bpy
|
2017-03-15 12:30:14 +01:00
|
|
|
import arm.utils
|
2016-10-19 13:28:06 +02:00
|
|
|
|
2016-07-19 19:42:46 +02:00
|
|
|
assets = []
|
2016-07-28 13:21:27 +02:00
|
|
|
khafile_defs = []
|
2017-01-18 14:52:51 +01:00
|
|
|
khafile_defs_last = []
|
2016-09-14 11:49:32 +02:00
|
|
|
embedded_data = []
|
2016-09-28 00:00:59 +02:00
|
|
|
shaders = []
|
2017-01-18 14:52:51 +01:00
|
|
|
shaders_last = []
|
2016-09-28 00:00:59 +02:00
|
|
|
shader_datas = []
|
2016-07-19 19:42:46 +02:00
|
|
|
|
|
|
|
def reset():
|
2016-09-28 00:00:59 +02:00
|
|
|
global assets
|
|
|
|
global khafile_defs
|
2017-01-18 14:52:51 +01:00
|
|
|
global khafile_defs_last
|
2016-09-28 00:00:59 +02:00
|
|
|
global embedded_data
|
|
|
|
global shaders
|
2017-01-18 14:52:51 +01:00
|
|
|
global shaders_last
|
2016-09-28 00:00:59 +02:00
|
|
|
global shader_datas
|
|
|
|
assets = []
|
2017-01-18 14:52:51 +01:00
|
|
|
khafile_defs_last = khafile_defs
|
2016-09-28 00:00:59 +02:00
|
|
|
khafile_defs = []
|
|
|
|
embedded_data = []
|
2017-01-18 14:52:51 +01:00
|
|
|
shaders_last = shaders
|
2016-09-28 00:00:59 +02:00
|
|
|
shaders = []
|
|
|
|
shader_datas = []
|
2016-07-19 19:42:46 +02:00
|
|
|
|
|
|
|
def add(file):
|
2016-09-28 00:00:59 +02:00
|
|
|
global assets
|
|
|
|
if file not in assets:
|
|
|
|
assets.append(file)
|
2016-07-28 13:21:27 +02:00
|
|
|
|
|
|
|
def add_khafile_def(d):
|
2016-09-28 00:00:59 +02:00
|
|
|
global khafile_defs
|
|
|
|
if d not in khafile_defs:
|
|
|
|
khafile_defs.append(d)
|
2016-09-14 11:49:32 +02:00
|
|
|
|
|
|
|
def add_embedded_data(file):
|
2016-09-28 00:00:59 +02:00
|
|
|
global embedded_data
|
|
|
|
if file not in embedded_data:
|
|
|
|
embedded_data.append(file)
|
|
|
|
|
|
|
|
def add_shader(file):
|
|
|
|
global shaders
|
2017-01-18 14:52:51 +01:00
|
|
|
global shaders_last
|
2016-09-28 00:00:59 +02:00
|
|
|
if file not in shaders:
|
|
|
|
shaders.append(file)
|
|
|
|
|
|
|
|
def add_shader_data(file):
|
|
|
|
global shader_datas
|
|
|
|
if file not in shader_datas:
|
|
|
|
shader_datas.append(file)
|
2016-10-17 00:02:51 +02:00
|
|
|
|
|
|
|
def add_shader2(dir_name, data_name):
|
2017-05-23 01:03:44 +02:00
|
|
|
add_shader_data(arm.utils.build_dir() + '/compiled/Shaders/' + dir_name + '/' + data_name + '.arm')
|
|
|
|
full_name = arm.utils.build_dir() + '/compiled/Shaders/' + dir_name + '/' + data_name
|
2016-10-17 00:02:51 +02:00
|
|
|
add_shader(full_name + '.vert.glsl')
|
|
|
|
add_shader(full_name + '.frag.glsl')
|
2016-10-19 13:28:06 +02:00
|
|
|
|
|
|
|
invalidate_enabled = True # Disable invalidating during build process
|
|
|
|
|
2017-10-21 16:07:08 +02:00
|
|
|
def remove_readonly(func, path, excinfo):
|
|
|
|
os.chmod(path, stat.S_IWRITE)
|
|
|
|
func(path)
|
|
|
|
|
2016-10-19 13:28:06 +02:00
|
|
|
def invalidate_shader_cache(self, context):
|
|
|
|
# compiled.glsl changed, recompile all shaders next time
|
|
|
|
global invalidate_enabled
|
|
|
|
if invalidate_enabled == False:
|
|
|
|
return
|
2017-05-23 01:03:44 +02:00
|
|
|
fp = arm.utils.get_fp_build()
|
|
|
|
if os.path.isdir(fp + '/compiled/Shaders'):
|
2017-10-21 16:07:08 +02:00
|
|
|
shutil.rmtree(fp + '/compiled/Shaders', onerror=remove_readonly)
|
2017-05-23 01:03:44 +02:00
|
|
|
if os.path.isdir(fp + '/compiled/ShaderRaws'):
|
2017-10-21 16:07:08 +02:00
|
|
|
shutil.rmtree(fp + '/compiled/ShaderRaws', onerror=remove_readonly)
|
2017-11-13 15:57:23 +01:00
|
|
|
if os.path.isdir(fp + '/html5-resources'):
|
|
|
|
shutil.rmtree(fp + '/html5-resources', onerror=remove_readonly)
|
|
|
|
if os.path.isdir(fp + '/krom-resources'):
|
|
|
|
shutil.rmtree(fp + '/krom-resources', onerror=remove_readonly)
|
2017-11-13 15:38:58 +01:00
|
|
|
if os.path.isdir(fp + '/windowed/krom-resources'):
|
|
|
|
shutil.rmtree(fp + '/windowed/krom-resources', onerror=remove_readonly)
|
2016-10-19 13:28:06 +02:00
|
|
|
|
|
|
|
def invalidate_compiled_data(self, context):
|
|
|
|
global invalidate_enabled
|
|
|
|
if invalidate_enabled == False:
|
|
|
|
return
|
2017-05-23 01:03:44 +02:00
|
|
|
fp = arm.utils.get_fp_build()
|
|
|
|
if os.path.isdir(fp + '/compiled/Assets'):
|
2017-10-21 16:07:08 +02:00
|
|
|
shutil.rmtree(fp + '/compiled/Assets', onerror=remove_readonly)
|
2017-05-23 01:03:44 +02:00
|
|
|
if os.path.isdir(fp + '/compiled/Shaders'):
|
2017-10-21 16:07:08 +02:00
|
|
|
shutil.rmtree(fp + '/compiled/Shaders', onerror=remove_readonly)
|
2017-05-23 01:03:44 +02:00
|
|
|
if os.path.isdir(fp + '/compiled/ShaderRaws'):
|
2017-10-21 16:07:08 +02:00
|
|
|
shutil.rmtree(fp + '/compiled/ShaderRaws', onerror=remove_readonly)
|
2016-10-19 13:28:06 +02:00
|
|
|
|
|
|
|
def invalidate_mesh_data(self, context):
|
2017-05-23 01:03:44 +02:00
|
|
|
fp = arm.utils.get_fp_build()
|
|
|
|
if os.path.isdir(fp + '/compiled/Assets/meshes'):
|
2017-10-21 16:07:08 +02:00
|
|
|
shutil.rmtree(fp + '/compiled/Assets/meshes', onerror=remove_readonly)
|
2016-11-08 11:45:25 +01:00
|
|
|
|
|
|
|
def invalidate_envmap_data(self, context):
|
2017-05-23 01:03:44 +02:00
|
|
|
fp = arm.utils.get_fp_build()
|
|
|
|
if os.path.isdir(fp + '/compiled/Assets/envmaps'):
|
2017-10-21 16:07:08 +02:00
|
|
|
shutil.rmtree(fp + '/compiled/Assets/envmaps', onerror=remove_readonly)
|