Changeset 142786 in webkit


Ignore:
Timestamp:
Feb 13, 2013 1:30:21 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

[WebGL][EFL][GTK][Qt]Add support for OES_vertex_array_object.
https://bugs.webkit.org/show_bug.cgi?id=109382

Patch by Kondapally Kalyan <kalyan.kondapally@intel.com> on 2013-02-13
Reviewed by Kenneth Russell.

Source/WebCore:

Covered by fast/canvas/webgl/oes-vertex-array-object.html

This patch adds support for using Vertex Array Object with OpenGl.
The patch adds support for loading necessary opengl functions
and support for checking GL_ARB_vertex_array_object. The support
for OES_vertex_array_object is advertised if GL_ARB_vertex_array_object is
supported.

  • platform/graphics/OpenGLShims.cpp:

(WebCore::initializeOpenGLShims):

  • platform/graphics/OpenGLShims.h:

(_OpenGLFunctionTable):
Added support for loading the necessary functions.

  • platform/graphics/opengl/Extensions3DOpenGL.cpp:

(WebCore::Extensions3DOpenGL::createVertexArrayOES):
(WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
(WebCore::Extensions3DOpenGL::isVertexArrayOES):
(WebCore::Extensions3DOpenGL::bindVertexArrayOES):
(WebCore::Extensions3DOpenGL::supportsExtension):

(WebCore):
(WebCore::Extensions3DOpenGL::isVertexArrayObjectSupported):

  • platform/graphics/opengl/Extensions3DOpenGL.h:

(Extensions3DOpenGL):

LayoutTests:

Enable oes-vertex-array-object for EFL port.

  • fast/canvas/webgl/oes-vertex-array-object-expected.txt:
  • fast/canvas/webgl/oes-vertex-array-object.html:
  • platform/efl/TestExpectations:
Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r142779 r142786  
     12013-02-13  Kondapally Kalyan  <kalyan.kondapally@intel.com>
     2
     3        [WebGL][EFL][GTK][Qt]Add support for OES_vertex_array_object.
     4        https://bugs.webkit.org/show_bug.cgi?id=109382
     5
     6        Reviewed by Kenneth Russell.
     7
     8        Enable oes-vertex-array-object for EFL port.
     9
     10        * fast/canvas/webgl/oes-vertex-array-object-expected.txt:
     11        * fast/canvas/webgl/oes-vertex-array-object.html:
     12        * platform/efl/TestExpectations:
     13
    1142013-02-13  Filip Pizlo  <fpizlo@apple.com>
    215
  • trunk/LayoutTests/fast/canvas/webgl/oes-vertex-array-object-expected.txt

    r129275 r142786  
    4949
    5050TEST COMPLETE
     51
  • trunk/LayoutTests/fast/canvas/webgl/oes-vertex-array-object.html

    r129275 r142786  
    3434debug("");
    3535
     36if (window.internals)
     37    window.internals.settings.setWebGLErrorsToConsoleEnabled(false);
     38
    3639var wtu = WebGLTestUtils;
    3740var canvas = document.getElementById("canvas");
     
    591594debug("");
    592595successfullyParsed = true;
     596isSuccessfullyParsed();
    593597</script>
    594 <script src="../../resources/js-test-post.js"></script>
    595 
    596598</body>
    597599</html>
  • trunk/LayoutTests/platform/efl/TestExpectations

    r142774 r142786  
    345345
    346346webkit.org/b/99096 fast/canvas/webgl/arraybuffer-transfer-of-control.html [ Failure Pass ]
    347 
    348 # Expected to fail until support for extension is implemented
    349 webkit.org/b/96828 fast/canvas/webgl/oes-vertex-array-object.html [ Failure Pass ]
    350347
    351348# Expected to fail until OES_element_index_uint extension is implemented
  • trunk/Source/WebCore/ChangeLog

    r142782 r142786  
     12013-02-13  Kondapally Kalyan  <kalyan.kondapally@intel.com>
     2
     3        [WebGL][EFL][GTK][Qt]Add support for OES_vertex_array_object.
     4        https://bugs.webkit.org/show_bug.cgi?id=109382
     5
     6        Reviewed by Kenneth Russell.
     7
     8        Covered by fast/canvas/webgl/oes-vertex-array-object.html
     9
     10        This patch adds support for using Vertex Array Object with OpenGl.
     11        The patch adds support for loading necessary opengl functions
     12        and support for checking GL_ARB_vertex_array_object. The support
     13        for OES_vertex_array_object is advertised if GL_ARB_vertex_array_object is
     14        supported.
     15
     16        * platform/graphics/OpenGLShims.cpp:
     17        (WebCore::initializeOpenGLShims):
     18        * platform/graphics/OpenGLShims.h:
     19        (_OpenGLFunctionTable):
     20        Added support for loading the necessary functions.
     21
     22        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
     23        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
     24        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
     25        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
     26        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
     27        (WebCore::Extensions3DOpenGL::supportsExtension):
     28
     29        (WebCore):
     30        (WebCore::Extensions3DOpenGL::isVertexArrayObjectSupported):
     31        * platform/graphics/opengl/Extensions3DOpenGL.h:
     32        (Extensions3DOpenGL):
     33
    1342013-02-13  Eberhard Graether  <egraether@google.com>
    235
  • trunk/Source/WebCore/platform/graphics/OpenGLShims.cpp

    r134476 r142786  
    128128    ASSIGN_FUNCTION_TABLE_ENTRY(glBindFramebuffer, success);
    129129    ASSIGN_FUNCTION_TABLE_ENTRY(glBindRenderbuffer, success);
     130    ASSIGN_FUNCTION_TABLE_ENTRY(glBindVertexArray, success);
    130131    ASSIGN_FUNCTION_TABLE_ENTRY(glBlendColor, success);
    131132    ASSIGN_FUNCTION_TABLE_ENTRY(glBlendEquation, success);
     
    149150    ASSIGN_FUNCTION_TABLE_ENTRY(glDeleteRenderbuffers, success);
    150151    ASSIGN_FUNCTION_TABLE_ENTRY(glDeleteShader, success);
     152    ASSIGN_FUNCTION_TABLE_ENTRY(glDeleteVertexArrays, success);
    151153    ASSIGN_FUNCTION_TABLE_ENTRY(glDetachShader, success);
    152154    ASSIGN_FUNCTION_TABLE_ENTRY(glDisableVertexAttribArray, success);
     
    158160    ASSIGN_FUNCTION_TABLE_ENTRY(glGenFramebuffers, success);
    159161    ASSIGN_FUNCTION_TABLE_ENTRY(glGenRenderbuffers, success);
     162    ASSIGN_FUNCTION_TABLE_ENTRY(glGenVertexArrays, success);
    160163    ASSIGN_FUNCTION_TABLE_ENTRY(glGetActiveAttrib, success);
    161164    ASSIGN_FUNCTION_TABLE_ENTRY(glGetActiveUniform, success);
     
    181184    ASSIGN_FUNCTION_TABLE_ENTRY(glIsRenderbuffer, success);
    182185    ASSIGN_FUNCTION_TABLE_ENTRY(glIsShader, success);
     186    ASSIGN_FUNCTION_TABLE_ENTRY(glIsVertexArray, success);
    183187    ASSIGN_FUNCTION_TABLE_ENTRY(glLinkProgram, success);
    184188    ASSIGN_FUNCTION_TABLE_ENTRY(glRenderbufferStorage, success);
  • trunk/Source/WebCore/platform/graphics/OpenGLShims.h

    r127961 r142786  
    5454typedef void (GLAPIENTRY *glBindFramebufferType) (GLenum, GLuint);
    5555typedef void (GLAPIENTRY *glBindRenderbufferType) (GLenum, GLuint);
     56typedef void (GLAPIENTRY *glBindVertexArrayType) (GLuint);
    5657typedef void (GLAPIENTRY *glBlendColorType) (GLclampf, GLclampf, GLclampf, GLclampf);
    5758typedef void (GLAPIENTRY *glBlendEquationType) (GLenum);
     
    7071typedef void (GLAPIENTRY *glDeleteRenderbuffersType) (GLsizei n, const GLuint*);
    7172typedef void (GLAPIENTRY *glDeleteShaderType) (GLuint);
     73typedef void (GLAPIENTRY *glDeleteVertexArraysType) (GLsizei, const GLuint*);
    7274typedef void (GLAPIENTRY *glDetachShaderType) (GLuint, GLuint);
    7375typedef void (GLAPIENTRY *glDisableVertexAttribArrayType) (GLuint);
     
    7981typedef void (GLAPIENTRY *glGenFramebuffersType) (GLsizei, GLuint*);
    8082typedef void (GLAPIENTRY *glGenRenderbuffersType) (GLsizei, GLuint*);
     83typedef void (GLAPIENTRY *glGenVertexArraysType) (GLsizei, GLuint*);
    8184typedef void (GLAPIENTRY *glGetActiveAttribType) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*);
    8285typedef void (GLAPIENTRY *glGetActiveUniformType) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*);
     
    102105typedef GLboolean (GLAPIENTRY *glIsRenderbufferType) (GLuint);
    103106typedef GLboolean (GLAPIENTRY *glIsShaderType) (GLuint);
     107typedef GLboolean (GLAPIENTRY *glIsVertexArrayType) (GLuint);
    104108typedef void (GLAPIENTRY *glLinkProgramType) (GLuint);
    105109typedef void (GLAPIENTRY *glRenderbufferStorageType) (GLenum, GLenum, GLsizei, GLsizei);
     
    150154    FUNCTION_TABLE_ENTRY(glBindFramebuffer);
    151155    FUNCTION_TABLE_ENTRY(glBindRenderbuffer);
     156    FUNCTION_TABLE_ENTRY(glBindVertexArray);
    152157    FUNCTION_TABLE_ENTRY(glBlendColor);
    153158    FUNCTION_TABLE_ENTRY(glBlendEquation);
     
    166171    FUNCTION_TABLE_ENTRY(glDeleteRenderbuffers);
    167172    FUNCTION_TABLE_ENTRY(glDeleteShader);
     173    FUNCTION_TABLE_ENTRY(glDeleteVertexArrays);
    168174    FUNCTION_TABLE_ENTRY(glDetachShader);
    169175    FUNCTION_TABLE_ENTRY(glDisableVertexAttribArray);
     
    175181    FUNCTION_TABLE_ENTRY(glGenFramebuffers);
    176182    FUNCTION_TABLE_ENTRY(glGenRenderbuffers);
     183    FUNCTION_TABLE_ENTRY(glGenVertexArrays);
    177184    FUNCTION_TABLE_ENTRY(glGetActiveAttrib);
    178185    FUNCTION_TABLE_ENTRY(glGetActiveUniform);
     
    198205    FUNCTION_TABLE_ENTRY(glIsRenderbuffer);
    199206    FUNCTION_TABLE_ENTRY(glIsShader);
     207    FUNCTION_TABLE_ENTRY(glIsVertexArray);
    200208    FUNCTION_TABLE_ENTRY(glLinkProgram);
    201209    FUNCTION_TABLE_ENTRY(glRenderbufferStorage);
     
    249257#define glBindRenderbufferEXT                  glBindRenderbuffer
    250258#define glBindRenderbuffer                     LOOKUP_GL_FUNCTION(glBindRenderbuffer)
     259#define glBindVertexArray                      LOOKUP_GL_FUNCTION(glBindVertexArray)
    251260#define glBlendColor                           LOOKUP_GL_FUNCTION(glBlendColor)
    252261#define glBlendEquation                        LOOKUP_GL_FUNCTION(glBlendEquation)
     
    269278#define glDeleteRenderbuffers                  LOOKUP_GL_FUNCTION(glDeleteRenderbuffers)
    270279#define glDeleteShader                         LOOKUP_GL_FUNCTION(glDeleteShader)
     280#define glDeleteVertexArrays                   LOOKUP_GL_FUNCTION(glDeleteVertexArrays)
    271281#define glDetachShader                         LOOKUP_GL_FUNCTION(glDetachShader)
    272282#define glDisableVertexAttribArray             LOOKUP_GL_FUNCTION(glDisableVertexAttribArray)
     
    283293#define glGenRenderbuffersEXT                  glGenRenderbuffers
    284294#define glGenRenderbuffers                     LOOKUP_GL_FUNCTION(glGenRenderbuffers)
     295#define glGenVertexArrays                      LOOKUP_GL_FUNCTION(glGenVertexArrays)
    285296#define glGetActiveAttrib                      LOOKUP_GL_FUNCTION(glGetActiveAttrib)
    286297#define glGetActiveUniform                     LOOKUP_GL_FUNCTION(glGetActiveUniform)
     
    311322#define glIsRenderbuffer                       LOOKUP_GL_FUNCTION(glIsRenderbuffer)
    312323#define glIsShader                             LOOKUP_GL_FUNCTION(glIsShader)
     324#define glIsVertexArray                        LOOKUP_GL_FUNCTION(glIsVertexArray)
    313325#define glLinkProgram                          LOOKUP_GL_FUNCTION(glLinkProgram)
    314326#define glRenderbufferStorageEXT               glRenderbufferStorage
  • trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp

    r131780 r142786  
    6565{
    6666    m_context->makeContextCurrent();
    67 #if !PLATFORM(GTK) && !PLATFORM(QT) && !PLATFORM(EFL) && defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
    6867    GLuint array = 0;
     68#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
     69    if (isVertexArrayObjectSupported())
     70        glGenVertexArrays(1, &array);
     71#elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
    6972    glGenVertexArraysAPPLE(1, &array);
     73#endif
    7074    return array;
    71 #else
    72     return 0;
    73 #endif
    7475}
    7576
     
    7879    if (!array)
    7980        return;
    80    
     81
    8182    m_context->makeContextCurrent();
    82 #if !PLATFORM(GTK) && !PLATFORM(QT) && !PLATFORM(EFL) && defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
     83#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
     84    if (isVertexArrayObjectSupported())
     85        glDeleteVertexArrays(1, &array);
     86#elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
    8387    glDeleteVertexArraysAPPLE(1, &array);
    8488#endif
     
    8993    if (!array)
    9094        return GL_FALSE;
    91    
     95
    9296    m_context->makeContextCurrent();
    93 #if !PLATFORM(GTK) && !PLATFORM(QT) && !PLATFORM(EFL) && defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
     97#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
     98    if (isVertexArrayObjectSupported())
     99        return glIsVertexArray(array);
     100#elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
    94101    return glIsVertexArrayAPPLE(array);
    95 #else
     102#endif
    96103    return GL_FALSE;
    97 #endif
    98104}
    99105
     
    101107{
    102108    m_context->makeContextCurrent();
    103 #if !PLATFORM(GTK) && !PLATFORM(QT) && !PLATFORM(EFL) && defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
     109#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
     110    if (isVertexArrayObjectSupported())
     111        glBindVertexArray(array);
     112#elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
    104113    glBindVertexArrayAPPLE(array);
    105114#else
     
    151160
    152161    // GL_OES_vertex_array_object
    153     if (name == "GL_OES_vertex_array_object")
     162    if (name == "GL_OES_vertex_array_object") {
     163#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
     164        return m_availableExtensions.contains("GL_ARB_vertex_array_object");
     165#else
    154166        return m_availableExtensions.contains("GL_APPLE_vertex_array_object");
     167#endif
     168    }
    155169
    156170    // Desktop GL always supports the standard derivative functions
     
    173187}
    174188
     189#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
     190bool Extensions3DOpenGL::isVertexArrayObjectSupported()
     191{
     192    static const bool supportsVertexArrayObject = supports("GL_OES_vertex_array_object");
     193    return supportsVertexArrayObject;
     194}
     195#endif
     196
    175197} // namespace WebCore
    176198
  • trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.h

    r128572 r142786  
    6060    virtual bool supportsExtension(const WTF::String&);
    6161    virtual String getExtensions();
     62#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
     63private:
     64    bool isVertexArrayObjectSupported();
     65#endif
    6266};
    6367
Note: See TracChangeset for help on using the changeset viewer.