Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / platform / graphics / gpu / Extensions3DUtil.cpp
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.
4
5 #include "config.h"
6 #include "platform/graphics/gpu/Extensions3DUtil.h"
7
8 #include "public/platform/WebGraphicsContext3D.h"
9 #include "wtf/text/CString.h"
10 #include "wtf/text/StringHash.h"
11
12 namespace WebCore {
13
14 namespace {
15
16 void splitStringHelper(const String& str, HashSet<String>& set)
17 {
18     Vector<String> substrings;
19     str.split(" ", substrings);
20     for (size_t i = 0; i < substrings.size(); ++i)
21         set.add(substrings[i]);
22 }
23
24 } // anonymous namespace
25
26 Extensions3DUtil::Extensions3DUtil(blink::WebGraphicsContext3D* context)
27     : m_context(context)
28 {
29     initializeExtensions();
30 }
31
32 Extensions3DUtil::~Extensions3DUtil()
33 {
34 }
35
36 void Extensions3DUtil::initializeExtensions()
37 {
38     bool success = m_context->makeContextCurrent();
39     ASSERT(success);
40     if (!success)
41         return;
42
43     String extensionsString = m_context->getString(GL_EXTENSIONS);
44     splitStringHelper(extensionsString, m_enabledExtensions);
45
46     String requestableExtensionsString = m_context->getRequestableExtensionsCHROMIUM();
47     splitStringHelper(requestableExtensionsString, m_requestableExtensions);
48 }
49
50
51 bool Extensions3DUtil::supportsExtension(const String& name)
52 {
53     return m_enabledExtensions.contains(name) || m_requestableExtensions.contains(name);
54 }
55
56 bool Extensions3DUtil::ensureExtensionEnabled(const String& name)
57 {
58     if (m_enabledExtensions.contains(name))
59         return true;
60
61     if (m_requestableExtensions.contains(name)) {
62         m_context->requestExtensionCHROMIUM(name.ascii().data());
63         m_enabledExtensions.clear();
64         m_requestableExtensions.clear();
65         initializeExtensions();
66     }
67     return m_enabledExtensions.contains(name);
68 }
69
70 bool Extensions3DUtil::isExtensionEnabled(const String& name)
71 {
72     return m_enabledExtensions.contains(name);
73 }
74
75 bool Extensions3DUtil::canUseCopyTextureCHROMIUM(GLenum destFormat, GLenum destType, GLint level)
76 {
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
81         && !level)
82         return true;
83     return false;
84 }
85
86 } // namespace WebCore