Line data Source code
1 : /* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /* This Source Code Form is subject to the terms of the Mozilla Public
3 : * License, v. 2.0. If a copy of the MPL was not distributed with this
4 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 :
6 : #include "WebGLActiveInfo.h"
7 :
8 : #include "mozilla/dom/WebGLRenderingContextBinding.h"
9 :
10 : namespace mozilla {
11 :
12 : static uint8_t
13 0 : ElemSizeFromType(GLenum elemType)
14 : {
15 0 : switch (elemType) {
16 : case LOCAL_GL_BOOL:
17 : case LOCAL_GL_FLOAT:
18 : case LOCAL_GL_INT:
19 : case LOCAL_GL_UNSIGNED_INT:
20 : case LOCAL_GL_SAMPLER_2D:
21 : case LOCAL_GL_SAMPLER_3D:
22 : case LOCAL_GL_SAMPLER_CUBE:
23 : case LOCAL_GL_SAMPLER_2D_SHADOW:
24 : case LOCAL_GL_SAMPLER_2D_ARRAY:
25 : case LOCAL_GL_SAMPLER_2D_ARRAY_SHADOW:
26 : case LOCAL_GL_SAMPLER_CUBE_SHADOW:
27 : case LOCAL_GL_INT_SAMPLER_2D:
28 : case LOCAL_GL_INT_SAMPLER_3D:
29 : case LOCAL_GL_INT_SAMPLER_CUBE:
30 : case LOCAL_GL_INT_SAMPLER_2D_ARRAY:
31 : case LOCAL_GL_UNSIGNED_INT_SAMPLER_2D:
32 : case LOCAL_GL_UNSIGNED_INT_SAMPLER_3D:
33 : case LOCAL_GL_UNSIGNED_INT_SAMPLER_CUBE:
34 : case LOCAL_GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
35 0 : return 1;
36 :
37 : case LOCAL_GL_BOOL_VEC2:
38 : case LOCAL_GL_FLOAT_VEC2:
39 : case LOCAL_GL_INT_VEC2:
40 : case LOCAL_GL_UNSIGNED_INT_VEC2:
41 0 : return 2;
42 :
43 : case LOCAL_GL_BOOL_VEC3:
44 : case LOCAL_GL_FLOAT_VEC3:
45 : case LOCAL_GL_INT_VEC3:
46 : case LOCAL_GL_UNSIGNED_INT_VEC3:
47 0 : return 3;
48 :
49 : case LOCAL_GL_BOOL_VEC4:
50 : case LOCAL_GL_FLOAT_VEC4:
51 : case LOCAL_GL_INT_VEC4:
52 : case LOCAL_GL_UNSIGNED_INT_VEC4:
53 : case LOCAL_GL_FLOAT_MAT2:
54 0 : return 4;
55 :
56 : case LOCAL_GL_FLOAT_MAT2x3:
57 : case LOCAL_GL_FLOAT_MAT3x2:
58 0 : return 6;
59 :
60 : case LOCAL_GL_FLOAT_MAT2x4:
61 : case LOCAL_GL_FLOAT_MAT4x2:
62 0 : return 8;
63 :
64 : case LOCAL_GL_FLOAT_MAT3:
65 0 : return 9;
66 :
67 : case LOCAL_GL_FLOAT_MAT3x4:
68 : case LOCAL_GL_FLOAT_MAT4x3:
69 0 : return 12;
70 :
71 : case LOCAL_GL_FLOAT_MAT4:
72 0 : return 16;
73 :
74 : default:
75 0 : MOZ_CRASH("GFX: Bad `elemType`.");
76 : }
77 : }
78 :
79 : ////////////////////
80 :
81 0 : WebGLActiveInfo::WebGLActiveInfo(WebGLContext* webgl, GLint elemCount, GLenum elemType,
82 : bool isArray, const nsACString& baseUserName,
83 0 : const nsACString& baseMappedName)
84 : : mWebGL(webgl)
85 : , mElemCount(elemCount)
86 : , mElemType(elemType)
87 : , mBaseUserName(baseUserName)
88 : , mIsArray(isArray)
89 0 : , mElemSize(ElemSizeFromType(elemType))
90 0 : , mBaseMappedName(baseMappedName)
91 0 : { }
92 :
93 : bool
94 0 : WebGLActiveInfo::IsSampler() const
95 : {
96 0 : switch (mElemType) {
97 : case LOCAL_GL_SAMPLER_2D:
98 : case LOCAL_GL_SAMPLER_3D:
99 : case LOCAL_GL_SAMPLER_CUBE:
100 : case LOCAL_GL_SAMPLER_2D_SHADOW:
101 : case LOCAL_GL_SAMPLER_2D_ARRAY:
102 : case LOCAL_GL_SAMPLER_2D_ARRAY_SHADOW:
103 : case LOCAL_GL_SAMPLER_CUBE_SHADOW:
104 : case LOCAL_GL_INT_SAMPLER_2D:
105 : case LOCAL_GL_INT_SAMPLER_3D:
106 : case LOCAL_GL_INT_SAMPLER_CUBE:
107 : case LOCAL_GL_INT_SAMPLER_2D_ARRAY:
108 : case LOCAL_GL_UNSIGNED_INT_SAMPLER_2D:
109 : case LOCAL_GL_UNSIGNED_INT_SAMPLER_3D:
110 : case LOCAL_GL_UNSIGNED_INT_SAMPLER_CUBE:
111 : case LOCAL_GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
112 0 : return true;
113 :
114 : default:
115 0 : return false;
116 : }
117 : }
118 :
119 : ////////////////////////////////////////////////////////////////////////////////
120 :
121 : JSObject*
122 0 : WebGLActiveInfo::WrapObject(JSContext* js, JS::Handle<JSObject*> givenProto)
123 : {
124 0 : return dom::WebGLActiveInfoBinding::Wrap(js, this, givenProto);
125 : }
126 :
127 0 : NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(WebGLActiveInfo)
128 :
129 0 : NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(WebGLActiveInfo, AddRef)
130 0 : NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(WebGLActiveInfo, Release)
131 :
132 : } // namespace mozilla
|