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);