diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp')
-rw-r--r-- | Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp | 124 |
1 files changed, 94 insertions, 30 deletions
diff --git a/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp b/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp index f8321cac0..5da632035 100644 --- a/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp +++ b/Source/WebCore/platform/graphics/opengl/Extensions3DOpenGL.cpp @@ -25,20 +25,17 @@ #include "config.h" -#if USE(3D_GRAPHICS) +#if ENABLE(GRAPHICS_CONTEXT_3D) #include "Extensions3DOpenGL.h" #include "GraphicsContext3D.h" -#include <wtf/Vector.h> #if PLATFORM(IOS) -#include "ANGLE/ShaderLang.h" #include <OpenGLES/ES2/glext.h> #elif PLATFORM(MAC) -#include "ANGLE/ShaderLang.h" #include <OpenGL/gl.h> -#elif PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN) +#elif PLATFORM(GTK) || PLATFORM(WIN) #include "OpenGLShims.h" #endif @@ -48,8 +45,8 @@ namespace WebCore { -Extensions3DOpenGL::Extensions3DOpenGL(GraphicsContext3D* context) - : Extensions3DOpenGLCommon(context) +Extensions3DOpenGL::Extensions3DOpenGL(GraphicsContext3D* context, bool useIndexedGetString) + : Extensions3DOpenGLCommon(context, useIndexedGetString) { } @@ -86,7 +83,7 @@ Platform3DObject Extensions3DOpenGL::createVertexArrayOES() { m_context->makeContextCurrent(); GLuint array = 0; -#if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN)) +#if (PLATFORM(GTK) || PLATFORM(WIN) || PLATFORM(IOS)) if (isVertexArrayObjectSupported()) glGenVertexArrays(1, &array); #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object @@ -101,7 +98,7 @@ void Extensions3DOpenGL::deleteVertexArrayOES(Platform3DObject array) return; m_context->makeContextCurrent(); -#if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN)) +#if (PLATFORM(GTK) || PLATFORM(WIN) || PLATFORM(IOS)) if (isVertexArrayObjectSupported()) glDeleteVertexArrays(1, &array); #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object @@ -115,7 +112,7 @@ GC3Dboolean Extensions3DOpenGL::isVertexArrayOES(Platform3DObject array) return GL_FALSE; m_context->makeContextCurrent(); -#if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN)) +#if (PLATFORM(GTK) || PLATFORM(WIN) || PLATFORM(IOS)) if (isVertexArrayObjectSupported()) return glIsVertexArray(array); #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object @@ -126,12 +123,8 @@ GC3Dboolean Extensions3DOpenGL::isVertexArrayOES(Platform3DObject array) void Extensions3DOpenGL::bindVertexArrayOES(Platform3DObject array) { -#if PLATFORM(IOS) - UNUSED_PARAM(array); -#endif - m_context->makeContextCurrent(); -#if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN)) +#if (PLATFORM(GTK) || PLATFORM(WIN) || PLATFORM(IOS)) if (isVertexArrayObjectSupported()) glBindVertexArray(array); #elif defined(GL_APPLE_vertex_array_object) && GL_APPLE_vertex_array_object @@ -141,12 +134,6 @@ void Extensions3DOpenGL::bindVertexArrayOES(Platform3DObject array) #endif } -void Extensions3DOpenGL::copyTextureCHROMIUM(GC3Denum, Platform3DObject, Platform3DObject, GC3Dint, GC3Denum) -{ - // FIXME: implement this function and add GL_CHROMIUM_copy_texture in supports(). - return; -} - void Extensions3DOpenGL::insertEventMarkerEXT(const String&) { // FIXME: implement this function and add GL_EXT_debug_marker in supports(). @@ -168,25 +155,50 @@ void Extensions3DOpenGL::popGroupMarkerEXT(void) bool Extensions3DOpenGL::supportsExtension(const String& name) { // GL_ANGLE_framebuffer_blit and GL_ANGLE_framebuffer_multisample are "fake". They are implemented using other - // extensions. In particular GL_EXT_framebuffer_blit and GL_EXT_framebuffer_multisample + // extensions. In particular GL_EXT_framebuffer_blit and GL_EXT_framebuffer_multisample/GL_APPLE_framebuffer_multisample. if (name == "GL_ANGLE_framebuffer_blit") return m_availableExtensions.contains("GL_EXT_framebuffer_blit"); if (name == "GL_ANGLE_framebuffer_multisample") +#if PLATFORM(IOS) + return m_availableExtensions.contains("GL_APPLE_framebuffer_multisample"); +#else return m_availableExtensions.contains("GL_EXT_framebuffer_multisample"); +#endif + + if (name == "GL_ANGLE_instanced_arrays") { + return (m_availableExtensions.contains("GL_ARB_instanced_arrays") || m_availableExtensions.contains("GL_EXT_instanced_arrays")) + && (m_availableExtensions.contains("GL_ARB_draw_instanced") || m_availableExtensions.contains("GL_EXT_draw_instanced")); + } + + if (name == "GL_EXT_sRGB") +#if PLATFORM(IOS) + return m_availableExtensions.contains("GL_EXT_sRGB"); +#else + return m_availableExtensions.contains("GL_EXT_texture_sRGB") && (m_availableExtensions.contains("GL_EXT_framebuffer_sRGB") || m_availableExtensions.contains("GL_ARB_framebuffer_sRGB")); +#endif + + if (name == "GL_EXT_frag_depth") +#if PLATFORM(MAC) + return true; +#else + return m_availableExtensions.contains("GL_EXT_frag_depth"); +#endif // Desktop GL always supports GL_OES_rgb8_rgba8. if (name == "GL_OES_rgb8_rgba8") return true; - // If GL_ARB_texture_float is available then we report GL_OES_texture_float, + // If GL_ARB_texture_float or GL_OES_texture_float is available then we report // GL_OES_texture_half_float, GL_OES_texture_float_linear and GL_OES_texture_half_float_linear as available. if (name == "GL_OES_texture_float" || name == "GL_OES_texture_half_float" || name == "GL_OES_texture_float_linear" || name == "GL_OES_texture_half_float_linear") - return m_availableExtensions.contains("GL_ARB_texture_float"); + return m_availableExtensions.contains("GL_ARB_texture_float") || m_availableExtensions.contains("GL_OES_texture_float"); // GL_OES_vertex_array_object if (name == "GL_OES_vertex_array_object") { -#if (PLATFORM(GTK) || PLATFORM(EFL)) +#if (PLATFORM(GTK)) return m_availableExtensions.contains("GL_ARB_vertex_array_object"); +#elif PLATFORM(IOS) + return m_availableExtensions.contains("GL_OES_vertex_array_object"); #else return m_availableExtensions.contains("GL_APPLE_vertex_array_object"); #endif @@ -199,12 +211,17 @@ bool Extensions3DOpenGL::supportsExtension(const String& name) // Desktop GL always supports UNSIGNED_INT indices if (name == "GL_OES_element_index_uint") return true; - + + if (name == "GL_EXT_shader_texture_lod") + return m_availableExtensions.contains("GL_EXT_shader_texture_lod"); + if (name == "GL_EXT_texture_filter_anisotropic") return m_availableExtensions.contains("GL_EXT_texture_filter_anisotropic"); if (name == "GL_EXT_draw_buffers") { -#if PLATFORM(MAC) +#if PLATFORM(IOS) + return m_availableExtensions.contains(name); +#elif PLATFORM(MAC) || PLATFORM(GTK) return m_availableExtensions.contains("GL_ARB_draw_buffers"); #else // FIXME: implement support for other platforms. @@ -223,20 +240,67 @@ bool Extensions3DOpenGL::supportsExtension(const String& name) void Extensions3DOpenGL::drawBuffersEXT(GC3Dsizei n, const GC3Denum* bufs) { // FIXME: implement support for other platforms. -#if PLATFORM(MAC) && !PLATFORM(IOS) +#if PLATFORM(MAC) ::glDrawBuffersARB(n, bufs); +#elif PLATFORM(GTK) + ::glDrawBuffers(n, bufs); #else UNUSED_PARAM(n); UNUSED_PARAM(bufs); #endif } +void Extensions3DOpenGL::drawArraysInstanced(GC3Denum mode, GC3Dint first, GC3Dsizei count, GC3Dsizei primcount) +{ + m_context->makeContextCurrent(); +#if PLATFORM(GTK) + ::glDrawArraysInstanced(mode, first, count, primcount); +#elif PLATFORM(COCOA) + ::glDrawArraysInstancedARB(mode, first, count, primcount); +#else + UNUSED_PARAM(mode); + UNUSED_PARAM(first); + UNUSED_PARAM(count); + UNUSED_PARAM(primcount); +#endif +} + +void Extensions3DOpenGL::drawElementsInstanced(GC3Denum mode, GC3Dsizei count, GC3Denum type, long long offset, GC3Dsizei primcount) +{ + m_context->makeContextCurrent(); +#if PLATFORM(GTK) + ::glDrawElementsInstanced(mode, count, type, reinterpret_cast<GLvoid*>(static_cast<intptr_t>(offset)), primcount); +#elif PLATFORM(COCOA) + ::glDrawElementsInstancedARB(mode, count, type, reinterpret_cast<GLvoid*>(static_cast<intptr_t>(offset)), primcount); +#else + UNUSED_PARAM(mode); + UNUSED_PARAM(count); + UNUSED_PARAM(type); + UNUSED_PARAM(offset); + UNUSED_PARAM(primcount); +#endif +} + +void Extensions3DOpenGL::vertexAttribDivisor(GC3Duint index, GC3Duint divisor) +{ + m_context->makeContextCurrent(); +#if PLATFORM(GTK) + ::glVertexAttribDivisor(index, divisor); +#elif PLATFORM(COCOA) + ::glVertexAttribDivisorARB(index, divisor); +#else + UNUSED_PARAM(index); + UNUSED_PARAM(divisor); +#endif +} + String Extensions3DOpenGL::getExtensions() { + ASSERT(!m_useIndexedGetString); return String(reinterpret_cast<const char*>(::glGetString(GL_EXTENSIONS))); } -#if (PLATFORM(GTK) || PLATFORM(EFL) || PLATFORM(WIN)) +#if (PLATFORM(GTK) || PLATFORM(WIN) || PLATFORM(IOS)) bool Extensions3DOpenGL::isVertexArrayObjectSupported() { static const bool supportsVertexArrayObject = supports("GL_OES_vertex_array_object"); @@ -246,4 +310,4 @@ bool Extensions3DOpenGL::isVertexArrayObjectSupported() } // namespace WebCore -#endif // USE(3D_GRAPHICS) +#endif // ENABLE(GRAPHICS_CONTEXT_3D) |