1 /*
2  * Copyright (c) 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 #include "napi/native_api.h"
17 #include "native_common.h"
18 #include <ace/xcomponent/native_interface_xcomponent.h>
19 #include <EGL/egl.h>
20 #include <EGL/eglext.h>
21 #include <EGL/eglplatform.h>
22 #include <GLES3/gl3.h>
23 #define NO_ERR 0
24 #define SUCCESS 1
25 #define FAIL (-1)
26 #define TRUE 1
27 #define FALSE 0
28 #define RGB_SIZE 0x08
29 #define INIT_WIDTH 0x08
30 #define INIT_HEIGHT 0x08
31 #define GL_CLIENT_VERSION 0x02
32 #define GL_MAJOR_VERSION_2 0x02
33 #define GL_MAJOR_VERSION_3 0x03
34 #define GL_MINOR_VERSION_0 0x00
35 #define EGL_ONE 0x01
36 #define GL_VERSION_15 0x0F
37 #define GL_MAJOR_VERSION_MARK 0x0A
38 typedef struct _MyEGLWindow {
39     EGLDisplay eglDisplay;
40     EGLSurface eglLSurface;
41     EGLContext eglContext;
42     EGLConfig eglConfig;
43     EGLint eglVersion;
44 } MyEGLWindow;
45 
createMyEglWindow(napi_env env, MyEGLWindow *myEGLWindow)46 static napi_value createMyEglWindow(napi_env env, MyEGLWindow *myEGLWindow)
47 {
48     if (myEGLWindow == nullptr) {
49         return nullptr;
50     }
51     myEGLWindow->eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
52     NAPI_ASSERT(env, myEGLWindow->eglDisplay != EGL_NO_DISPLAY, "eglInitialize error");
53     EGLint majorVersion = GL_MAJOR_VERSION_2;
54     EGLint minorVersion = GL_MINOR_VERSION_0;
55     EGLBoolean Ret = eglInitialize(myEGLWindow->eglDisplay, &majorVersion, &minorVersion);
56     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglInitialize error");
57     myEGLWindow->eglVersion = majorVersion * GL_MAJOR_VERSION_MARK + minorVersion;
58     EGLint clientVersion = majorVersion == GL_MAJOR_VERSION_3 ? EGL_OPENGL_ES3_BIT : EGL_OPENGL_ES2_BIT;
59     const EGLint configAttribs[] = {
60         EGL_RED_SIZE,   RGB_SIZE, EGL_GREEN_SIZE,      RGB_SIZE,      EGL_BLUE_SIZE,    RGB_SIZE,
61         EGL_ALPHA_SIZE, RGB_SIZE, EGL_RENDERABLE_TYPE, clientVersion, EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
62         EGL_NONE,       EGL_NONE};
63     EGLint numConfigs = 0x00;
64     Ret = eglChooseConfig(myEGLWindow->eglDisplay, configAttribs, &myEGLWindow->eglConfig, EGL_ONE, &numConfigs);
65     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglChooseConfig error");
66     const EGLint surfaceAttribs[] = {EGL_WIDTH,          INIT_WIDTH,       EGL_HEIGHT,         INIT_HEIGHT,
67                                      EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGBA, EGL_TEXTURE_TARGET, EGL_TEXTURE_2D,
68                                      EGL_NONE,           EGL_NONE};
69     myEGLWindow->eglLSurface = eglCreatePbufferSurface(myEGLWindow->eglDisplay, myEGLWindow->eglConfig, surfaceAttribs);
70     NAPI_ASSERT(env, myEGLWindow->eglLSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
71     const EGLint contextAttribs[] = {EGL_CONTEXT_CLIENT_VERSION, GL_CLIENT_VERSION, EGL_NONE, EGL_NONE};
72     myEGLWindow->eglContext =
73         eglCreateContext(myEGLWindow->eglDisplay, myEGLWindow->eglConfig, EGL_NO_CONTEXT, contextAttribs);
74     NAPI_ASSERT(env, myEGLWindow->eglContext != EGL_NO_CONTEXT, "eglCreateContext error");
75     Ret = eglMakeCurrent(myEGLWindow->eglDisplay, myEGLWindow->eglLSurface, myEGLWindow->eglLSurface,
76                          myEGLWindow->eglContext);
77     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglMakeCurrent error");
78     return nullptr;
79 }
80 
destroyMyEglWindow(napi_env env, MyEGLWindow *myEGLWindow)81 static napi_value destroyMyEglWindow(napi_env env, MyEGLWindow *myEGLWindow)
82 {
83     if (myEGLWindow == nullptr) {
84         return nullptr;
85     }
86     if (myEGLWindow->eglDisplay != EGL_NO_DISPLAY) {
87         EGLBoolean Ret = eglTerminate(myEGLWindow->eglDisplay);
88         NAPI_ASSERT_BASE(env, Ret == EGL_TRUE, "eglTerminate error", EGL_FALSE);
89     }
90     myEGLWindow->eglDisplay = EGL_NO_DISPLAY;
91     myEGLWindow->eglLSurface = EGL_NO_SURFACE;
92     myEGLWindow->eglContext = EGL_NO_CONTEXT;
93     myEGLWindow->eglConfig = nullptr;
94     return nullptr;
95 }
96 
eglGetErrorInit()97 static napi_value eglGetErrorInit()
98 {
99     EGLint eglError = NO_ERR;
100     do {
101         eglError = eglGetError();
102     } while (eglError != EGL_SUCCESS);
103     return nullptr;
104 }
105 static const EGLint surfaceAttr[] = {EGL_WIDTH, 1, EGL_HEIGHT, 1, EGL_NONE};
106 
107 static const EGLint confAttr[] = {EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
108                                   EGL_BLUE_SIZE,    8,
109                                   EGL_GREEN_SIZE,   8,
110                                   EGL_RED_SIZE,     8,
111                                   EGL_ALPHA_SIZE,   8,
112                                   EGL_DEPTH_SIZE,   16,
113                                   EGL_NONE};
114 
EglChooseConfig(napi_env env, napi_callback_info info)115 static napi_value EglChooseConfig(napi_env env, napi_callback_info info)
116 {
117     EGLint numConfigs;
118     EGLConfig config = nullptr;
119     EGLint config_size = 1;
120     EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
121     NAPI_ASSERT(env, display != EGL_NO_DISPLAY, "eglGetDisplay error");
122     eglInitialize(display, nullptr, nullptr);
123     EGLBoolean Ret = eglChooseConfig(display, confAttr, &config, config_size, &numConfigs);
124     NAPI_ASSERT(env, Ret == TRUE, "eglChooseConfig error");
125     eglReleaseThread();
126     eglTerminate(display);
127     napi_value result = nullptr;
128     napi_create_int32(env, SUCCESS, &result);
129     return result;
130 }
131 
EglChooseConfigAbnormal(napi_env env, napi_callback_info info)132 static napi_value EglChooseConfigAbnormal(napi_env env, napi_callback_info info)
133 {
134     EGLint numConfigs;
135     EGLConfig config = nullptr;
136     EGLDisplay display = nullptr;
137     EGLint config_size = 1;
138     EGLBoolean Ret = eglChooseConfig(display, confAttr, &config, config_size, &numConfigs);
139     NAPI_ASSERT(env, Ret == FALSE, "eglChooseConfig error");
140     napi_value result = nullptr;
141     napi_create_int32(env, SUCCESS, &result);
142     return result;
143 }
144 
EglCopyBuffersAbnormal(napi_env env, napi_callback_info info)145 static napi_value EglCopyBuffersAbnormal(napi_env env, napi_callback_info info)
146 {
147     EGLDisplay m_eglDisplay = nullptr;
148     EGLConfig m_eglConf = nullptr;
149     EGLint numConfigs;
150     EGLint config_size = 1;
151     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
152     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
153     eglInitialize(m_eglDisplay, nullptr, nullptr);
154 
155     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
156     EGLSurface m_eglSurface = nullptr;
157     EGLNativePixmapType mNativeDisplay = 0;
158     EGLBoolean Ret = eglCopyBuffers(m_eglDisplay, m_eglSurface, mNativeDisplay);
159     NAPI_ASSERT(env, Ret == FALSE, "eglCopyBuffers error");
160     eglDestroySurface(m_eglDisplay, m_eglSurface);
161     eglReleaseThread();
162     eglTerminate(m_eglDisplay);
163     napi_value result = nullptr;
164     napi_create_int32(env, SUCCESS, &result);
165     return result;
166 }
167 
EglCreateContext(napi_env env, napi_callback_info info)168 static napi_value EglCreateContext(napi_env env, napi_callback_info info)
169 {
170     EGLDisplay m_eglDisplay = nullptr;
171     EGLConfig m_eglConf = nullptr;
172     EGLint numConfigs;
173     EGLint config_size = 1;
174     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
175     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
176     eglInitialize(m_eglDisplay, nullptr, nullptr);
177 
178     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
179 
180     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
181     NAPI_ASSERT(env, m_eglSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
182     const EGLint ctxAttr[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
183     EGLContext m_eglCtx = eglCreateContext(m_eglDisplay, m_eglConf, EGL_NO_CONTEXT, ctxAttr);
184     NAPI_ASSERT(env, m_eglCtx != EGL_NO_CONTEXT, "eglCreateContext error");
185     eglDestroyContext(m_eglDisplay, m_eglCtx);
186     eglDestroySurface(m_eglDisplay, m_eglSurface);
187     eglReleaseThread();
188     eglTerminate(m_eglDisplay);
189     napi_value result = nullptr;
190     napi_create_int32(env, SUCCESS, &result);
191     return result;
192 }
193 
EglCreateContextAbnormal(napi_env env, napi_callback_info info)194 static napi_value EglCreateContextAbnormal(napi_env env, napi_callback_info info)
195 {
196     EGLDisplay m_eglDisplay = nullptr;
197     EGLConfig m_eglConf = nullptr;
198     const EGLint ctxAttr[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
199     EGLContext m_eglCtx = eglCreateContext(m_eglDisplay, m_eglConf, EGL_NO_CONTEXT, ctxAttr);
200     NAPI_ASSERT(env, m_eglCtx == EGL_NO_CONTEXT, "eglCreateContext error");
201     eglDestroyContext(m_eglDisplay, m_eglCtx);
202     eglReleaseThread();
203     eglTerminate(m_eglDisplay);
204     napi_value result = nullptr;
205     napi_create_int32(env, SUCCESS, &result);
206     return result;
207 }
208 
EglCreatePbufferSurface(napi_env env, napi_callback_info info)209 static napi_value EglCreatePbufferSurface(napi_env env, napi_callback_info info)
210 {
211     EGLDisplay m_eglDisplay = nullptr;
212     EGLConfig m_eglConf = nullptr;
213     EGLint numConfigs;
214     EGLint config_size = 1;
215     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
216     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
217     eglInitialize(m_eglDisplay, nullptr, nullptr);
218     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
219     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
220     NAPI_ASSERT(env, m_eglSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
221     eglDestroySurface(m_eglDisplay, m_eglSurface);
222     eglReleaseThread();
223     eglTerminate(m_eglDisplay);
224     napi_value result = nullptr;
225     napi_create_int32(env, SUCCESS, &result);
226     return result;
227 }
228 
EglCreatePbufferSurfaceAbnormal(napi_env env, napi_callback_info info)229 static napi_value EglCreatePbufferSurfaceAbnormal(napi_env env, napi_callback_info info)
230 {
231     EGLDisplay m_eglDisplay = nullptr;
232     EGLConfig m_eglConf = nullptr;
233     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
234     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
235     eglInitialize(m_eglDisplay, nullptr, nullptr);
236     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
237     NAPI_ASSERT(env, m_eglSurface == EGL_NO_SURFACE, "eglCreatePbufferSurface error");
238     eglDestroySurface(m_eglDisplay, m_eglSurface);
239     eglReleaseThread();
240     eglTerminate(m_eglDisplay);
241     napi_value result = nullptr;
242     napi_create_int32(env, SUCCESS, &result);
243     return result;
244 }
245 
EglCreatePixmapSurfaceAbnormal(napi_env env, napi_callback_info info)246 static napi_value EglCreatePixmapSurfaceAbnormal(napi_env env, napi_callback_info info)
247 {
248     EGLDisplay m_eglDisplay = nullptr;
249     EGLConfig m_eglConf = nullptr;
250     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
251     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
252     eglInitialize(m_eglDisplay, nullptr, nullptr);
253     EGLNativePixmapType pixmap = 0;
254     EGLSurface m_eglSurface = eglCreatePixmapSurface(m_eglDisplay, m_eglConf, pixmap, surfaceAttr);
255     NAPI_ASSERT(env, m_eglSurface == EGL_NO_SURFACE, "eglCreatePixmapSurface error");
256     eglDestroySurface(m_eglDisplay, m_eglSurface);
257     eglReleaseThread();
258     eglTerminate(m_eglDisplay);
259     napi_value result = nullptr;
260     napi_create_int32(env, SUCCESS, &result);
261     return result;
262 }
263 
EglCreateWindowSurfaceAbnormal(napi_env env, napi_callback_info info)264 static napi_value EglCreateWindowSurfaceAbnormal(napi_env env, napi_callback_info info)
265 {
266     EGLDisplay m_eglDisplay = nullptr;
267     EGLConfig m_eglConf = nullptr;
268     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
269     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
270     eglInitialize(m_eglDisplay, nullptr, nullptr);
271     NativeWindowType window = 0;
272     EGLSurface m_eglSurface = eglCreateWindowSurface(m_eglDisplay, m_eglConf, window, surfaceAttr);
273     NAPI_ASSERT(env, m_eglSurface == EGL_NO_SURFACE, "eglCreateWindowSurface error");
274     eglDestroySurface(m_eglDisplay, m_eglSurface);
275     eglReleaseThread();
276     eglTerminate(m_eglDisplay);
277     napi_value result = nullptr;
278     napi_create_int32(env, SUCCESS, &result);
279     return result;
280 }
281 
EglDestroyContext(napi_env env, napi_callback_info info)282 static napi_value EglDestroyContext(napi_env env, napi_callback_info info)
283 {
284     EGLDisplay m_eglDisplay = nullptr;
285     EGLConfig m_eglConf = nullptr;
286     EGLint numConfigs;
287     EGLint config_size = 1;
288     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
289     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
290     eglInitialize(m_eglDisplay, nullptr, nullptr);
291 
292     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
293 
294     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
295     NAPI_ASSERT(env, m_eglSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
296     const EGLint ctxAttr[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
297     EGLContext m_eglCtx = eglCreateContext(m_eglDisplay, m_eglConf, EGL_NO_CONTEXT, ctxAttr);
298     EGLBoolean Ret = eglDestroyContext(m_eglDisplay, m_eglCtx);
299     NAPI_ASSERT(env, Ret == TRUE, "eglDestroyContext error");
300     eglDestroySurface(m_eglDisplay, m_eglSurface);
301     eglReleaseThread();
302     eglTerminate(m_eglDisplay);
303     napi_value result = nullptr;
304     napi_create_int32(env, SUCCESS, &result);
305     return result;
306 }
307 
EglDestroyContextAbnormal(napi_env env, napi_callback_info info)308 static napi_value EglDestroyContextAbnormal(napi_env env, napi_callback_info info)
309 {
310     EGLDisplay m_eglDisplay = nullptr;
311     EGLConfig m_eglConf = nullptr;
312     EGLContext m_eglCtx = eglCreateContext(m_eglDisplay, m_eglConf, EGL_NO_CONTEXT, nullptr);
313     EGLBoolean Ret = eglDestroyContext(m_eglDisplay, m_eglCtx);
314     NAPI_ASSERT(env, Ret == FALSE, "eglDestroyContext error");
315     eglReleaseThread();
316     eglTerminate(m_eglDisplay);
317     napi_value result = nullptr;
318     napi_create_int32(env, SUCCESS, &result);
319     return result;
320 }
321 
EglDestroySurface(napi_env env, napi_callback_info info)322 static napi_value EglDestroySurface(napi_env env, napi_callback_info info)
323 {
324     EGLDisplay m_eglDisplay = nullptr;
325     EGLConfig m_eglConf = nullptr;
326     EGLint numConfigs;
327     EGLint config_size = 1;
328     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
329     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
330     eglInitialize(m_eglDisplay, nullptr, nullptr);
331     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
332 
333     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
334     NAPI_ASSERT(env, m_eglSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
335     EGLBoolean Ret = eglDestroySurface(m_eglDisplay, m_eglSurface);
336     NAPI_ASSERT(env, Ret == TRUE, "eglDestroySurface error");
337     eglReleaseThread();
338     eglTerminate(m_eglDisplay);
339     napi_value result = nullptr;
340     napi_create_int32(env, SUCCESS, &result);
341     return result;
342 }
343 
EglDestroySurfaceAbnormal(napi_env env, napi_callback_info info)344 static napi_value EglDestroySurfaceAbnormal(napi_env env, napi_callback_info info)
345 {
346     EGLDisplay m_eglDisplay = nullptr;
347     EGLConfig m_eglConf = nullptr;
348     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
349     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
350     eglInitialize(m_eglDisplay, nullptr, nullptr);
351 
352     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
353 
354     EGLBoolean Ret = eglDestroySurface(m_eglDisplay, m_eglSurface);
355     NAPI_ASSERT(env, Ret == FALSE, "eglDestroySurface error");
356     eglReleaseThread();
357     eglTerminate(m_eglDisplay);
358     napi_value result = nullptr;
359     napi_create_int32(env, SUCCESS, &result);
360     return result;
361 }
362 
EglGetConfigAttrib(napi_env env, napi_callback_info info)363 static napi_value EglGetConfigAttrib(napi_env env, napi_callback_info info)
364 {
365     EGLDisplay m_eglDisplay = nullptr;
366     EGLConfig m_eglConf[10];
367     EGLint numConfigs;
368     EGLint config_size = 10;
369     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
370     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
371     eglInitialize(m_eglDisplay, nullptr, nullptr);
372 
373     eglGetConfigs(m_eglDisplay, m_eglConf, config_size, &numConfigs);
374     EGLBoolean Ret;
375     for (int i = 0; i < numConfigs; ++i) {
376         Ret = eglGetConfigAttrib(m_eglDisplay, m_eglConf[i], EGL_ALPHA_SIZE, &numConfigs);
377     }
378     NAPI_ASSERT(env, Ret == TRUE, "eglGetConfigAttrib error");
379     eglReleaseThread();
380     eglTerminate(m_eglDisplay);
381     napi_value result = nullptr;
382     napi_create_int32(env, SUCCESS, &result);
383     return result;
384 }
385 
EglGetConfigAttribAbnormal(napi_env env, napi_callback_info info)386 static napi_value EglGetConfigAttribAbnormal(napi_env env, napi_callback_info info)
387 {
388     EGLDisplay m_eglDisplay = nullptr;
389     EGLConfig m_eglConf[10];
390     EGLint numConfigs;
391     EGLint config_size = 10;
392     eglGetConfigs(m_eglDisplay, m_eglConf, config_size, &numConfigs);
393     EGLBoolean Ret;
394     for (int i = 0; i < numConfigs; ++i) {
395         Ret = eglGetConfigAttrib(m_eglDisplay, m_eglConf[i], EGL_BUFFER_SIZE, &numConfigs);
396     }
397     NAPI_ASSERT(env, Ret == FALSE, "eglGetConfigAttrib error");
398     eglReleaseThread();
399     eglTerminate(m_eglDisplay);
400     napi_value result = nullptr;
401     napi_create_int32(env, SUCCESS, &result);
402     return result;
403 }
404 
EglGetConfigs(napi_env env, napi_callback_info info)405 static napi_value EglGetConfigs(napi_env env, napi_callback_info info)
406 {
407     EGLDisplay m_eglDisplay = nullptr;
408     EGLConfig m_eglConf[10];
409     EGLint numConfigs;
410     EGLint config_size = 10;
411     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
412     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
413     eglInitialize(m_eglDisplay, nullptr, nullptr);
414 
415     EGLBoolean Ret = eglGetConfigs(m_eglDisplay, m_eglConf, config_size, &numConfigs);
416     NAPI_ASSERT(env, Ret == TRUE, "eglGetConfigs error");
417     eglReleaseThread();
418     eglTerminate(m_eglDisplay);
419     napi_value result = nullptr;
420     napi_create_int32(env, SUCCESS, &result);
421     return result;
422 }
423 
EglGetConfigsAbnormal(napi_env env, napi_callback_info info)424 static napi_value EglGetConfigsAbnormal(napi_env env, napi_callback_info info)
425 {
426     EGLDisplay m_eglDisplay = nullptr;
427     EGLConfig m_eglConf[10];
428     EGLint numConfigs;
429     EGLint config_size = 10;
430 
431     EGLBoolean Ret = eglGetConfigs(m_eglDisplay, m_eglConf, config_size, &numConfigs);
432     NAPI_ASSERT(env, Ret == FALSE, "eglGetConfigs error");
433     eglReleaseThread();
434     eglTerminate(m_eglDisplay);
435     napi_value result = nullptr;
436     napi_create_int32(env, SUCCESS, &result);
437     return result;
438 }
439 
EglGetCurrentDisplay(napi_env env, napi_callback_info info)440 static napi_value EglGetCurrentDisplay(napi_env env, napi_callback_info info)
441 {
442     EGLDisplay m_eglDisplay = nullptr;
443     EGLConfig m_eglConf = nullptr;
444     EGLint numConfigs;
445     EGLint config_size = 1;
446     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
447     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
448     eglInitialize(m_eglDisplay, nullptr, nullptr);
449 
450     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
451 
452     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
453     NAPI_ASSERT(env, m_eglSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
454     const EGLint ctxAttr[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
455     EGLContext m_eglCtx = eglCreateContext(m_eglDisplay, m_eglConf, EGL_NO_CONTEXT, ctxAttr);
456     eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglCtx);
457     m_eglDisplay = eglGetCurrentDisplay();
458     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetCurrentDisplay error");
459     eglDestroyContext(m_eglDisplay, m_eglCtx);
460     eglDestroySurface(m_eglDisplay, m_eglSurface);
461     eglReleaseThread();
462     eglTerminate(m_eglDisplay);
463     napi_value result = nullptr;
464     napi_create_int32(env, SUCCESS, &result);
465     return result;
466 }
467 
EglGetCurrentDisplayAbnormal(napi_env env, napi_callback_info info)468 static napi_value EglGetCurrentDisplayAbnormal(napi_env env, napi_callback_info info)
469 {
470     EGLDisplay m_eglDisplay = nullptr;
471     m_eglDisplay = eglGetCurrentDisplay();
472     NAPI_ASSERT(env, m_eglDisplay == EGL_NO_DISPLAY, "eglGetCurrentDisplay error");
473     eglReleaseThread();
474     eglTerminate(m_eglDisplay);
475     napi_value result = nullptr;
476     napi_create_int32(env, SUCCESS, &result);
477     return result;
478 }
479 
EglGetCurrentSurface(napi_env env, napi_callback_info info)480 static napi_value EglGetCurrentSurface(napi_env env, napi_callback_info info)
481 {
482     EGLDisplay m_eglDisplay = nullptr;
483     EGLConfig m_eglConf = nullptr;
484     EGLint numConfigs;
485     EGLint config_size = 1;
486     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
487     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
488     eglInitialize(m_eglDisplay, nullptr, nullptr);
489 
490     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
491 
492     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
493     NAPI_ASSERT(env, m_eglSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
494     const EGLint ctxAttr[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
495     EGLContext m_eglCtx = eglCreateContext(m_eglDisplay, m_eglConf, EGL_NO_CONTEXT, ctxAttr);
496     eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglCtx);
497     m_eglDisplay = eglGetCurrentDisplay();
498     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetCurrentDisplay error");
499     m_eglSurface = eglGetCurrentSurface(EGL_DRAW);
500     NAPI_ASSERT(env, m_eglSurface != EGL_NO_SURFACE, "eglGetCurrentSurface error");
501     eglDestroyContext(m_eglDisplay, m_eglCtx);
502     eglDestroySurface(m_eglDisplay, m_eglSurface);
503     eglReleaseThread();
504     eglTerminate(m_eglDisplay);
505     napi_value result = nullptr;
506     napi_create_int32(env, SUCCESS, &result);
507     return result;
508 }
509 
EglGetCurrentSurfaceAbnormal(napi_env env, napi_callback_info info)510 static napi_value EglGetCurrentSurfaceAbnormal(napi_env env, napi_callback_info info)
511 {
512     eglGetCurrentDisplay();
513     EGLSurface m_eglSurface = eglGetCurrentSurface(EGL_DRAW);
514     NAPI_ASSERT(env, m_eglSurface == EGL_NO_SURFACE, "eglGetCurrentSurface error");
515     napi_value result = nullptr;
516     napi_create_int32(env, SUCCESS, &result);
517     return result;
518 }
519 
EglGetDisplay(napi_env env, napi_callback_info info)520 static napi_value EglGetDisplay(napi_env env, napi_callback_info info)
521 {
522     EGLDisplay m_eglDisplay = nullptr;
523     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
524     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
525     eglReleaseThread();
526     eglTerminate(m_eglDisplay);
527     napi_value result = nullptr;
528     napi_create_int32(env, SUCCESS, &result);
529     return result;
530 }
531 
EglGetError(napi_env env, napi_callback_info info)532 static napi_value EglGetError(napi_env env, napi_callback_info info)
533 {
534     EGLDisplay m_eglDisplay = nullptr;
535     EGLConfig m_eglConf = nullptr;
536     eglGetErrorInit();
537     const EGLint ctxAttr[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
538     EGLContext m_eglCtx = eglCreateContext(m_eglDisplay, m_eglConf, EGL_NO_CONTEXT, ctxAttr);
539     NAPI_ASSERT(env, m_eglCtx == EGL_NO_CONTEXT, "eglGetCurrentSurface error");
540     EGLint Ret = eglGetError();
541     NAPI_ASSERT(env, Ret == EGL_BAD_DISPLAY, "eglGetError error");
542     eglReleaseThread();
543     eglTerminate(m_eglDisplay);
544     napi_value result = nullptr;
545     napi_create_int32(env, SUCCESS, &result);
546     return result;
547 }
548 
549 typedef EGLBoolean (*PFNCREATEIMAGEKHR)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, const int *);
EglGetProcAddress(napi_env env, napi_callback_info info)550 static napi_value EglGetProcAddress(napi_env env, napi_callback_info info)
551 {
552     EGLDisplay m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
553     PFNCREATEIMAGEKHR createImageKHR = (PFNCREATEIMAGEKHR)eglGetProcAddress("eglCreateImageKHR");
554     NAPI_ASSERT(env, createImageKHR != nullptr, "eglGetProcAddress error");
555     eglReleaseThread();
556     eglTerminate(m_eglDisplay);
557     napi_value result = nullptr;
558     napi_create_int32(env, SUCCESS, &result);
559     return result;
560 }
561 
EglGetProcAddressAbnormal(napi_env env, napi_callback_info info)562 static napi_value EglGetProcAddressAbnormal(napi_env env, napi_callback_info info)
563 {
564     PFNCREATEIMAGEKHR createImageKHR = (PFNCREATEIMAGEKHR)eglGetProcAddress("eglCreateImageKHR1");
565     NAPI_ASSERT(env, createImageKHR == nullptr, "eglGetProcAddress error");
566     napi_value result = nullptr;
567     napi_create_int32(env, SUCCESS, &result);
568     return result;
569 }
570 
EglInitialize(napi_env env, napi_callback_info info)571 static napi_value EglInitialize(napi_env env, napi_callback_info info)
572 {
573     EGLDisplay m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
574     EGLBoolean Ret = eglInitialize(m_eglDisplay, nullptr, nullptr);
575     NAPI_ASSERT(env, Ret == TRUE, "eglGetProcAddress error");
576     eglReleaseThread();
577     eglTerminate(m_eglDisplay);
578     napi_value result = nullptr;
579     napi_create_int32(env, SUCCESS, &result);
580     return result;
581 }
582 
EglInitializeAbnormal(napi_env env, napi_callback_info info)583 static napi_value EglInitializeAbnormal(napi_env env, napi_callback_info info)
584 {
585     EGLDisplay m_eglDisplay = nullptr;
586     EGLBoolean Ret = eglInitialize(m_eglDisplay, nullptr, nullptr);
587     NAPI_ASSERT(env, Ret == FALSE, "eglGetProcAddress error");
588     eglReleaseThread();
589     eglTerminate(m_eglDisplay);
590     napi_value result = nullptr;
591     napi_create_int32(env, SUCCESS, &result);
592     return result;
593 }
594 
EglMakeCurrent(napi_env env, napi_callback_info info)595 static napi_value EglMakeCurrent(napi_env env, napi_callback_info info)
596 {
597     EGLDisplay m_eglDisplay = nullptr;
598     EGLConfig m_eglConf = nullptr;
599     EGLint numConfigs;
600     EGLint config_size = 1;
601     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
602     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
603     eglInitialize(m_eglDisplay, nullptr, nullptr);
604 
605     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
606 
607     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
608     NAPI_ASSERT(env, m_eglSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
609     const EGLint ctxAttr[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
610     EGLContext m_eglCtx = eglCreateContext(m_eglDisplay, m_eglConf, EGL_NO_CONTEXT, ctxAttr);
611     EGLBoolean Ret = eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglCtx);
612     NAPI_ASSERT(env, Ret == TRUE, "eglMakeCurrent error");
613     eglDestroyContext(m_eglDisplay, m_eglCtx);
614     eglDestroySurface(m_eglDisplay, m_eglSurface);
615     eglReleaseThread();
616     eglTerminate(m_eglDisplay);
617     napi_value result = nullptr;
618     napi_create_int32(env, SUCCESS, &result);
619     return result;
620 }
621 
EglMakeCurrentAbnormal(napi_env env, napi_callback_info info)622 static napi_value EglMakeCurrentAbnormal(napi_env env, napi_callback_info info)
623 {
624     EGLDisplay m_eglDisplay = nullptr;
625     EGLSurface m_eglSurface = nullptr;
626     EGLContext m_eglCtx = nullptr;
627     EGLBoolean Ret = eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglCtx);
628     NAPI_ASSERT(env, Ret == FALSE, "eglMakeCurrent error");
629     eglDestroyContext(m_eglDisplay, m_eglCtx);
630     eglDestroySurface(m_eglDisplay, m_eglSurface);
631     eglReleaseThread();
632     eglTerminate(m_eglDisplay);
633     napi_value result = nullptr;
634     napi_create_int32(env, SUCCESS, &result);
635     return result;
636 }
637 
EglQueryContext(napi_env env, napi_callback_info info)638 static napi_value EglQueryContext(napi_env env, napi_callback_info info)
639 {
640     EGLDisplay m_eglDisplay = nullptr;
641     EGLConfig m_eglConf = nullptr;
642     EGLint numConfigs;
643     EGLint config_size = 1;
644     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
645     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
646     eglInitialize(m_eglDisplay, nullptr, nullptr);
647 
648     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
649 
650     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
651     NAPI_ASSERT(env, m_eglSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
652     const EGLint ctxAttr[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
653     EGLContext m_eglCtx = eglCreateContext(m_eglDisplay, m_eglConf, EGL_NO_CONTEXT, ctxAttr);
654     EGLBoolean Ret = eglQueryContext(m_eglDisplay, m_eglCtx, EGL_CONTEXT_CLIENT_VERSION, &numConfigs);
655     NAPI_ASSERT(env, Ret == TRUE, "eglQueryContext error");
656     eglDestroyContext(m_eglDisplay, m_eglCtx);
657     eglDestroySurface(m_eglDisplay, m_eglSurface);
658     eglReleaseThread();
659     eglTerminate(m_eglDisplay);
660     napi_value result = nullptr;
661     napi_create_int32(env, SUCCESS, &result);
662     return result;
663 }
664 
EglQueryContextAbnormal(napi_env env, napi_callback_info info)665 static napi_value EglQueryContextAbnormal(napi_env env, napi_callback_info info)
666 {
667     EGLDisplay m_eglDisplay = nullptr;
668     EGLConfig m_eglConf = nullptr;
669     EGLint numConfigs;
670     EGLint config_size = 1;
671     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
672     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
673     eglInitialize(m_eglDisplay, nullptr, nullptr);
674 
675     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
676 
677     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
678     NAPI_ASSERT(env, m_eglSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
679     EGLContext m_eglCtx = nullptr;
680     EGLBoolean Ret = eglQueryContext(m_eglDisplay, m_eglCtx, EGL_CONTEXT_CLIENT_VERSION, &numConfigs);
681     NAPI_ASSERT(env, Ret == FALSE, "eglQueryContext error");
682     eglDestroyContext(m_eglDisplay, m_eglCtx);
683     eglDestroySurface(m_eglDisplay, m_eglSurface);
684     eglReleaseThread();
685     eglTerminate(m_eglDisplay);
686     napi_value result = nullptr;
687     napi_create_int32(env, SUCCESS, &result);
688     return result;
689 }
690 
EglQueryString(napi_env env, napi_callback_info info)691 static napi_value EglQueryString(napi_env env, napi_callback_info info)
692 {
693     EGLDisplay m_eglDisplay = nullptr;
694     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
695     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
696     eglInitialize(m_eglDisplay, nullptr, nullptr);
697     const char *vendor = eglQueryString(m_eglDisplay, EGL_VENDOR);
698     NAPI_ASSERT(env, vendor != nullptr, "eglQueryString error");
699 
700     eglTerminate(m_eglDisplay);
701     napi_value result = nullptr;
702     napi_create_int32(env, SUCCESS, &result);
703     return result;
704 }
705 
EglQueryStringAbnormal(napi_env env, napi_callback_info info)706 static napi_value EglQueryStringAbnormal(napi_env env, napi_callback_info info)
707 {
708     EGLDisplay m_eglDisplay = nullptr;
709     const char *vendor = eglQueryString(m_eglDisplay, EGL_VENDOR);
710     NAPI_ASSERT(env, vendor == nullptr, "eglQueryString error");
711 
712     eglTerminate(m_eglDisplay);
713     napi_value result = nullptr;
714     napi_create_int32(env, SUCCESS, &result);
715     return result;
716 }
717 
EglQuerySurface(napi_env env, napi_callback_info info)718 static napi_value EglQuerySurface(napi_env env, napi_callback_info info)
719 {
720     EGLDisplay m_eglDisplay = nullptr;
721     EGLConfig m_eglConf = nullptr;
722     EGLint numConfigs;
723     EGLint config_size = 1;
724     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
725     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
726     eglInitialize(m_eglDisplay, nullptr, nullptr);
727     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
728 
729     EGLSurface m_eglSurface = eglCreatePbufferSurface(m_eglDisplay, m_eglConf, surfaceAttr);
730     NAPI_ASSERT(env, m_eglSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
731     EGLint width;
732     EGLBoolean Ret = eglQuerySurface(m_eglDisplay, m_eglSurface, EGL_WIDTH, &width);
733     NAPI_ASSERT(env, Ret == TRUE, "eglQuerySurface error");
734     eglDestroySurface(m_eglDisplay, m_eglSurface);
735     eglReleaseThread();
736     eglTerminate(m_eglDisplay);
737     napi_value result = nullptr;
738     napi_create_int32(env, SUCCESS, &result);
739     return result;
740 }
741 
EglQuerySurfaceAbnormal(napi_env env, napi_callback_info info)742 static napi_value EglQuerySurfaceAbnormal(napi_env env, napi_callback_info info)
743 {
744     EGLDisplay m_eglDisplay = nullptr;
745     EGLConfig m_eglConf = nullptr;
746     EGLint numConfigs;
747     EGLint config_size = 1;
748     m_eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
749     NAPI_ASSERT(env, m_eglDisplay != EGL_NO_DISPLAY, "eglGetDisplay error");
750     eglInitialize(m_eglDisplay, nullptr, nullptr);
751     eglChooseConfig(m_eglDisplay, confAttr, &m_eglConf, config_size, &numConfigs);
752 
753     EGLSurface m_eglSurface = nullptr;
754     EGLint width;
755     EGLBoolean Ret = eglQuerySurface(m_eglDisplay, m_eglSurface, EGL_WIDTH, &width);
756     NAPI_ASSERT(env, Ret == FALSE, "eglQuerySurface error");
757     napi_value result = nullptr;
758     napi_create_int32(env, SUCCESS, &result);
759     return result;
760 }
761 
EglSwapBuffers(napi_env env, napi_callback_info info)762 static napi_value EglSwapBuffers(napi_env env, napi_callback_info info)
763 {
764     (void)info;
765     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
766     createMyEglWindow(env, &myEGLWindow);
767     EGLBoolean Ret = eglSwapBuffers(myEGLWindow.eglDisplay, myEGLWindow.eglLSurface);
768     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglSwapBuffers error");
769     destroyMyEglWindow(env, &myEGLWindow);
770     napi_value result = nullptr;
771     napi_create_int32(env, SUCCESS, &result);
772     return result;
773 }
774 
EglSwapBuffersAbnormal(napi_env env, napi_callback_info info)775 static napi_value EglSwapBuffersAbnormal(napi_env env, napi_callback_info info)
776 {
777     (void)info;
778     eglGetErrorInit();
779     EGLBoolean Ret = eglSwapBuffers(EGL_NO_DISPLAY, EGL_NO_SURFACE);
780     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglGetError error");
781     EGLint eglError = eglGetError();
782     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
783     napi_value result = nullptr;
784     napi_create_int32(env, SUCCESS, &result);
785     return result;
786 }
787 
EglTerminate(napi_env env, napi_callback_info info)788 static napi_value EglTerminate(napi_env env, napi_callback_info info)
789 {
790     (void)info;
791     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
792     createMyEglWindow(env, &myEGLWindow);
793     EGLBoolean Ret = eglTerminate(myEGLWindow.eglDisplay);
794     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglTerminate error");
795     napi_value result = nullptr;
796     napi_create_int32(env, SUCCESS, &result);
797     return result;
798 }
799 
EglTerminateAbnormal(napi_env env, napi_callback_info info)800 static napi_value EglTerminateAbnormal(napi_env env, napi_callback_info info)
801 {
802     (void)info;
803     eglGetErrorInit();
804     EGLBoolean Ret = eglTerminate(EGL_NO_DISPLAY);
805     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglGetError error");
806     EGLint eglError = eglGetError();
807     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
808     napi_value result = nullptr;
809     napi_create_int32(env, SUCCESS, &result);
810     return result;
811 }
812 
EglWaitGL(napi_env env, napi_callback_info info)813 static napi_value EglWaitGL(napi_env env, napi_callback_info info)
814 {
815     (void)info;
816     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
817     createMyEglWindow(env, &myEGLWindow);
818     EGLBoolean Ret = eglWaitGL();
819     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglWaitGL error");
820     destroyMyEglWindow(env, &myEGLWindow);
821     napi_value result = nullptr;
822     napi_create_int32(env, SUCCESS, &result);
823     return result;
824 }
825 
EglWaitNative(napi_env env, napi_callback_info info)826 static napi_value EglWaitNative(napi_env env, napi_callback_info info)
827 {
828     (void)info;
829     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
830     createMyEglWindow(env, &myEGLWindow);
831     EGLBoolean Ret = eglWaitNative(EGL_CORE_NATIVE_ENGINE);
832     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglWaitNative error");
833     destroyMyEglWindow(env, &myEGLWindow);
834     napi_value result = nullptr;
835     napi_create_int32(env, SUCCESS, &result);
836     return result;
837 }
838 
EglBindTexImage(napi_env env, napi_callback_info info)839 static napi_value EglBindTexImage(napi_env env, napi_callback_info info)
840 {
841     (void)info;
842     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
843     createMyEglWindow(env, &myEGLWindow);
844     const EGLint surfaceAttribs[] = {EGL_WIDTH,          INIT_WIDTH,       EGL_HEIGHT,         INIT_HEIGHT,
845                                      EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGBA, EGL_TEXTURE_TARGET, EGL_TEXTURE_2D,
846                                      EGL_NONE,           EGL_NONE};
847     EGLSurface eglLSurface = eglCreatePbufferSurface(myEGLWindow.eglDisplay, myEGLWindow.eglConfig, surfaceAttribs);
848     NAPI_ASSERT(env, eglLSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
849     GLuint texture = GL_ZERO;
850     glGenTextures(GL_ONE, &texture);
851     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
852     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
853     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
854     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
855     EGLBoolean Ret = eglBindTexImage(myEGLWindow.eglDisplay, eglLSurface, EGL_BACK_BUFFER);
856     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglBindTexImage error");
857     Ret = eglReleaseTexImage(myEGLWindow.eglDisplay, eglLSurface, EGL_BACK_BUFFER);
858     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglReleaseTexImage error");
859     Ret = eglDestroySurface(myEGLWindow.eglDisplay, eglLSurface);
860     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglDestroySurface error");
861     destroyMyEglWindow(env, &myEGLWindow);
862     napi_value result = nullptr;
863     napi_create_int32(env, SUCCESS, &result);
864     return result;
865 }
866 
EglBindTexImageAbnormal(napi_env env, napi_callback_info info)867 static napi_value EglBindTexImageAbnormal(napi_env env, napi_callback_info info)
868 {
869     (void)info;
870     EGLBoolean Ret = eglBindTexImage(EGL_NO_DISPLAY, EGL_NO_SURFACE, 0x00);
871     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglBindTexImage error");
872     napi_value result = nullptr;
873     napi_create_int32(env, SUCCESS, &result);
874     return result;
875 }
876 
EglReleaseTexImage(napi_env env, napi_callback_info info)877 static napi_value EglReleaseTexImage(napi_env env, napi_callback_info info)
878 {
879     (void)info;
880     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
881     createMyEglWindow(env, &myEGLWindow);
882     const EGLint surfaceAttribs[] = {EGL_WIDTH,          INIT_WIDTH,       EGL_HEIGHT,         INIT_HEIGHT,
883                                      EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGBA, EGL_TEXTURE_TARGET, EGL_TEXTURE_2D,
884                                      EGL_NONE,           EGL_NONE};
885     EGLSurface eglLSurface = eglCreatePbufferSurface(myEGLWindow.eglDisplay, myEGLWindow.eglConfig, surfaceAttribs);
886     NAPI_ASSERT(env, eglLSurface != EGL_NO_SURFACE, "eglCreatePbufferSurface error");
887     GLuint texture = GL_ZERO;
888     glGenTextures(GL_ONE, &texture);
889     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
890     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
891     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
892     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
893     EGLBoolean Ret = eglBindTexImage(myEGLWindow.eglDisplay, eglLSurface, EGL_BACK_BUFFER);
894     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglBindTexImage error");
895     Ret = eglReleaseTexImage(myEGLWindow.eglDisplay, eglLSurface, EGL_BACK_BUFFER);
896     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglReleaseTexImage error");
897     Ret = eglDestroySurface(myEGLWindow.eglDisplay, eglLSurface);
898     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglDestroySurface error");
899     destroyMyEglWindow(env, &myEGLWindow);
900     napi_value result = nullptr;
901     napi_create_int32(env, SUCCESS, &result);
902     return result;
903 }
904 
EglReleaseTexImageAbnormal(napi_env env, napi_callback_info info)905 static napi_value EglReleaseTexImageAbnormal(napi_env env, napi_callback_info info)
906 {
907     (void)info;
908     EGLBoolean Ret = eglReleaseTexImage(EGL_NO_DISPLAY, EGL_NO_SURFACE, 0x00);
909     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglReleaseTexImage error");
910     napi_value result = nullptr;
911     napi_create_int32(env, SUCCESS, &result);
912     return result;
913 }
914 
EglSurfaceAttrib(napi_env env, napi_callback_info info)915 static napi_value EglSurfaceAttrib(napi_env env, napi_callback_info info)
916 {
917     (void)info;
918     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
919     createMyEglWindow(env, &myEGLWindow);
920     EGLBoolean Ret = eglSurfaceAttrib(myEGLWindow.eglDisplay, myEGLWindow.eglLSurface, EGL_MIPMAP_LEVEL, EGL_ONE);
921     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglSurfaceAttrib error");
922     destroyMyEglWindow(env, &myEGLWindow);
923     napi_value result = nullptr;
924     napi_create_int32(env, SUCCESS, &result);
925     return result;
926 }
927 
EglSurfaceAttribAbnormal(napi_env env, napi_callback_info info)928 static napi_value EglSurfaceAttribAbnormal(napi_env env, napi_callback_info info)
929 {
930     (void)info;
931     eglGetErrorInit();
932     EGLBoolean Ret = eglSurfaceAttrib(EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_MIPMAP_LEVEL, EGL_ONE);
933     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglSurfaceAttrib error");
934     EGLint eglError = eglGetError();
935     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
936     napi_value result = nullptr;
937     napi_create_int32(env, SUCCESS, &result);
938     return result;
939 }
940 
EglSwapInterval(napi_env env, napi_callback_info info)941 static napi_value EglSwapInterval(napi_env env, napi_callback_info info)
942 {
943     (void)info;
944     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
945     createMyEglWindow(env, &myEGLWindow);
946     EGLBoolean Ret = eglSwapInterval(myEGLWindow.eglDisplay, EGL_ONE);
947     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglSwapInterval error");
948     destroyMyEglWindow(env, &myEGLWindow);
949     napi_value result = nullptr;
950     napi_create_int32(env, SUCCESS, &result);
951     return result;
952 }
953 
EglSwapIntervalAbnormal(napi_env env, napi_callback_info info)954 static napi_value EglSwapIntervalAbnormal(napi_env env, napi_callback_info info)
955 {
956     (void)info;
957     eglGetErrorInit();
958     EGLBoolean Ret = eglSwapInterval(EGL_NO_DISPLAY, EGL_ONE);
959     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglSwapInterval error");
960     EGLint eglError = eglGetError();
961     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
962     napi_value result = nullptr;
963     napi_create_int32(env, SUCCESS, &result);
964     return result;
965 }
966 
EglBindAPI(napi_env env, napi_callback_info info)967 static napi_value EglBindAPI(napi_env env, napi_callback_info info)
968 {
969     (void)info;
970     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
971     createMyEglWindow(env, &myEGLWindow);
972     EGLBoolean Ret = eglBindAPI(EGL_OPENGL_ES_API);
973     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglBindAPI error");
974     destroyMyEglWindow(env, &myEGLWindow);
975     napi_value result = nullptr;
976     napi_create_int32(env, SUCCESS, &result);
977     return result;
978 }
979 
EglBindAPIAbnormal(napi_env env, napi_callback_info info)980 static napi_value EglBindAPIAbnormal(napi_env env, napi_callback_info info)
981 {
982     (void)info;
983     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
984     createMyEglWindow(env, &myEGLWindow);
985     EGLBoolean Ret = eglBindAPI(EGL_OPENGL_API);
986     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglBindAPI error");
987     Ret = eglBindAPI(EGL_OPENVG_API);
988     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglBindAPI error");
989     destroyMyEglWindow(env, &myEGLWindow);
990     napi_value result = nullptr;
991     napi_create_int32(env, SUCCESS, &result);
992     return result;
993 }
994 
EglQueryAPI(napi_env env, napi_callback_info info)995 static napi_value EglQueryAPI(napi_env env, napi_callback_info info)
996 {
997     (void)info;
998     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
999     createMyEglWindow(env, &myEGLWindow);
1000     NAPI_ASSERT(env, eglQueryAPI() == EGL_OPENGL_ES_API, "eglQueryAPI error");
1001     destroyMyEglWindow(env, &myEGLWindow);
1002     napi_value result = nullptr;
1003     napi_create_int32(env, SUCCESS, &result);
1004     return result;
1005 }
1006 
EglCreatePbufferFromClientBufferAbnormal(napi_env env, napi_callback_info info)1007 static napi_value EglCreatePbufferFromClientBufferAbnormal(napi_env env, napi_callback_info info)
1008 {
1009     (void)info;
1010     eglGetErrorInit();
1011     EGLSurface eglSurface =
1012         eglCreatePbufferFromClientBuffer(EGL_NO_DISPLAY, EGL_OPENVG_IMAGE, nullptr, nullptr, nullptr);
1013     NAPI_ASSERT(env, eglSurface == EGL_NO_SURFACE, "eglCreatePbufferFromClientBuffer error");
1014     EGLint eglError = eglGetError();
1015     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
1016     napi_value result = nullptr;
1017     napi_create_int32(env, SUCCESS, &result);
1018     return result;
1019 }
1020 
EglReleaseThread(napi_env env, napi_callback_info info)1021 static napi_value EglReleaseThread(napi_env env, napi_callback_info info)
1022 {
1023     (void)info;
1024     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1025     createMyEglWindow(env, &myEGLWindow);
1026     EGLBoolean Ret = eglReleaseThread();
1027     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglReleaseThread error");
1028     destroyMyEglWindow(env, &myEGLWindow);
1029     napi_value result = nullptr;
1030     napi_create_int32(env, SUCCESS, &result);
1031     return result;
1032 }
1033 
EglWaitClient(napi_env env, napi_callback_info info)1034 static napi_value EglWaitClient(napi_env env, napi_callback_info info)
1035 {
1036     (void)info;
1037     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1038     createMyEglWindow(env, &myEGLWindow);
1039     EGLBoolean Ret = eglWaitClient();
1040     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglWaitClient error");
1041     destroyMyEglWindow(env, &myEGLWindow);
1042     napi_value result = nullptr;
1043     napi_create_int32(env, SUCCESS, &result);
1044     return result;
1045 }
1046 
EglGetCurrentContext(napi_env env, napi_callback_info info)1047 static napi_value EglGetCurrentContext(napi_env env, napi_callback_info info)
1048 {
1049     (void)info;
1050     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1051     createMyEglWindow(env, &myEGLWindow);
1052     EGLContext eglContext = eglGetCurrentContext();
1053     NAPI_ASSERT(env, eglContext != EGL_NO_CONTEXT, "eglGetCurrentContext error");
1054     destroyMyEglWindow(env, &myEGLWindow);
1055     napi_value result = nullptr;
1056     napi_create_int32(env, SUCCESS, &result);
1057     return result;
1058 }
1059 
EglCreateSync(napi_env env, napi_callback_info info)1060 static napi_value EglCreateSync(napi_env env, napi_callback_info info)
1061 {
1062     (void)info;
1063     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1064     createMyEglWindow(env, &myEGLWindow);
1065     if (myEGLWindow.eglVersion >= GL_VERSION_15) {
1066         const EGLAttrib attr[] = {EGL_NONE};
1067         EGLSync eglSync = eglCreateSync(myEGLWindow.eglDisplay, EGL_SYNC_FENCE, attr);
1068         NAPI_ASSERT(env, eglSync != EGL_NO_SYNC, "eglCreateSync error");
1069         EGLBoolean Ret = eglDestroySync(myEGLWindow.eglDisplay, eglSync);
1070         NAPI_ASSERT(env, Ret == EGL_TRUE, "eglDestroySync error");
1071     }
1072     destroyMyEglWindow(env, &myEGLWindow);
1073     napi_value result = nullptr;
1074     napi_create_int32(env, SUCCESS, &result);
1075     return result;
1076 }
1077 
EglCreateSyncAbnormal(napi_env env, napi_callback_info info)1078 static napi_value EglCreateSyncAbnormal(napi_env env, napi_callback_info info)
1079 {
1080     (void)info;
1081     eglGetErrorInit();
1082     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1083     createMyEglWindow(env, &myEGLWindow);
1084     EGLSync eglSync = eglCreateSync(EGL_NO_DISPLAY, EGL_SYNC_FENCE, nullptr);
1085     NAPI_ASSERT(env, eglSync == EGL_NO_SYNC, "eglCreateSync error");
1086     EGLint eglError = eglGetError();
1087     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
1088     destroyMyEglWindow(env, &myEGLWindow);
1089     napi_value result = nullptr;
1090     napi_create_int32(env, SUCCESS, &result);
1091     return result;
1092 }
1093 
EglDestroySync(napi_env env, napi_callback_info info)1094 static napi_value EglDestroySync(napi_env env, napi_callback_info info)
1095 {
1096     (void)info;
1097     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1098     createMyEglWindow(env, &myEGLWindow);
1099     if (myEGLWindow.eglVersion >= GL_VERSION_15) {
1100         const EGLAttrib attr[] = {EGL_NONE};
1101         EGLSync eglSync = eglCreateSync(myEGLWindow.eglDisplay, EGL_SYNC_FENCE, attr);
1102         NAPI_ASSERT(env, eglSync != EGL_NO_SYNC, "eglCreateSync error");
1103         EGLBoolean Ret = eglDestroySync(myEGLWindow.eglDisplay, eglSync);
1104         NAPI_ASSERT(env, Ret == EGL_TRUE, "eglDestroySync error");
1105     }
1106     destroyMyEglWindow(env, &myEGLWindow);
1107     napi_value result = nullptr;
1108     napi_create_int32(env, SUCCESS, &result);
1109     return result;
1110 }
1111 
EglDestroySyncAbnormal(napi_env env, napi_callback_info info)1112 static napi_value EglDestroySyncAbnormal(napi_env env, napi_callback_info info)
1113 {
1114     (void)info;
1115     eglGetErrorInit();
1116     EGLBoolean Ret = eglDestroySync(EGL_NO_DISPLAY, EGL_NO_SYNC);
1117     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglDestroySync error");
1118     EGLint eglError = eglGetError();
1119     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
1120     napi_value result = nullptr;
1121     napi_create_int32(env, SUCCESS, &result);
1122     return result;
1123 }
1124 
EglClientWaitSync(napi_env env, napi_callback_info info)1125 static napi_value EglClientWaitSync(napi_env env, napi_callback_info info)
1126 {
1127     (void)info;
1128     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1129     createMyEglWindow(env, &myEGLWindow);
1130     if (myEGLWindow.eglVersion >= GL_VERSION_15) {
1131         const EGLAttrib attr[] = {EGL_NONE};
1132         EGLSync eglSync = eglCreateSync(myEGLWindow.eglDisplay, EGL_SYNC_FENCE, attr);
1133         NAPI_ASSERT(env, eglSync != EGL_NO_SYNC, "eglCreateSync error");
1134         EGLBoolean Ret = eglClientWaitSync(myEGLWindow.eglDisplay, eglSync, 0x00, EGL_FOREVER);
1135         NAPI_ASSERT(env, Ret == EGL_TRUE, "eglClientWaitSync error");
1136         Ret = eglDestroySync(myEGLWindow.eglDisplay, eglSync);
1137         NAPI_ASSERT(env, Ret == EGL_TRUE, "eglDestroySync error");
1138     }
1139     destroyMyEglWindow(env, &myEGLWindow);
1140     napi_value result = nullptr;
1141     napi_create_int32(env, SUCCESS, &result);
1142     return result;
1143 }
1144 
EglClientWaitSyncAbnormal(napi_env env, napi_callback_info info)1145 static napi_value EglClientWaitSyncAbnormal(napi_env env, napi_callback_info info)
1146 {
1147     (void)info;
1148     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1149     createMyEglWindow(env, &myEGLWindow);
1150     EGLBoolean Ret = eglClientWaitSync(myEGLWindow.eglDisplay, EGL_NO_SYNC, 0x00, EGL_FOREVER);
1151     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglClientWaitSync error");
1152     napi_value result = nullptr;
1153     napi_create_int32(env, SUCCESS, &result);
1154     return result;
1155 }
1156 
EglGetSyncAttrib(napi_env env, napi_callback_info info)1157 static napi_value EglGetSyncAttrib(napi_env env, napi_callback_info info)
1158 {
1159     (void)info;
1160     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1161     createMyEglWindow(env, &myEGLWindow);
1162     if (myEGLWindow.eglVersion >= GL_VERSION_15) {
1163         const EGLAttrib attr[] = {EGL_NONE};
1164         EGLSync eglSync = eglCreateSync(myEGLWindow.eglDisplay, EGL_SYNC_FENCE, attr);
1165         NAPI_ASSERT(env, eglSync != EGL_NO_SYNC, "eglCreateSync error");
1166         EGLAttrib value[1] = {0x00};
1167         EGLBoolean Ret = eglGetSyncAttrib(myEGLWindow.eglDisplay, eglSync, EGL_SYNC_TYPE, value);
1168         NAPI_ASSERT(env, Ret == EGL_TRUE, "eglGetSyncAttrib error");
1169         Ret = eglDestroySync(myEGLWindow.eglDisplay, eglSync);
1170         NAPI_ASSERT(env, Ret == EGL_TRUE, "eglDestroySync error");
1171     }
1172     destroyMyEglWindow(env, &myEGLWindow);
1173     napi_value result = nullptr;
1174     napi_create_int32(env, SUCCESS, &result);
1175     return result;
1176 }
1177 
EglGetSyncAttribAbnormal(napi_env env, napi_callback_info info)1178 static napi_value EglGetSyncAttribAbnormal(napi_env env, napi_callback_info info)
1179 {
1180     (void)info;
1181     eglGetErrorInit();
1182     EGLAttrib value[1] = {0x00};
1183     EGLBoolean Ret = eglGetSyncAttrib(EGL_NO_DISPLAY, EGL_NO_SYNC, EGL_SYNC_TYPE, value);
1184     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglGetSyncAttrib error");
1185     EGLint eglError = eglGetError();
1186     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
1187     napi_value result = nullptr;
1188     napi_create_int32(env, SUCCESS, &result);
1189     return result;
1190 }
1191 
EglCreateImage(napi_env env, napi_callback_info info)1192 static napi_value EglCreateImage(napi_env env, napi_callback_info info)
1193 {
1194     (void)info;
1195     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1196     createMyEglWindow(env, &myEGLWindow);
1197     if (myEGLWindow.eglVersion >= GL_VERSION_15) {
1198         int texture = EGL_ONE;
1199         glBindTexture(GL_TEXTURE_2D, texture);
1200         glTexImage2D(GL_TEXTURE_2D, 0x00, GL_RGBA, INIT_WIDTH, INIT_HEIGHT, 0x00, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
1201         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
1202         const EGLAttrib eglAttrib[] = {EGL_GL_TEXTURE_LEVEL, 0x00, EGL_NONE};
1203         EGLImage image = eglCreateImage(myEGLWindow.eglDisplay, myEGLWindow.eglContext, EGL_GL_TEXTURE_2D,
1204                                         (void *)(static_cast<intptr_t>(texture)), eglAttrib);
1205         NAPI_ASSERT(env, image != EGL_NO_IMAGE, "eglCreateImage error");
1206         EGLBoolean Ret = eglDestroyImage(myEGLWindow.eglDisplay, image);
1207         NAPI_ASSERT(env, Ret == EGL_TRUE, "eglDestroyImage error");
1208     }
1209     destroyMyEglWindow(env, &myEGLWindow);
1210     napi_value result = nullptr;
1211     napi_create_int32(env, SUCCESS, &result);
1212     return result;
1213 }
1214 
EglCreateImageAbnormal(napi_env env, napi_callback_info info)1215 static napi_value EglCreateImageAbnormal(napi_env env, napi_callback_info info)
1216 {
1217     (void)info;
1218     eglGetErrorInit();
1219     EGLImage image = eglCreateImage(EGL_NO_DISPLAY, EGL_NO_CONTEXT, EGL_GL_TEXTURE_2D, nullptr, nullptr);
1220     NAPI_ASSERT(env, image == EGL_NO_IMAGE, "eglCreateImage error");
1221     EGLint eglError = eglGetError();
1222     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
1223     napi_value result = nullptr;
1224     napi_create_int32(env, SUCCESS, &result);
1225     return result;
1226 }
1227 
EglDestroyImage(napi_env env, napi_callback_info info)1228 static napi_value EglDestroyImage(napi_env env, napi_callback_info info)
1229 {
1230     (void)info;
1231     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1232     createMyEglWindow(env, &myEGLWindow);
1233     if (myEGLWindow.eglVersion >= GL_VERSION_15) {
1234         int texture = EGL_ONE;
1235         glBindTexture(GL_TEXTURE_2D, texture);
1236         glTexImage2D(GL_TEXTURE_2D, 0x00, GL_RGBA, INIT_WIDTH, INIT_HEIGHT, 0x00, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
1237         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
1238         const EGLAttrib eglAttrib[] = {EGL_GL_TEXTURE_LEVEL, 0x00, EGL_NONE};
1239         EGLImage image = eglCreateImage(myEGLWindow.eglDisplay, myEGLWindow.eglContext, EGL_GL_TEXTURE_2D,
1240                                         (void *)(static_cast<intptr_t>(texture)), eglAttrib);
1241         NAPI_ASSERT(env, image != EGL_NO_IMAGE, "eglCreateImage error");
1242         EGLBoolean Ret = eglDestroyImage(myEGLWindow.eglDisplay, image);
1243         NAPI_ASSERT(env, Ret == EGL_TRUE, "eglDestroyImage error");
1244     }
1245     destroyMyEglWindow(env, &myEGLWindow);
1246     napi_value result = nullptr;
1247     napi_create_int32(env, SUCCESS, &result);
1248     return result;
1249 }
1250 
EglDestroyImageAbnormal(napi_env env, napi_callback_info info)1251 static napi_value EglDestroyImageAbnormal(napi_env env, napi_callback_info info)
1252 {
1253     (void)info;
1254     eglGetErrorInit();
1255     EGLBoolean Ret = eglDestroyImage(EGL_NO_DISPLAY, EGL_NO_IMAGE);
1256     NAPI_ASSERT(env, Ret != EGL_TRUE, "eglDestroyImage error");
1257     EGLint eglError = eglGetError();
1258     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
1259     napi_value result = nullptr;
1260     napi_create_int32(env, SUCCESS, &result);
1261     return result;
1262 }
1263 
EglGetPlatformDisplay(napi_env env, napi_callback_info info)1264 static napi_value EglGetPlatformDisplay(napi_env env, napi_callback_info info)
1265 {
1266     (void)info;
1267     EGLDisplay eglDisplay = eglGetPlatformDisplay(EGL_PLATFORM_OHOS_KHR, EGL_DEFAULT_DISPLAY, nullptr);
1268     NAPI_ASSERT(env, eglDisplay != EGL_NO_DISPLAY, "eglGetPlatformDisplay error");
1269     EGLBoolean Ret = eglTerminate(eglDisplay);
1270     NAPI_ASSERT(env, Ret == EGL_TRUE, "eglTerminate error");
1271     napi_value result = nullptr;
1272     napi_create_int32(env, SUCCESS, &result);
1273     return result;
1274 }
1275 
EglGetPlatformDisplayAbnormal(napi_env env, napi_callback_info info)1276 static napi_value EglGetPlatformDisplayAbnormal(napi_env env, napi_callback_info info)
1277 {
1278     (void)info;
1279     eglGetErrorInit();
1280     EGLDisplay eglDisplay = eglGetPlatformDisplay(0x00, nullptr, nullptr);
1281     NAPI_ASSERT(env, eglDisplay == EGL_NO_DISPLAY, "eglGetPlatformDisplay error");
1282     EGLint eglError = eglGetError();
1283     NAPI_ASSERT(env, eglError == EGL_BAD_PARAMETER, "eglGetError error");
1284     napi_value result = nullptr;
1285     napi_create_int32(env, SUCCESS, &result);
1286     return result;
1287 }
1288 
EglCreatePlatformWindowSurfaceAbnormal(napi_env env, napi_callback_info info)1289 static napi_value EglCreatePlatformWindowSurfaceAbnormal(napi_env env, napi_callback_info info)
1290 {
1291     (void)info;
1292     eglGetErrorInit();
1293     EGLSurface eglSurface = eglCreatePlatformWindowSurface(EGL_NO_DISPLAY, nullptr, nullptr, nullptr);
1294     NAPI_ASSERT(env, eglSurface == EGL_NO_SURFACE, "eglCreatePlatformWindowSurface error");
1295     EGLint eglError = eglGetError();
1296     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
1297     napi_value result = nullptr;
1298     napi_create_int32(env, SUCCESS, &result);
1299     return result;
1300 }
1301 
EglCreatePlatformPixmapSurfaceAbnormal(napi_env env, napi_callback_info info)1302 static napi_value EglCreatePlatformPixmapSurfaceAbnormal(napi_env env, napi_callback_info info)
1303 {
1304     (void)info;
1305     eglGetErrorInit();
1306     EGLSurface eglSurface = eglCreatePlatformPixmapSurface(EGL_NO_DISPLAY, nullptr, nullptr, nullptr);
1307     NAPI_ASSERT(env, eglSurface == EGL_NO_SURFACE, "eglCreatePlatformPixmapSurface error");
1308     EGLint eglError = eglGetError();
1309     NAPI_ASSERT(env, eglError == EGL_BAD_DISPLAY, "eglGetError error");
1310     napi_value result = nullptr;
1311     napi_create_int32(env, SUCCESS, &result);
1312     return result;
1313 }
1314 
EglWaitSync(napi_env env, napi_callback_info info)1315 static napi_value EglWaitSync(napi_env env, napi_callback_info info)
1316 {
1317     (void)info;
1318     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1319     createMyEglWindow(env, &myEGLWindow);
1320     if (myEGLWindow.eglVersion >= GL_VERSION_15) {
1321         const EGLAttrib attr[] = {EGL_NONE};
1322         EGLSync eglSync = eglCreateSync(myEGLWindow.eglDisplay, EGL_SYNC_FENCE, attr);
1323         NAPI_ASSERT(env, eglSync != EGL_NO_SYNC, "eglCreateSync error");
1324         EGLBoolean Ret = eglWaitSync(myEGLWindow.eglDisplay, eglSync, 0x00);
1325         NAPI_ASSERT(env, Ret == EGL_TRUE, "eglWaitSync error");
1326         Ret = eglDestroySync(myEGLWindow.eglDisplay, eglSync);
1327         NAPI_ASSERT(env, Ret == EGL_TRUE, "eglDestroySync error");
1328     }
1329     destroyMyEglWindow(env, &myEGLWindow);
1330     napi_value result = nullptr;
1331     napi_create_int32(env, SUCCESS, &result);
1332     return result;
1333 }
1334 
EglWaitSyncAbnormal(napi_env env, napi_callback_info info)1335 static napi_value EglWaitSyncAbnormal(napi_env env, napi_callback_info info)
1336 {
1337     (void)info;
1338     MyEGLWindow myEGLWindow = {EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_CONTEXT};
1339     createMyEglWindow(env, &myEGLWindow);
1340     EGLBoolean Ret = eglWaitSync(myEGLWindow.eglDisplay, EGL_NO_SYNC, EGL_ONE);
1341     NAPI_ASSERT(env, Ret == EGL_FALSE, "eglWaitSync error");
1342     destroyMyEglWindow(env, &myEGLWindow);
1343     napi_value result = nullptr;
1344     napi_create_int32(env, SUCCESS, &result);
1345     return result;
1346 }
1347 
1348 EXTERN_C_START
Init(napi_env env, napi_value exports)1349 static napi_value Init(napi_env env, napi_value exports)
1350 {
1351     napi_property_descriptor desc[] = {
1352         {"eglChooseConfig", nullptr, EglChooseConfig, nullptr, nullptr, nullptr, napi_default, nullptr},
1353         {"eglChooseConfigAbnormal", nullptr, EglChooseConfigAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1354         {"eglCopyBuffersAbnormal", nullptr, EglCopyBuffersAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1355         {"eglCreateContext", nullptr, EglCreateContext, nullptr, nullptr, nullptr, napi_default, nullptr},
1356         {"eglCreateContextAbnormal", nullptr, EglCreateContextAbnormal, nullptr, nullptr, nullptr, napi_default,
1357          nullptr},
1358         {"eglCreatePbufferSurface", nullptr, EglCreatePbufferSurface, nullptr, nullptr, nullptr, napi_default, nullptr},
1359         {"eglCreatePbufferSurfaceAbnormal", nullptr, EglCreatePbufferSurfaceAbnormal, nullptr, nullptr, nullptr,
1360          napi_default, nullptr},
1361         {"eglCreatePixmapSurfaceAbnormal", nullptr, EglCreatePixmapSurfaceAbnormal, nullptr, nullptr, nullptr,
1362          napi_default, nullptr},
1363         {"eglCreateWindowSurfaceAbnormal", nullptr, EglCreateWindowSurfaceAbnormal, nullptr, nullptr, nullptr,
1364          napi_default, nullptr},
1365         {"eglDestroyContext", nullptr, EglDestroyContext, nullptr, nullptr, nullptr, napi_default, nullptr},
1366         {"eglDestroyContextAbnormal", nullptr, EglDestroyContextAbnormal, nullptr, nullptr, nullptr, napi_default,
1367          nullptr},
1368         {"eglDestroySurface", nullptr, EglDestroySurface, nullptr, nullptr, nullptr, napi_default, nullptr},
1369         {"eglDestroySurfaceAbnormal", nullptr, EglDestroySurfaceAbnormal, nullptr, nullptr, nullptr, napi_default,
1370          nullptr},
1371         {"eglGetConfigAttrib", nullptr, EglGetConfigAttrib, nullptr, nullptr, nullptr, napi_default, nullptr},
1372         {"eglGetConfigAttribAbnormal", nullptr, EglGetConfigAttribAbnormal, nullptr, nullptr, nullptr, napi_default,
1373          nullptr},
1374         {"eglGetConfigs", nullptr, EglGetConfigs, nullptr, nullptr, nullptr, napi_default, nullptr},
1375         {"eglGetConfigsAbnormal", nullptr, EglGetConfigsAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1376         {"eglGetCurrentDisplay", nullptr, EglGetCurrentDisplay, nullptr, nullptr, nullptr, napi_default, nullptr},
1377         {"eglGetCurrentDisplayAbnormal", nullptr, EglGetCurrentDisplayAbnormal, nullptr, nullptr, nullptr, napi_default,
1378          nullptr},
1379         {"eglGetCurrentSurface", nullptr, EglGetCurrentSurface, nullptr, nullptr, nullptr, napi_default, nullptr},
1380         {"eglGetCurrentSurfaceAbnormal", nullptr, EglGetCurrentSurfaceAbnormal, nullptr, nullptr, nullptr, napi_default,
1381          nullptr},
1382         {"eglGetDisplay", nullptr, EglGetDisplay, nullptr, nullptr, nullptr, napi_default, nullptr},
1383         {"eglGetError", nullptr, EglGetError, nullptr, nullptr, nullptr, napi_default, nullptr},
1384         {"eglGetProcAddress", nullptr, EglGetProcAddress, nullptr, nullptr, nullptr, napi_default, nullptr},
1385         {"eglGetProcAddressAbnormal", nullptr, EglGetProcAddressAbnormal, nullptr, nullptr, nullptr, napi_default,
1386          nullptr},
1387         {"eglInitialize", nullptr, EglInitialize, nullptr, nullptr, nullptr, napi_default, nullptr},
1388         {"eglInitializeAbnormal", nullptr, EglInitializeAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1389         {"eglMakeCurrent", nullptr, EglMakeCurrent, nullptr, nullptr, nullptr, napi_default, nullptr},
1390         {"eglMakeCurrentAbnormal", nullptr, EglMakeCurrentAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1391         {"eglQueryContext", nullptr, EglQueryContext, nullptr, nullptr, nullptr, napi_default, nullptr},
1392         {"eglQueryContextAbnormal", nullptr, EglQueryContextAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1393         {"eglQueryString", nullptr, EglQueryString, nullptr, nullptr, nullptr, napi_default, nullptr},
1394         {"eglQueryStringAbnormal", nullptr, EglQueryStringAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1395         {"eglQuerySurface", nullptr, EglQuerySurface, nullptr, nullptr, nullptr, napi_default, nullptr},
1396         {"eglQuerySurfaceAbnormal", nullptr, EglQuerySurfaceAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1397         {"eglSwapBuffers", nullptr, EglSwapBuffers, nullptr, nullptr, nullptr, napi_default, nullptr},
1398         {"eglSwapBuffersAbnormal", nullptr, EglSwapBuffersAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1399         {"eglTerminate", nullptr, EglTerminate, nullptr, nullptr, nullptr, napi_default, nullptr},
1400         {"eglTerminateAbnormal", nullptr, EglTerminateAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1401         {"eglWaitGL", nullptr, EglWaitGL, nullptr, nullptr, nullptr, napi_default, nullptr},
1402         {"eglWaitNative", nullptr, EglWaitNative, nullptr, nullptr, nullptr, napi_default, nullptr},
1403         {"eglBindTexImage", nullptr, EglBindTexImage, nullptr, nullptr, nullptr, napi_default, nullptr},
1404         {"eglBindTexImageAbnormal", nullptr, EglBindTexImageAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1405         {"eglReleaseTexImage", nullptr, EglReleaseTexImage, nullptr, nullptr, nullptr, napi_default, nullptr},
1406         {"eglReleaseTexImageAbnormal", nullptr, EglReleaseTexImageAbnormal, nullptr, nullptr, nullptr, napi_default,
1407          nullptr},
1408         {"eglSurfaceAttrib", nullptr, EglSurfaceAttrib, nullptr, nullptr, nullptr, napi_default, nullptr},
1409         {"eglSurfaceAttribAbnormal", nullptr, EglSurfaceAttribAbnormal, nullptr, nullptr, nullptr, napi_default,
1410          nullptr},
1411         {"eglSwapInterval", nullptr, EglSwapInterval, nullptr, nullptr, nullptr, napi_default, nullptr},
1412         {"eglSwapIntervalAbnormal", nullptr, EglSwapIntervalAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1413         {"eglBindAPI", nullptr, EglBindAPI, nullptr, nullptr, nullptr, napi_default, nullptr},
1414         {"eglBindAPIAbnormal", nullptr, EglBindAPIAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1415         {"eglQueryAPI", nullptr, EglQueryAPI, nullptr, nullptr, nullptr, napi_default, nullptr},
1416         {"eglCreatePbufferFromClientBufferAbnormal", nullptr, EglCreatePbufferFromClientBufferAbnormal, nullptr,
1417          nullptr, nullptr, napi_default, nullptr},
1418         {"eglReleaseThread", nullptr, EglReleaseThread, nullptr, nullptr, nullptr, napi_default, nullptr},
1419         {"eglWaitClient", nullptr, EglWaitClient, nullptr, nullptr, nullptr, napi_default, nullptr},
1420         {"eglGetCurrentContext", nullptr, EglGetCurrentContext, nullptr, nullptr, nullptr, napi_default, nullptr},
1421         {"eglCreateSync", nullptr, EglCreateSync, nullptr, nullptr, nullptr, napi_default, nullptr},
1422         {"eglCreateSyncAbnormal", nullptr, EglCreateSyncAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1423         {"eglDestroySync", nullptr, EglDestroySync, nullptr, nullptr, nullptr, napi_default, nullptr},
1424         {"eglDestroySyncAbnormal", nullptr, EglDestroySyncAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1425         {"eglClientWaitSync", nullptr, EglClientWaitSync, nullptr, nullptr, nullptr, napi_default, nullptr},
1426         {"eglClientWaitSyncAbnormal", nullptr, EglClientWaitSyncAbnormal, nullptr, nullptr, nullptr, napi_default,
1427          nullptr},
1428         {"eglGetSyncAttrib", nullptr, EglGetSyncAttrib, nullptr, nullptr, nullptr, napi_default, nullptr},
1429         {"eglGetSyncAttribAbnormal", nullptr, EglGetSyncAttribAbnormal, nullptr, nullptr, nullptr, napi_default,
1430          nullptr},
1431         {"eglCreateImage", nullptr, EglCreateImage, nullptr, nullptr, nullptr, napi_default, nullptr},
1432         {"eglCreateImageAbnormal", nullptr, EglCreateImageAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1433         {"eglDestroyImage", nullptr, EglDestroyImage, nullptr, nullptr, nullptr, napi_default, nullptr},
1434         {"eglDestroyImageAbnormal", nullptr, EglDestroyImageAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1435         {"eglGetPlatformDisplay", nullptr, EglGetPlatformDisplay, nullptr, nullptr, nullptr, napi_default, nullptr},
1436         {"eglGetPlatformDisplayAbnormal", nullptr, EglGetPlatformDisplayAbnormal, nullptr, nullptr, nullptr,
1437          napi_default, nullptr},
1438         {"eglCreatePlatformWindowSurfaceAbnormal", nullptr, EglCreatePlatformWindowSurfaceAbnormal, nullptr, nullptr,
1439          nullptr, napi_default, nullptr},
1440         {"eglCreatePlatformPixmapSurfaceAbnormal", nullptr, EglCreatePlatformPixmapSurfaceAbnormal, nullptr, nullptr,
1441          nullptr, napi_default, nullptr},
1442         {"eglWaitSync", nullptr, EglWaitSync, nullptr, nullptr, nullptr, napi_default, nullptr},
1443         {"eglWaitSyncAbnormal", nullptr, EglWaitSyncAbnormal, nullptr, nullptr, nullptr, napi_default, nullptr},
1444     };
1445     napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
1446     return exports;
1447 }
1448 EXTERN_C_END
1449 
1450 static napi_module demoModule = {
1451     .nm_version = 1,
1452     .nm_flags = 0,
1453     .nm_filename = nullptr,
1454     .nm_register_func = Init,
1455     .nm_modname = "eglndk",
1456     .nm_priv = ((void *)0),
1457     .reserved = {0},
1458 };
1459 
RegisterModule(void)1460 extern "C" __attribute__((constructor)) void RegisterModule(void) { napi_module_register(&demoModule); }
1461