def gl_deform(self, operator): if not self.need_deform: return operator() self._deform_program.use() if self._tessellation_factor_changed: self._deform_program.update_uniform_about_tessellation() self._tessellation_factor_changed = False if self._splited_triangle_number_changed: self._deform_program.update_uniform_triangle_number() self._splited_triangle_number_changed = False if self._need_update_adjust_control_point_flag: self._deform_program.update_uniform_about_adjust_control_point_flag() self._need_update_adjust_control_point_flag = False if self._need_update_use_pn_normal_for_renderer: self._deform_program.update_uniform_about_use_pn_triangle() self._need_update_use_pn_normal_for_renderer = False self._deform_program.update_uniform_about_modify_range() self._controller.add_time(GLUtil.gl_timing(lambda: glDispatchCompute(*self.group_size), "deformation", 3)) self._need_deform = False glUseProgram(0)
def gl_sync_buffer_for_deformation(self): def op(): self._control_point_for_sample_ubo.gl_sync() self._b_spline_body_info_ubo.gl_sync() GLUtil.gl_timing(op, 'copy control to gpu', 3)