Added missing override and final specifiers
[WebKit-https.git] / Source / WebCore / html / canvas / WebGLVertexArrayObjectBase.h
1 /*
2  * Copyright (C) 2015 Apple 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
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #pragma once
27
28 #include "WebGLBuffer.h"
29 #include "WebGLContextObject.h"
30
31 namespace WebCore {
32
33 class WebGLVertexArrayObjectBase : public WebGLContextObject {
34 public:
35     enum VAOType {
36         VAOTypeDefault,
37         VAOTypeUser,
38     };
39     
40     virtual ~WebGLVertexArrayObjectBase() { }
41
42     // Cached values for vertex attrib range checks
43     struct VertexAttribState {
44         VertexAttribState()
45             : enabled(false)
46             , bytesPerElement(0)
47             , size(4)
48             , type(GraphicsContext3D::FLOAT)
49             , normalized(false)
50             , stride(16)
51             , originalStride(0)
52             , offset(0)
53             , divisor(0)
54         {
55         }
56         
57         bool isBound() const { return bufferBinding && bufferBinding->object(); }
58         bool validateBinding() const { return !enabled || isBound(); }
59         
60         bool enabled;
61         RefPtr<WebGLBuffer> bufferBinding;
62         GC3Dsizei bytesPerElement;
63         GC3Dint size;
64         GC3Denum type;
65         bool normalized;
66         GC3Dsizei stride;
67         GC3Dsizei originalStride;
68         GC3Dintptr offset;
69         GC3Duint divisor;
70     };
71     
72     bool isDefaultObject() const { return m_type == VAOTypeDefault; }
73     
74     bool hasEverBeenBound() const { return object() && m_hasEverBeenBound; }
75     void setHasEverBeenBound() { m_hasEverBeenBound = true; }
76     
77     PassRefPtr<WebGLBuffer> getElementArrayBuffer() const { return m_boundElementArrayBuffer; }
78     void setElementArrayBuffer(PassRefPtr<WebGLBuffer>);
79     
80     VertexAttribState& getVertexAttribState(int index) { return m_vertexAttribState[index]; }
81     void setVertexAttribState(GC3Duint, GC3Dsizei, GC3Dint, GC3Denum, GC3Dboolean, GC3Dsizei, GC3Dintptr, PassRefPtr<WebGLBuffer>);
82     void unbindBuffer(PassRefPtr<WebGLBuffer>);
83     
84     void setVertexAttribDivisor(GC3Duint index, GC3Duint divisor);
85
86 protected:
87     WebGLVertexArrayObjectBase(WebGLRenderingContextBase&, VAOType);
88     void deleteObjectImpl(GraphicsContext3D*, Platform3DObject) override = 0;
89     
90     VAOType m_type;
91     bool m_hasEverBeenBound;
92     RefPtr<WebGLBuffer> m_boundElementArrayBuffer;
93     Vector<VertexAttribState> m_vertexAttribState;
94 };
95     
96 } // namespace WebCore