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