Changeset 207649 in webkit


Ignore:
Timestamp:
Oct 20, 2016 6:17:31 PM (7 years ago)
Author:
mmaxfield@apple.com
Message:

Implement WebGL2 bufferData() and bufferSubData() methods
https://bugs.webkit.org/show_bug.cgi?id=163759

Reviewed by Dean Jackson.

Source/WebCore:

These new overloads simply clip the input array buffer.

Test: fast/canvas/webgl/bufferData-offset-length.html

  • html/canvas/WebGL2RenderingContext.cpp:

(WebCore::WebGL2RenderingContext::bufferData):
(WebCore::WebGL2RenderingContext::bufferSubData):

  • html/canvas/WebGL2RenderingContext.h:
  • html/canvas/WebGL2RenderingContext.idl:

LayoutTests:

  • fast/canvas/webgl/bufferData-offset-length-expected.txt: Added.
  • fast/canvas/webgl/bufferData-offset-length.html: Added.
  • fast/canvas/webgl/resources/webgl-test.js:

(create3DContext):
(initWebGL):

Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r207647 r207649  
     12016-10-20  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Implement WebGL2 bufferData() and bufferSubData() methods
     4        https://bugs.webkit.org/show_bug.cgi?id=163759
     5
     6        Reviewed by Dean Jackson.
     7
     8        * fast/canvas/webgl/bufferData-offset-length-expected.txt: Added.
     9        * fast/canvas/webgl/bufferData-offset-length.html: Added.
     10        * fast/canvas/webgl/resources/webgl-test.js:
     11        (create3DContext):
     12        (initWebGL):
     13
    1142016-10-20  Nan Wang  <n_wang@apple.com>
    215
  • trunk/LayoutTests/fast/canvas/webgl/resources/webgl-test.js

    r198091 r207649  
    4040// Returns the WebGLRenderingContext for any known implementation.
    4141//
    42 function create3DContext(canvas, attributes)
     42function create3DContext(canvas, attributes, version2)
    4343{
    4444    if (!canvas)
    4545        canvas = document.createElement("canvas");
    4646    var context = null;
     47    if (version2) {
     48        try {
     49            context = canvas.getContext("webgl2", attributes);
     50        } catch(e) {}
     51    }
    4752    try {
    4853        context = canvas.getContext("experimental-webgl", attributes);
     
    241246// Enable depth testing and blending with a blend func of (SRC_ALPHA, ONE_MINUS_SRC_ALPHA)
    242247//
    243 function initWebGL(canvasName, vshader, fshader, attribs, clearColor, clearDepth, contextAttribs)
     248function initWebGL(canvasName, vshader, fshader, attribs, clearColor, clearDepth, contextAttribs, version2)
    244249{
    245250    var canvas = document.getElementById(canvasName);
    246     var gl = create3DContext(canvas, contextAttribs);
     251    var gl = create3DContext(canvas, contextAttribs, version2);
    247252    if (!gl) {
    248253        alert("No WebGL context found");
  • trunk/Source/WebCore/ChangeLog

    r207648 r207649  
     12016-10-20  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Implement WebGL2 bufferData() and bufferSubData() methods
     4        https://bugs.webkit.org/show_bug.cgi?id=163759
     5
     6        Reviewed by Dean Jackson.
     7
     8        These new overloads simply clip the input array buffer.
     9
     10        Test: fast/canvas/webgl/bufferData-offset-length.html
     11
     12        * html/canvas/WebGL2RenderingContext.cpp:
     13        (WebCore::WebGL2RenderingContext::bufferData):
     14        (WebCore::WebGL2RenderingContext::bufferSubData):
     15        * html/canvas/WebGL2RenderingContext.h:
     16        * html/canvas/WebGL2RenderingContext.idl:
     17
    1182016-10-20  Chris Dumez  <cdumez@apple.com>
    219
  • trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.cpp

    r207644 r207649  
    8787    m_context->getExtensions()->ensureEnabled("GL_EXT_shader_texture_lod");
    8888    m_context->getExtensions()->ensureEnabled("GL_EXT_frag_depth");
     89}
     90
     91void WebGL2RenderingContext::bufferData(GC3Denum target, ArrayBufferView& data, GC3Denum usage, GC3Duint srcOffset, GC3Duint length)
     92{
     93    if (srcOffset > data.byteLength() || length > data.byteLength() - srcOffset) {
     94        synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "bufferData", "srcOffset or length is out of bounds");
     95        return;
     96    }
     97    auto slice = Uint8Array::create(data.buffer(), data.byteOffset() + srcOffset, length);
     98    if (!slice) {
     99        synthesizeGLError(GraphicsContext3D::OUT_OF_MEMORY, "bufferData", "Could not create intermediate ArrayBufferView");
     100        return;
     101    }
     102    WebGLRenderingContextBase::bufferData(target, slice.get(), usage);
     103}
     104
     105void WebGL2RenderingContext::bufferSubData(GC3Denum target, long long offset, ArrayBufferView& data, GC3Duint srcOffset, GC3Duint length)
     106{
     107    if (srcOffset > data.byteLength() || length > data.byteLength() - srcOffset) {
     108        synthesizeGLError(GraphicsContext3D::INVALID_VALUE, "bufferData", "srcOffset or length is out of bounds");
     109        return;
     110    }
     111    auto slice = Uint8Array::create(data.buffer(), data.byteOffset() + srcOffset, length);
     112    if (!slice) {
     113        synthesizeGLError(GraphicsContext3D::OUT_OF_MEMORY, "bufferData", "Could not create intermediate ArrayBufferView");
     114        return;
     115    }
     116    WebGLRenderingContextBase::bufferSubData(target, offset, slice);
    89117}
    90118
  • trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.h

    r200298 r207649  
    4646
    4747    /* Buffer objects */
     48    void bufferData(GC3Denum target, ArrayBufferView& data, GC3Denum usage, GC3Duint srcOffset, GC3Duint length);
     49    void bufferSubData(GC3Denum target, long long offset, ArrayBufferView& data, GC3Duint srcOffset, GC3Duint length);
    4850    void copyBufferSubData(GC3Denum readTarget, GC3Denum writeTarget, GC3Dint64 readOffset, GC3Dint64 writeOffset, GC3Dint64 size);
    4951    void getBufferSubData(GC3Denum target, GC3Dint64 offset, RefPtr<ArrayBufferView>&& returnedData);
  • trunk/Source/WebCore/html/canvas/WebGL2RenderingContext.idl

    r204839 r207649  
    334334
    335335    /* Buffer objects */
     336    void bufferData(GLenum target, ArrayBufferView data, GLenum usage, GLuint srcOffset, optional GLuint length = 0);
     337    void bufferSubData(GLenum target, GLintptr dstByteOffset, ArrayBufferView srcData, GLuint srcOffset, optional GLuint length = 0);
    336338    void copyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size);
    337339    // MapBufferRange, in particular its read-only and write-only modes,
Note: See TracChangeset for help on using the changeset viewer.