1515from genesis .engine .entities import AvatarEntity , DroneEntity , RigidEntity
1616from genesis .engine .states .solvers import RigidSolverState
1717from genesis .styles import colors , formats
18+ from genesis .utils .sdf_decomp import SDF
1819import genesis .utils .array_class as array_class
1920
2021from ..base_solver import Solver
2122from .collider_decomp import Collider
2223from .constraint_solver_decomp import ConstraintSolver
2324from .constraint_solver_decomp_island import ConstraintSolverIsland
24- from ....utils .sdf_decomp import SDF
2525
2626if TYPE_CHECKING :
2727 from genesis .engine .scene import Scene
@@ -4773,8 +4773,8 @@ def kernel_update_verts_for_geom(
47734773 geoms_state : array_class .GeomsState ,
47744774 geoms_info : array_class .GeomsInfo ,
47754775 verts_info : array_class .VertsInfo ,
4776- free_verts_state : array_class .FreeVertsState ,
4777- fixed_verts_state : array_class .FixedVertsState ,
4776+ free_verts_state : array_class .VertsState ,
4777+ fixed_verts_state : array_class .VertsState ,
47784778):
47794779 _B = geoms_state .verts_updated .shape [1 ]
47804780 for i_b in range (_B ):
@@ -4795,20 +4795,26 @@ def kernel_update_verts_for_geom(
47954795 geoms_state .verts_updated [i_g , 0 ] = 1
47964796
47974797
4798- @ti .func
4799- def func_update_all_verts (self ):
4800- ti .loop_config (serialize = self ._para_level < gs .PARA_LEVEL .PARTIAL )
4801- for i_v , i_b in ti .ndrange (self .n_verts , self ._B ):
4802- g_pos = self .geoms_state .pos [self .verts_info .geom_idx [i_v ], i_b ]
4803- g_quat = self .geoms_state .quat [self .verts_info .geom_idx [i_v ], i_b ]
4804- verts_state_idx = self .verts_info .verts_state_idx [i_v ]
4805- if self .verts_info .is_free [i_v ]:
4806- self .free_verts_state .pos [verts_state_idx , i_b ] = gu .ti_transform_by_trans_quat (
4807- self .verts_info .init_pos [i_v ], g_pos , g_quat
4798+ @ti .kernel
4799+ def kernel_update_all_verts (
4800+ geoms_state : array_class .GeomsState ,
4801+ verts_info : array_class .VertsInfo ,
4802+ free_verts_state : array_class .VertsState ,
4803+ fixed_verts_state : array_class .VertsState ,
4804+ ):
4805+ n_verts = verts_info .geom_idx .shape [0 ]
4806+ _B = geoms_state .pos .shape [1 ]
4807+ for i_v , i_b in ti .ndrange (n_verts , _B ):
4808+ g_pos = geoms_state .pos [verts_info .geom_idx [i_v ], i_b ]
4809+ g_quat = geoms_state .quat [verts_info .geom_idx [i_v ], i_b ]
4810+ verts_state_idx = verts_info .verts_state_idx [i_v ]
4811+ if verts_info .is_free [i_v ]:
4812+ free_verts_state .pos [verts_state_idx , i_b ] = gu .ti_transform_by_trans_quat (
4813+ verts_info .init_pos [i_v ], g_pos , g_quat
48084814 )
48094815 elif i_b == 0 :
4810- self . fixed_verts_state .pos [verts_state_idx ] = gu .ti_transform_by_trans_quat (
4811- self . verts_info .init_pos [i_v ], g_pos , g_quat
4816+ fixed_verts_state .pos [verts_state_idx ] = gu .ti_transform_by_trans_quat (
4817+ verts_info .init_pos [i_v ], g_pos , g_quat
48124818 )
48134819
48144820
0 commit comments