1/*
2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * Copyright (C) 2012 Research In Motion Limited. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1.  Redistributions of source code must retain the above copyright
10 *     notice, this list of conditions and the following disclaimer.
11 * 2.  Redistributions in binary form must reproduce the above copyright
12 *     notice, this list of conditions and the following disclaimer in the
13 *     documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
19 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#ifndef Extensions3DOpenGLCommon_h
28#define Extensions3DOpenGLCommon_h
29
30#include "Extensions3D.h"
31
32#include "GraphicsContext3D.h"
33#include <wtf/HashSet.h>
34#include <wtf/text/StringHash.h>
35
36namespace WebCore {
37
38class Extensions3DOpenGLCommon : public Extensions3D {
39public:
40    virtual ~Extensions3DOpenGLCommon();
41
42    // Extensions3D methods.
43    virtual bool supports(const String&);
44    virtual void ensureEnabled(const String&);
45    virtual bool isEnabled(const String&);
46    virtual int getGraphicsResetStatusARB();
47
48    virtual Platform3DObject createVertexArrayOES() = 0;
49    virtual void deleteVertexArrayOES(Platform3DObject) = 0;
50    virtual GC3Dboolean isVertexArrayOES(Platform3DObject) = 0;
51    virtual void bindVertexArrayOES(Platform3DObject) = 0;
52
53    virtual void drawBuffersEXT(GC3Dsizei, const GC3Denum*) = 0;
54
55    virtual String getTranslatedShaderSourceANGLE(Platform3DObject);
56
57    // EXT Robustness - uses getGraphicsResetStatusARB()
58    virtual void readnPixelsEXT(int x, int y, GC3Dsizei width, GC3Dsizei height, GC3Denum format, GC3Denum type, GC3Dsizei bufSize, void *data);
59    virtual void getnUniformfvEXT(GC3Duint program, int location, GC3Dsizei bufSize, float *params);
60    virtual void getnUniformivEXT(GC3Duint program, int location, GC3Dsizei bufSize, int *params);
61
62    virtual bool isNVIDIA() { return m_isNVIDIA; }
63    virtual bool isAMD() { return m_isAMD; }
64    virtual bool isIntel() { return m_isIntel; }
65    virtual bool isImagination() { return m_isImagination; }
66    virtual String vendor() { return m_vendor; }
67
68    virtual bool maySupportMultisampling() { return m_maySupportMultisampling; }
69    virtual bool requiresBuiltInFunctionEmulation() { return m_requiresBuiltInFunctionEmulation; }
70    virtual bool requiresRestrictedMaximumTextureSize() { return m_requiresRestrictedMaximumTextureSize; }
71
72protected:
73    friend class Extensions3DOpenGLES;
74    Extensions3DOpenGLCommon(GraphicsContext3D*);
75
76    virtual bool supportsExtension(const String&) = 0;
77    virtual String getExtensions() = 0;
78
79    virtual void initializeAvailableExtensions();
80    bool m_initializedAvailableExtensions;
81    HashSet<String> m_availableExtensions;
82
83    // Weak pointer back to GraphicsContext3D
84    GraphicsContext3D* m_context;
85
86    bool m_isNVIDIA;
87    bool m_isAMD;
88    bool m_isIntel;
89    bool m_isImagination;
90    bool m_maySupportMultisampling;
91    bool m_requiresBuiltInFunctionEmulation;
92    bool m_requiresRestrictedMaximumTextureSize;
93
94    String m_vendor;
95    String m_renderer;
96};
97
98} // namespace WebCore
99
100#endif // Extensions3DOpenGLCommon_h
101