Fast build, fix scene patch

This commit is contained in:
Lubos Lenco 2017-05-24 23:04:24 +02:00
parent 887133625a
commit 59c043ea22
7 changed files with 28 additions and 31 deletions

View File

@ -3,7 +3,7 @@ armory
[![Build Status](https://travis-ci.org/armory3d/armory.svg?branch=master)](https://travis-ci.org/armory3d/armory)
[armory3d.org](http://armory3d.org) - [Manual](http://armory3d.org/manual/) - [Forums](http://forums.armory3d.org)
[armory3d.org](http://armory3d.org) - [Manual](http://armory3d.org/manual/html/) - [Forums](http://forums.armory3d.org)
In development! Armory is a real-time 3D engine aimed at creation of 3D games and applications - featuring full Blender integration, state of art rendering and ultra portability. The engine is currently available in a form of [early preview](http://armory3d.org/download.html).

View File

@ -53,10 +53,6 @@ def add_shader(file):
if file not in shaders:
shaders.append(file)
wrd = bpy.data.worlds['Arm']
if not wrd.arm_recompile_trigger and file not in shaders_last:
wrd.arm_recompile_trigger = True
def add_shader_data(file):
global shader_datas
if file not in shader_datas:

View File

@ -2068,6 +2068,8 @@ class ArmoryExporter:
o['cast_shadow'] = objref.cycles.cast_shadow
o['near_plane'] = objref.lamp_clip_start
if (o['near_plane'] <= 0.11 and o['type'] == 'point'):
o['near_plane'] /= 10 # Prevent acne on close surfaces
o['far_plane'] = objref.lamp_clip_end
o['fov'] = objref.lamp_fov
o['shadows_bias'] = objref.lamp_shadows_bias

View File

@ -11,6 +11,7 @@ import arm.make as make
import arm.make_state as state
import arm.space_armory as space_armory
import arm.make_renderer as make_renderer
import arm.assets as assets
try:
import barmory
except ImportError:
@ -77,7 +78,9 @@ def on_scene_update_post(context):
operators_changed:
# Otherwise rebuild scene
if bridge.send_operator(last_operator) == False:
assets.invalidate_enabled = False
make.play_project(in_viewport=True)
assets.invalidate_enabled = True
# Use frame rate for update frequency for now
fps_mult = 2.0 if (state.krom_running and arm.utils.get_os() == 'win') else 1.0 # Handlers called less frequently on Windows?
@ -177,6 +180,8 @@ def on_load_post(context):
make_renderer.reload_blend_data()
wrd = bpy.data.worlds['Arm']
wrd.arm_recompile = True
for lib in wrd.my_librarytraitlist:
if lib.enabled_prop:
fp = arm.utils.get_fp() + '/Libraries/' + lib.name

View File

@ -178,10 +178,9 @@ def compile_project(target_name=None, is_publish=False, watch=False, patch=False
if patch:
if state.compileproc == None:
# Quick build - disable krafix and haxe
cmd.append('--nohaxe')
cmd.append('--noshaders')
cmd.append('--noproject')
# cmd.append('--noshaders')
state.compileproc = subprocess.Popen(cmd, stderr=subprocess.PIPE)
if state.playproc == None:
if state.in_viewport:
@ -319,7 +318,6 @@ def watch_compile(mode):
def watch_patch(mode):
state.compileproc.wait()
log.print_progress(100)
# result = state.compileproc.poll()
state.compileproc = None
state.compileproc_finished = True
on_compiled(mode)
@ -335,11 +333,11 @@ def runtime_to_target(in_viewport):
def get_khajs_path(in_viewport, target):
if in_viewport:
return arm.utils.build_dir() + '/build/krom/krom.js'
return arm.utils.build_dir() + '/krom/krom.js'
elif target == 'krom':
return arm.utils.build_dir() + '/window/krom/krom.js'
else: # browser, electron
return arm.utils.build_dir() + '/build/html5/kha.js'
return arm.utils.build_dir() + '/html5/kha.js'
def play_project(in_viewport):
global scripts_mtime
@ -358,16 +356,13 @@ def play_project(in_viewport):
state.in_viewport = in_viewport
khajs_path = get_khajs_path(in_viewport, state.target)
if wrd.arm_recompile or \
wrd.arm_recompile_trigger or \
not wrd.arm_cache_compiler or \
not wrd.arm_cache_shaders or \
if not wrd.arm_cache_compiler or \
not os.path.isfile(khajs_path) or \
state.last_target != state.target or \
state.last_in_viewport != state.in_viewport:
state.last_in_viewport != state.in_viewport or \
state.target == 'native':
wrd.arm_recompile = True
wrd.arm_recompile_trigger = False
state.last_target = state.target
state.last_in_viewport = state.in_viewport
@ -380,15 +375,11 @@ def play_project(in_viewport):
scripts_mtime = mtime
wrd.arm_recompile = True
if state.krom_running: # TODO: Temp live-patch fix till compiler cache is disabled
compile_project(target_name=state.target, patch=True)
# New compile requred - traits or materials changed
elif wrd.arm_recompile or state.target == 'native':
# New compile requred - traits changed
if wrd.arm_recompile:
# Unable to live-patch, stop player
if state.krom_running:
bpy.ops.arm.space_stop('EXEC_DEFAULT')
# play_project(in_viewport=True) # Restart
return
mode = 'play'

View File

@ -62,46 +62,45 @@ def update_mat_cache(self, context):
if self.is_cached == True:
self.lock_cache = True
else:
bpy.data.worlds['Arm'].arm_recompile_trigger = True
pass
def update_gapi_win(self, context):
if os.path.isdir(arm.utils.get_fp_build() + '/windows-build'):
shutil.rmtree(arm.utils.get_fp_build() + '/windows-build')
bpy.data.worlds['Arm'].arm_recompile_trigger = True
bpy.data.worlds['Arm'].arm_recompile = True
assets.invalidate_compiled_data(self, context)
def update_gapi_linux(self, context):
if os.path.isdir(arm.utils.get_fp_build() + '/linux-build'):
shutil.rmtree(arm.utils.get_fp_build() + '/linux-build')
bpy.data.worlds['Arm'].arm_recompile_trigger = True
bpy.data.worlds['Arm'].arm_recompile = True
assets.invalidate_compiled_data(self, context)
def update_gapi_mac(self, context):
if os.path.isdir(arm.utils.get_fp_build() + '/osx-build'):
shutil.rmtree(arm.utils.get_fp_build() + '/osx-build')
bpy.data.worlds['Arm'].arm_recompile_trigger = True
bpy.data.worlds['Arm'].arm_recompile = True
assets.invalidate_compiled_data(self, context)
def update_gapi_android(self, context):
if os.path.isdir(arm.utils.get_fp_build() + '/android-build'):
shutil.rmtree(arm.utils.get_fp_build() + '/android-build')
bpy.data.worlds['Arm'].arm_recompile_trigger = True
bpy.data.worlds['Arm'].arm_recompile = True
assets.invalidate_compiled_data(self, context)
def update_gapi_ios(self, context):
if os.path.isdir(arm.utils.get_fp_build() + '/ios-build'):
shutil.rmtree(arm.utils.get_fp_build() + '/ios-build')
bpy.data.worlds['Arm'].arm_recompile_trigger = True
bpy.data.worlds['Arm'].arm_recompile = True
assets.invalidate_compiled_data(self, context)
def update_gapi_html5(self, context):
bpy.data.worlds['Arm'].arm_recompile_trigger = True
bpy.data.worlds['Arm'].arm_recompile = True
assets.invalidate_compiled_data(self, context)
def init_properties():
global arm_version
bpy.types.World.arm_recompile = bpy.props.BoolProperty(name="Recompile", description="Recompile sources on next play", default=True)
bpy.types.World.arm_recompile_trigger = bpy.props.BoolProperty(name="Recompile Trigger", description="Force upcoming recomilation", default=False)
bpy.types.World.arm_progress = bpy.props.FloatProperty(name="Progress", description="Current build progress", default=100.0, min=0.0, max=100.0, soft_min=0.0, soft_max=100.0, subtype='PERCENTAGE', get=log.get_progress)
bpy.types.World.arm_version = StringProperty(name="Version", description="Armory SDK version", default="")
bpy.types.World.arm_project_target = EnumProperty(
@ -159,7 +158,7 @@ def init_properties():
bpy.types.World.arm_lod_gen_levels = IntProperty(name="Levels", description="Number of levels to generate", default=3, min=1)
bpy.types.World.arm_lod_gen_ratio = FloatProperty(name="Decimate Ratio", description="Decimate ratio", default=0.8)
bpy.types.World.arm_cache_shaders = BoolProperty(name="Cache Shaders", description="Do not rebuild existing shaders", default=True, update=assets.invalidate_shader_cache)
bpy.types.World.arm_cache_compiler = BoolProperty(name="Cache Compiler", description="Only recompile sources when required", default=False)
bpy.types.World.arm_cache_compiler = BoolProperty(name="Cache Compiler", description="Only recompile sources when required", default=True)
bpy.types.World.arm_gpu_processing = BoolProperty(name="GPU Processing", description="Utilize GPU for asset pre-processing at build time", default=True, update=assets.invalidate_compiled_data)
bpy.types.World.arm_play_live_patch = BoolProperty(name="Live Patching", description="Sync running player data to Blender", default=True)
bpy.types.World.arm_play_auto_build = BoolProperty(name="Auto Build", description="Rebuild scene on operator changes", default=True)

View File

@ -92,6 +92,10 @@ project.addSources('Sources');
if dce_full:
f.write("project.addParameter('-dce full');")
if wrd.arm_cache_compiler and (is_play or (state.target == 'html5' and not is_publish)):
# Load shaders manually
f.write("project.addDefine('arm_debug');\n")
for ref in shader_references:
f.write("project.addShaders('" + ref + "');\n")