r?jrmuizel - Forbid reads from backbuffer with readBuffer(NONE). draft
authorJeff Gilbert <jdashg@gmail.com>
Thu, 26 May 2016 18:07:52 -0700
changeset 371889 a2a8f632b7a91062f22f4db923f4f26de6f8468a
parent 371888 15690fbae56af285205b39664f4225a860fef322
child 371890 364fb576e14b45e2a6861668fbf04b8adf98d906
push id19380
push userjgilbert@mozilla.com
push dateFri, 27 May 2016 01:10:45 +0000
reviewersjrmuizel
milestone49.0a1
r?jrmuizel - Forbid reads from backbuffer with readBuffer(NONE). From f833677175112cbfa2957a8a0ab3c8432c767c63 Mon Sep 17 00:00:00 2001 --- dom/canvas/WebGLContext.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) MozReview-Commit-ID: 8DX0lQea0Oi
dom/canvas/WebGLContext.cpp
--- a/dom/canvas/WebGLContext.cpp
+++ b/dom/canvas/WebGLContext.cpp
@@ -1868,16 +1868,24 @@ WebGLContext::DidRefresh()
 
 bool
 WebGLContext::ValidateCurFBForRead(const char* funcName,
                                    const webgl::FormatUsageInfo** const out_format,
                                    uint32_t* const out_width, uint32_t* const out_height,
                                    GLenum* const out_mode)
 {
     if (!mBoundReadFramebuffer) {
+        const GLenum readBufferMode = gl->Screen()->GetReadBufferMode();
+        if (readBufferMode == LOCAL_GL_NONE) {
+            ErrorInvalidOperation("%s: Can't read from backbuffer when readBuffer mode is"
+                                  " NONE.",
+                                  funcName);
+            return false;
+        }
+
         ClearBackbufferIfNeeded();
 
         // FIXME - here we're assuming that the default framebuffer is backed by
         // UNSIGNED_BYTE that might not always be true, say if we had a 16bpp default
         // framebuffer.
         auto effFormat = mOptions.alpha ? webgl::EffectiveFormat::RGBA8
                                         : webgl::EffectiveFormat::RGB8;