1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
6 #include "platform/graphics/gpu/Extensions3DUtil.h"
8 #include "public/platform/WebGraphicsContext3D.h"
9 #include "wtf/text/CString.h"
10 #include "wtf/text/StringHash.h"
16 void splitStringHelper(const String& str, HashSet<String>& set)
18 Vector<String> substrings;
19 str.split(" ", substrings);
20 for (size_t i = 0; i < substrings.size(); ++i)
21 set.add(substrings[i]);
24 } // anonymous namespace
26 Extensions3DUtil::Extensions3DUtil(blink::WebGraphicsContext3D* context)
29 initializeExtensions();
32 Extensions3DUtil::~Extensions3DUtil()
36 void Extensions3DUtil::initializeExtensions()
38 bool success = m_context->makeContextCurrent();
43 String extensionsString = m_context->getString(GL_EXTENSIONS);
44 splitStringHelper(extensionsString, m_enabledExtensions);
46 String requestableExtensionsString = m_context->getRequestableExtensionsCHROMIUM();
47 splitStringHelper(requestableExtensionsString, m_requestableExtensions);
51 bool Extensions3DUtil::supportsExtension(const String& name)
53 return m_enabledExtensions.contains(name) || m_requestableExtensions.contains(name);
56 bool Extensions3DUtil::ensureExtensionEnabled(const String& name)
58 if (m_enabledExtensions.contains(name))
61 if (m_requestableExtensions.contains(name)) {
62 m_context->requestExtensionCHROMIUM(name.ascii().data());
63 m_enabledExtensions.clear();
64 m_requestableExtensions.clear();
65 initializeExtensions();
67 return m_enabledExtensions.contains(name);
70 bool Extensions3DUtil::isExtensionEnabled(const String& name)
72 return m_enabledExtensions.contains(name);
75 bool Extensions3DUtil::canUseCopyTextureCHROMIUM(GLenum destFormat, GLenum destType, GLint level)
77 // FIXME: restriction of (RGB || RGBA)/UNSIGNED_BYTE/(Level 0) should be lifted when
78 // WebGraphicsContext3D::copyTextureCHROMIUM(...) are fully functional.
79 if ((destFormat == GL_RGB || destFormat == GL_RGBA)
80 && destType == GL_UNSIGNED_BYTE
86 } // namespace WebCore