Title: [208032] trunk
Revision
208032
Author
mmaxfi...@apple.com
Date
2016-10-27 22:28:55 -0700 (Thu, 27 Oct 2016)

Log Message

Teach WebGL code about new buffer targets in WebGL2
https://bugs.webkit.org/show_bug.cgi?id=163924

Reviewed by Dean Jackson.

Source/WebCore:

WebGL 2 adds new buffer targets. Instead of completely reimplementing
the functions again for WebGL 2, we can simply check if we are using
a new kind of context to conditionally enable support.

Test: fast/canvas/webgl/webgl2-buffer-targets.html

* html/canvas/WebGL2RenderingContext.h:
* html/canvas/WebGL2RenderingContext.idl:
* html/canvas/WebGLBuffer.cpp:
(WebCore::WebGLBuffer::associateBufferDataImpl):
(WebCore::WebGLBuffer::associateBufferSubDataImpl):
(WebCore::WebGLBuffer::setTarget):
* html/canvas/WebGLBuffer.h:
* html/canvas/WebGLRenderingContextBase.cpp:
(WebCore::WebGLRenderingContextBase::bindBuffer):
(WebCore::WebGLRenderingContextBase::getBufferParameter):
(WebCore::WebGLRenderingContextBase::validateBufferDataParameters):
* html/canvas/WebGLRenderingContextBase.h:

LayoutTests:

* fast/canvas/webgl/bufferData-offset-length.html:
* fast/canvas/webgl/webgl2-buffer-targets-expected.txt: Added.
* fast/canvas/webgl/webgl2-buffer-targets.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (208031 => 208032)


--- trunk/LayoutTests/ChangeLog	2016-10-28 04:30:22 UTC (rev 208031)
+++ trunk/LayoutTests/ChangeLog	2016-10-28 05:28:55 UTC (rev 208032)
@@ -1,3 +1,14 @@
+2016-10-27  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+        Teach WebGL code about new buffer targets in WebGL2
+        https://bugs.webkit.org/show_bug.cgi?id=163924
+
+        Reviewed by Dean Jackson.
+
+        * fast/canvas/webgl/bufferData-offset-length.html:
+        * fast/canvas/webgl/webgl2-buffer-targets-expected.txt: Added.
+        * fast/canvas/webgl/webgl2-buffer-targets.html: Added.
+
 2016-10-27  Simon Fraser  <simon.fra...@apple.com>
 
         If an animation's keyframes affect stacking context properties, create stacking context while the animation is running

Modified: trunk/LayoutTests/fast/canvas/webgl/bufferData-offset-length.html (208031 => 208032)


--- trunk/LayoutTests/fast/canvas/webgl/bufferData-offset-length.html	2016-10-28 04:30:22 UTC (rev 208031)
+++ trunk/LayoutTests/fast/canvas/webgl/bufferData-offset-length.html	2016-10-28 05:28:55 UTC (rev 208032)
@@ -39,7 +39,7 @@
     debug("");
 
     if (window.internals)
-    		internals.setWebGL2Enabled(true);
+    	internals.setWebGL2Enabled(true);
     gl = initWebGL("example", "vshader", "fshader", [ "vPosition", "index" ],
                    [ 1, 1, 1, 1 ], 1, null, true);
 
@@ -80,6 +80,8 @@
     checkRedValue(10, 10, 0, "Left half of canvas should be filled");
     checkRedValue(30, 10, 255, "Right half of canvas should be empty");
 
