1 from panda3d
.core
import load_prc_file_data
2 from ya2
.lib
.builder
import LibP3d
7 def __init__(self
, fps
=False, win_size
='1280 720', win_orig
=None,
8 win_title
='lib', fullscreen
=False, sync_video
=None,
9 antialiasing
=False, shaders
=True, volume
=1, fixed_fps
=0):
11 self
.win_size
= win_size
12 self
.win_title
= win_title
13 self
.win_orig
= win_orig
14 self
.fullscreen
= fullscreen
15 self
.sync_video
= LibP3d
.runtime() if sync_video
is None \
17 self
.antialiasing
= antialiasing
18 self
.shaders
= shaders
20 self
.fixed_fps
= fixed_fps
25 def __init__(self
, profiling
=False, pyprof_percall
=False):
26 self
.profiling
= profiling
# profiling with panda3d's tools
27 self
.pyprof_percall
= pyprof_percall
32 def __init__(self
, lang
='en', lang_path
='assets/locale',
33 lang_domain
='lib_game', languages
=[('English', 'en')]):
35 self
.lang_path
= lang_path
36 self
.lang_domain
= lang_domain
37 self
.languages
= languages
42 def __init__(self
, cursor_hidden
=False, cursor_path
='',
43 cursor_scale
=(1, 1, 1), cursor_color
=(1, 1, 1, 1),
44 cursor_hotspot
=(0, 0)):
45 self
.cursor_hidden
= cursor_hidden
46 self
.cursor_path
= cursor_path
47 self
.cursor_scale
= cursor_scale
48 self
.cursor_color
= cursor_color
49 self
.cursor_hotspot
= cursor_hotspot
55 self
, mt_render
=False, model_path
='assets/models', excluded
='',
56 shaders_dev
=False, pbr
=False, gamma
=1.0, menu_joypad
=True,
57 verbose
='', verbose_log
=False, xmpp_server
='', start_wp
='',
58 port
=9099, server
='localhost:9098', srgb
=False, opengl_3_2
=False,
59 gl_debug
=False, async_textures
=False, show_buffers
=False,
60 anisotropic
=8, pbr_normal
=True, pbr_occlusion
=True,
61 pbr_shadows
=True, pbr_exposure
=True, pbr_msaa_samples
=4,
62 pbr_fog
=True, offscreen
=False, directx
=False,
63 functional_test
=False, functional_ref
=False):
64 self
.multithreaded_render
= mt_render
# multithreaded rendering
65 self
.model_path
= model_path
66 self
.excluded
= excluded
67 self
.shaders_dev
= shaders_dev
69 self
.pbr_normal
= pbr_normal
70 self
.pbr_occlusion
= pbr_occlusion
71 self
.pbr_shadows
= pbr_shadows
72 self
.pbr_exposure
= pbr_exposure
73 self
.pbr_msaa_samples
= pbr_msaa_samples
74 self
.pbr_fog
= pbr_fog
76 self
.directx
= directx
77 self
.menu_joypad
= menu_joypad
78 self
.verbose
= verbose
79 self
.verbose_log
= verbose_log
80 self
.xmpp_server
= xmpp_server
83 self
.start_wp
= start_wp
85 self
.opengl_3_2
= opengl_3_2
86 self
.gl_debug
= gl_debug
87 self
.async_textures
= async_textures
88 self
.show_buffers
= show_buffers
89 self
.anisotropic
= anisotropic
90 self
.offscreen
= offscreen
91 self
.functional_test
= functional_test
92 self
.functional_ref
= functional_ref
97 def __init__(self
, gui_cfg
=None, profiling_cfg
=None, lang_cfg
=None,
98 cursor_cfg
=None, dev_cfg
=None):
99 self
.gui_cfg
= gui_cfg
or GuiCfg()
100 self
.profiling_cfg
= profiling_cfg
or ProfilingCfg()
101 self
.lang_cfg
= lang_cfg
or LangCfg()
102 self
.cursor_cfg
= cursor_cfg
or CursorCfg()
103 self
.dev_cfg
= dev_cfg
or DevCfg()
107 def __set(key
, val
): load_prc_file_data('', key
+ ' ' + str(val
))
109 def __configure(self
):
111 ('texture-anisotropic-degree', self
.dev_cfg
.anisotropic
),
112 # ('client-sleep', 0.001),
113 ('texture-minfilter', 'linear_mipmap_linear'),
114 ('gl-coordinate-system', 'default'),
115 ('textures-power-2', 'down'),
116 ('textures-auto-power-2', 1),
117 ('show-frame-rate-meter', int(self
.gui_cfg
.fps
)),
118 ('hardware-animated-vertices', 'true'),
119 ('x-init-threads', 'true'),
120 # temp workaround for mtrendering (linux)
121 ('basic-shaders-only', 'false'),
122 ('default-model-extension', '.bam'),
123 #('compressed-textures', 1), # particles don't work
124 #('model-cache-textures', 1),
125 #('model-cache-compressed-textures', 1),
126 #('bam-version', '6 45'),
127 ('audio-ouput-rate', 44100)]
128 if self
.gui_cfg
.win_size
:
129 cfginfo
+= [('win-size', self
.gui_cfg
.win_size
)]
130 if self
.gui_cfg
.win_orig
:
131 cfginfo
+= [('win-origin', self
.gui_cfg
.win_orig
)]
132 if self
.dev_cfg
.srgb
:
133 cfginfo
+= [('framebuffer-srgb', 'true')]
134 if self
.dev_cfg
.opengl_3_2
:
135 cfginfo
+= [('gl-version', '3 2')]
136 if self
.dev_cfg
.gl_debug
:
137 cfginfo
+= [('gl-debug', 1)]
138 if self
.dev_cfg
.show_buffers
:
139 cfginfo
+= [('show-buffers', 'true')]
140 if self
.dev_cfg
.async_textures
:
142 ('preload-textures', 0),
143 ('preload-simple-textures', 1),
144 ('texture-compression', 1),
145 ('allow-incomplete-render', 1)]
146 if self
.dev_cfg
.directx
:
148 ('load-display', 'pandadx9')]
150 ('window-title', self
.gui_cfg
.win_title
),
151 ('cursor-hidden', int(self
.cursor_cfg
.cursor_hidden
)),
152 ('sync-video', int(self
.gui_cfg
.sync_video
)),
153 ('framebuffer-multisample', 1),
155 if self
.dev_cfg
.multithreaded_render
:
156 cfginfo
+= [('threading-model', '/Draw')]
157 if self
.dev_cfg
.offscreen
:
158 cfginfo
+= [('window-type', 'offscreen')]
159 if self
.profiling_cfg
.profiling
:
162 ('task-timer-verbose', 1),
165 ('pstats-host', '127.0.0.1')]
166 for verb
in self
.dev_cfg
.verbose
.split(';'):
167 if not verb
: continue
168 verb_el
= verb
.strip().split()
169 if verb_el
[0] == 'direct':
171 ('default-directnotify-level', verb_el
[1])]
172 elif verb_el
[0] == 'panda':
174 ('notify-level', verb_el
[1])]
177 ('notify-level-' + verb_el
[0], verb_el
[1])]
178 list(map(lambda args
: self
.__set
(*args
), cfginfo
))