64ac57964fe2be288e1245d747cc474dc2d95f73
[WebKit-https.git] / Source / WebCore / bindings / js / JSWebGL2RenderingContextCustom.cpp
1 /*
2  * Copyright (C) 2015-2016 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 #include "config.h"
27
28 #if ENABLE(WEBGL) && ENABLE(WEBGL2)
29 #include "JSWebGL2RenderingContext.h"
30
31 #include <heap/HeapInlines.h>
32 #include <runtime/Error.h>
33 #include "NotImplemented.h"
34 #include "WebGL2RenderingContext.h"
35
36 using namespace JSC;
37
38 namespace WebCore {
39
40 static JSValue toJS(ExecState* exec, JSDOMGlobalObject* globalObject, const WebGLGetInfo& info)
41 {
42     switch (info.getType()) {
43     case WebGLGetInfo::kTypeBool:
44         return jsBoolean(info.getBool());
45     case WebGLGetInfo::kTypeBoolArray: {
46         MarkedArgumentBuffer list;
47         const auto& values = info.getBoolArray();
48         for (const auto& value : values)
49             list.append(jsBoolean(value));
50         return constructArray(exec, 0, globalObject, list);
51     }
52     case WebGLGetInfo::kTypeFloat:
53         return jsNumber(info.getFloat());
54     case WebGLGetInfo::kTypeInt:
55         return jsNumber(info.getInt());
56     case WebGLGetInfo::kTypeNull:
57         return jsNull();
58     case WebGLGetInfo::kTypeString:
59         return jsStringWithCache(exec, info.getString());
60     case WebGLGetInfo::kTypeUnsignedInt:
61         return jsNumber(info.getUnsignedInt());
62     case WebGLGetInfo::kTypeInt64:
63         return jsNumber(info.getInt64());
64     default:
65         notImplemented();
66         return jsUndefined();
67     }
68 }
69
70 void JSWebGL2RenderingContext::visitAdditionalChildren(SlotVisitor& visitor)
71 {
72     visitor.addOpaqueRoot(&wrapped());
73 }
74
75 JSValue JSWebGL2RenderingContext::getInternalformatParameter(ExecState& exec)
76 {
77     UNUSED_PARAM(exec);
78     return jsUndefined();
79 }
80
81 JSValue JSWebGL2RenderingContext::getQueryParameter(ExecState& exec)
82 {
83     UNUSED_PARAM(exec);
84     return jsUndefined();
85 }
86
87 JSValue JSWebGL2RenderingContext::getSamplerParameter(ExecState& exec)
88 {
89     UNUSED_PARAM(exec);
90     return jsUndefined();
91 }
92
93 JSValue JSWebGL2RenderingContext::getSyncParameter(ExecState& exec)
94 {
95     UNUSED_PARAM(exec);
96     return jsUndefined();
97 }
98
99 JSValue JSWebGL2RenderingContext::getIndexedParameter(ExecState& exec)
100 {
101     VM& vm = exec.vm();
102     auto scope = DECLARE_THROW_SCOPE(vm);
103
104     if (exec.argumentCount() != 2)
105         return throwException(&exec, scope, createNotEnoughArgumentsError(&exec));
106
107     WebGL2RenderingContext& context = wrapped();
108     unsigned pname = exec.uncheckedArgument(0).toInt32(&exec);
109     RETURN_IF_EXCEPTION(scope, JSValue());
110     unsigned index = exec.uncheckedArgument(1).toInt32(&exec);
111     RETURN_IF_EXCEPTION(scope, JSValue());
112     WebGLGetInfo info = context.getIndexedParameter(pname, index);
113     return toJS(&exec, globalObject(), info);
114 }
115
116 JSValue JSWebGL2RenderingContext::getActiveUniformBlockParameter(ExecState& exec)
117 {
118     UNUSED_PARAM(exec);
119     return jsUndefined();
120 }
121
122 JSValue JSWebGL2RenderingContext::getActiveUniformBlockName(ExecState& exec)
123 {
124     UNUSED_PARAM(exec);
125     return jsUndefined();
126 }
127
128
129 } // namespace WebCore
130
131 #endif // ENABLE(WEBGL)