+    gl.deleteBuffer(vertexObject);
+
     function checkRedValue(x, y, value, msg) {
         gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
         gl.drawArrays(gl.TRIANGLES, 0, 6);

Added: trunk/LayoutTests/fast/canvas/webgl/webgl2-buffer-targets-expected.txt (0 => 208032)


--- trunk/LayoutTests/fast/canvas/webgl/webgl2-buffer-targets-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/canvas/webgl/webgl2-buffer-targets-expected.txt	2016-10-28 05:28:55 UTC (rev 208032)
@@ -0,0 +1,88 @@
+CONSOLE MESSAGE: line 55: WebGL: INVALID_ENUM: bindBuffer: invalid target
+CONSOLE MESSAGE: line 57: WebGL: INVALID_ENUM: bufferData: invalid target
+CONSOLE MESSAGE: line 55: WebGL: INVALID_ENUM: bindBuffer: invalid target
+CONSOLE MESSAGE: line 57: WebGL: INVALID_ENUM: bufferData: invalid target
+CONSOLE MESSAGE: line 55: WebGL: INVALID_ENUM: bindBuffer: invalid target
+CONSOLE MESSAGE: line 57: WebGL: INVALID_ENUM: bufferData: invalid target
+CONSOLE MESSAGE: line 55: WebGL: INVALID_ENUM: bindBuffer: invalid target
+CONSOLE MESSAGE: line 57: WebGL: INVALID_ENUM: bufferData: invalid target
+CONSOLE MESSAGE: line 55: WebGL: INVALID_ENUM: bindBuffer: invalid target
+CONSOLE MESSAGE: line 57: WebGL: INVALID_ENUM: bufferData: invalid target
+CONSOLE MESSAGE: line 55: WebGL: INVALID_ENUM: bindBuffer: invalid target
+CONSOLE MESSAGE: line 57: WebGL: INVALID_ENUM: bufferData: invalid target
+Checks that using WebGL 2 buffer targets don't cause errors
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.NO_ERROR
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.INVALID_ENUM
+PASS context.getError() is context.NO_ERROR
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/canvas/webgl/webgl2-buffer-targets.html (0 => 208032)


--- trunk/LayoutTests/fast/canvas/webgl/webgl2-buffer-targets.html	                        (rev 0)
+++ trunk/LayoutTests/fast/canvas/webgl/webgl2-buffer-targets.html	2016-10-28 05:28:55 UTC (rev 208032)
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<canvas id="c" width="40" height="40"></canvas>
+<script>
+description("Checks that using WebGL 2 buffer targets don't cause errors");
+
+if (window.internals)
+	internals.setWebGL2Enabled(true);
+
+var canvas = document.getElementById("c");
+var context = canvas.getContext("webgl2");
+shouldBe("context.getError()", "context.NO_ERROR");
+checkBufferSuccess(context, context.ARRAY_BUFFER);
+checkBufferSuccess(context, context.COPY_READ_BUFFER);
+checkBufferSuccess(context, context.COPY_WRITE_BUFFER);
+checkBufferSuccess(context, context.ELEMENT_ARRAY_BUFFER);
+checkBufferSuccess(context, context.PIXEL_PACK_BUFFER);
+checkBufferSuccess(context, context.PIXEL_UNPACK_BUFFER);
+checkBufferSuccess(context, context.TRANSFORM_FEEDBACK_BUFFER);
+checkBufferSuccess(context, context.UNIFORM_BUFFER);
+
+canvas = document.createElement("canvas");
+canvas.width = 40;
+canvas.height = 40;
+context = canvas.getContext("webgl");
+shouldBe("context.getError()", "context.NO_ERROR");
+shouldBe("context.getError()", "context.NO_ERROR");
+checkBufferSuccess(context, context.ARRAY_BUFFER);
+checkBufferFailure(context, context.COPY_READ_BUFFER);
+checkBufferFailure(context, context.COPY_WRITE_BUFFER);
+checkBufferSuccess(context, context.ELEMENT_ARRAY_BUFFER);
+checkBufferFailure(context, context.PIXEL_PACK_BUFFER);
+checkBufferFailure(context, context.PIXEL_UNPACK_BUFFER);
+checkBufferFailure(context, context.TRANSFORM_FEEDBACK_BUFFER);
+checkBufferFailure(context, context.UNIFORM_BUFFER);
+
+function checkBufferSuccess(context, target) {
+	var buffer = context.createBuffer();
+	shouldBe("context.getError()", "context.NO_ERROR");
+	context.bindBuffer(target, buffer);
+	shouldBe("context.getError()", "context.NO_ERROR");
+	context.bufferData(target, new Int32Array(16), context.STATIC_DRAW);
+	shouldBe("context.getError()", "context.NO_ERROR");
+	context.deleteBuffer(buffer);
+	shouldBe("context.getError()", "context.NO_ERROR");
+}
+
+function checkBufferFailure(context, target) {
+	var buffer = context.createBuffer();
+	shouldBe("context.getError()", "context.NO_ERROR");
+	context.bindBuffer(target, buffer);
+	shouldBe("context.getError()", "context.INVALID_ENUM");
+	context.bufferData(target, new Int32Array(16), context.STATIC_DRAW);
+	shouldBe("context.getError()", "context.INVALID_ENUM");
+	context.deleteBuffer(buffer);
+	shouldBe("context.getError()", "context.NO_ERROR");
+}
+</script>
+<script src=""
+</body>
+</html>
\ No newline at end of file

Modified: trunk/Source/WebCore/ChangeLog (208031 => 208032)


--- trunk/Source/WebCore/ChangeLog	2016-10-28 04:30:22 UTC (rev 208031)
+++ trunk/Source/WebCore/ChangeLog	2016-10-28 05:28:55 UTC (rev 208032)
@@ -1,3 +1,29 @@
+2016-10-27  Myles C. Maxfield  <mmaxfi...@apple.com>
+
+        Teach WebGL code about new buffer targets in WebGL2
+        https://bugs.webkit.org/show_bug.cgi?id=163924
+
+        Reviewed by Dean Jackson.
+
+        WebGL 2 adds new buffer targets. Instead of completely reimplementing
+        the functions again for WebGL 2, we can simply check if we are using
+        a new kind of context to conditionally enable support.
+
+        Test: fast/canvas/webgl/webgl2-buffer-targets.html
+
+        * html/canvas/WebGL2RenderingContext.h:
+        * html/canvas/WebGL2RenderingContext.idl:
+        * html/canvas/WebGLBuffer.cpp:
+        (WebCore::WebGLBuffer::associateBufferDataImpl):
+        (WebCore::WebGLBuffer::associateBufferSubDataImpl):
+        (WebCore::WebGLBuffer::setTarget):
+        * html/canvas/WebGLBuffer.h:
+        * html/canvas/WebGLRenderingContextBase.cpp:
+        (WebCore::WebGLRenderingContextBase::bindBuffer):
+        (WebCore::WebGLRenderingContextBase::getBufferParameter):
+        (WebCore::WebGLRenderingContextBase::validateBufferDataParameters):
+        * html/canvas/WebGLRenderingContextBase.h:
+
 2016-10-27  Dave Hyatt  <hy...@apple.com>
 
         [CSS Parser] Enhance grid-auto-flow parsing to allow dense first.

Modified: trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.h (208031 => 208032)


--- trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.h	2016-10-28 04:30:22 UTC (rev 208031)
+++ trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.h	2016-10-28 05:28:55 UTC (rev 208032)
@@ -44,6 +44,8 @@
     WebGL2RenderingContext(HTMLCanvasElement*, RefPtr<GraphicsContext3D>&&, GraphicsContext3D::Attributes);
 
     /* Buffer objects */
+    using WebGLRenderingContextBase::bufferData;
+    using WebGLRenderingContextBase::bufferSubData;
     void bufferData(GC3Denum target, ArrayBufferView& data, GC3Denum usage, GC3Duint srcOffset, GC3Duint length);
     void bufferSubData(GC3Denum target, long long offset, ArrayBufferView& data, GC3Duint srcOffset, GC3Duint length);
     void copyBufferSubData(GC3Denum readTarget, GC3Denum writeTarget, GC3Dint64 readOffset, GC3Dint64 writeOffset, GC3Dint64 size);

Modified: trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.idl (208031 => 208032)


--- trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.idl	2016-10-28 04:30:22 UTC (rev 208031)
+++ trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.idl	2016-10-28 05:28:55 UTC (rev 208032)
@@ -39,6 +39,7 @@
 typedef unsigned long long GLuint64;
 typedef unrestricted float GLfloat;
 typedef unrestricted float GLclampf;
+typedef (ArrayBuffer or ArrayBufferView) BufferDataSource;
 
 // FIXME: Should allow ImageBitmap too.
 typedef (ImageData or HTMLImageElement or HTMLCanvasElement or HTMLVideoElement) TexImageSource;
@@ -336,8 +337,14 @@
     const GLuint64 TIMEOUT_IGNORED                             = 0xFFFFFFFFFFFFFFFF;
 
     /* Buffer objects */
+    // WebGL1:
+    void bufferData(GLenum target, GLsizeiptr size, GLenum usage);
+    void bufferData(GLenum target, BufferDataSource? srcData, GLenum usage);
+    void bufferSubData(GLenum target, GLintptr dstByteOffset, BufferDataSource? srcData);
+    // WebGL2:
     void bufferData(GLenum target, ArrayBufferView data, GLenum usage, GLuint srcOffset, optional GLuint length = 0);
     void bufferSubData(GLenum target, GLintptr dstByteOffset, ArrayBufferView srcData, GLuint srcOffset, optional GLuint length = 0);
+
     void copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
     // MapBufferRange, in particular its read-only and write-only modes,
     // can not be exposed safely to _javascript_. GetBufferSubData

Modified: trunk/Source/WebCore/html/canvas/WebGLBuffer.cpp (208031 => 208032)


--- trunk/Source/WebCore/html/canvas/WebGLBuffer.cpp	2016-10-28 04:30:22 UTC (rev 208031)
+++ trunk/Source/WebCore/html/canvas/WebGLBuffer.cpp	2016-10-28 05:28:55 UTC (rev 208032)
@@ -87,6 +87,18 @@
         m_byteLength = byteLength;
         return true;
     default:
+#if ENABLE(WEBGL2)
+        switch (m_target) {
+        case GraphicsContext3D::COPY_READ_BUFFER:
+        case GraphicsContext3D::COPY_WRITE_BUFFER:
+        case GraphicsContext3D::PIXEL_PACK_BUFFER:
+        case GraphicsContext3D::PIXEL_UNPACK_BUFFER:
+        case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER:
+        case GraphicsContext3D::UNIFORM_BUFFER:
+            m_byteLength = byteLength;
+            return true;
+        }
+#endif
         return false;
     }
 }
