1/*
2 * Copyright (C) 2009 Apple Inc. All Rights Reserved.
3 * Copyright (C) 2009 Google Inc. 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 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * 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 WebGLGetInfo_h
28#define WebGLGetInfo_h
29
30#include "wtf/PassRefPtr.h"
31#include "wtf/RefPtr.h"
32#include "PlatformString.h"
33
34#include "WebGLBuffer.h"
35#include "WebGLFloatArray.h"
36#include "WebGLFramebuffer.h"
37#include "WebGLIntArray.h"
38// FIXME: implement WebGLObjectArray
39//#include "WebGLObjectArray.h"
40#include "WebGLProgram.h"
41#include "WebGLRenderbuffer.h"
42#include "WebGLTexture.h"
43#include "WebGLUnsignedByteArray.h"
44
45namespace WebCore {
46
47// A tagged union representing the result of get queries like
48// getParameter (encompassing getBooleanv, getIntegerv, getFloatv) and
49// similar variants. For reference counted types, increments and
50// decrements the reference count of the target object.
51
52class WebGLGetInfo {
53public:
54    enum Type {
55        kTypeBool,
56        kTypeFloat,
57        kTypeLong,
58        kTypeNull,
59        kTypeString,
60        kTypeUnsignedLong,
61        kTypeWebGLBuffer,
62        kTypeWebGLFloatArray,
63        kTypeWebGLFramebuffer,
64        kTypeWebGLIntArray,
65        kTypeWebGLObjectArray,
66        kTypeWebGLProgram,
67        kTypeWebGLRenderbuffer,
68        kTypeWebGLTexture,
69        kTypeWebGLUnsignedByteArray
70    };
71
72    WebGLGetInfo(bool value);
73    WebGLGetInfo(float value);
74    WebGLGetInfo(long value);
75    // Represents the NULL value and type
76    WebGLGetInfo();
77    WebGLGetInfo(const String& value);
78    WebGLGetInfo(unsigned long value);
79    WebGLGetInfo(PassRefPtr<WebGLBuffer> value);
80    WebGLGetInfo(PassRefPtr<WebGLFloatArray> value);
81    WebGLGetInfo(PassRefPtr<WebGLFramebuffer> value);
82    WebGLGetInfo(PassRefPtr<WebGLIntArray> value);
83    // FIXME: implement WebGLObjectArray
84    // WebGLGetInfo(PassRefPtr<WebGLObjectArray> value);
85    WebGLGetInfo(PassRefPtr<WebGLProgram> value);
86    WebGLGetInfo(PassRefPtr<WebGLRenderbuffer> value);
87    WebGLGetInfo(PassRefPtr<WebGLTexture> value);
88    WebGLGetInfo(PassRefPtr<WebGLUnsignedByteArray> value);
89
90    virtual ~WebGLGetInfo();
91
92    Type getType() const;
93
94    bool getBool() const;
95    float getFloat() const;
96    long getLong() const;
97    const String& getString() const;
98    unsigned long getUnsignedLong() const;
99    PassRefPtr<WebGLBuffer> getWebGLBuffer() const;
100    PassRefPtr<WebGLFloatArray> getWebGLFloatArray() const;
101    PassRefPtr<WebGLFramebuffer> getWebGLFramebuffer() const;
102    PassRefPtr<WebGLIntArray> getWebGLIntArray() const;
103    // FIXME: implement WebGLObjectArray
104    // PassRefPtr<WebGLObjectArray> getWebGLObjectArray() const;
105    PassRefPtr<WebGLProgram> getWebGLProgram() const;
106    PassRefPtr<WebGLRenderbuffer> getWebGLRenderbuffer() const;
107    PassRefPtr<WebGLTexture> getWebGLTexture() const;
108    PassRefPtr<WebGLUnsignedByteArray> getWebGLUnsignedByteArray() const;
109
110private:
111    Type m_type;
112    bool m_bool;
113    float m_float;
114    long m_long;
115    String m_string;
116    unsigned long m_unsignedLong;
117    RefPtr<WebGLBuffer> m_webglBuffer;
118    RefPtr<WebGLFloatArray> m_webglFloatArray;
119    RefPtr<WebGLFramebuffer> m_webglFramebuffer;
120    RefPtr<WebGLIntArray> m_webglIntArray;
121    // FIXME: implement WebGLObjectArray
122    // RefPtr<WebGLObjectArray> m_webglObjectArray;
123    RefPtr<WebGLProgram> m_webglProgram;
124    RefPtr<WebGLRenderbuffer> m_webglRenderbuffer;
125    RefPtr<WebGLTexture> m_webglTexture;
126    RefPtr<WebGLUnsignedByteArray> m_webglUnsignedByteArray;
127};
128
129} // namespace WebCore
130
131#endif  // WebGLGetInfo_h
132