1+ """
2+ Modified from nerfview/_renderer.py
3+ """
4+
15import dataclasses
26import os
37import sys
913import viser
1014
1115if TYPE_CHECKING :
12- from .viewer import CameraState , Viewer
16+ from examples .viewer import CameraState , Viewer
1317
1418RenderState = Literal ["low_move" , "low_static" , "high" ]
1519RenderAction = Literal ["rerender" , "move" , "static" , "update" ]
@@ -53,14 +57,15 @@ def __init__(
5357 self .lock = lock
5458
5559 self .running = True
56- self .is_prepared_fn = lambda : self .viewer .state . status != "preparing"
60+ self .is_prepared_fn = lambda : self .viewer .state != "preparing"
5761
5862 self ._render_event = threading .Event ()
5963 self ._state : RenderState = "low_static"
6064 self ._task : Optional [RenderTask ] = None
6165
6266 self ._target_fps = 30
6367 self ._may_interrupt_render = False
68+ self ._old_version = False
6469
6570 self ._define_transitions ()
6671
@@ -84,16 +89,17 @@ def _may_interrupt_trace(self, frame, event, arg):
8489 return self ._may_interrupt_trace
8590
8691 def _get_img_wh (self , aspect : float ) -> Tuple [int , int ]:
87- max_img_res = self .viewer ._max_img_res_slider .value
88- if self ._state == "high" :
92+ # we always trade off speed for quality
93+ max_img_res = self .viewer .render_tab_state .viewer_res
94+ if self ._state in ["high" ]:
8995 # if True:
9096 H = max_img_res
9197 W = int (H * aspect )
9298 if W > max_img_res :
9399 W = max_img_res
94100 H = int (W / aspect )
95101 elif self ._state in ["low_move" , "low_static" ]:
96- num_view_rays_per_sec = self .viewer .state .num_view_rays_per_sec
102+ num_view_rays_per_sec = self .viewer .render_tab_state .num_view_rays_per_sec
97103 target_fps = self ._target_fps
98104 num_viewer_rays = num_view_rays_per_sec / target_fps
99105 H = (num_viewer_rays / aspect ) ** 0.5
@@ -141,13 +147,31 @@ def run(self):
141147 with self .lock , set_trace_context (self ._may_interrupt_trace ):
142148 tic = time .time ()
143149 W , H = img_wh = self ._get_img_wh (task .camera_state .aspect )
144- rendered = self .viewer .render_fn (task .camera_state , img_wh )
150+ self .viewer .render_tab_state .viewer_width = W
151+ self .viewer .render_tab_state .viewer_height = H
152+
153+ if not self ._old_version :
154+ try :
155+ rendered = self .viewer .render_fn (
156+ task .camera_state ,
157+ self .viewer .render_tab_state ,
158+ )
159+ except TypeError :
160+ self ._old_version = True
161+ print (
162+ "[WARNING] Your API will be deprecated in the future, please update your render_fn."
163+ )
164+ rendered = self .viewer .render_fn (task .camera_state , img_wh )
165+ else :
166+ rendered = self .viewer .render_fn (task .camera_state , img_wh )
167+
168+ self .viewer ._after_render ()
145169 if isinstance (rendered , tuple ):
146170 img , depth = rendered
147171 else :
148172 img , depth = rendered , None
149- self .viewer .state .num_view_rays_per_sec = (W * H ) / (
150- max ( time .time () - tic , 1e-6 )
173+ self .viewer .render_tab_state .num_view_rays_per_sec = (W * H ) / (
174+ time .time () - tic
151175 )
152176 except InterruptRenderException :
153177 continue
@@ -160,4 +184,3 @@ def run(self):
160184 jpeg_quality = 70 if task .action in ["static" , "update" ] else 40 ,
161185 depth = depth ,
162186 )
163- self .client .flush ()
0 commit comments