If a transient failure occurs in wlr_output_commit, re-render until it doesn't happen. This could possibly be removed if we decide to implement damage tracking in the future.
J7X4HM2XFWYAEAYYXGTUKHNBZ4JZX64BZW5WUYAHEUPXYPWFUMRAC TOFCZFUYVBVEBHMKVG6G5MKCAEF2QCQ4GKMKGQUSJRLGLDZEJF4QC 7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC 2QL2H4REDZT46FI3LQ4RYEMQYZBNBK3IC3KH3XERAJU3NCZWMNYQC J6OSBEBQXZR5JZ5TOCCUPELBPUVEQULGCXURXLPY7WFYTDEQOU2AC LRGGX34PR2PQEBW6U465VYOGIYOPD365PB444JGR6R3H7E524CCQC XHVBTXWGXGOVHLFX57RQI54NP2OY3BYI42K4ZODZDHXVZ2VF5YTQC PLJJLNS7E2UXW2YARGBSV6IHZEBGL5EW354IMMHPDATY5DQD77DAC BW2EZIIAEAWT5MYAEMTMHOIIQXGZR7FHGU4KO7Q6IEHUF3WZLZRAC QM6BQVVQOKLO6AYHJ272NTAOXJTVKN4FX7BU6J6YQKWBKEJDDFXQC 4QUF4MKRSB5LYYS5FSYTCDSIEMYIERI2BQZLRGJ3GIGVYCPJVEPAC 64B27C6SLNH3P7VXF7X2XJZD5Q4KUPMVNNWAFCXDBDX6UTBYRKGQC LQPHYO7IIMLXHUD5IK657BO4BE3SGT5HYDRJDU5OFDF5YUXKIRTAC RM7J7D2HLZX66BJZW5O6BLUIDECLCCPQIZH3PXLQOZC67YCBSY6QC /* wlr_output_attach_render makes the OpenGL context current. */if (!wlr_output_attach_render(m->wlr_output, NULL))return;
/* HACK: This loop is the simplest way to handle ephemeral pageflip* failures but probably not the best. Revisit if damage tracking is* added. */do {/* wlr_output_attach_render makes the OpenGL context current. */if (!wlr_output_attach_render(m->wlr_output, NULL))return;
if (render) {/* Begin the renderer (calls glViewport and some other GL sanity checks) */wlr_renderer_begin(drw, m->wlr_output->width, m->wlr_output->height);wlr_renderer_clear(drw, rootcolor);
if (render) {/* Begin the renderer (calls glViewport and some other GL sanity checks) */wlr_renderer_begin(drw, m->wlr_output->width, m->wlr_output->height);wlr_renderer_clear(drw, rootcolor);
renderlayer(&m->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND], &now);renderlayer(&m->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM], &now);renderclients(m, &now);
renderlayer(&m->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND], &now);renderlayer(&m->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM], &now);renderclients(m, &now);
renderlayer(&m->layers[ZWLR_LAYER_SHELL_V1_LAYER_TOP], &now);renderlayer(&m->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY], &now);
renderlayer(&m->layers[ZWLR_LAYER_SHELL_V1_LAYER_TOP], &now);renderlayer(&m->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY], &now);
/* Hardware cursors are rendered by the GPU on a separate plane, and can be* moved around without re-rendering what's beneath them - which is more* efficient. However, not all hardware supports hardware cursors. For this* reason, wlroots provides a software fallback, which we ask it to render* here. wlr_cursor handles configuring hardware vs software cursors for you,* and this function is a no-op when hardware cursors are in use. */wlr_output_render_software_cursors(m->wlr_output, NULL);
/* Hardware cursors are rendered by the GPU on a separate plane, and can be* moved around without re-rendering what's beneath them - which is more* efficient. However, not all hardware supports hardware cursors. For this* reason, wlroots provides a software fallback, which we ask it to render* here. wlr_cursor handles configuring hardware vs software cursors for you,* and this function is a no-op when hardware cursors are in use. */wlr_output_render_software_cursors(m->wlr_output, NULL);
/* Conclude rendering and swap the buffers, showing the final frame* on-screen. */wlr_renderer_end(drw);}
/* Conclude rendering and swap the buffers, showing the final frame* on-screen. */wlr_renderer_end(drw);}