ya2 · news · projects · code · about

optimization: creation of images
authorFlavio Calva <f.calva@gmail.com>
Wed, 9 Mar 2022 17:41:10 +0000 (18:41 +0100)
committerFlavio Calva <f.calva@gmail.com>
Wed, 9 Mar 2022 17:41:10 +0000 (18:41 +0100)
lib/build/screenshots.py
pmachines/app.py
prj.org
setup.py

index 72b42b5f058287682daf9c113ae0b4dfc71e07f2..71c845a0614b9754a6208a6266f82fc9f50e9598 100644 (file)
@@ -1,5 +1,22 @@
 from os import system
+from glob import glob
+from importlib import import_module
+from inspect import isclass
+from multiprocessing import Pool
+from pmachines.scene import Scene
+
+
+def do_screenshot(cls):
+    system('python main.py --screenshot ' + cls.__name__)
 
 
 def bld_screenshots():
-    system('python main.py --screenshots')
+    scene_classes = []
+    for _file in glob('pmachines/scenes/*.py'):
+        _fn = _file.replace('.py', '').replace('/', '.')
+        for member in import_module(_fn).__dict__.values():
+            if isclass(member) and issubclass(member, Scene) and \
+                    member != Scene:
+                scene_classes += [member]
+    with Pool() as p:
+        p.map(do_screenshot, scene_classes)
index ce10dc6bbd17d0ee75663d012086abadc254a61c..73d43a172beea857fed336e0ff1dd2d94cf5f2cd 100755 (executable)
@@ -59,7 +59,7 @@ class PmachinesApp:
                                 'pmachines',
                                 'assets/locale/')
         self._fsm = MainFsm(self)
-        if args.screenshots:
+        if args.screenshot:
             scene_classes = []
             for _file in glob('pmachines/scenes/*.py'):
                 _fn = _file.replace('.py', '').replace('/', '.')
@@ -67,10 +67,10 @@ class PmachinesApp:
                     if isclass(member) and issubclass(member, Scene) and \
                             member != Scene:
                         scene_classes += [member]
-            for cls in scene_classes:
-                scene = cls(BulletWorld(), None, True, False, lambda: None)
-                scene.screenshot()
-                scene.destroy()
+            cls = [cls for cls in scene_classes if cls.__name__ == args.screenshot][0]
+            scene = cls(BulletWorld(), None, True, False, lambda: None)
+            scene.screenshot()
+            scene.destroy()
             exit()
         elif self._options['development']['auto_start']:
             mod_name = 'pmachines.scenes.scene_' + self._options['development']['auto_start']
@@ -116,7 +116,7 @@ class PmachinesApp:
         load_prc_file_data('', 'sync-video true')
         # load_prc_file_data('', 'threading-model Cull/Draw')
         # it freezes when you go to the next scene
-        if args.screenshots:
+        if args.screenshot:
             load_prc_file_data('', 'window-type offscreen')
             load_prc_file_data('', 'audio-library-name null')
 
@@ -125,7 +125,7 @@ class PmachinesApp:
         parser.add_argument('--update', action='store_true')
         parser.add_argument('--version', action='store_true')
         parser.add_argument('--optfile')
-        parser.add_argument('--screenshots', action='store_true')
+        parser.add_argument('--screenshot')
         cmd_line = [arg for arg in iter(argv[1:]) if not arg.startswith('-psn_')]
         args = parser.parse_args(cmd_line)
         return args
@@ -184,7 +184,7 @@ class PmachinesApp:
         props.set_size(res)
         props.set_fullscreen(self._options['settings']['fullscreen'])
         props.set_icon_filename('assets/icon/pmachines.ico')
-        if not args.screenshots:
+        if not args.screenshot:
             base.win.request_properties(props)
         gltf.patch_loader(base.loader)
         if self._options['development']['simplepbr']:
diff --git a/prj.org b/prj.org
index 40cd9d2449521332ff103cb0e1af49cffc2a2bac..7595e78f9208cff4162ae5ef56e9be2ad51fb37c 100644 (file)
--- a/prj.org
+++ b/prj.org
@@ -1,6 +1,5 @@
 * issues
 * todo
-** optimize images creation (python setup.py images)
 ** use dds files in place of png/jpg
 ** use bam files
 ** refactoring
index a288b19e167e929edd83bdfd0dbb4c8f9c446eb6..27c165bcf28b60ba6b40878ce2846ddc308f264c 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -10,6 +10,7 @@ from subprocess import Popen
 from distutils.cmd import Command
 from setuptools import setup
 from setuptools.command.develop import develop
+from multiprocessing import cpu_count
 from direct.dist.commands import bdist_apps
 from lib.build.build import branch, files, ver, files, bld_dpath
 from lib.build.docs import bld_docs
@@ -44,7 +45,7 @@ class AbsCmd(Command):
     '''Common functionalities for commands.'''
 
     user_options = [('cores=', None, '#cores')]
-    cores = 1
+    cores = cpu_count()
 
     def initialize_options(self):
         for arg in argv[:]: