Title: [142786] trunk
Revision
142786
Author
[email protected]
Date
2013-02-13 13:30:21 -0800 (Wed, 13 Feb 2013)

Log 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 <[email protected]> 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:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (142785 => 142786)


--- trunk/LayoutTests/ChangeLog	2013-02-13 21:29:59 UTC (rev 142785)
+++ trunk/LayoutTests/ChangeLog	2013-02-13 21:30:21 UTC (rev 142786)
@@ -1,3 +1,16 @@
+2013-02-13  Kondapally Kalyan  <[email protected]>
+
+        [WebGL][EFL][GTK][Qt]Add support for OES_vertex_array_object.
+        https://bugs.webkit.org/show_bug.cgi?id=109382
+
+        Reviewed by Kenneth Russell.
+
+        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:
+
 2013-02-13  Filip Pizlo  <[email protected]>
 
         DFG LogicalNot/Branch peephole removal and inversion ignores the possibility of things exiting

Modified: trunk/LayoutTests/fast/canvas/webgl/oes-vertex-array-object-expected.txt (142785 => 142786)


--- trunk/LayoutTests/fast/canvas/webgl/oes-vertex-array-object-expected.txt	2013-02-13 21:29:59 UTC (rev 142785)
+++ trunk/LayoutTests/fast/canvas/webgl/oes-vertex-array-object-expected.txt	2013-02-13 21:30:21 UTC (rev 142786)
@@ -47,4 +47,5 @@
 
 PASS successfullyParsed is true
 
-TEST COMPLETE
\ No newline at end of file
+TEST COMPLETE
+

Modified: trunk/LayoutTests/fast/canvas/webgl/oes-vertex-array-object.html (142785 => 142786)


--- trunk/LayoutTests/fast/canvas/webgl/oes-vertex-array-object.html	2013-02-13 21:29:59 UTC (rev 142785)
+++ trunk/LayoutTests/fast/canvas/webgl/oes-vertex-array-object.html	2013-02-13 21:30:21 UTC (rev 142786)
@@ -33,6 +33,9 @@
 
 debug("");
 
+if (window.internals)
+    window.internals.settings.setWebGLErrorsToConsoleEnabled(false);
+
 var wtu = WebGLTestUtils;
 var canvas = document.getElementById("canvas");
 var gl = create3DContext(canvas);
@@ -590,8 +593,7 @@
 
 debug("");
 successfullyParsed = true;
+isSuccessfullyParsed();
 </script>
-<script src=""
-
 </body>
 </html>

Modified: trunk/LayoutTests/platform/efl/TestExpectations (142785 => 142786)


--- trunk/LayoutTests/platform/efl/TestExpectations	2013-02-13 21:29:59 UTC (rev 142785)
+++ trunk/LayoutTests/platform/efl/TestExpectations	2013-02-13 21:30:21 UTC (rev 142786)
@@ -345,9 +345,6 @@
 
 webkit.org/b/99096 fast/canvas/webgl/arraybuffer-transfer-of-control.html [ Failure Pass ]
 
-# Expected to fail until support for extension is implemented
-webkit.org/b/96828 fast/canvas/webgl/oes-vertex-array-object.html [ Failure Pass ]
-
 # Expected to fail until OES_element_index_uint extension is implemented
 webkit.org/b/98257 fast/canvas/webgl/oes-element-index-uint.html [ Failure Pass ]
 

Modified: trunk/Source/WebCore/ChangeLog (142785 => 142786)


--- trunk/Source/WebCore/ChangeLog	2013-02-13 21:29:59 UTC (rev 142785)
+++ trunk/Source/WebCore/ChangeLog	2013-02-13 21:30:21 UTC (rev 142786)
@@ -1,3 +1,36 @@
+2013-02-13  Kondapally Kalyan  <[email protected]>
+
+        [WebGL][EFL][GTK][Qt]Add support for OES_vertex_array_object.
+        https://bugs.webkit.org/show_bug.cgi?id=109382
+
+        Reviewed by Kenneth Russell.
+
+        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):
+
 2013-02-13  Eberhard Graether  <[email protected]>
 
         chromium: remove CompositorHUDFontAtlas

Modified: trunk/Source/WebCore/platform/graphics/OpenGLShims.cpp (142785 => 142786)


--- trunk/Source/WebCore/platform/graphics/OpenGLShims.cpp	2013-02-13 21:29:59 UTC (rev 142785)
+++ trunk/Source/WebCore/platform/graphics/OpenGLShims.cpp	2013-02-13 21:30:21 UTC (rev 142786)
@@ -127,6 +127,7 @@
     ASSIGN_FUNCTION_TABLE_ENTRY(glBindBuffer, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glBindFramebuffer, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glBindRenderbuffer, success);