@@ -135,6 +147,17 @@
     case GraphicsContext3D::ARRAY_BUFFER:
         return true;
     default:
+#if ENABLE(WEBGL2)
+        switch (m_target) {
+        case GraphicsContext3D::COPY_READ_BUFFER:
+        case GraphicsContext3D::COPY_WRITE_BUFFER:
+        case GraphicsContext3D::PIXEL_PACK_BUFFER:
+        case GraphicsContext3D::PIXEL_UNPACK_BUFFER:
+        case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER:
+        case GraphicsContext3D::UNIFORM_BUFFER:
+            return true;
+        }
+#endif
         return false;
     }
 }
@@ -186,7 +209,7 @@
     m_nextAvailableCacheEntry = (m_nextAvailableCacheEntry + 1) % WTF_ARRAY_LENGTH(m_maxIndexCache);
 }
 
-void WebGLBuffer::setTarget(GC3Denum target)
+void WebGLBuffer::setTarget(GC3Denum target, bool forWebGL2)
 {
     // In WebGL, a buffer is bound to one target in its lifetime
     if (m_target)
@@ -193,6 +216,19 @@
         return;
     if (target == GraphicsContext3D::ARRAY_BUFFER || target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER)
         m_target = target;
+    else if (forWebGL2) {
+#if ENABLE(WEBGL2)
+        switch (target) {
+        case GraphicsContext3D::COPY_READ_BUFFER:
+        case GraphicsContext3D::COPY_WRITE_BUFFER:
+        case GraphicsContext3D::PIXEL_PACK_BUFFER:
+        case GraphicsContext3D::PIXEL_UNPACK_BUFFER:
+        case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER:
+        case GraphicsContext3D::UNIFORM_BUFFER:
+            m_target = target;
+        }
+#endif
+    }
 }
 
 void WebGLBuffer::clearCachedMaxIndices()

