15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Apple Inc. All Rights Reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All Rights Reserved.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef WebGLGetInfo_h
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define WebGLGetInfo_h
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/canvas/WebGLBuffer.h"
3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/canvas/WebGLFramebuffer.h"
3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/canvas/WebGLProgram.h"
3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/canvas/WebGLRenderbuffer.h"
3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/canvas/WebGLTexture.h"
3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/canvas/WebGLVertexArrayObjectOES.h"
36e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Float32Array.h"
37e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Int32Array.h"
38e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/PassRefPtr.h"
39e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/RefPtr.h"
40e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Uint32Array.h"
41e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Uint8Array.h"
42e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/text/WTFString.h"
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
44c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// A tagged union representing the result of get queries like
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// getParameter (encompassing getBooleanv, getIntegerv, getFloatv) and
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// similar variants. For reference counted types, increments and
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// decrements the reference count of the target object.
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
51f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)class WebGLGetInfo FINAL {
52c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    STACK_ALLOCATED();
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    enum Type {
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeBool,
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeBoolArray,
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeFloat,
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeInt,
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeNull,
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeString,
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeUnsignedInt,
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeWebGLBuffer,
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeWebGLFloatArray,
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeWebGLFramebuffer,
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeWebGLIntArray,
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeWebGLObjectArray,
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeWebGLProgram,
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeWebGLRenderbuffer,
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeWebGLTexture,
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeWebGLUnsignedByteArray,
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeWebGLUnsignedIntArray,
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        kTypeWebGLVertexArrayObjectOES,
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    };
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit WebGLGetInfo(bool value);
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebGLGetInfo(const bool* value, int size);
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit WebGLGetInfo(float value);
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit WebGLGetInfo(int value);
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Represents the null value and type.
805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebGLGetInfo();
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit WebGLGetInfo(const String& value);
8207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    explicit WebGLGetInfo(unsigned value);
83c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    explicit WebGLGetInfo(PassRefPtrWillBeRawPtr<WebGLBuffer> value);
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit WebGLGetInfo(PassRefPtr<Float32Array> value);
85c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    explicit WebGLGetInfo(PassRefPtrWillBeRawPtr<WebGLFramebuffer> value);
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit WebGLGetInfo(PassRefPtr<Int32Array> value);
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: implement WebGLObjectArray
88c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    // WebGLGetInfo(PassRefPtrWillBeRawPtr<WebGLObjectArray> value);
89c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    explicit WebGLGetInfo(PassRefPtrWillBeRawPtr<WebGLProgram> value);
90c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    explicit WebGLGetInfo(PassRefPtrWillBeRawPtr<WebGLRenderbuffer> value);
91c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    explicit WebGLGetInfo(PassRefPtrWillBeRawPtr<WebGLTexture> value);
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit WebGLGetInfo(PassRefPtr<Uint8Array> value);
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit WebGLGetInfo(PassRefPtr<Uint32Array> value);
94c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    explicit WebGLGetInfo(PassRefPtrWillBeRawPtr<WebGLVertexArrayObjectOES> value);
955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Type getType() const;
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool getBool() const;
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const Vector<bool>& getBoolArray() const;
1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float getFloat() const;
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int getInt() const;
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const String& getString() const;
10307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    unsigned getUnsignedInt() const;
104c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<WebGLBuffer> getWebGLBuffer() const;
1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PassRefPtr<Float32Array> getWebGLFloatArray() const;
106c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<WebGLFramebuffer> getWebGLFramebuffer() const;
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PassRefPtr<Int32Array> getWebGLIntArray() const;
1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: implement WebGLObjectArray
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // PassRefPtr<WebGLObjectArray> getWebGLObjectArray() const;
110c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<WebGLProgram> getWebGLProgram() const;
111c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<WebGLRenderbuffer> getWebGLRenderbuffer() const;
112c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<WebGLTexture> getWebGLTexture() const;
1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PassRefPtr<Uint8Array> getWebGLUnsignedByteArray() const;
1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    PassRefPtr<Uint32Array> getWebGLUnsignedIntArray() const;
115c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    PassRefPtrWillBeRawPtr<WebGLVertexArrayObjectOES> getWebGLVertexArrayObjectOES() const;
1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Type m_type;
1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    bool m_bool;
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Vector<bool> m_boolArray;
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    float m_float;
1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    int m_int;
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    String m_string;
12407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    unsigned m_unsignedInt;
125c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtrWillBeMember<WebGLBuffer> m_webglBuffer;
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RefPtr<Float32Array> m_webglFloatArray;
127c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtrWillBeMember<WebGLFramebuffer> m_webglFramebuffer;
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RefPtr<Int32Array> m_webglIntArray;
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: implement WebGLObjectArray
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // RefPtr<WebGLObjectArray> m_webglObjectArray;
131c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtrWillBeMember<WebGLProgram> m_webglProgram;
132c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtrWillBeMember<WebGLRenderbuffer> m_webglRenderbuffer;
133c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtrWillBeMember<WebGLTexture> m_webglTexture;
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RefPtr<Uint8Array> m_webglUnsignedByteArray;
1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    RefPtr<Uint32Array> m_webglUnsignedIntArray;
136c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    RefPtrWillBeMember<WebGLVertexArrayObjectOES> m_webglVertexArrayObject;
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
139c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // WebGLGetInfo_h
142