+    ASSIGN_FUNCTION_TABLE_ENTRY(glBindVertexArray, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glBlendColor, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glBlendEquation, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glBlendEquationSeparate, success);
@@ -148,6 +149,7 @@
     ASSIGN_FUNCTION_TABLE_ENTRY(glDeleteProgram, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glDeleteRenderbuffers, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glDeleteShader, success);
+    ASSIGN_FUNCTION_TABLE_ENTRY(glDeleteVertexArrays, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glDetachShader, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glDisableVertexAttribArray, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glEnableVertexAttribArray, success);
@@ -157,6 +159,7 @@
     ASSIGN_FUNCTION_TABLE_ENTRY(glGenerateMipmap, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glGenFramebuffers, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glGenRenderbuffers, success);
+    ASSIGN_FUNCTION_TABLE_ENTRY(glGenVertexArrays, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glGetActiveAttrib, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glGetActiveUniform, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glGetAttachedShaders, success);
@@ -180,6 +183,7 @@
     ASSIGN_FUNCTION_TABLE_ENTRY(glIsProgram, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glIsRenderbuffer, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glIsShader, success);
+    ASSIGN_FUNCTION_TABLE_ENTRY(glIsVertexArray, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glLinkProgram, success);
     ASSIGN_FUNCTION_TABLE_ENTRY(glRenderbufferStorage, success);
     // In GLES2 there are optional ANGLE and APPLE extensions for glRenderbufferStorageMultisample.

Modified: trunk/Source/WebCore/platform/graphics/OpenGLShims.h (142785 => 142786)


--- trunk/Source/WebCore/platform/graphics/OpenGLShims.h	2013-02-13 21:29:59 UTC (rev 142785)
+++ trunk/Source/WebCore/platform/graphics/OpenGLShims.h	2013-02-13 21:30:21 UTC (rev 142786)
@@ -53,6 +53,7 @@
 typedef void (GLAPIENTRY *glBindBufferType) (GLenum, GLuint);
 typedef void (GLAPIENTRY *glBindFramebufferType) (GLenum, GLuint);
 typedef void (GLAPIENTRY *glBindRenderbufferType) (GLenum, GLuint);
+typedef void (GLAPIENTRY *glBindVertexArrayType) (GLuint);
 typedef void (GLAPIENTRY *glBlendColorType) (GLclampf, GLclampf, GLclampf, GLclampf);
 typedef void (GLAPIENTRY *glBlendEquationType) (GLenum);
 typedef void (GLAPIENTRY *glBlendEquationSeparateType)(GLenum, GLenum);
@@ -69,6 +70,7 @@
 typedef void (GLAPIENTRY *glDeleteProgramType) (GLuint);
 typedef void (GLAPIENTRY *glDeleteRenderbuffersType) (GLsizei n, const GLuint*);
 typedef void (GLAPIENTRY *glDeleteShaderType) (GLuint);
+typedef void (GLAPIENTRY *glDeleteVertexArraysType) (GLsizei, const GLuint*);
 typedef void (GLAPIENTRY *glDetachShaderType) (GLuint, GLuint);
 typedef void (GLAPIENTRY *glDisableVertexAttribArrayType) (GLuint);
 typedef void (GLAPIENTRY *glEnableVertexAttribArrayType) (GLuint);
@@ -78,6 +80,7 @@
 typedef void (GLAPIENTRY *glGenerateMipmapType) (GLenum target);
 typedef void (GLAPIENTRY *glGenFramebuffersType) (GLsizei, GLuint*);
 typedef void (GLAPIENTRY *glGenRenderbuffersType) (GLsizei, GLuint*);
+typedef void (GLAPIENTRY *glGenVertexArraysType) (GLsizei, GLuint*);
 typedef void (GLAPIENTRY *glGetActiveAttribType) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*);
 typedef void (GLAPIENTRY *glGetActiveUniformType) (GLuint, GLuint, GLsizei, GLsizei*, GLint*, GLenum*, GLchar*);
 typedef void (GLAPIENTRY *glGetAttachedShadersType) (GLuint, GLsizei, GLsizei*, GLuint*);
@@ -101,6 +104,7 @@
 typedef GLboolean (GLAPIENTRY *glIsProgramType) (GLuint);
 typedef GLboolean (GLAPIENTRY *glIsRenderbufferType) (GLuint);
 typedef GLboolean (GLAPIENTRY *glIsShaderType) (GLuint);
