def main(): print("[RENDER GRAPHICS] render_graphics.py") start = time() iron_horse.main() # get args passed by makefile makefile_args = utils.get_makefile_args(sys) # default to no mp, makes debugging easier (mp fails to pickle errors correctly) num_pool_workers = makefile_args.get("num_pool_workers", 0) if num_pool_workers == 0: use_multiprocessing = False # just print, no need for a coloured echo_message print("Multiprocessing disabled: (PW=0)") else: use_multiprocessing = True # just print, no need for a coloured echo_message print("Multiprocessing enabled: (PW=" + str(num_pool_workers) + ")") graphics_input_path = os.path.join(currentdir, "src", "graphics") graphics_output_path = os.path.join(iron_horse.generated_files_path, "graphics") if not os.path.exists(graphics_output_path): os.mkdir(graphics_output_path) hint_file = codecs.open( os.path.join(graphics_output_path, "_graphics_files_here_are_generated.txt"), "w", "utf8", ) hint_file.write( "Don't edit the graphics files here. They're generated by the build script. \n Edit sources in src/graphics." ) hint_file.close() consists = iron_horse.get_consists_in_buy_menu_order() spritelayer_cargo_sets = iron_horse.get_spritelayer_cargo_sets() if use_multiprocessing == False: for consist in consists: run_consist_pipelines(consist) for spritelayer_cargo_set in spritelayer_cargo_sets: run_spritelayer_cargo_set_pipelines(spritelayer_cargo_set) else: # Would this go faster if the pipelines from each consist were placed in MP pool, not just the consist? # probably potato / potato tbh pool = Pool(processes=num_pool_workers) pool.map(run_consist_pipelines, consists) pool.map(run_spritelayer_cargo_set_pipelines, spritelayer_cargo_sets) pool.close() pool.join() report_sprites_complete(consists) for dir_name in ["tail_lights"]: target_path = os.path.join(graphics_input_path, dir_name) dest_path = os.path.join(graphics_output_path, dir_name) if os.path.exists(dest_path): shutil.rmtree(dest_path) shutil.copytree(target_path, dest_path) print(format((time() - start), ".2f") + "s")
def main(): print("[RENDER GRAPHICS] render_graphics.py") start = time() iron_horse.main() # get args passed by makefile makefile_args = utils.get_makefile_args(sys) # default to no mp, makes debugging easier (mp fails to pickle errors correctly) num_pool_workers = makefile_args.get("num_pool_workers", 0) if num_pool_workers == 0: use_multiprocessing = False # just print, no need for a coloured echo_message print("Multiprocessing disabled: (PW=0)") else: use_multiprocessing = True # just print, no need for a coloured echo_message print("Multiprocessing enabled: (PW=" + str(num_pool_workers) + ")") graphics_input_path = os.path.join(currentdir, "src", "graphics") graphics_output_path = os.path.join(iron_horse.generated_files_path, "graphics") if not os.path.exists(graphics_output_path): os.mkdir(graphics_output_path) hint_file = codecs.open( os.path.join(graphics_output_path, "_graphics_files_here_are_generated.txt"), "w", "utf8", ) hint_file.write( "Don't edit the graphics files here. They're generated by the build script. \n Edit sources in src/graphics." ) hint_file.close() consists = iron_horse.get_consists_in_buy_menu_order() # get a list of 2-tuple pairs for spritelayer cargos + cargo sets # a list format is wanted for convenience with graphics multiprocessing pool # the parent spritelayer_cargo object must be passed with the cargo set as cargo sets have render-time properties which change according to context # but cargo_sets are global and reused across spritelayer_cargos, so they can't just store a single reference to their spritelayer_cargo parent spritelayer_cargo_set_pairs = [] for spritelayer_cargo in iron_horse.registered_spritelayer_cargos: for cargo_set in spritelayer_cargo.cargo_sets: spritelayer_cargo_set_pairs.append((spritelayer_cargo, cargo_set)) if use_multiprocessing == False: for spritelayer_cargo_set_pair in spritelayer_cargo_set_pairs: run_spritelayer_cargo_set_pipelines(spritelayer_cargo_set_pair) for consist in consists: run_consist_pipelines(consist) else: # Would this go faster if the pipelines from each consist were placed in MP pool, not just the consist? # probably potato / potato tbh pool = Pool(processes=num_pool_workers) pool.map(run_spritelayer_cargo_set_pipelines, spritelayer_cargo_set_pairs) pool.close() pool.join() # wait for first pool job to finish before starting pool = Pool(processes=num_pool_workers) pool.map(run_consist_pipelines, consists) pool.close() pool.join() report_sprites_complete(consists) for dir_name in ["tail_lights"]: target_path = os.path.join(graphics_input_path, dir_name) dest_path = os.path.join(graphics_output_path, dir_name) if os.path.exists(dest_path): shutil.rmtree(dest_path) shutil.copytree(target_path, dest_path) print(format((time() - start), ".2f") + "s")
import codecs # used for writing files - more unicode friendly than standard open() module import sys import os currentdir = os.curdir from time import time import iron_horse import utils import global_constants from polar_fox import git_info # get args passed by makefile makefile_args = utils.get_makefile_args(sys) # chameleon used in most template cases from chameleon import PageTemplateLoader # setup the places we look for templates templates = PageTemplateLoader(os.path.join(currentdir, "src", "templates")) # setting up a cache for compiled chameleon templates can significantly speed up template rendering chameleon_cache_path = os.path.join(currentdir, global_constants.chameleon_cache_dir) if not os.path.exists(chameleon_cache_path): os.mkdir(chameleon_cache_path) os.environ["CHAMELEON_CACHE"] = chameleon_cache_path generated_files_path = iron_horse.generated_files_path
# we'll be processing some extra images and saving them into the img dir images_dir_dst = os.path.join(static_dir_dst, 'img') from chameleon import PageTemplateLoader # chameleon used in most template cases # setup the places we look for templates docs_templates = PageTemplateLoader(docs_src, format='text') import global_constants as global_constants import utils as utils from incompatible_grfs import incompatible_grfs import markdown from PIL import Image # get args passed by makefile repo_vars = utils.get_makefile_args(sys) # get the strings from base lang file so they can be used in docs base_lang_strings = utils.parse_base_lang() metadata = {} metadata['dev_thread_url'] = 'http://www.tt-forums.net/viewtopic.php?t=41607' metadata['repo_url'] = 'http://dev.openttdcoop.org/projects/firs/repository' metadata['issue_tracker'] = 'http://dev.openttdcoop.org/projects/firs/issues' import firs # default sort for docs is by id registered_cargos = sorted(firs.registered_cargos, key=lambda registered_cargos: registered_cargos.id) registered_industries = sorted(firs.registered_industries, key=lambda registered_industries: registered_industries.id) registered_economies = firs.registered_economies economy_schemas = {}