Changeset 208032 in webkit
- Timestamp:
- Oct 27, 2016 10:28:55 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r208025 r208032 1 2016-10-27 Myles C. Maxfield <mmaxfield@apple.com> 2 3 Teach WebGL code about new buffer targets in WebGL2 4 https://bugs.webkit.org/show_bug.cgi?id=163924 5 6 Reviewed by Dean Jackson. 7 8 * fast/canvas/webgl/bufferData-offset-length.html: 9 * fast/canvas/webgl/webgl2-buffer-targets-expected.txt: Added. 10 * fast/canvas/webgl/webgl2-buffer-targets.html: Added. 11 1 12 2016-10-27 Simon Fraser <simon.fraser@apple.com> 2 13 -
trunk/LayoutTests/fast/canvas/webgl/bufferData-offset-length.html
r207649 r208032 40 40 41 41 if (window.internals) 42 42 internals.setWebGL2Enabled(true); 43 43 gl = initWebGL("example", "vshader", "fshader", [ "vPosition", "index" ], 44 44 [ 1, 1, 1, 1 ], 1, null, true); … … 81 81 checkRedValue(30, 10, 255, "Right half of canvas should be empty"); 82 82 83 gl.deleteBuffer(vertexObject); 84 83 85 function checkRedValue(x, y, value, msg) { 84 86 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); -
trunk/Source/WebCore/ChangeLog
r208031 r208032 1 2016-10-27 Myles C. Maxfield <mmaxfield@apple.com> 2 3 Teach WebGL code about new buffer targets in WebGL2 4 https://bugs.webkit.org/show_bug.cgi?id=163924 5 6 Reviewed by Dean Jackson. 7 8 WebGL 2 adds new buffer targets. Instead of completely reimplementing 9 the functions again for WebGL 2, we can simply check if we are using 10 a new kind of context to conditionally enable support. 11 12 Test: fast/canvas/webgl/webgl2-buffer-targets.html 13 14 * html/canvas/WebGL2RenderingContext.h: 15 * html/canvas/WebGL2RenderingContext.idl: 16 * html/canvas/WebGLBuffer.cpp: 17 (WebCore::WebGLBuffer::associateBufferDataImpl): 18 (WebCore::WebGLBuffer::associateBufferSubDataImpl): 19 (WebCore::WebGLBuffer::setTarget): 20 * html/canvas/WebGLBuffer.h: 21 * html/canvas/WebGLRenderingContextBase.cpp: 22 (WebCore::WebGLRenderingContextBase::bindBuffer): 23 (WebCore::WebGLRenderingContextBase::getBufferParameter): 24 (WebCore::WebGLRenderingContextBase::validateBufferDataParameters): 25 * html/canvas/WebGLRenderingContextBase.h: 26 1 27 2016-10-27 Dave Hyatt <hyatt@apple.com> 2 28 -
trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.h
r207724 r208032 45 45 46 46 /* Buffer objects */ 47 using WebGLRenderingContextBase::bufferData; 48 using WebGLRenderingContextBase::bufferSubData; 47 49 void bufferData(GC3Denum target, ArrayBufferView& data, GC3Denum usage, GC3Duint srcOffset, GC3Duint length); 48 50 void bufferSubData(GC3Denum target, long long offset, ArrayBufferView& data, GC3Duint srcOffset, GC3Duint length); -
trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.idl
r207685 r208032 40 40 typedef unrestricted float GLfloat; 41 41 typedef unrestricted float GLclampf; 42 typedef (ArrayBuffer or ArrayBufferView) BufferDataSource; 42 43 43 44 // FIXME: Should allow ImageBitmap too. … … 337 338 338 339 /* Buffer objects */ 340 // WebGL1: 341 void bufferData(GLenum target, GLsizeiptr size, GLenum usage); 342 void bufferData(GLenum target, BufferDataSource? srcData, GLenum usage); 343 void bufferSubData(GLenum target, GLintptr dstByteOffset, BufferDataSource? srcData); 344 // WebGL2: 339 345 void bufferData(GLenum target, ArrayBufferView data, GLenum usage, GLuint srcOffset, optional GLuint length = 0); 340 346 void bufferSubData(GLenum target, GLintptr dstByteOffset, ArrayBufferView srcData, GLuint srcOffset, optional GLuint length = 0); 347 341 348 void copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); 342 349 // MapBufferRange, in particular its read-only and write-only modes, -
trunk/Source/WebCore/html/canvas/WebGLBuffer.cpp
r208022 r208032 88 88 return true; 89 89 default: 90 #if ENABLE(WEBGL2) 91 switch (m_target) { 92 case GraphicsContext3D::COPY_READ_BUFFER: 93 case GraphicsContext3D::COPY_WRITE_BUFFER: 94 case GraphicsContext3D::PIXEL_PACK_BUFFER: 95 case GraphicsContext3D::PIXEL_UNPACK_BUFFER: 96 case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER: 97 case GraphicsContext3D::UNIFORM_BUFFER: 98 m_byteLength = byteLength; 99 return true; 100 } 101 #endif 90 102 return false; 91 103 } … … 136 148 return true; 137 149 default: 150 #if ENABLE(WEBGL2) 151 switch (m_target) { 152 case GraphicsContext3D::COPY_READ_BUFFER: 153 case GraphicsContext3D::COPY_WRITE_BUFFER: 154 case GraphicsContext3D::PIXEL_PACK_BUFFER: 155 case GraphicsContext3D::PIXEL_UNPACK_BUFFER: 156 case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER: 157 case GraphicsContext3D::UNIFORM_BUFFER: 158 return true; 159 } 160 #endif 138 161 return false; 139 162 } … … 187 210 } 188 211 189 void WebGLBuffer::setTarget(GC3Denum target )212 void WebGLBuffer::setTarget(GC3Denum target, bool forWebGL2) 190 213 { 191 214 // In WebGL, a buffer is bound to one target in its lifetime … … 194 217 if (target == GraphicsContext3D::ARRAY_BUFFER || target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) 195 218 m_target = target; 219 else if (forWebGL2) { 220 #if ENABLE(WEBGL2) 221 switch (target) { 222 case GraphicsContext3D::COPY_READ_BUFFER: 223 case GraphicsContext3D::COPY_WRITE_BUFFER: 224 case GraphicsContext3D::PIXEL_PACK_BUFFER: 225 case GraphicsContext3D::PIXEL_UNPACK_BUFFER: 226 case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER: 227 case GraphicsContext3D::UNIFORM_BUFFER: 228 m_target = target; 229 } 230 #endif 231 } 196 232 } 197 233 -
trunk/Source/WebCore/html/canvas/WebGLBuffer.h
r197563 r208032 62 62 63 63 GC3Denum getTarget() const { return m_target; } 64 void setTarget(GC3Denum );64 void setTarget(GC3Denum, bool forWebGL2); 65 65 66 66 bool hasEverBeenBound() const { return object() && m_target; } -
trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp
r208022 r208032 920 920 m_boundVertexArrayObject->setElementArrayBuffer(buffer); 921 921 else { 922 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "bindBuffer", "invalid target"); 923 return; 922 bool success = false; 923 #if ENABLE(WEBGL2) 924 if (isWebGL2()) { 925 success = true; 926 switch (target) { 927 case GraphicsContext3D::COPY_READ_BUFFER: 928 m_boundCopyReadBuffer = buffer; 929 break; 930 case GraphicsContext3D::COPY_WRITE_BUFFER: 931 m_boundCopyWriteBuffer = buffer; 932 break; 933 case GraphicsContext3D::PIXEL_PACK_BUFFER: 934 m_boundPixelPackBuffer = buffer; 935 break; 936 case GraphicsContext3D::PIXEL_UNPACK_BUFFER: 937 m_boundPixelUnpackBuffer = buffer; 938 break; 939 case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER: 940 m_boundTransformFeedbackBuffer = buffer; 941 break; 942 case GraphicsContext3D::UNIFORM_BUFFER: 943 m_boundUniformBuffer = buffer; 944 break; 945 default: 946 success = false; 947 break; 948 } 949 } 950 #endif 951 if (!success) { 952 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "bindBuffer", "invalid target"); 953 return; 954 } 924 955 } 925 956 926 957 m_context->bindBuffer(target, objectOrZero(buffer)); 927 958 if (buffer) 928 buffer->setTarget(target );959 buffer->setTarget(target, isWebGL2()); 929 960 } 930 961 … … 2166 2197 if (isContextLostOrPending()) 2167 2198 return WebGLGetInfo(); 2168 if (target != GraphicsContext3D::ARRAY_BUFFER && target != GraphicsContext3D::ELEMENT_ARRAY_BUFFER) { 2199 2200 bool valid = false; 2201 if (target == GraphicsContext3D::ARRAY_BUFFER || target == GraphicsContext3D::ELEMENT_ARRAY_BUFFER) 2202 valid = true; 2203 #if ENABLE(WEBGL2) 2204 if (isWebGL2()) { 2205 switch (target) { 2206 case GraphicsContext3D::COPY_READ_BUFFER: 2207 case GraphicsContext3D::COPY_WRITE_BUFFER: 2208 case GraphicsContext3D::PIXEL_PACK_BUFFER: 2209 case GraphicsContext3D::PIXEL_UNPACK_BUFFER: 2210 case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER: 2211 case GraphicsContext3D::UNIFORM_BUFFER: 2212 valid = true; 2213 } 2214 } 2215 #endif 2216 if (!valid) { 2169 2217 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, "getBufferParameter", "invalid target"); 2170 2218 return WebGLGetInfo(); … … 4458 4506 break; 4459 4507 default: 4508 #if ENABLE(WEBGL2) 4509 bool success = true; 4510 if (isWebGL2()) { 4511 switch (target) { 4512 case GraphicsContext3D::COPY_READ_BUFFER: 4513 buffer = m_boundCopyReadBuffer.get(); 4514 break; 4515 case GraphicsContext3D::COPY_WRITE_BUFFER: 4516 buffer = m_boundCopyWriteBuffer.get(); 4517 break; 4518 case GraphicsContext3D::PIXEL_PACK_BUFFER: 4519 buffer = m_boundPixelPackBuffer.get(); 4520 break; 4521 case GraphicsContext3D::PIXEL_UNPACK_BUFFER: 4522 buffer = m_boundPixelUnpackBuffer.get(); 4523 break; 4524 case GraphicsContext3D::TRANSFORM_FEEDBACK_BUFFER: 4525 buffer = m_boundTransformFeedbackBuffer.get(); 4526 break; 4527 case GraphicsContext3D::UNIFORM_BUFFER: 4528 buffer = m_boundUniformBuffer.get(); 4529 break; 4530 default: 4531 success = false; 4532 break; 4533 } 4534 } else 4535 success = false; 4536 if (success) 4537 break; 4538 #endif 4460 4539 synthesizeGLError(GraphicsContext3D::INVALID_ENUM, functionName, "invalid target"); 4461 4540 return nullptr; -
trunk/Source/WebCore/html/canvas/WebGLRenderingContextBase.h
r207724 r208032 428 428 // List of bound VBO's. Used to maintain info about sizes for ARRAY_BUFFER and stored values for ELEMENT_ARRAY_BUFFER 429 429 RefPtr<WebGLBuffer> m_boundArrayBuffer; 430 RefPtr<WebGLBuffer> m_boundCopyReadBuffer; 431 RefPtr<WebGLBuffer> m_boundCopyWriteBuffer; 432 RefPtr<WebGLBuffer> m_boundPixelPackBuffer; 433 RefPtr<WebGLBuffer> m_boundPixelUnpackBuffer; 434 RefPtr<WebGLBuffer> m_boundTransformFeedbackBuffer; 435 RefPtr<WebGLBuffer> m_boundUniformBuffer; 430 436 431 437 RefPtr<WebGLVertexArrayObjectBase> m_defaultVertexArrayObject;
Note: See TracChangeset
for help on using the changeset viewer.