1 /*
2  * Copyright (c) 2021-2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef WEBGL_RENDERING_CONTEXT_BASE_H
17 #define WEBGL_RENDERING_CONTEXT_BASE_H
18 
19 #include <GLES2/gl2.h>
20 #include <GLES3/gl31.h>
21 #include <GLES2/gl2ext.h>
22 #include "securec.h"
23 #include "napi/n_exporter.h"
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 namespace OHOS {
30 namespace Rosen {
31 class WebGLRenderingContextBase  {
32 public:
33     static const GLenum DEPTH_BUFFER_BIT = 0x00000100;
34     static const GLenum STENCIL_BUFFER_BIT = 0x00000400;
35     static const GLenum COLOR_BUFFER_BIT = 0x00004000;
36     static const GLenum POINTS = 0x0000;
37     static const GLenum LINES = 0x0001;
38     static const GLenum LINE_LOOP = 0x0002;
39     static const GLenum LINE_STRIP = 0x0003;
40     static const GLenum TRIANGLES = 0x0004;
41     static const GLenum TRIANGLE_STRIP = 0x0005;
42     static const GLenum TRIANGLE_FAN = 0x0006;
43     static const GLenum ZERO = 0;
44     static const GLenum ONE = 1;
45     static const GLenum SRC_COLOR = 0x0300;
46     static const GLenum ONE_MINUS_SRC_COLOR = 0x0301;
47     static const GLenum SRC_ALPHA = 0x0302;
48     static const GLenum ONE_MINUS_SRC_ALPHA = 0x0303;
49     static const GLenum DST_ALPHA = 0x0304;
50     static const GLenum ONE_MINUS_DST_ALPHA = 0x0305;
51     static const GLenum DST_COLOR = 0x0306;
52     static const GLenum ONE_MINUS_DST_COLOR = 0x0307;
53     static const GLenum SRC_ALPHA_SATURATE = 0x0308;
54     static const GLenum FUNC_ADD = 0x8006;
55     static const GLenum BLEND_EQUATION = 0x8009;
56     static const GLenum BLEND_EQUATION_RGB = 0x8009;
57     static const GLenum BLEND_EQUATION_ALPHA = 0x883D;
58     static const GLenum FUNC_SUBTRACT = 0x800A;
59     static const GLenum FUNC_REVERSE_SUBTRACT = 0x800B;
60     static const GLenum BLEND_DST_RGB = 0x80C8;
61     static const GLenum BLEND_SRC_RGB = 0x80C9;
62     static const GLenum BLEND_DST_ALPHA = 0x80CA;
63     static const GLenum BLEND_SRC_ALPHA = 0x80CB;
64     static const GLenum CONSTANT_COLOR = 0x8001;
65     static const GLenum ONE_MINUS_CONSTANT_COLOR = 0x8002;
66     static const GLenum CONSTANT_ALPHA = 0x8003;
67     static const GLenum ONE_MINUS_CONSTANT_ALPHA = 0x8004;
68     static const GLenum BLEND_COLOR = 0x8005;
69     static const GLenum ARRAY_BUFFER = 0x8892;
70     static const GLenum ELEMENT_ARRAY_BUFFER = 0x8893;
71     static const GLenum ARRAY_BUFFER_BINDING = 0x8894;
72     static const GLenum ELEMENT_ARRAY_BUFFER_BINDING = 0x8895;
73     static const GLenum STREAM_DRAW = 0x88E0;
74     static const GLenum STATIC_DRAW = 0x88E4;
75     static const GLenum DYNAMIC_DRAW = 0x88E8;
76     static const GLenum BUFFER_SIZE = 0x8764;
77     static const GLenum BUFFER_USAGE = 0x8765;
78     static const GLenum CURRENT_VERTEX_ATTRIB = 0x8626;
79     static const GLenum FRONT = 0x0404;
80     static const GLenum BACK = 0x0405;
81     static const GLenum FRONT_AND_BACK = 0x0408;
82     static const GLenum CULL_FACE = 0x0B44;
83     static const GLenum BLEND = 0x0BE2;
84     static const GLenum DITHER = 0x0BD0;
85     static const GLenum STENCIL_TEST = 0x0B90;
86     static const GLenum DEPTH_TEST = 0x0B71;
87     static const GLenum SCISSOR_TEST = 0x0C11;
88     static const GLenum POLYGON_OFFSET_FILL = 0x8037;
89     static const GLenum SAMPLE_ALPHA_TO_COVERAGE = 0x809E;
90     static const GLenum SAMPLE_COVERAGE = 0x80A0;
91     static const GLenum NO_ERROR = 0;
92     static const GLenum INVALID_ENUM = 0x0500;
93     static const GLenum INVALID_VALUE = 0x0501;
94     static const GLenum INVALID_OPERATION = 0x0502;
95     static const GLenum OUT_OF_MEMORY = 0x0505;
96     static const GLenum CW = 0x0900;
97     static const GLenum CCW = 0x0901;
98     static const GLenum LINE_WIDTH = 0x0B21;
99     static const GLenum ALIASED_POINT_SIZE_RANGE = 0x846D;
100     static const GLenum ALIASED_LINE_WIDTH_RANGE = 0x846E;
101     static const GLenum CULL_FACE_MODE = 0x0B45;
102     static const GLenum FRONT_FACE = 0x0B46;
103     static const GLenum DEPTH_RANGE = 0x0B70;
104     static const GLenum DEPTH_WRITEMASK = 0x0B72;
105     static const GLenum DEPTH_CLEAR_VALUE = 0x0B73;
106     static const GLenum DEPTH_FUNC = 0x0B74;
107     static const GLenum STENCIL_CLEAR_VALUE = 0x0B91;
108     static const GLenum STENCIL_FUNC = 0x0B92;
109     static const GLenum STENCIL_FAIL = 0x0B94;
110     static const GLenum STENCIL_PASS_DEPTH_FAIL = 0x0B95;
111     static const GLenum STENCIL_PASS_DEPTH_PASS = 0x0B96;
112     static const GLenum STENCIL_REF = 0x0B97;
113     static const GLenum STENCIL_VALUE_MASK = 0x0B93;
114     static const GLenum STENCIL_WRITEMASK = 0x0B98;
115     static const GLenum STENCIL_BACK_FUNC = 0x8800;
116     static const GLenum STENCIL_BACK_FAIL = 0x8801;
117     static const GLenum STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802;
118     static const GLenum STENCIL_BACK_PASS_DEPTH_PASS = 0x8803;
119     static const GLenum STENCIL_BACK_REF = 0x8CA3;
120     static const GLenum STENCIL_BACK_VALUE_MASK = 0x8CA4;
121     static const GLenum STENCIL_BACK_WRITEMASK = 0x8CA5;
122     static const GLenum VIEWPORT = 0x0BA2;
123     static const GLenum SCISSOR_BOX = 0x0C10;
124     static const GLenum COLOR_CLEAR_VALUE = 0x0C22;
125     static const GLenum COLOR_WRITEMASK = 0x0C23;
126     static const GLenum UNPACK_ALIGNMENT = 0x0CF5;
127     static const GLenum PACK_ALIGNMENT = 0x0D05;
128     static const GLenum MAX_TEXTURE_SIZE = 0x0D33;
129     static const GLenum MAX_VIEWPORT_DIMS = 0x0D3A;
130     static const GLenum SUBPIXEL_BITS = 0x0D50;
131     static const GLenum RED_BITS = 0x0D52;
132     static const GLenum GREEN_BITS = 0x0D53;
133     static const GLenum BLUE_BITS = 0x0D54;
134     static const GLenum ALPHA_BITS = 0x0D55;
135     static const GLenum DEPTH_BITS = 0x0D56;
136     static const GLenum STENCIL_BITS = 0x0D57;
137     static const GLenum POLYGON_OFFSET_UNITS = 0x2A00;
138     static const GLenum POLYGON_OFFSET_FACTOR = 0x8038;
139     static const GLenum TEXTURE_BINDING_2D = 0x8069;
140     static const GLenum SAMPLE_BUFFERS = 0x80A8;
141     static const GLenum SAMPLES = 0x80A9;
142     static const GLenum SAMPLE_COVERAGE_VALUE = 0x80AA;
143     static const GLenum SAMPLE_COVERAGE_INVERT = 0x80AB;
144     static const GLenum COMPRESSED_TEXTURE_FORMATS = 0x86A3;
145     static const GLenum DONT_CARE = 0x1100;
146     static const GLenum FASTEST = 0x1101;
147     static const GLenum NICEST = 0x1102;
148     static const GLenum GENERATE_MIPMAP_HINT = 0x8192;
149     static const GLenum BYTE = 0x1400;
150     static const GLenum UNSIGNED_BYTE = 0x1401;
151     static const GLenum SHORT = 0x1402;
152     static const GLenum UNSIGNED_SHORT = 0x1403;
153     static const GLenum INT = 0x1404;
154     static const GLenum UNSIGNED_INT = 0x1405;
155     static const GLenum FLOAT = 0x1406;
156     static const GLenum DEPTH_COMPONENT = 0x1902;
157     static const GLenum ALPHA = 0x1906;
158     static const GLenum RGB = 0x1907;
159     static const GLenum RGBA = 0x1908;
160     static const GLenum LUMINANCE = 0x1909;
161     static const GLenum LUMINANCE_ALPHA = 0x190A;
162     static const GLenum UNSIGNED_SHORT_4_4_4_4 = 0x8033;
163     static const GLenum UNSIGNED_SHORT_5_5_5_1 = 0x8034;
164     static const GLenum UNSIGNED_SHORT_5_6_5 = 0x8363;
165     static const GLenum FRAGMENT_SHADER = 0x8B30;
166     static const GLenum VERTEX_SHADER = 0x8B31;
167     static const GLenum MAX_VERTEX_ATTRIBS = 0x8869;
168     static const GLenum MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;
169     static const GLenum MAX_VARYING_VECTORS = 0x8DFC;
170     static const GLenum MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D;
171     static const GLenum MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C;
172     static const GLenum MAX_TEXTURE_IMAGE_UNITS = 0x8872;
173     static const GLenum MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD;
174     static const GLenum SHADER_TYPE = 0x8B4F;
175     static const GLenum DELETE_STATUS = 0x8B80;
176     static const GLenum LINK_STATUS = 0x8B82;
177     static const GLenum VALIDATE_STATUS = 0x8B83;
178     static const GLenum ATTACHED_SHADERS = 0x8B85;
179     static const GLenum ACTIVE_UNIFORMS = 0x8B86;
180     static const GLenum ACTIVE_ATTRIBUTES = 0x8B89;
181     static const GLenum SHADING_LANGUAGE_VERSION = 0x8B8C;
182     static const GLenum CURRENT_PROGRAM = 0x8B8D;
183     static const GLenum NEVER = 0x0200;
184     static const GLenum LESS = 0x0201;
185     static const GLenum EQUAL = 0x0202;
186     static const GLenum LEQUAL = 0x0203;
187     static const GLenum GREATER = 0x0204;
188     static const GLenum NOTEQUAL = 0x0205;
189     static const GLenum GEQUAL = 0x0206;
190     static const GLenum ALWAYS = 0x0207;
191     static const GLenum KEEP = 0x1E00;
192     static const GLenum REPLACE = 0x1E01;
193     static const GLenum INCR = 0x1E02;
194     static const GLenum DECR = 0x1E03;
195     static const GLenum INVERT = 0x150A;
196     static const GLenum INCR_WRAP = 0x8507;
197     static const GLenum DECR_WRAP = 0x8508;
198     static const GLenum VENDOR = 0x1F00;
199     static const GLenum RENDERER = 0x1F01;
200     static const GLenum VERSION = 0x1F02;
201     static const GLenum NEAREST = 0x2600;
202     static const GLenum LINEAR = 0x2601;
203     static const GLenum NEAREST_MIPMAP_NEAREST = 0x2700;
204     static const GLenum LINEAR_MIPMAP_NEAREST = 0x2701;
205     static const GLenum NEAREST_MIPMAP_LINEAR = 0x2702;
206     static const GLenum LINEAR_MIPMAP_LINEAR = 0x2703;
207     static const GLenum TEXTURE_MAG_FILTER = 0x2800;
208     static const GLenum TEXTURE_MIN_FILTER = 0x2801;
209     static const GLenum TEXTURE_WRAP_S = 0x2802;
210     static const GLenum TEXTURE_WRAP_T = 0x2803;
211     static const GLenum TEXTURE_2D = 0x0DE1;
212     static const GLenum TEXTURE = 0x1702;
213     static const GLenum TEXTURE_CUBE_MAP = 0x8513;
214     static const GLenum TEXTURE_BINDING_CUBE_MAP = 0x8514;
215     static const GLenum TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515;
216     static const GLenum TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516;
217     static const GLenum TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517;
218     static const GLenum TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518;
219     static const GLenum TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519;
220     static const GLenum TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851A;
221     static const GLenum MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;
222     static const GLenum TEXTURE0 = 0x84C0;
223     static const GLenum TEXTURE1 = 0x84C1;
224     static const GLenum TEXTURE2 = 0x84C2;
225     static const GLenum TEXTURE3 = 0x84C3;
226     static const GLenum TEXTURE4 = 0x84C4;
227     static const GLenum TEXTURE5 = 0x84C5;
228     static const GLenum TEXTURE6 = 0x84C6;
229     static const GLenum TEXTURE7 = 0x84C7;
230     static const GLenum TEXTURE8 = 0x84C8;
231     static const GLenum TEXTURE9 = 0x84C9;
232     static const GLenum TEXTURE10 = 0x84CA;
233     static const GLenum TEXTURE11 = 0x84CB;
234     static const GLenum TEXTURE12 = 0x84CC;
235     static const GLenum TEXTURE13 = 0x84CD;
236     static const GLenum TEXTURE14 = 0x84CE;
237     static const GLenum TEXTURE15 = 0x84CF;
238     static const GLenum TEXTURE16 = 0x84D0;
239     static const GLenum TEXTURE17 = 0x84D1;
240     static const GLenum TEXTURE18 = 0x84D2;
241     static const GLenum TEXTURE19 = 0x84D3;
242     static const GLenum TEXTURE20 = 0x84D4;
243     static const GLenum TEXTURE21 = 0x84D5;
244     static const GLenum TEXTURE22 = 0x84D6;
245     static const GLenum TEXTURE23 = 0x84D7;
246     static const GLenum TEXTURE24 = 0x84D8;
247     static const GLenum TEXTURE25 = 0x84D9;
248     static const GLenum TEXTURE26 = 0x84DA;
249     static const GLenum TEXTURE27 = 0x84DB;
250     static const GLenum TEXTURE28 = 0x84DC;
251     static const GLenum TEXTURE29 = 0x84DD;
252     static const GLenum TEXTURE30 = 0x84DE;
253     static const GLenum TEXTURE31 = 0x84DF;
254     static const GLenum ACTIVE_TEXTURE = 0x84E0;
255     static const GLenum REPEAT = 0x2901;
256     static const GLenum CLAMP_TO_EDGE = 0x812F;
257     static const GLenum MIRRORED_REPEAT = 0x8370;
258     static const GLenum FLOAT_VEC2 = 0x8B50;
259     static const GLenum FLOAT_VEC3 = 0x8B51;
260     static const GLenum FLOAT_VEC4 = 0x8B52;
261     static const GLenum INT_VEC2 = 0x8B53;
262     static const GLenum INT_VEC3 = 0x8B54;
263     static const GLenum INT_VEC4 = 0x8B55;
264     static const GLenum BOOL = 0x8B56;
265     static const GLenum BOOL_VEC2 = 0x8B57;
266     static const GLenum BOOL_VEC3 = 0x8B58;
267     static const GLenum BOOL_VEC4 = 0x8B59;
268     static const GLenum FLOAT_MAT2 = 0x8B5A;
269     static const GLenum FLOAT_MAT3 = 0x8B5B;
270     static const GLenum FLOAT_MAT4 = 0x8B5C;
271     static const GLenum SAMPLER_2D = 0x8B5E;
272     static const GLenum SAMPLER_CUBE = 0x8B60;
273     static const GLenum VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622;
274     static const GLenum VERTEX_ATTRIB_ARRAY_SIZE = 0x8623;
275     static const GLenum VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624;
276     static const GLenum VERTEX_ATTRIB_ARRAY_TYPE = 0x8625;
277     static const GLenum VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886A;
278     static const GLenum VERTEX_ATTRIB_ARRAY_POINTER = 0x8645;
279     static const GLenum VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889F;
280     static const GLenum IMPLEMENTATION_COLOR_READ_TYPE = 0x8B9A;
281     static const GLenum IMPLEMENTATION_COLOR_READ_FORMAT = 0x8B9B;
282     static const GLenum COMPILE_STATUS = 0x8B81;
283     static const GLenum LOW_FLOAT = 0x8DF0;
284     static const GLenum MEDIUM_FLOAT = 0x8DF1;
285     static const GLenum HIGH_FLOAT = 0x8DF2;
286     static const GLenum LOW_INT = 0x8DF3;
287     static const GLenum MEDIUM_INT = 0x8DF4;
288     static const GLenum HIGH_INT = 0x8DF5;
289     static const GLenum FRAMEBUFFER = 0x8D40;
290     static const GLenum RENDERBUFFER = 0x8D41;
291     static const GLenum RGBA4 = 0x8056;
292     static const GLenum RGB5_A1 = 0x8057;
293     static const GLenum RGB565 = 0x8D62;
294     static const GLenum DEPTH_COMPONENT16 = 0x81A5;
295     static const GLenum STENCIL_INDEX8 = 0x8D48;
296     static const GLenum DEPTH_STENCIL = 0x84F9;
297     static const GLenum RENDERBUFFER_WIDTH = 0x8D42;
298     static const GLenum RENDERBUFFER_HEIGHT = 0x8D43;
299     static const GLenum RENDERBUFFER_INTERNAL_FORMAT = 0x8D44;
300     static const GLenum RENDERBUFFER_RED_SIZE = 0x8D50;
301     static const GLenum RENDERBUFFER_GREEN_SIZE = 0x8D51;
302     static const GLenum RENDERBUFFER_BLUE_SIZE = 0x8D52;
303     static const GLenum RENDERBUFFER_ALPHA_SIZE = 0x8D53;
304     static const GLenum RENDERBUFFER_DEPTH_SIZE = 0x8D54;
305     static const GLenum RENDERBUFFER_STENCIL_SIZE = 0x8D55;
306     static const GLenum FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8CD0;
307     static const GLenum FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8CD1;
308     static const GLenum FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8CD2;
309     static const GLenum FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8CD3;
310     static const GLenum COLOR_ATTACHMENT0 = 0x8CE0;
311     static const GLenum DEPTH_ATTACHMENT = 0x8D00;
312     static const GLenum STENCIL_ATTACHMENT = 0x8D20;
313     static const GLenum DEPTH_STENCIL_ATTACHMENT = 0x821A;
314     static const GLenum NONE = 0;
315     static const GLenum FRAMEBUFFER_COMPLETE = 0x8CD5;
316     static const GLenum FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6;
317     static const GLenum FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7;
318     static const GLenum FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9;
319     static const GLenum FRAMEBUFFER_UNSUPPORTED = 0x8CDD;
320     static const GLenum FRAMEBUFFER_BINDING = 0x8CA6;
321     static const GLenum RENDERBUFFER_BINDING = 0x8CA7;
322     static const GLenum MAX_RENDERBUFFER_SIZE = 0x84E8;
323     static const GLenum INVALID_FRAMEBUFFER_OPERATION = 0x0506;
324     static const GLenum UNPACK_FLIP_Y_WEBGL = 0x9240;
325     static const GLenum UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241;
326     static const GLenum CONTEXT_LOST_WEBGL = 0x9242;
327     static const GLenum UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243;
328     static const GLenum BROWSER_DEFAULT_WEBGL = 0x9244;
329     static const uint32_t INPUTFLOAT_LENGTH = 128;
330 
331     static napi_value GetContextAttributes(napi_env env, napi_callback_info info);
332     static napi_value IsContextLost(napi_env env, napi_callback_info info);
333     static napi_value GetSupportedExtensions(napi_env env, napi_callback_info info);
334     static napi_value GetExtension(napi_env env, napi_callback_info info);
335     static napi_value ActiveTexture(napi_env env, napi_callback_info info);
336     static napi_value AttachShader(napi_env env, napi_callback_info info);
337     static napi_value BindAttribLocation(napi_env env, napi_callback_info info);
338     static napi_value BindBuffer(napi_env env, napi_callback_info info);
339     static napi_value BindFramebuffer(napi_env env, napi_callback_info info);
340     static napi_value BindRenderbuffer(napi_env env, napi_callback_info info);
341     static napi_value BindTexture(napi_env env, napi_callback_info info);
342     static napi_value BlendColor(napi_env env, napi_callback_info info);
343     static napi_value BlendEquation(napi_env env, napi_callback_info info);
344     static napi_value BlendEquationSeparate(napi_env env, napi_callback_info info);
345     static napi_value BlendFunc(napi_env env, napi_callback_info info);
346     static napi_value BlendFuncSeparate(napi_env env, napi_callback_info info);
347     static napi_value CheckFramebufferStatus(napi_env env, napi_callback_info info);
348     static napi_value Clear(napi_env env, napi_callback_info info);
349     static napi_value ClearColor(napi_env env, napi_callback_info info);
350     static napi_value ClearDepth(napi_env env, napi_callback_info info);
351     static napi_value ClearStencil(napi_env env, napi_callback_info info);
352     static napi_value ColorMask(napi_env env, napi_callback_info info);
353     static napi_value CompileShader(napi_env env, napi_callback_info info);
354     static napi_value CopyTexImage2D(napi_env env, napi_callback_info info);
355     static napi_value CopyTexSubImage2D(napi_env env, napi_callback_info info);
356     static napi_value CreateBuffer(napi_env env, napi_callback_info info);
357     static napi_value CreateFramebuffer(napi_env env, napi_callback_info info);
358     static napi_value CreateProgram(napi_env env, napi_callback_info info);
359     static napi_value CreateRenderbuffer(napi_env env, napi_callback_info info);
360     static napi_value CreateShader(napi_env env, napi_callback_info info);
361     static napi_value CreateTexture(napi_env env, napi_callback_info info);
362     static napi_value CullFace(napi_env env, napi_callback_info info);
363     static napi_value DeleteBuffer(napi_env env, napi_callback_info info);
364     static napi_value DeleteFramebuffer(napi_env env, napi_callback_info info);
365     static napi_value DeleteProgram(napi_env env, napi_callback_info info);
366     static napi_value DeleteRenderbuffer(napi_env env, napi_callback_info info);
367     static napi_value DeleteShader(napi_env env, napi_callback_info info);
368     static napi_value DeleteTexture(napi_env env, napi_callback_info info);
369     static napi_value DepthFunc(napi_env env, napi_callback_info info);
370     static napi_value DepthMask(napi_env env, napi_callback_info info);
371     static napi_value DepthRange(napi_env env, napi_callback_info info);
372     static napi_value DetachShader(napi_env env, napi_callback_info info);
373     static napi_value Disable(napi_env env, napi_callback_info info);
374     static napi_value DisableVertexAttribArray(napi_env env, napi_callback_info info);
375     static napi_value DrawArrays(napi_env env, napi_callback_info info);
376     static napi_value DrawElements(napi_env env, napi_callback_info info);
377     static napi_value Enable(napi_env env, napi_callback_info info);
378     static napi_value EnableVertexAttribArray(napi_env env, napi_callback_info info);
379     static napi_value Finish(napi_env env, napi_callback_info info);
380     static napi_value Flush(napi_env env, napi_callback_info info);
381     static napi_value FramebufferRenderbuffer(napi_env env, napi_callback_info info);
382     static napi_value FramebufferTexture2D(napi_env env, napi_callback_info info);
383     static napi_value Viewport(napi_env env, napi_callback_info info);
384     static napi_value GetUniformLocation(napi_env env, napi_callback_info info);
385     static napi_value GetVertexAttribOffset(napi_env env, napi_callback_info info);
386     static napi_value Hint(napi_env env, napi_callback_info info);
387     static napi_value IsBuffer(napi_env env, napi_callback_info info);
388     static napi_value IsEnabled(napi_env env, napi_callback_info info);
389     static napi_value RenderbufferStorage(napi_env env, napi_callback_info info);
390     static napi_value SampleCoverage(napi_env env, napi_callback_info info);
391     static napi_value Scissor(napi_env env, napi_callback_info info);
392     static napi_value ShaderSource(napi_env env, napi_callback_info info);
393     static napi_value StencilFunc(napi_env env, napi_callback_info info);
394     static napi_value StencilFuncSeparate(napi_env env, napi_callback_info info);
395     static napi_value StencilMask(napi_env env, napi_callback_info info);
396     static napi_value StencilMaskSeparate(napi_env env, napi_callback_info info);
397     static napi_value StencilOp(napi_env env, napi_callback_info info);
398     static napi_value StencilOpSeparate(napi_env env, napi_callback_info info);
399     static napi_value TexParameterf(napi_env env, napi_callback_info info);
400     static napi_value TexParameteri(napi_env env, napi_callback_info info);
401     static napi_value Uniform1f(napi_env env, napi_callback_info info);
402     static napi_value Uniform2f(napi_env env, napi_callback_info info);
403     static napi_value Uniform3f(napi_env env, napi_callback_info info);
404     static napi_value Uniform4f(napi_env env, napi_callback_info info);
405     static napi_value UseProgram(napi_env env, napi_callback_info info);
406     static napi_value Uniform1i(napi_env env, napi_callback_info info);
407     static napi_value Uniform2i(napi_env env, napi_callback_info info);
408     static napi_value Uniform3i(napi_env env, napi_callback_info info);
409     static napi_value Uniform4i(napi_env env, napi_callback_info info);
410     static napi_value ValidateProgram(napi_env env, napi_callback_info info);
411     static napi_value VertexAttrib1f(napi_env env, napi_callback_info info);
412     static napi_value VertexAttrib2f(napi_env env, napi_callback_info info);
413     static napi_value VertexAttrib3f(napi_env env, napi_callback_info info);
414     static napi_value VertexAttrib4f(napi_env env, napi_callback_info info);
415     static napi_value VertexAttribPointer(napi_env env, napi_callback_info info);
416     static napi_value IsFramebuffer(napi_env env, napi_callback_info info);
417     static napi_value IsProgram(napi_env env, napi_callback_info info);
418     static napi_value IsRenderbuffer(napi_env env, napi_callback_info info);
419     static napi_value IsShader(napi_env env, napi_callback_info info);
420     static napi_value IsTexture(napi_env env, napi_callback_info info);
421     static napi_value LineWidth(napi_env env, napi_callback_info info);
422     static napi_value LinkProgram(napi_env env, napi_callback_info info);
423     static napi_value PixelStorei(napi_env env, napi_callback_info info);
424     static napi_value PolygonOffset(napi_env env, napi_callback_info info);
425     static napi_value FrontFace(napi_env env, napi_callback_info info);
426     static napi_value GenerateMipmap(napi_env env, napi_callback_info info);
427     static napi_value GetActiveAttrib(napi_env env, napi_callback_info info);
428     static napi_value GetActiveUniform(napi_env env, napi_callback_info info);
429     static napi_value GetAttribLocation(napi_env env, napi_callback_info info);
430     static napi_value GetBufferParameter(napi_env env, napi_callback_info info);
431     static napi_value GetParameter(napi_env env, napi_callback_info info);
432     static napi_value GetError(napi_env env, napi_callback_info info);
433     static napi_value GetFramebufferAttachmentParameter(napi_env env, napi_callback_info info);
434     static napi_value GetProgramParameter(napi_env env, napi_callback_info info);
435     static napi_value GetProgramInfoLog(napi_env env, napi_callback_info info);
436     static napi_value GetRenderbufferParameter(napi_env env, napi_callback_info info);
437     static napi_value GetShaderParameter(napi_env env, napi_callback_info info);
438     static napi_value GetShaderPrecisionFormat(napi_env env, napi_callback_info info);
439     static napi_value GetShaderInfoLog(napi_env env, napi_callback_info info);
440     static napi_value GetShaderSource(napi_env env, napi_callback_info info);
441     static napi_value GetTexParameter(napi_env env, napi_callback_info info);
442     static napi_value GetUniform(napi_env env, napi_callback_info info);
443     static napi_value GetAttachedShaders(napi_env env, napi_callback_info info);
444     static napi_value VertexAttrib1fv(napi_env env, napi_callback_info info);
445     static napi_value VertexAttrib2fv(napi_env env, napi_callback_info info);
446     static napi_value VertexAttrib3fv(napi_env env, napi_callback_info info);
447     static napi_value VertexAttrib4fv(napi_env env, napi_callback_info info);
448     static napi_value GetVertexAttrib(napi_env env, napi_callback_info info);
449     static napi_value GetDrawingBufferWidth(napi_env env, napi_callback_info info);
450     static napi_value GetDrawingBufferHeight(napi_env env, napi_callback_info info);
451     static void GetRenderingContextBasePropertyDesc(std::vector<napi_property_descriptor> &props);
452     static void SetError(napi_env env, napi_value thisVar, GLenum error, std::string func, int32_t line);
453 };
454 } // namespace Rosen
455 } // namespace OHOS
456 #ifdef __cplusplus
457 }
458 #endif
459 #endif // WEBGL_RENDERING_CONTEXT_BASE_H
460