1/*
2 * Copyright (c) 2010, Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *     * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 *     * Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following disclaimer
11 * in the documentation and/or other materials provided with the
12 * distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
15 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
16 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
17 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
18 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
20 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include "config.h"
28
29#include "core/html/canvas/WebGLContextAttributes.h"
30
31#include "core/frame/Settings.h"
32
33namespace blink {
34
35DEFINE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(WebGLContextAttributes);
36
37PassRefPtrWillBeRawPtr<WebGLContextAttributes> WebGLContextAttributes::create()
38{
39    return adoptRefWillBeNoop(new WebGLContextAttributes());
40}
41
42WebGLContextAttributes::WebGLContextAttributes()
43    : CanvasContextAttributes()
44    , m_alpha(true)
45    , m_depth(true)
46    , m_stencil(false)
47    , m_antialias(true)
48    , m_premultipliedAlpha(true)
49    , m_preserveDrawingBuffer(false)
50    , m_failIfMajorPerformanceCaveat(false)
51{
52}
53
54WebGLContextAttributes::WebGLContextAttributes(const WebGLContextAttributes& attrs)
55    : CanvasContextAttributes()
56    , m_alpha(attrs.m_alpha)
57    , m_depth(attrs.m_depth)
58    , m_stencil(attrs.m_stencil)
59    , m_antialias(attrs.m_antialias)
60    , m_premultipliedAlpha(attrs.m_premultipliedAlpha)
61    , m_preserveDrawingBuffer(attrs.m_preserveDrawingBuffer)
62    , m_failIfMajorPerformanceCaveat(attrs.m_failIfMajorPerformanceCaveat)
63{
64}
65
66PassRefPtrWillBeRawPtr<WebGLContextAttributes> WebGLContextAttributes::clone() const
67{
68    return adoptRefWillBeNoop(new WebGLContextAttributes(*this));
69}
70
71bool WebGLContextAttributes::alpha() const
72{
73    return m_alpha;
74}
75
76void WebGLContextAttributes::setAlpha(bool alpha)
77{
78    m_alpha = alpha;
79}
80
81bool WebGLContextAttributes::depth() const
82{
83    return m_depth;
84}
85
86void WebGLContextAttributes::setDepth(bool depth)
87{
88    m_depth = depth;
89}
90
91bool WebGLContextAttributes::stencil() const
92{
93    return m_stencil;
94}
95
96void WebGLContextAttributes::setStencil(bool stencil)
97{
98    m_stencil = stencil;
99}
100
101bool WebGLContextAttributes::antialias() const
102{
103    return m_antialias;
104}
105
106void WebGLContextAttributes::setAntialias(bool antialias)
107{
108    m_antialias = antialias;
109}
110
111bool WebGLContextAttributes::premultipliedAlpha() const
112{
113    return m_premultipliedAlpha;
114}
115
116void WebGLContextAttributes::setPremultipliedAlpha(bool premultipliedAlpha)
117{
118    m_premultipliedAlpha = premultipliedAlpha;
119}
120
121bool WebGLContextAttributes::preserveDrawingBuffer() const
122{
123    return m_preserveDrawingBuffer;
124}
125
126void WebGLContextAttributes::setPreserveDrawingBuffer(bool preserveDrawingBuffer)
127{
128    m_preserveDrawingBuffer = preserveDrawingBuffer;
129}
130
131bool WebGLContextAttributes::failIfMajorPerformanceCaveat() const
132{
133    return m_failIfMajorPerformanceCaveat;
134}
135
136void WebGLContextAttributes::setFailIfMajorPerformanceCaveat(bool failIfMajorPerformanceCaveat)
137{
138    m_failIfMajorPerformanceCaveat = failIfMajorPerformanceCaveat;
139}
140
141blink::WebGraphicsContext3D::Attributes WebGLContextAttributes::attributes(
142    const blink::WebString& topDocumentURL, Settings* settings, unsigned webGLVersion) const
143{
144    blink::WebGraphicsContext3D::Attributes attrs;
145
146    attrs.alpha = m_alpha;
147    attrs.depth = m_depth;
148    attrs.stencil = m_stencil;
149    attrs.antialias = m_antialias;
150    if (m_antialias) {
151        if (settings && !settings->openGLMultisamplingEnabled())
152            attrs.antialias = false;
153    }
154    attrs.premultipliedAlpha = m_premultipliedAlpha;
155    attrs.failIfMajorPerformanceCaveat = m_failIfMajorPerformanceCaveat;
156
157    attrs.noExtensions = true;
158    attrs.shareResources = false;
159    attrs.preferDiscreteGPU = true;
160
161    attrs.topDocumentURL = topDocumentURL;
162
163    attrs.webGL = true;
164    attrs.webGLVersion = webGLVersion;
165
166    return attrs;
167}
168
169} // namespace blink
170