Support passing preferLowPowerToHighPerformance and failIfMajorPerformanceCaveat
[WebKit-https.git] / Source / WebCore / html / canvas / WebGLContextAttributes.h
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 #ifndef WebGLContextAttributes_h
28 #define WebGLContextAttributes_h
29
30 #include "CanvasContextAttributes.h"
31 #include "GraphicsContext3D.h"
32
33 namespace WebCore {
34
35 class WebGLContextAttributes final : public CanvasContextAttributes {
36   public:
37     virtual ~WebGLContextAttributes();
38
39     // Create a new attributes object
40     static Ref<WebGLContextAttributes> create();
41
42     // Create a new attributes object initialized with preexisting attributes
43     static Ref<WebGLContextAttributes> create(GraphicsContext3D::Attributes);
44
45     // Whether or not the drawing buffer has an alpha channel. Default is true.
46     bool alpha() const;
47     void setAlpha(bool alpha);
48
49     // Whether or not the drawing buffer has a depth buffer. Default is true.
50     bool depth() const;
51     void setDepth(bool depth);
52
53     // Whether or not the drawing buffer has a stencil buffer. Default is true.
54     bool stencil() const;
55     void setStencil(bool stencil);
56
57     // Whether or not the drawing buffer is antialiased. Default is true.
58     bool antialias() const;
59     void setAntialias(bool antialias);
60
61     // Whether or not to treat the values in the drawing buffer as
62     // though their alpha channel has already been multiplied into the
63     // color channels. Default is true.
64     bool premultipliedAlpha() const;
65     void setPremultipliedAlpha(bool premultipliedAlpha);
66
67     // Whether or not to preserve the drawing buffer after presentation to the
68     // screen. Default is false.
69     bool preserveDrawingBuffer() const;
70     void setPreserveDrawingBuffer(bool);
71
72     // Whether or not to attempt to use a lower-power GPU if it is available.
73     // Default is false.
74     bool preferLowPowerToHighPerformance() const;
75     void setPreferLowPowerToHighPerformance(bool);
76
77     // Whether or not to immediately fail if a performant GPU is not available.
78     // Default is false.
79     bool failIfMajorPerformanceCaveat() const;
80     void setFailIfMajorPerformanceCaveat(bool);
81
82     // Fetches a copy of the attributes stored in this object in a
83     // form that can be used to initialize a GraphicsContext3D.
84     GraphicsContext3D::Attributes attributes() const;
85
86   protected:
87     WebGLContextAttributes();
88     WebGLContextAttributes(GraphicsContext3D::Attributes attributes);
89
90   private:
91     GraphicsContext3D::Attributes m_attrs;
92 };
93
94 } // namespace WebCore
95
96 #endif // WebGLContextAttributes_h