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:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@142786
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2013-02-13 Kondapally Kalyan <kalyan.kondapally@intel.com>
+
+ [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 <fpizlo@apple.com>
DFG LogicalNot/Branch peephole removal and inversion ignores the possibility of things exiting
PASS successfullyParsed is true
-TEST COMPLETE
\ No newline at end of file
+TEST COMPLETE
+
debug("");
+if (window.internals)
+ window.internals.settings.setWebGLErrorsToConsoleEnabled(false);
+
var wtu = WebGLTestUtils;
var canvas = document.getElementById("canvas");
var gl = create3DContext(canvas);
debug("");
successfullyParsed = true;
+isSuccessfullyParsed();
</script>
-<script src="../../resources/js-test-post.js"></script>
-
</body>
</html>
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 ]
+2013-02-13 Kondapally Kalyan <kalyan.kondapally@intel.com>
+
+ [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 <egraether@google.com>
chromium: remove CompositorHUDFontAtlas
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);
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);
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);
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.
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);
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);
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*);
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);
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);
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);
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);
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);
#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)
#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)
#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)
#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)
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);
- return array;
-#else
- return 0;
#endif
+ return array;
}
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
}
{
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
- return GL_FALSE;
#endif
+ return GL_FALSE;
}
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);
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")
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)
virtual bool supportsExtension(const WTF::String&);
virtual String getExtensions();
+#if (PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL))
+private:
+ bool isVertexArrayObjectSupported();
+#endif
};
} // namespace WebCore