def get(self): s = "#version 450\n" defs = make_utils.def_strings_to_array(bpy.data.worlds["Arm"].world_defs) for a in defs: s += "#define {0}\n".format(a) in_ext = "" out_ext = "" if self.shader_type == "vert": # Vertex structure as vertex shader input vs = self.context.shader_data["vertex_structure"] for e in vs: self.add_in("vec" + str(e["size"]) + " " + e["name"]) elif self.shader_type == "tesc": in_ext = "[]" out_ext = "[]" s += "layout(vertices = 3) out;\n" # Gen outs for sin in self.ins: ar = sin.split(" ") # vec3 wnormal tc_s = "tc_" + ar[1] self.add_out(ar[0] + " " + tc_s) # Pass data self.write("{0}[gl_InvocationID] = {1}[gl_InvocationID];".format(tc_s, ar[1])) elif self.shader_type == "tese": in_ext = "[]" s += "layout(triangles, equal_spacing, ccw) in;\n" for a in self.includes: s += '#include "' + a + '"\n' for a in self.ins: s += "in {0}{1};\n".format(a, in_ext) for a in self.outs: s += "out {0}{1};\n".format(a, out_ext) for a in self.uniforms: s += "uniform " + a + ";\n" for f in self.functions: s += self.functions[f] s += "void main() {\n" s += self.main_pre s += self.main s += "}\n" return s
def export_data(fp, sdk_path, is_play=False, is_publish=False, in_viewport=False): global exporter wrd = bpy.data.worlds['Arm'] print('\nArmory v' + wrd.arm_version) # Clean compiled variants if cache is disabled if wrd.arm_cache_shaders == False: if os.path.isdir('build/html5-resources'): shutil.rmtree('build/html5-resources') if os.path.isdir('build/krom-resources'): shutil.rmtree('build/krom-resources') if os.path.isdir('build/window/krom-resources'): shutil.rmtree('build/window/krom-resources') if os.path.isdir('build/compiled/Shaders'): shutil.rmtree('build/compiled/Shaders') if os.path.isdir('build/compiled/ShaderDatas'): shutil.rmtree('build/compiled/ShaderDatas') if os.path.isdir('build/compiled/ShaderRaws'): shutil.rmtree('build/compiled/ShaderRaws') # Remove shader datas if shaders were deleted elif os.path.isdir('build/compiled/Shaders') == False and os.path.isdir('build/compiled/ShaderDatas') == True: shutil.rmtree('build/compiled/ShaderDatas') raw_shaders_path = sdk_path + 'armory/Shaders/' assets_path = sdk_path + 'armory/Assets/' export_physics = bpy.data.worlds['Arm'].arm_physics != 'Disabled' export_navigation = bpy.data.worlds['Arm'].arm_navigation != 'Disabled' assets.reset() # Build node trees # TODO: cache make_logic.build_node_trees() active_worlds = set() for scene in bpy.data.scenes: if scene.game_export and scene.world != None: active_worlds.add(scene.world) world_outputs = make_world.build_node_trees(active_worlds) make_renderpath.build_node_trees(assets_path) for wout in world_outputs: make_world.write_output(wout) # Export scene data assets.embedded_data = sorted(list(set(assets.embedded_data))) physics_found = False navigation_found = False ArmoryExporter.compress_enabled = is_publish ArmoryExporter.in_viewport = in_viewport for scene in bpy.data.scenes: if scene.game_export: ext = '.zip' if (scene.data_compressed and is_publish) else '.arm' asset_path = 'build/compiled/Assets/' + armutils.safe_filename(scene.name) + ext exporter.execute(bpy.context, asset_path) if physics_found == False and ArmoryExporter.export_physics: physics_found = True if navigation_found == False and ArmoryExporter.export_navigation: navigation_found = True assets.add(asset_path) if physics_found == False: # Disable physics anyway if no rigid body exported export_physics = False if navigation_found == False: export_navigation = False # Write referenced shader variants for ref in assets.shader_datas: # Data does not exist yet if not os.path.isfile(fp + '/' + ref): shader_name = ref.split('/')[3] # Extract from 'build/compiled/...' defs = make_utils.def_strings_to_array(wrd.world_defs + wrd.rp_defs) if shader_name.startswith('compositor_pass'): defs += make_utils.def_strings_to_array(wrd.compo_defs) compile_shader(raw_shaders_path, shader_name, defs) # Reset path os.chdir(fp) # Copy std shaders if not os.path.isdir('build/compiled/Shaders/std'): shutil.copytree(raw_shaders_path + 'std', 'build/compiled/Shaders/std') # Write compiled.glsl write_data.write_compiledglsl() # Write khafile.js write_data.write_khafilejs(is_play, export_physics, export_navigation, dce_full=is_publish) # Write Main.hx - depends on write_khafilejs for writing number of assets write_data.write_main(is_play, in_viewport, is_publish)
def export_data(fp, sdk_path, is_play=False, is_publish=False, in_viewport=False): global exporter wrd = bpy.data.worlds['Arm'] print('\nArmory v' + wrd.arm_version) # Clean compiled variants if cache is disabled if wrd.arm_cache_shaders == False: if os.path.isdir('build/html5-resources'): shutil.rmtree('build/html5-resources') if os.path.isdir('build/krom-resources'): shutil.rmtree('build/krom-resources') if os.path.isdir('build/window/krom-resources'): shutil.rmtree('build/window/krom-resources') if os.path.isdir('build/compiled/Shaders'): shutil.rmtree('build/compiled/Shaders') if os.path.isdir('build/compiled/ShaderDatas'): shutil.rmtree('build/compiled/ShaderDatas') if os.path.isdir('build/compiled/ShaderRaws'): shutil.rmtree('build/compiled/ShaderRaws') # Remove shader datas if shaders were deleted elif os.path.isdir('build/compiled/Shaders') == False and os.path.isdir('build/compiled/ShaderDatas') == True: shutil.rmtree('build/compiled/ShaderDatas') raw_shaders_path = sdk_path + 'armory/Shaders/' assets_path = sdk_path + 'armory/Assets/' export_physics = bpy.data.worlds['Arm'].arm_physics != 'Disabled' export_navigation = bpy.data.worlds['Arm'].arm_navigation != 'Disabled' assets.reset() # Build node trees # TODO: cache make_logic.build_node_trees() active_worlds = set() for scene in bpy.data.scenes: if scene.game_export and scene.world != None: active_worlds.add(scene.world) world_outputs = make_world.build_node_trees(active_worlds) make_renderpath.build_node_trees(assets_path) for wout in world_outputs: make_world.write_output(wout) # Export scene data assets.embedded_data = sorted(list(set(assets.embedded_data))) physics_found = False navigation_found = False ArmoryExporter.compress_enabled = is_publish ArmoryExporter.in_viewport = in_viewport for scene in bpy.data.scenes: if scene.game_export: ext = '.zip' if (scene.data_compressed and is_publish) else '.arm' asset_path = 'build/compiled/Assets/' + armutils.safe_filename(scene.name) + ext exporter.execute(bpy.context, asset_path) if physics_found == False and ArmoryExporter.export_physics: physics_found = True if navigation_found == False and ArmoryExporter.export_navigation: navigation_found = True assets.add(asset_path) if physics_found == False: # Disable physics anyway if no rigid body exported export_physics = False if navigation_found == False: export_navigation = False # Write referenced shader variants for ref in assets.shader_datas: # Data does not exist yet if not os.path.isfile(fp + '/' + ref): shader_name = ref.split('/')[3] # Extract from 'build/compiled/...' defs = make_utils.def_strings_to_array(wrd.world_defs) if shader_name.startswith('compositor_pass'): defs += make_utils.def_strings_to_array(wrd.compo_defs) compile_shader(raw_shaders_path, shader_name, defs) # Reset path os.chdir(fp) # Copy std shaders if not os.path.isdir('build/compiled/Shaders/std'): shutil.copytree(raw_shaders_path + 'std', 'build/compiled/Shaders/std') # Write compiled.glsl write_data.write_compiledglsl() # Write khafile.js write_data.write_khafilejs(is_play, export_physics, export_navigation, dce_full=is_publish) # Write Main.hx - depends on write_khafilejs for writing number of assets write_data.write_main(is_play, in_viewport, is_publish)