Modified: trunk/Source/WebCore/html/canvas/WebGLBuffer.h (208031 => 208032)


--- trunk/Source/WebCore/html/canvas/WebGLBuffer.h	2016-10-28 04:30:22 UTC (rev 208031)
+++ trunk/Source/WebCore/html/canvas/WebGLBuffer.h	2016-10-28 05:28:55 UTC (rev 208032)
@@ -61,7 +61,7 @@
     void setCachedMaxIndex(GC3Denum type, int value);
 
     GC3Denum getTarget() const { return m_target; }
-    void setTarget(GC3Denum);
+    void setTarget(GC3Denum, bool forWebGL2);
 
     bool hasEverBeenBound() const { return object() && m_target; }
 

Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp (208031 => 208032)


--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp	2016-10-28 04:30:22 UTC (rev 208031)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp	2016-10-28 05:28:55 UTC (rev 208032)
@@ -919,13 +919,44 @@
     else if (target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER)
         m_boundVertexArrayObject->setElementArrayBuffer(buffer);
     else {
-        synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "bindBuffer", "invalid target");
-        return;
+        bool success = false;
+#if ENABLE(WEBGL2)
+        if (isWebGL2()) {
+            success = true;
+            switch (target) {
+            case GraphicsContext3D::COPY_READ_BUFFER:
+                m_boundCopyReadBuffer = buffer;
+                break;
+            case GraphicsContext3D::COPY_WRITE_BUFFER:
+                m_boundCopyWriteBuffer = buffer;
+                break;
+            case GraphicsContext3D::PIXEL_PACK_BUFFER:
+                m_boundPixelPackBuffer = buffer;
+                break;
+            case GraphicsContext3D::PIXEL_UNPACK_BUFFER:
+                m_boundPixelUnpackBuffer = buffer;
+                break;
+            case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER:
+                m_boundTransformFeedbackBuffer = buffer;
+                break;
+            case GraphicsContext3D::UNIFORM_BUFFER:
+                m_boundUniformBuffer = buffer;
+                break;
+            default:
+                success = false;
+                break;
+            }
+        }
+#endif
+        if (!success) {
+            synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "bindBuffer", "invalid target");
+            return;
+        }
     }
 
     m_context->bindBuffer(target, objectOrZero(buffer));
     if (buffer)