+typedef GLboolean (GLAPIENTRY *glIsVertexArrayType) (GLuint);
 typedef void (GLAPIENTRY *glLinkProgramType) (GLuint);
 typedef void (GLAPIENTRY *glRenderbufferStorageType) (GLenum, GLenum, GLsizei, GLsizei);
 typedef void (GLAPIENTRY *glRenderbufferStorageMultisampleType) (GLenum, GLsizei, GLenum, GLsizei, GLsizei);
@@ -149,6 +153,7 @@
     FUNCTION_TABLE_ENTRY(glBindBuffer);
     FUNCTION_TABLE_ENTRY(glBindFramebuffer);
     FUNCTION_TABLE_ENTRY(glBindRenderbuffer);
+    FUNCTION_TABLE_ENTRY(glBindVertexArray);
     FUNCTION_TABLE_ENTRY(glBlendColor);
     FUNCTION_TABLE_ENTRY(glBlendEquation);
     FUNCTION_TABLE_ENTRY(glBlendEquationSeparate);
@@ -165,6 +170,7 @@
     FUNCTION_TABLE_ENTRY(glDeleteProgram);
     FUNCTION_TABLE_ENTRY(glDeleteRenderbuffers);
     FUNCTION_TABLE_ENTRY(glDeleteShader);
+    FUNCTION_TABLE_ENTRY(glDeleteVertexArrays);
     FUNCTION_TABLE_ENTRY(glDetachShader);
     FUNCTION_TABLE_ENTRY(glDisableVertexAttribArray);
     FUNCTION_TABLE_ENTRY(glEnableVertexAttribArray);
@@ -174,6 +180,7 @@
     FUNCTION_TABLE_ENTRY(glGenerateMipmap);
     FUNCTION_TABLE_ENTRY(glGenFramebuffers);
     FUNCTION_TABLE_ENTRY(glGenRenderbuffers);
+    FUNCTION_TABLE_ENTRY(glGenVertexArrays);
     FUNCTION_TABLE_ENTRY(glGetActiveAttrib);
     FUNCTION_TABLE_ENTRY(glGetActiveUniform);
     FUNCTION_TABLE_ENTRY(glGetAttachedShaders);
@@ -197,6 +204,7 @@
     FUNCTION_TABLE_ENTRY(glIsProgram);
     FUNCTION_TABLE_ENTRY(glIsRenderbuffer);
     FUNCTION_TABLE_ENTRY(glIsShader);
+    FUNCTION_TABLE_ENTRY(glIsVertexArray);
     FUNCTION_TABLE_ENTRY(glLinkProgram);
     FUNCTION_TABLE_ENTRY(glRenderbufferStorage);
     FUNCTION_TABLE_ENTRY(glRenderbufferStorageMultisample);
@@ -248,6 +256,7 @@
 #define glBindFramebuffer                      LOOKUP_GL_FUNCTION(glBindFramebuffer)
 #define glBindRenderbufferEXT                  glBindRenderbuffer
 #define glBindRenderbuffer                     LOOKUP_GL_FUNCTION(glBindRenderbuffer)
+#define glBindVertexArray                      LOOKUP_GL_FUNCTION(glBindVertexArray)
 #define glBlendColor                           LOOKUP_GL_FUNCTION(glBlendColor)
 #define glBlendEquation                        LOOKUP_GL_FUNCTION(glBlendEquation)
 #define glBlendEquationSeparate                LOOKUP_GL_FUNCTION(glBlendEquationSeparate)
@@ -268,6 +277,7 @@
 #define glDeleteRenderbuffersEXT               glDeleteRenderbuffers
 #define glDeleteRenderbuffers                  LOOKUP_GL_FUNCTION(glDeleteRenderbuffers)
 #define glDeleteShader                         LOOKUP_GL_FUNCTION(glDeleteShader)
+#define glDeleteVertexArrays                   LOOKUP_GL_FUNCTION(glDeleteVertexArrays)
 #define glDetachShader                         LOOKUP_GL_FUNCTION(glDetachShader)
 #define glDisableVertexAttribArray             LOOKUP_GL_FUNCTION(glDisableVertexAttribArray)
 #define glEnableVertexAttribArray              LOOKUP_GL_FUNCTION(glEnableVertexAttribArray)
@@ -282,6 +292,7 @@
 #define glGenFramebuffers                      LOOKUP_GL_FUNCTION(glGenFramebuffers)
 #define glGenRenderbuffersEXT                  glGenRenderbuffers
 #define glGenRenderbuffers                     LOOKUP_GL_FUNCTION(glGenRenderbuffers)
