diff --git a/python/mujoco/render_test.py b/python/mujoco/render_test.py index 2df0a8134a1..606ed1614e5 100644 --- a/python/mujoco/render_test.py +++ b/python/mujoco/render_test.py @@ -83,6 +83,63 @@ def test_can_render(self): np.testing.assert_array_equal(upside_down_image, expected_upside_down_image) context.free() + def test_figure_renders_after_hidden_skin(self): + xml = """ + + + + + + + + + + + + + + """ + model = mujoco.MjModel.from_xml_string(xml) + data = mujoco.MjData(model) + mujoco.mj_forward(model, data) + + scene = mujoco.MjvScene(model, maxgeom=10) + mujoco.mjv_updateScene( + model, + data, + mujoco.MjvOption(), + None, + mujoco.MjvCamera(), + mujoco.mjtCatBit.mjCAT_ALL, + scene, + ) + + context = mujoco.MjrContext(model, mujoco.mjtFontScale.mjFONTSCALE_150) + mujoco.mjr_setBuffer(mujoco.mjtFramebuffer.mjFB_OFFSCREEN, context) + full_rect = mujoco.MjrRect(0, 0, 640, 480) + mujoco.mjr_render(full_rect, scene, context) + + figure = mujoco.MjvFigure() + mujoco.mjv_defaultFigure(figure) + figure.flg_legend = 0 + figure.flg_extend = 0 + figure.range[0][:] = (-1.0, 1.0) + figure.range[1][:] = (-1.0, 1.0) + figure.linergb[0] = (1.0, 0.0, 1.0) + figure.linedata[0][0:4] = (-1.0, -1.0, 1.0, 1.0) + figure.linepnt[0] = 2 + mujoco.mjr_figure(full_rect, figure, context) + + image = np.empty((480, 640, 3), dtype=np.uint8) + mujoco.mjr_readPixels(image, None, full_rect, context) + magenta = (image[:, :, 0] > 200) & (image[:, :, 1] < 100) & ( + image[:, :, 2] > 200 + ) + self.assertGreater(np.count_nonzero(magenta), 0) + context.free() + def test_safe_to_free_context_twice(self): self.model = mujoco.MjModel.from_xml_string('') self.data = mujoco.MjData(self.model) diff --git a/src/render/classic/render_gl2.c b/src/render/classic/render_gl2.c index cab7dd303d5..c54c0455d29 100644 --- a/src/render/classic/render_gl2.c +++ b/src/render/classic/render_gl2.c @@ -413,6 +413,7 @@ static void init2D(void) { glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); glDisable(GL_BLEND); + glBindBuffer(GL_ARRAY_BUFFER, 0); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);