diff --git a/src/modules/graphics/opengl/Canvas.cpp b/src/modules/graphics/opengl/Canvas.cpp index 5ed6f4d66..15c567653 100644 --- a/src/modules/graphics/opengl/Canvas.cpp +++ b/src/modules/graphics/opengl/Canvas.cpp @@ -433,8 +433,16 @@ void Canvas::startGrab(const std::vector &canvases) if (canvases[i]->getWidth() != width || canvases[i]->getHeight() != height) throw love::Exception("All canvases must have the same dimensions."); - if (canvases[i]->getTextureFormat() != format && !multiformatsupported) - throw love::Exception("This system doesn't support multi-canvas rendering with different canvas formats."); + Format otherformat = canvases[i]->getTextureFormat(); + + if (otherformat != format) + { + if (!multiformatsupported) + throw love::Exception("This system doesn't support multi-canvas rendering with different canvas formats."); + else if (otherformat == FORMAT_SRGB || format == FORMAT_SRGB) + // Driver bugs related to enabling GL_FRAMEBUFFER_SRGB... + throw love::Exception("sRGB and non-sRGB canvas formats cannot be mixed when using multi-canvas rendering."); + } if (canvases[i]->getMSAA() != 0) throw love::Exception("Multi-canvas rendering is not supported with MSAA.");