+#define glGenVertexArrays                      LOOKUP_GL_FUNCTION(glGenVertexArrays)
 #define glGetActiveAttrib                      LOOKUP_GL_FUNCTION(glGetActiveAttrib)
 #define glGetActiveUniform                     LOOKUP_GL_FUNCTION(glGetActiveUniform)
 #define glGetAttachedShaders                   LOOKUP_GL_FUNCTION(glGetAttachedShaders)
@@ -310,6 +321,7 @@
 #define glIsRenderbufferEXT                    glIsRenderbuffer
 #define glIsRenderbuffer                       LOOKUP_GL_FUNCTION(glIsRenderbuffer)
 #define glIsShader                             LOOKUP_GL_FUNCTION(glIsShader)
+#define glIsVertexArray                        LOOKUP_GL_FUNCTION(glIsVertexArray)
 #define glLinkProgram                          LOOKUP_GL_FUNCTION(glLinkProgram)
 #define glRenderbufferStorageEXT               glRenderbufferStorage
 #define glRenderbufferStorage                  LOOKUP_GL_FUNCTION(glRenderbufferStorage)

Modified: trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp (142785 => 142786)


--- trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp	2013-02-13 21:29:59 UTC (rev 142785)
+++ trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp	2013-02-13 21:30:21 UTC (rev 142786)
@@ -64,22 +64,26 @@
 Platform3DObject Extensions3DOpenGL::createVertexArrayOES()
 {
     m_context->makeContextCurrent();
-#if !PLATFORM(GTK) && !PLATFORM(QT) && !PLATFORM(EFL) && defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
     GLuint array = 0;
+#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
+    if (isVertexArrayObjectSupported())
+        glGenVertexArrays(1, &array);
+#elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
     glGenVertexArraysAPPLE(1, &array);
+#endif
     return array;
-#else
-    return 0;
-#endif
 }
 
 void Extensions3DOpenGL::deleteVertexArrayOES(Platform3DObject array)
 {
     if (!array)
         return;
-    
+
     m_context->makeContextCurrent();
-#if !PLATFORM(GTK) && !PLATFORM(QT) && !PLATFORM(EFL) && defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
+#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
+    if (isVertexArrayObjectSupported())
+        glDeleteVertexArrays(1, &array);
+#elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
     glDeleteVertexArraysAPPLE(1, &array);
 #endif
 }
@@ -88,19 +92,24 @@
 {
     if (!array)
         return GL_FALSE;
-    
+
     m_context->makeContextCurrent();
-#if !PLATFORM(GTK) && !PLATFORM(QT) && !PLATFORM(EFL) && defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
+#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
+    if (isVertexArrayObjectSupported())
+        return glIsVertexArray(array);
+#elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
     return glIsVertexArrayAPPLE(array);
-#else
+#endif
     return GL_FALSE;
-#endif
 }
 
 void Extensions3DOpenGL::bindVertexArrayOES(Platform3DObject array)
 {
     m_context->makeContextCurrent();
-#if !PLATFORM(GTK) && !PLATFORM(QT) && !PLATFORM(EFL) && defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
+#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
+    if (isVertexArrayObjectSupported())
+        glBindVertexArray(array);
+#elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object
     glBindVertexArrayAPPLE(array);
 #else
     UNUSED_PARAM(array);
@@ -150,8 +159,13 @@
         return m_availableExtensions.contains("GL_ARB_texture_float");
 
     // GL_OES_vertex_array_object
-    if (name == "GL_OES_vertex_array_object")
+    if (name == "GL_OES_vertex_array_object") {
+#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
+        return m_availableExtensions.contains("GL_ARB_vertex_array_object");
+#else
         return m_availableExtensions.contains("GL_APPLE_vertex_array_object");
+#endif
+    }
 
     // Desktop GL always supports the standard derivative functions
     if (name == "GL_OES_standard_derivatives")
@@ -172,6 +186,14 @@
     return String(reinterpret_cast<const char*>(::glGetString(GL_EXTENSIONS)));
 }
 
+#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
+bool Extensions3DOpenGL::isVertexArrayObjectSupported()
+{
+    static const bool supportsVertexArrayObject = supports("GL_OES_vertex_array_object");
+    return supportsVertexArrayObject;
+}
+#endif
+
 } // namespace WebCore
 
 #endif // USE(3D_GRAPHICS)

Modified: trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.h (142785 => 142786)


--- trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.h	2013-02-13 21:29:59 UTC (rev 142785)
+++ trunk/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.h	2013-02-13 21:30:21 UTC (rev 142786)
@@ -59,6 +59,10 @@
 
     virtual bool supportsExtension(const WTF::String&);
     virtual String getExtensions();
+#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
+private:
+    bool isVertexArrayObjectSupported();
+#endif
 };
 
 } // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to