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#include "config.h"
28#include "core/html/canvas/WebGLGetInfo.h"
29
30#include "core/html/canvas/WebGLBuffer.h"
31#include "core/html/canvas/WebGLFramebuffer.h"
32#include "core/html/canvas/WebGLProgram.h"
33#include "core/html/canvas/WebGLRenderbuffer.h"
34#include "core/html/canvas/WebGLTexture.h"
35#include "core/html/canvas/WebGLVertexArrayObjectOES.h"
36#include "wtf/Float32Array.h"
37#include "wtf/Int32Array.h"
38#include "wtf/Uint32Array.h"
39#include "wtf/Uint8Array.h"
40
41namespace WebCore {
42
43WebGLGetInfo::WebGLGetInfo(bool value)
44    : m_type(kTypeBool)
45    , m_bool(value)
46    , m_float(0)
47    , m_int(0)
48    , m_unsignedInt(0)
49{
50}
51
52WebGLGetInfo::WebGLGetInfo(const bool* value, int size)
53    : m_type(kTypeBoolArray)
54    , m_bool(false)
55    , m_float(0)
56    , m_int(0)
57    , m_unsignedInt(0)
58{
59    if (!value || size <=0)
60        return;
61    m_boolArray.resize(size);
62    for (int ii = 0; ii < size; ++ii)
63        m_boolArray[ii] = value[ii];
64}
65
66WebGLGetInfo::WebGLGetInfo(float value)
67    : m_type(kTypeFloat)
68    , m_bool(false)
69    , m_float(value)
70    , m_int(0)
71    , m_unsignedInt(0)
72{
73}
74
75WebGLGetInfo::WebGLGetInfo(int value)
76    : m_type(kTypeInt)
77    , m_bool(false)
78    , m_float(0)
79    , m_int(value)
80    , m_unsignedInt(0)
81{
82}
83
84WebGLGetInfo::WebGLGetInfo()
85    : m_type(kTypeNull)
86    , m_bool(false)
87    , m_float(0)
88    , m_int(0)
89    , m_unsignedInt(0)
90{
91}
92
93WebGLGetInfo::WebGLGetInfo(const String& value)
94    : m_type(kTypeString)
95    , m_bool(false)
96    , m_float(0)
97    , m_int(0)
98    , m_string(value)
99    , m_unsignedInt(0)
100{
101}
102
103WebGLGetInfo::WebGLGetInfo(unsigned int value)
104    : m_type(kTypeUnsignedInt)
105    , m_bool(false)
106    , m_float(0)
107    , m_int(0)
108    , m_unsignedInt(value)
109{
110}
111
112WebGLGetInfo::WebGLGetInfo(PassRefPtr<WebGLBuffer> value)
113    : m_type(kTypeWebGLBuffer)
114    , m_bool(false)
115    , m_float(0)
116    , m_int(0)
117    , m_unsignedInt(0)
118    , m_webglBuffer(value)
119{
120}
121
122WebGLGetInfo::WebGLGetInfo(PassRefPtr<Float32Array> value)
123    : m_type(kTypeWebGLFloatArray)
124    , m_bool(false)
125    , m_float(0)
126    , m_int(0)
127    , m_unsignedInt(0)
128    , m_webglFloatArray(value)
129{
130}
131
132WebGLGetInfo::WebGLGetInfo(PassRefPtr<WebGLFramebuffer> value)
133    : m_type(kTypeWebGLFramebuffer)
134    , m_bool(false)
135    , m_float(0)
136    , m_int(0)
137    , m_unsignedInt(0)
138    , m_webglFramebuffer(value)
139{
140}
141
142WebGLGetInfo::WebGLGetInfo(PassRefPtr<Int32Array> value)
143    : m_type(kTypeWebGLIntArray)
144    , m_bool(false)
145    , m_float(0)
146    , m_int(0)
147    , m_unsignedInt(0)
148    , m_webglIntArray(value)
149{
150}
151
152WebGLGetInfo::WebGLGetInfo(PassRefPtr<WebGLProgram> value)
153    : m_type(kTypeWebGLProgram)
154    , m_bool(false)
155    , m_float(0)
156    , m_int(0)
157    , m_unsignedInt(0)
158    , m_webglProgram(value)
159{
160}
161
162WebGLGetInfo::WebGLGetInfo(PassRefPtr<WebGLRenderbuffer> value)
163    : m_type(kTypeWebGLRenderbuffer)
164    , m_bool(false)
165    , m_float(0)
166    , m_int(0)
167    , m_unsignedInt(0)
168    , m_webglRenderbuffer(value)
169{
170}
171
172WebGLGetInfo::WebGLGetInfo(PassRefPtr<WebGLTexture> value)
173    : m_type(kTypeWebGLTexture)
174    , m_bool(false)
175    , m_float(0)
176    , m_int(0)
177    , m_unsignedInt(0)
178    , m_webglTexture(value)
179{
180}
181
182WebGLGetInfo::WebGLGetInfo(PassRefPtr<Uint8Array> value)
183    : m_type(kTypeWebGLUnsignedByteArray)
184    , m_bool(false)
185    , m_float(0)
186    , m_int(0)
187    , m_unsignedInt(0)
188    , m_webglUnsignedByteArray(value)
189{
190}
191
192WebGLGetInfo::WebGLGetInfo(PassRefPtr<Uint32Array> value)
193    : m_type(kTypeWebGLUnsignedIntArray)
194    , m_bool(false)
195    , m_float(0)
196    , m_int(0)
197    , m_unsignedInt(0)
198    , m_webglUnsignedIntArray(value)
199{
200}
201
202WebGLGetInfo::WebGLGetInfo(PassRefPtr<WebGLVertexArrayObjectOES> value)
203    : m_type(kTypeWebGLVertexArrayObjectOES)
204    , m_bool(false)
205    , m_float(0)
206    , m_int(0)
207    , m_unsignedInt(0)
208    , m_webglVertexArrayObject(value)
209{
210}
211
212WebGLGetInfo::~WebGLGetInfo()
213{
214}
215
216WebGLGetInfo::Type WebGLGetInfo::getType() const
217{
218    return m_type;
219}
220
221bool WebGLGetInfo::getBool() const
222{
223    ASSERT(getType() == kTypeBool);
224    return m_bool;
225}
226
227const Vector<bool>& WebGLGetInfo::getBoolArray() const
228{
229    ASSERT(getType() == kTypeBoolArray);
230    return m_boolArray;
231}
232
233float WebGLGetInfo::getFloat() const
234{
235    ASSERT(getType() == kTypeFloat);
236    return m_float;
237}
238
239int WebGLGetInfo::getInt() const
240{
241    ASSERT(getType() == kTypeInt);
242    return m_int;
243}
244
245const String& WebGLGetInfo::getString() const
246{
247    ASSERT(getType() == kTypeString);
248    return m_string;
249}
250
251unsigned int WebGLGetInfo::getUnsignedInt() const
252{
253    ASSERT(getType() == kTypeUnsignedInt);
254    return m_unsignedInt;
255}
256
257PassRefPtr<WebGLBuffer> WebGLGetInfo::getWebGLBuffer() const
258{
259    ASSERT(getType() == kTypeWebGLBuffer);
260    return m_webglBuffer;
261}
262
263PassRefPtr<Float32Array> WebGLGetInfo::getWebGLFloatArray() const
264{
265    ASSERT(getType() == kTypeWebGLFloatArray);
266    return m_webglFloatArray;
267}
268
269PassRefPtr<WebGLFramebuffer> WebGLGetInfo::getWebGLFramebuffer() const
270{
271    ASSERT(getType() == kTypeWebGLFramebuffer);
272    return m_webglFramebuffer;
273}
274
275PassRefPtr<Int32Array> WebGLGetInfo::getWebGLIntArray() const
276{
277    ASSERT(getType() == kTypeWebGLIntArray);
278    return m_webglIntArray;
279}
280
281PassRefPtr<WebGLProgram> WebGLGetInfo::getWebGLProgram() const
282{
283    ASSERT(getType() == kTypeWebGLProgram);
284    return m_webglProgram;
285}
286
287PassRefPtr<WebGLRenderbuffer> WebGLGetInfo::getWebGLRenderbuffer() const
288{
289    ASSERT(getType() == kTypeWebGLRenderbuffer);
290    return m_webglRenderbuffer;
291}
292
293PassRefPtr<WebGLTexture> WebGLGetInfo::getWebGLTexture() const
294{
295    ASSERT(getType() == kTypeWebGLTexture);
296    return m_webglTexture;
297}
298
299PassRefPtr<Uint8Array> WebGLGetInfo::getWebGLUnsignedByteArray() const
300{
301    ASSERT(getType() == kTypeWebGLUnsignedByteArray);
302    return m_webglUnsignedByteArray;
303}
304
305PassRefPtr<Uint32Array> WebGLGetInfo::getWebGLUnsignedIntArray() const
306{
307    ASSERT(getType() == kTypeWebGLUnsignedIntArray);
308    return m_webglUnsignedIntArray;
309}
310
311PassRefPtr<WebGLVertexArrayObjectOES> WebGLGetInfo::getWebGLVertexArrayObjectOES() const
312{
313    ASSERT(getType() == kTypeWebGLVertexArrayObjectOES);
314    return m_webglVertexArrayObject;
315}
316
317} // namespace WebCore
318