Skip to content

Commit 6dbdea0

Browse files
committed
add viewer test
1 parent 8052003 commit 6dbdea0

File tree

3 files changed

+102
-26
lines changed

3 files changed

+102
-26
lines changed

tests/test_render.py

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,31 +1232,6 @@ def on_key_press(self, symbol: int, modifiers: int):
12321232
assert f.read() == png_snapshot
12331233

12341234

1235-
@pytest.mark.required
1236-
@pytest.mark.parametrize("renderer_type", [RENDERER_TYPE.RASTERIZER])
1237-
@pytest.mark.skipif(not IS_INTERACTIVE_VIEWER_AVAILABLE, reason="Interactive viewer not supported on this platform.")
1238-
@pytest.mark.xfail(sys.platform == "win32", raises=OpenGL.error.Error, reason="Invalid OpenGL context.")
1239-
def test_interactive_viewer_disable_viewer_defaults():
1240-
"""Test that keyboard shortcuts can be disabled in the interactive viewer."""
1241-
1242-
# Test with keyboard shortcuts DISABLED
1243-
scene = gs.Scene(
1244-
viewer_options=gs.options.ViewerOptions(
1245-
disable_help_text=True,
1246-
disable_default_keybinds=True,
1247-
),
1248-
show_viewer=True,
1249-
)
1250-
scene.build()
1251-
pyrender_viewer = scene.visualizer.viewer._pyrender_viewer
1252-
assert pyrender_viewer.is_active
1253-
1254-
# Verify the flag is set correctly
1255-
assert pyrender_viewer._disable_help_text is True
1256-
# Verify that no keybindings are registered
1257-
assert len(pyrender_viewer._keybindings) == 0
1258-
1259-
12601235
@pytest.mark.required
12611236
@pytest.mark.parametrize("renderer_type", [RENDERER_TYPE.RASTERIZER])
12621237
def test_camera_gimbal_lock_singularity(renderer, show_viewer):

tests/test_viewer.py

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import sys
2+
3+
import OpenGL.error
4+
import pyglet
5+
import pytest
6+
7+
import genesis as gs
8+
from genesis.vis.keybindings import Key, KeyAction, Keybind
9+
10+
from .conftest import IS_INTERACTIVE_VIEWER_AVAILABLE
11+
from .utils import rgb_array_to_png_bytes
12+
13+
CAM_RES = (480, 320)
14+
15+
16+
@pytest.mark.required
17+
@pytest.mark.skipif(not IS_INTERACTIVE_VIEWER_AVAILABLE, reason="Interactive viewer not supported on this platform.")
18+
@pytest.mark.xfail(sys.platform == "win32", raises=OpenGL.error.Error, reason="Invalid OpenGL context.")
19+
def test_interactive_viewer_disable_viewer_defaults():
20+
"""Test that keyboard shortcuts can be disabled in the interactive viewer."""
21+
22+
# Test with keyboard shortcuts DISABLED
23+
scene = gs.Scene(
24+
viewer_options=gs.options.ViewerOptions(
25+
disable_help_text=True,
26+
disable_default_keybinds=True,
27+
),
28+
profiling_options=gs.options.ProfilingOptions(
29+
show_FPS=False,
30+
),
31+
show_viewer=True,
32+
)
33+
scene.build()
34+
pyrender_viewer = scene.visualizer.viewer._pyrender_viewer
35+
assert pyrender_viewer.is_active
36+
37+
# Verify the flag is set correctly
38+
assert pyrender_viewer._disable_help_text is True
39+
# Verify that no keybindings are registered
40+
assert len(pyrender_viewer._keybindings) == 0
41+
42+
43+
@pytest.mark.required
44+
@pytest.mark.skipif(not IS_INTERACTIVE_VIEWER_AVAILABLE, reason="Interactive viewer not supported on this platform.")
45+
def test_default_viewer_plugin(png_snapshot):
46+
scene = gs.Scene(
47+
sim_options=gs.options.SimOptions(
48+
dt=1e-2,
49+
substeps=1,
50+
),
51+
viewer_options=gs.options.ViewerOptions(
52+
camera_pos=(2.0, 0.0, 1.0),
53+
camera_lookat=(0.0, 0.0, 0.0),
54+
camera_fov=30,
55+
res=CAM_RES,
56+
run_in_thread=(sys.platform == "linux"),
57+
disable_help_text=False,
58+
disable_default_keybinds=False,
59+
),
60+
profiling_options=gs.options.ProfilingOptions(
61+
show_FPS=False,
62+
),
63+
show_viewer=True,
64+
)
65+
66+
scene.add_entity(morph=gs.morphs.Plane())
67+
scene.add_entity(
68+
morph=gs.morphs.Box(
69+
pos=(0.0, 0.0, 0.2),
70+
size=(0.2, 0.2, 0.2),
71+
euler=(30, 40, 0),
72+
)
73+
)
74+
scene.build()
75+
76+
pyrender_viewer = scene.visualizer.viewer._pyrender_viewer
77+
assert pyrender_viewer.is_active
78+
79+
# Add a custom keybind
80+
flag = False
81+
82+
def toggle_flag():
83+
nonlocal flag
84+
flag = True
85+
86+
scene.viewer.register_keybinds(Keybind(key_code=Key._0, key_action=KeyAction.PRESS, callback=toggle_flag))
87+
88+
# Press key to toggle flag on
89+
pyrender_viewer.dispatch_event("on_key_press", Key._0, 0)
90+
# Press key to turn off shadows
91+
pyrender_viewer.dispatch_event("on_key_press", Key.H, 0)
92+
93+
scene.step()
94+
95+
assert flag, "Custom keybind callback was not called."
96+
97+
# Snapshot should not have shadows
98+
rgb_arr, *_ = pyrender_viewer.render_offscreen(
99+
pyrender_viewer._camera_node, pyrender_viewer._renderer, rgb=True, depth=False, seg=False, normal=False
100+
)
101+
assert rgb_array_to_png_bytes(rgb_arr) == png_snapshot

tests/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
DEFAULT_BRANCH_NAME = "main"
3939

4040
HUGGINGFACE_ASSETS_REVISION = "8d9621de48a84fb182da38fd88f2495e4ccf3de9"
41-
HUGGINGFACE_SNAPSHOT_REVISION = "53228deca0e3a0e0848cc997315e9f8ba5f97cce"
41+
HUGGINGFACE_SNAPSHOT_REVISION = "7c5c30409f57f5442a113a63ed72e6041856bb41"
4242

4343
MESH_EXTENSIONS = (".mtl", *MESH_FORMATS, *GLTF_FORMATS, *USD_FORMATS)
4444
IMAGE_EXTENSIONS = (".png", ".jpg")

0 commit comments

Comments
 (0)