Skip to content

Commit f90ca97

Browse files
committed
Make scene loader configurable
1 parent 607a4fe commit f90ca97

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

demosys/conf/default_settings.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
'TEXTURE_FINDERS',
2020
'SCENE_DIRS',
2121
'SCENE_FINDERS',
22+
'SCENE_LOADERS',
2223
)
2324

2425
DEBUG = False
@@ -93,3 +94,8 @@
9394
"demosys.core.scenefiles.finders.FileSystemFinder",
9495
"demosys.core.scenefiles.finders.EffectDirectoriesFinder",
9596
)
97+
98+
SCENE_LOADERS = (
99+
'demosys.scene.loaders.gltf.GLTF2',
100+
'demosys.scene.loaders.wavefront.ObjLoader',
101+
)

demosys/resources/scenes.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from demosys.core.exceptions import ImproperlyConfigured
44
from demosys.core.scenefiles.finders import get_finders
55
from demosys.scene import Scene
6+
from demosys.conf import settings
7+
from demosys.utils.module_loading import import_string
68

79

810
class Scenes:
@@ -27,10 +29,16 @@ def get(self, path, create=False, **kwargs):
2729
:param create: (bool) Create an empty scene object if it doesn't exist
2830
:return: Scene object
2931
"""
30-
# FIXME: Figure out what scene loader class should be used instead of hardcoding gltf
31-
# FIXME: This should be configured in settings
32-
if path not in self.scenes:
33-
self.scenes[path] = Scene(path, loader=gltf.GLTF2(path), **kwargs)
32+
# Figure out what scene loader class should be used
33+
for loader_name in settings.SCENE_LOADERS:
34+
loader_cls = import_string(loader_name)
35+
if loader_cls.supports_file(path):
36+
if path not in self.scenes:
37+
loader_cls = import_string(loader_name)
38+
self.scenes[path] = Scene(path, loader=loader_cls(path), **kwargs)
39+
break
40+
else:
41+
raise ImproperlyConfigured("Scene {} has no loader class registered. Check settings.SCENE_LOADERS")
3442

3543
return self.scenes[path]
3644

0 commit comments

Comments
 (0)