-        buffer->setTarget(target);
+        buffer->setTarget(target, isWebGL2());
 }
 
 void WebGLRenderingContextBase::bindFramebuffer(GC3Denum target, WebGLFramebuffer* buffer)
@@ -2165,7 +2196,24 @@
 {
     if (isContextLostOrPending())
         return WebGLGetInfo();
-    if (target != GraphicsContext3D::ARRAY_BUFFER && target != GraphicsContext3D::ELEMENT_ARRAY_BUFFER) {
+
+    bool valid = false;
+    if (target == GraphicsContext3D::ARRAY_BUFFER || target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER)
+        valid = true;
+#if ENABLE(WEBGL2)
+    if (isWebGL2()) {
+        switch (target) {
+        case GraphicsContext3D::COPY_READ_BUFFER:
+        case GraphicsContext3D::COPY_WRITE_BUFFER:
+        case GraphicsContext3D::PIXEL_PACK_BUFFER:
+        case GraphicsContext3D::PIXEL_UNPACK_BUFFER:
+        case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER:
+        case GraphicsContext3D::UNIFORM_BUFFER:
+            valid = true;
+        }
+    }
+#endif
+    if (!valid) {
         synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getBufferParameter", "invalid target");
         return WebGLGetInfo();
     }
@@ -4457,6 +4505,37 @@
         buffer = m_boundArrayBuffer.get();
         break;
     default:
+#if ENABLE(WEBGL2)
+        bool success = true;
+        if (isWebGL2()) {
+            switch (target) {
+            case GraphicsContext3D::COPY_READ_BUFFER:
+                buffer = m_boundCopyReadBuffer.get();
+                break;
+            case GraphicsContext3D::COPY_WRITE_BUFFER:
+                buffer = m_boundCopyWriteBuffer.get();
+                break;
+            case GraphicsContext3D::PIXEL_PACK_BUFFER:
+                buffer = m_boundPixelPackBuffer.get();
+                break;
+            case GraphicsContext3D::PIXEL_UNPACK_BUFFER:
+                buffer = m_boundPixelUnpackBuffer.get();
+                break;
+            case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER:
+                buffer = m_boundTransformFeedbackBuffer.get();
+                break;
+            case GraphicsContext3D::UNIFORM_BUFFER:
+                buffer = m_boundUniformBuffer.get();
+                break;
+            default:
+                success = false;
+                break;
+            }
+        } else
+            success = false;
+        if (success)
+            break;
+#endif
         synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invalid target");
         return nullptr;
     }

Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h (208031 => 208032)


--- trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h	2016-10-28 04:30:22 UTC (rev 208031)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h	2016-10-28 05:28:55 UTC (rev 208032)
@@ -427,6 +427,12 @@
 
     // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER and stored values for ELEMENT_ARRAY_BUFFER
     RefPtr<WebGLBuffer> m_boundArrayBuffer;
+    RefPtr<WebGLBuffer> m_boundCopyReadBuffer;
+    RefPtr<WebGLBuffer> m_boundCopyWriteBuffer;
+    RefPtr<WebGLBuffer> m_boundPixelPackBuffer;
+    RefPtr<WebGLBuffer> m_boundPixelUnpackBuffer;
+    RefPtr<WebGLBuffer> m_boundTransformFeedbackBuffer;
+    RefPtr<WebGLBuffer> m_boundUniformBuffer;
 
     RefPtr<WebGLVertexArrayObjectBase> m_defaultVertexArrayObject;
     RefPtr<WebGLVertexArrayObjectBase> m_boundVertexArrayObject;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to