Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
mock_epoxy.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5
7#include <string.h>
8#include <vector>
10
11using namespace flutter::testing;
12
42
43typedef struct {
44} MockDisplay;
45
46typedef struct {
48
49typedef struct {
50} MockSurface;
51
52typedef struct {
53} MockImage;
54
55static MockEpoxy* mock = nullptr;
56static bool display_initialized = false;
57static MockDisplay mock_display;
60static MockSurface mock_surface;
62
63static EGLint mock_error = EGL_SUCCESS;
64
66 mock = this;
67}
68
70 if (mock == this) {
71 mock = nullptr;
72 }
73}
74
75static bool check_display(EGLDisplay dpy) {
76 if (dpy == nullptr) {
77 mock_error = EGL_BAD_DISPLAY;
78 return false;
79 }
80
81 return true;
82}
83
84static bool check_initialized(EGLDisplay dpy) {
86 mock_error = EGL_NOT_INITIALIZED;
87 return false;
88 }
89
90 return true;
91}
92
93static bool check_config(EGLConfig config) {
94 if (config == nullptr) {
95 mock_error = EGL_BAD_CONFIG;
96 return false;
97 }
98
99 return true;
100}
101
102static EGLBoolean bool_success() {
103 mock_error = EGL_SUCCESS;
104 return EGL_TRUE;
105}
106
107static EGLBoolean bool_failure(EGLint error) {
109 return EGL_FALSE;
110}
111
112EGLBoolean _eglBindAPI(EGLenum api) {
113 return bool_success();
114}
115
116EGLBoolean _eglChooseConfig(EGLDisplay dpy,
117 const EGLint* attrib_list,
118 EGLConfig* configs,
119 EGLint config_size,
120 EGLint* num_config) {
121 if (!check_display(dpy) || !check_initialized(dpy)) {
122 return EGL_FALSE;
123 }
124
125 if (configs == nullptr) {
126 if (num_config != nullptr) {
127 *num_config = 1;
128 }
129 return bool_success();
130 }
131
132 EGLint n_returned = 0;
133 if (config_size >= 1) {
134 configs[0] = &mock_config;
135 n_returned++;
136 }
137
138 if (num_config != nullptr) {
139 *num_config = n_returned;
140 }
141
142 return bool_success();
143}
144
145EGLContext _eglCreateContext(EGLDisplay dpy,
146 EGLConfig config,
147 EGLContext share_context,
148 const EGLint* attrib_list) {
149 if (!check_display(dpy) || !check_initialized(dpy) || !check_config(config)) {
150 return EGL_NO_CONTEXT;
151 }
152
153 mock_error = EGL_SUCCESS;
154 return &mock_context;
155}
156
158 return &mock_context;
159}
160
161EGLSurface _eglCreatePbufferSurface(EGLDisplay dpy,
162 EGLConfig config,
163 const EGLint* attrib_list) {
164 if (!check_display(dpy) || !check_initialized(dpy) || !check_config(config)) {
165 return EGL_NO_SURFACE;
166 }
167
168 mock_error = EGL_SUCCESS;
169 return &mock_surface;
170}
171
172EGLSurface _eglCreateWindowSurface(EGLDisplay dpy,
173 EGLConfig config,
174 EGLNativeWindowType win,
175 const EGLint* attrib_list) {
176 if (!check_display(dpy) || !check_initialized(dpy) || !check_config(config)) {
177 return EGL_NO_SURFACE;
178 }
179
180 mock_error = EGL_SUCCESS;
181 return &mock_surface;
182}
183
184EGLBoolean _eglGetConfigAttrib(EGLDisplay dpy,
185 EGLConfig config,
186 EGLint attribute,
187 EGLint* value) {
188 if (!check_display(dpy) || !check_initialized(dpy) || !check_config(config)) {
189 return EGL_FALSE;
190 }
191
192 MockConfig* c = static_cast<MockConfig*>(config);
193 switch (attribute) {
194 case EGL_CONFIG_ID:
195 *value = c->config_id;
196 return bool_success();
197 case EGL_BUFFER_SIZE:
198 *value = c->buffer_size;
199 return bool_success();
200 case EGL_COLOR_BUFFER_TYPE:
201 *value = c->color_buffer_type;
202 return bool_success();
203 case EGL_TRANSPARENT_TYPE:
204 *value = c->transparent_type;
205 return bool_success();
206 case EGL_LEVEL:
207 *value = c->level;
208 return bool_success();
209 case EGL_RED_SIZE:
210 *value = c->red_size;
211 return bool_success();
212 case EGL_GREEN_SIZE:
213 *value = c->green_size;
214 return bool_success();
215 case EGL_BLUE_SIZE:
216 *value = c->blue_size;
217 return bool_success();
218 case EGL_ALPHA_SIZE:
219 *value = c->alpha_size;
220 return bool_success();
221 case EGL_DEPTH_SIZE:
222 *value = c->depth_size;
223 return bool_success();
224 case EGL_STENCIL_SIZE:
225 *value = c->stencil_size;
226 return bool_success();
227 case EGL_SAMPLES:
228 *value = c->samples;
229 return bool_success();
230 case EGL_SAMPLE_BUFFERS:
231 *value = c->sample_buffers;
232 return bool_success();
233 case EGL_NATIVE_VISUAL_ID:
234 *value = c->native_visual_id;
235 return bool_success();
236 case EGL_NATIVE_VISUAL_TYPE:
237 *value = c->native_visual_type;
238 return bool_success();
239 case EGL_NATIVE_RENDERABLE:
240 *value = c->native_renderable;
241 return bool_success();
242 case EGL_CONFIG_CAVEAT:
243 *value = c->config_caveat;
244 return bool_success();
245 case EGL_BIND_TO_TEXTURE_RGB:
246 *value = c->bind_to_texture_rgb;
247 return bool_success();
248 case EGL_BIND_TO_TEXTURE_RGBA:
249 *value = c->bind_to_texture_rgba;
250 return bool_success();
251 case EGL_RENDERABLE_TYPE:
252 *value = c->renderable_type;
253 return bool_success();
254 case EGL_CONFORMANT:
255 *value = c->conformant;
256 return bool_success();
257 case EGL_SURFACE_TYPE:
258 *value = c->surface_type;
259 return bool_success();
260 case EGL_MAX_PBUFFER_WIDTH:
261 *value = c->max_pbuffer_width;
262 return bool_success();
263 case EGL_MAX_PBUFFER_HEIGHT:
264 *value = c->max_pbuffer_height;
265 return bool_success();
266 case EGL_MAX_PBUFFER_PIXELS:
267 *value = c->max_pbuffer_pixels;
268 return bool_success();
269 case EGL_MIN_SWAP_INTERVAL:
270 *value = c->min_swap_interval;
271 return bool_success();
272 case EGL_MAX_SWAP_INTERVAL:
273 *value = c->max_swap_interval;
274 return bool_success();
275 default:
276 return bool_failure(EGL_BAD_ATTRIBUTE);
277 }
278}
279
280EGLDisplay _eglGetDisplay(EGLNativeDisplayType display_id) {
281 return &mock_display;
282}
283
285 return &mock_display;
286}
287
288EGLDisplay _eglGetPlatformDisplayEXT(EGLenum platform,
289 void* native_display,
290 const EGLint* attrib_list) {
291 return &mock_display;
292}
293
294EGLint _eglGetError() {
295 EGLint error = mock_error;
296 mock_error = EGL_SUCCESS;
297 return error;
298}
299
300void (*_eglGetProcAddress(const char* procname))(void) {
301 mock_error = EGL_SUCCESS;
302 return nullptr;
303}
304
305EGLBoolean _eglInitialize(EGLDisplay dpy, EGLint* major, EGLint* minor) {
306 if (!check_display(dpy)) {
307 return EGL_FALSE;
308 }
309
310 if (!display_initialized) {
313 mock_config.color_buffer_type = EGL_RGB_BUFFER;
314 mock_config.transparent_type = EGL_NONE;
315 mock_config.level = 1;
327 mock_config.config_caveat = EGL_NONE;
330 mock_config.renderable_type = EGL_OPENGL_ES2_BIT;
331 mock_config.conformant = EGL_OPENGL_ES2_BIT;
332 mock_config.surface_type = EGL_WINDOW_BIT | EGL_PBUFFER_BIT;
335 mock_config.max_pbuffer_pixels = 1024 * 1024;
338 display_initialized = true;
339 }
340
341 if (major != nullptr) {
342 *major = 1;
343 }
344 if (minor != nullptr) {
345 *minor = 5;
346 }
347
348 return bool_success();
349}
350
351EGLBoolean _eglMakeCurrent(EGLDisplay dpy,
352 EGLSurface draw,
353 EGLSurface read,
354 EGLContext ctx) {
355 if (!check_display(dpy) || !check_initialized(dpy)) {
356 return EGL_FALSE;
357 }
358
359 return bool_success();
360}
361EGLBoolean _eglQueryContext(EGLDisplay display,
362 EGLContext context,
363 EGLint attribute,
364 EGLint* value) {
365 if (attribute == EGL_CONTEXT_CLIENT_TYPE) {
366 *value = EGL_OPENGL_API;
367 return EGL_TRUE;
368 }
369 return EGL_FALSE;
370}
371
372EGLBoolean _eglSwapBuffers(EGLDisplay dpy, EGLSurface surface) {
373 if (!check_display(dpy) || !check_initialized(dpy)) {
374 return EGL_FALSE;
375 }
376
377 return bool_success();
378}
379
380EGLImageKHR _eglCreateImageKHR(EGLDisplay dpy,
381 EGLContext ctx,
382 EGLenum target,
383 EGLClientBuffer buffer,
384 const EGLint* attrib_list) {
385 mock->eglCreateImageKHR(dpy, ctx, target, buffer, attrib_list);
386 return &mock_image;
387}
388
389EGLBoolean _eglDestroyImageKHR(EGLDisplay dpy, EGLImage image) {
390 return mock->eglDestroyImageKHR(dpy, image);
391}
392
393static GLuint bound_texture_2d;
394
395static std::map<GLenum, GLuint> framebuffer_renderbuffers;
396
397static GLboolean enable_blend = GL_FALSE;
398static GLboolean enable_scissor_test = GL_FALSE;
399
400static void _setEnable(GLenum cap, GLboolean value) {
401 if (cap == GL_BLEND) {
403 } else if (cap == GL_SCISSOR_TEST) {
405 }
406}
407
408void _glAttachShader(GLuint program, GLuint shader) {}
409
410static void _glBindFramebuffer(GLenum target, GLuint framebuffer) {}
411
412static void _glBindRenderbuffer(GLenum target, GLuint framebuffer) {}
413
414static void _glBindTexture(GLenum target, GLuint texture) {
415 if (target == GL_TEXTURE_2D) {
417 }
418}
419
420static void _glBlitFramebuffer(GLint srcX0,
421 GLint srcY0,
422 GLint srcX1,
423 GLint srcY1,
424 GLint dstX0,
425 GLint dstY0,
426 GLint dstX1,
427 GLint dstY1,
428 GLbitfield mask,
429 GLenum filter) {
430 mock->glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1,
431 dstY1, mask, filter);
432}
433
435 return 0;
436}
437
438void _glCompileShader(GLuint shader) {}
439
440void _glClearColor(GLfloat r, GLfloat g, GLfloat b, GLfloat a) {
441 mock->glClearColor(r, g, b, a);
442}
443
444GLuint _glCreateShader(GLenum shaderType) {
445 return 0;
446}
447
448void _glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) {
449 if (mock) {
450 mock->glDeleteFramebuffers(n, framebuffers);
451 }
452}
453
454void _glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) {
455 if (mock) {
456 mock->glDeleteRenderbuffers(n, renderbuffers);
457 }
458}
459
460void _glDeleteShader(GLuint shader) {}
461
462void _glDeleteTextures(GLsizei n, const GLuint* textures) {
463 if (mock) {
464 mock->glDeleteTextures(n, textures);
465 }
466}
467
468static void _glDisable(GLenum cap) {
469 _setEnable(cap, GL_FALSE);
470}
471
472static void _glEnable(GLenum cap) {
473 _setEnable(cap, GL_TRUE);
474}
475
477 GLenum attachment,
478 GLenum renderbuffertarget,
479 GLuint renderbuffer) {
480 framebuffer_renderbuffers[attachment] = renderbuffer;
481}
482
484 GLenum attachment,
485 GLenum textarget,
486 GLuint texture,
487 GLint level) {}
488
489static void _glGenTextures(GLsizei n, GLuint* textures) {
490 for (GLsizei i = 0; i < n; i++) {
491 textures[i] = 0;
492 }
493 if (mock) {
494 mock->glGenTextures(n, textures);
495 }
496}
497
498static void _glGenFramebuffers(GLsizei n, GLuint* framebuffers) {
499 for (GLsizei i = 0; i < n; i++) {
500 framebuffers[i] = 0;
501 }
502 if (mock) {
503 mock->glGenFramebuffers(n, framebuffers);
504 }
505}
506
507static void _glGenRenderbuffers(GLsizei n, GLuint* renderbuffers) {
508 for (GLsizei i = 0; i < n; i++) {
509 renderbuffers[i] = 0;
510 }
511 if (mock) {
512 mock->glGenRenderbuffers(n, renderbuffers);
513 }
514}
515
517 GLenum attachment,
518 GLenum pname,
519 GLint* params) {
520 if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE) {
521 auto it = framebuffer_renderbuffers.find(attachment);
522 *params =
523 (it != framebuffer_renderbuffers.end()) ? GL_RENDERBUFFER : GL_NONE;
524 } else if (pname == GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME) {
525 auto it = framebuffer_renderbuffers.find(attachment);
526 *params = (it != framebuffer_renderbuffers.end()) ? it->second : 0;
527 }
528}
529
530static void _glGetIntegerv(GLenum pname, GLint* data) {
531 if (pname == GL_TEXTURE_BINDING_2D) {
533 }
534}
535
536static void _glGetProgramiv(GLuint program, GLenum pname, GLint* params) {
537 if (pname == GL_LINK_STATUS) {
538 *params = GL_TRUE;
539 }
540}
541
542static void _glGetProgramInfoLog(GLuint program,
543 GLsizei maxLength,
544 GLsizei* length,
545 GLchar* infoLog) {}
546
547static void _glGetShaderiv(GLuint shader, GLenum pname, GLint* params) {
548 if (pname == GL_COMPILE_STATUS) {
549 *params = GL_TRUE;
550 }
551}
552
553static void _glGetShaderInfoLog(GLuint shader,
554 GLsizei maxLength,
555 GLsizei* length,
556 GLchar* infoLog) {}
557
558static const GLubyte* _glGetString(GLenum pname) {
559 return mock->glGetString(pname);
560}
561
562static GLboolean _glIsEnabled(GLenum cap) {
563 if (cap == GL_BLEND) {
564 return enable_blend;
565 } else if (cap == GL_SCISSOR_TEST) {
566 return enable_scissor_test;
567 } else {
568 return GL_FALSE;
569 }
570}
571
572static void _glTexParameterf(GLenum target, GLenum pname, GLfloat param) {}
573
574static void _glTexParameteri(GLenum target, GLenum pname, GLint param) {}
575
576static void _glTexImage2D(GLenum target,
577 GLint level,
578 GLint internalformat,
579 GLsizei width,
580 GLsizei height,
581 GLint border,
582 GLenum format,
583 GLenum type,
584 const void* pixels) {
585 if (pixels != nullptr) {
586 FML_CHECK(internalformat == GL_RGBA || internalformat == GL_RGBA8);
587 FML_CHECK(format == GL_RGBA);
588 FML_CHECK(type == GL_UNSIGNED_BYTE);
589
590 // Simple mock read to detect out-of-bounds reads in tests.
591 size_t size = width * height * 4;
592 std::vector<uint8_t> temp(size);
593 memcpy(temp.data(), pixels, size);
594 }
595}
596
597static GLenum _glGetError() {
598 return GL_NO_ERROR;
599}
600
601void _glLinkProgram(GLuint program) {}
602
604 GLenum internalformat,
605 GLsizei width,
606 GLsizei height) {}
607
608void _glShaderSource(GLuint shader,
609 GLsizei count,
610 const GLchar* const* string,
611 const GLint* length) {}
612
613bool epoxy_has_gl_extension(const char* extension) {
614 return mock->epoxy_has_gl_extension(extension);
615}
616
618 return mock->epoxy_is_desktop_gl();
619}
620
622 return mock->epoxy_gl_version();
623}
624
625#ifdef __GNUC__
626#define CONSTRUCT(_func) static void _func(void) __attribute__((constructor));
627#define DESTRUCT(_func) static void _func(void) __attribute__((destructor));
628#elif defined(_MSC_VER) && (_MSC_VER >= 1500)
629#define CONSTRUCT(_func) \
630 static void _func(void); \
631 static int _func##_wrapper(void) { \
632 _func(); \
633 return 0; \
634 } \
635 __pragma(section(".CRT$XCU", read)) \
636 __declspec(allocate(".CRT$XCU")) static int (*_array##_func)(void) = \
637 _func##_wrapper;
638
639#else
640#error "You will need constructor support for your compiler"
641#endif
642
643CONSTRUCT(library_init)
644
645EGLBoolean (*epoxy_eglBindAPI)(EGLenum api);
646EGLBoolean (*epoxy_eglChooseConfig)(EGLDisplay dpy,
647 const EGLint* attrib_list,
648 EGLConfig* configs,
649 EGLint config_size,
650 EGLint* num_config);
651EGLContext (*epoxy_eglCreateContext)(EGLDisplay dpy,
652 EGLConfig config,
653 EGLContext share_context,
654 const EGLint* attrib_list);
655EGLSurface (*epoxy_eglCreatePbufferSurface)(EGLDisplay dpy,
656 EGLConfig config,
657 const EGLint* attrib_list);
658EGLSurface (*epoxy_eglCreateWindowSurface)(EGLDisplay dpy,
659 EGLConfig config,
660 EGLNativeWindowType win,
661 const EGLint* attrib_list);
662EGLBoolean (*epoxy_eglGetConfigAttrib)(EGLDisplay dpy,
663 EGLConfig config,
664 EGLint attribute,
665 EGLint* value);
666EGLDisplay (*epoxy_eglGetDisplay)(EGLNativeDisplayType display_id);
667EGLDisplay (*epoxy_eglGetPlatformDisplayEXT)(EGLenum platform,
668 void* native_display,
669 const EGLint* attrib_list);
671void (*(*epoxy_eglGetProcAddress)(const char* procname))(void);
672EGLBoolean (*epoxy_eglInitialize)(EGLDisplay dpy, EGLint* major, EGLint* minor);
673EGLBoolean (*epoxy_eglMakeCurrent)(EGLDisplay dpy,
674 EGLSurface draw,
675 EGLSurface read,
676 EGLContext ctx);
677EGLBoolean (*epoxy_eglSwapBuffers)(EGLDisplay dpy, EGLSurface surface);
678EGLImageKHR (*epoxy_eglCreateImageKHR)(EGLDisplay dpy,
679 EGLContext ctx,
680 EGLenum target,
681 EGLClientBuffer buffer,
682 const EGLint* attrib_list);
683EGLBoolean (*epoxy_eglDestroyImageKHR)(EGLDisplay dpy, EGLImage image);
684
685void (*epoxy_glAttachShader)(GLuint program, GLuint shader);
687void (*epoxy_glBindRenderbuffer)(GLenum target, GLuint renderbuffer);
688void (*epoxy_glBindTexture)(GLenum target, GLuint texture);
689void (*epoxy_glBlitFramebuffer)(GLint srcX0,
690 GLint srcY0,
691 GLint srcX1,
692 GLint srcY1,
693 GLint dstX0,
694 GLint dstY0,
695 GLint dstX1,
696 GLint dstY1,
697 GLbitfield mask,
698 GLenum filter);
699void (*epoxy_glCompileShader)(GLuint shader);
701GLuint (*epoxy_glCreateShader)(GLenum shaderType);
702void (*epoxy_glDeleteFramebuffers)(GLsizei n, const GLuint* framebuffers);
703void (*expoxy_glDeleteShader)(GLuint shader);
704void (*epoxy_glDeleteTextures)(GLsizei n, const GLuint* textures);
706 GLenum attachment,
707 GLenum renderbuffertarget,
708 GLuint renderbuffer);
710 GLenum attachment,
711 GLenum textarget,
712 GLuint texture,
713 GLint level);
715 GLenum attachment,
716 GLenum pname,
717 GLint* params);
718void (*epoxy_glGenFramebuffers)(GLsizei n, GLuint* framebuffers);
719void (*epoxy_glGenTextures)(GLsizei n, GLuint* textures);
720void (*epoxy_glLinkProgram)(GLuint program);
722 GLenum internalformat,
723 GLsizei width,
724 GLsizei height);
725void (*epoxy_glShaderSource)(GLuint shader,
726 GLsizei count,
727 const GLchar* const* string,
728 const GLint* length);
729void (*epoxy_glTexParameterf)(GLenum target, GLenum pname, GLfloat param);
730void (*epoxy_glTexParameteri)(GLenum target, GLenum pname, GLint param);
732 GLint level,
733 GLint internalformat,
734 GLsizei width,
735 GLsizei height,
736 GLint border,
737 GLenum format,
738 GLenum type,
739 const void* pixels);
741
742static void library_init() {
746 epoxy_eglGetCurrentContext = _eglGetCurrentContext;
751 epoxy_eglGetCurrentDisplay = _eglGetCurrentDisplay;
757 epoxy_eglQueryContext = _eglQueryContext;
761
768 epoxy_glClearColor = _glClearColor;
772 epoxy_glDeleteRenderbuffers = _glDeleteRenderbuffers;
773 epoxy_glDeleteShader = _glDeleteShader;
775 epoxy_glDisable = _glDisable;
776 epoxy_glEnable = _glEnable;
780 epoxy_glGenRenderbuffers = _glGenRenderbuffers;
784 epoxy_glGetIntegerv = _glGetIntegerv;
785 epoxy_glGetProgramiv = _glGetProgramiv;
786 epoxy_glGetProgramInfoLog = _glGetProgramInfoLog;
787 epoxy_glGetShaderiv = _glGetShaderiv;
788 epoxy_glGetShaderInfoLog = _glGetShaderInfoLog;
789 epoxy_glGetString = _glGetString;
790 epoxy_glIsEnabled = _glIsEnabled;
798}
int32_t value
const EmbeddedViewParams * params
FlutterVulkanImage * image
FlFramebuffer * framebuffer
const uint8_t uint32_t uint32_t GError ** error
uint32_t uint32_t * format
uint32_t * target
#define FML_CHECK(condition)
Definition logging.h:104
size_t length
static EGLBoolean bool_failure(EGLint error)
void(* epoxy_glCompileShader)(GLuint shader)
static void _glGenFramebuffers(GLsizei n, GLuint *framebuffers)
static bool check_config(EGLConfig config)
Definition mock_epoxy.cc:93
GLuint(* epoxy_glCreateProgram)()
void(* epoxy_glRenderbufferStorage)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
void(* epoxy_glBindTexture)(GLenum target, GLuint texture)
EGLBoolean _eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
EGLSurface(* epoxy_eglCreateWindowSurface)(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list)
EGLBoolean _eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
void(* epoxy_glGetFramebufferAttachmentParameteriv)(GLenum target, GLenum attachment, GLenum pname, GLint *params)
void _glShaderSource(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length)
void _glClearColor(GLfloat r, GLfloat g, GLfloat b, GLfloat a)
void(* epoxy_glShaderSource)(GLuint shader, GLsizei count, const GLchar *const *string, const GLint *length)
void(* epoxy_glDeleteTextures)(GLsizei n, const GLuint *textures)
EGLBoolean _eglInitialize(EGLDisplay dpy, EGLint *major, EGLint *minor)
static void _glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
EGLBoolean _eglQueryContext(EGLDisplay display, EGLContext context, EGLint attribute, EGLint *value)
void(* epoxy_glBindRenderbuffer)(GLenum target, GLuint renderbuffer)
static GLboolean enable_blend
void _glDeleteShader(GLuint shader)
void(* expoxy_glDeleteShader)(GLuint shader)
static void _glGetProgramiv(GLuint program, GLenum pname, GLint *params)
static GLuint bound_texture_2d
void(* epoxy_glGenFramebuffers)(GLsizei n, GLuint *framebuffers)
static std::map< GLenum, GLuint > framebuffer_renderbuffers
bool epoxy_has_gl_extension(const char *extension)
void(* epoxy_glAttachShader)(GLuint program, GLuint shader)
static void _glGetProgramInfoLog(GLuint program, GLsizei maxLength, GLsizei *length, GLchar *infoLog)
void(* epoxy_glTexParameteri)(GLenum target, GLenum pname, GLint param)
EGLImageKHR(* epoxy_eglCreateImageKHR)(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
static void _glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
static void _glBindRenderbuffer(GLenum target, GLuint framebuffer)
static MockContext mock_context
Definition mock_epoxy.cc:59
static void library_init()
static void _glEnable(GLenum cap)
void(* epoxy_glTexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
static MockImage mock_image
Definition mock_epoxy.cc:61
static void _glTexParameteri(GLenum target, GLenum pname, GLint param)
static void _glTexParameterf(GLenum target, GLenum pname, GLfloat param)
EGLBoolean(* epoxy_eglDestroyImageKHR)(EGLDisplay dpy, EGLImage image)
void(*(* epoxy_eglGetProcAddress)(const char *procname))(void)
EGLSurface _eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list)
EGLBoolean _eglBindAPI(EGLenum api)
EGLContext(* epoxy_eglCreateContext)(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list)
static void _glGetShaderInfoLog(GLuint shader, GLsizei maxLength, GLsizei *length, GLchar *infoLog)
EGLImageKHR _eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
static void _glBindFramebuffer(GLenum target, GLuint framebuffer)
GLuint(* epoxy_glCreateShader)(GLenum shaderType)
static void _glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint *params)
static bool check_initialized(EGLDisplay dpy)
Definition mock_epoxy.cc:84
EGLBoolean(* epoxy_eglGetConfigAttrib)(EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value)
void _glDeleteRenderbuffers(GLsizei n, const GLuint *renderbuffers)
static GLboolean _glIsEnabled(GLenum cap)
EGLint _eglGetError()
static MockConfig mock_config
Definition mock_epoxy.cc:58
GLuint _glCreateShader(GLenum shaderType)
void _glAttachShader(GLuint program, GLuint shader)
static const GLubyte * _glGetString(GLenum pname)
static void _glGetShaderiv(GLuint shader, GLenum pname, GLint *params)
static MockEpoxy * mock
Definition mock_epoxy.cc:55
void(* epoxy_glDeleteFramebuffers)(GLsizei n, const GLuint *framebuffers)
void(* epoxy_glTexParameterf)(GLenum target, GLenum pname, GLfloat param)
EGLBoolean(* epoxy_eglInitialize)(EGLDisplay dpy, EGLint *major, EGLint *minor)
static void _glBindTexture(GLenum target, GLuint texture)
EGLDisplay _eglGetDisplay(EGLNativeDisplayType display_id)
static bool check_display(EGLDisplay dpy)
Definition mock_epoxy.cc:75
GLuint _glCreateProgram()
void(* epoxy_glGenTextures)(GLsizei n, GLuint *textures)
void _glDeleteTextures(GLsizei n, const GLuint *textures)
EGLBoolean _eglDestroyImageKHR(EGLDisplay dpy, EGLImage image)
void(* epoxy_glBindFramebuffer)(GLenum target, GLuint framebuffer)
EGLContext _eglGetCurrentContext()
EGLSurface _eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
EGLSurface(* epoxy_eglCreatePbufferSurface)(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
static bool display_initialized
Definition mock_epoxy.cc:56
void _glDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
static void _glGenTextures(GLsizei n, GLuint *textures)
void _glCompileShader(GLuint shader)
EGLDisplay(* epoxy_eglGetPlatformDisplayEXT)(EGLenum platform, void *native_display, const EGLint *attrib_list)
void(*)(void) _eglGetProcAddress(const char *procname)
static GLboolean enable_scissor_test
void(* epoxy_glFramebufferRenderbuffer)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
EGLDisplay(* epoxy_eglGetDisplay)(EGLNativeDisplayType display_id)
EGLint(* epoxy_eglGetError)()
static EGLBoolean bool_success()
static void _glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
static void _glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels)
void(* epoxy_glLinkProgram)(GLuint program)
GLenum(* epoxy_glGetError)()
bool epoxy_is_desktop_gl(void)
EGLDisplay _eglGetPlatformDisplayEXT(EGLenum platform, void *native_display, const EGLint *attrib_list)
static void _glDisable(GLenum cap)
int epoxy_gl_version(void)
static void _glFramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
static void _setEnable(GLenum cap, GLboolean value)
EGLBoolean(* epoxy_eglSwapBuffers)(EGLDisplay dpy, EGLSurface surface)
static EGLint mock_error
Definition mock_epoxy.cc:63
EGLContext _eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list)
EGLBoolean _eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
EGLBoolean(* epoxy_eglMakeCurrent)(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
EGLBoolean(* epoxy_eglBindAPI)(EGLenum api)
static void _glGetIntegerv(GLenum pname, GLint *data)
EGLDisplay _eglGetCurrentDisplay()
EGLBoolean(* epoxy_eglChooseConfig)(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config)
void _glLinkProgram(GLuint program)
static MockDisplay mock_display
Definition mock_epoxy.cc:57
static MockSurface mock_surface
Definition mock_epoxy.cc:60
void(* epoxy_glFramebufferTexture2D)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
EGLBoolean _eglSwapBuffers(EGLDisplay dpy, EGLSurface surface)
void _glRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
void(* epoxy_glBlitFramebuffer)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter)
static GLenum _glGetError()
FlTexture * texture
it will be possible to load the file into Perfetto s trace viewer use test Running tests that layout and measure text will not yield consistent results across various platforms Enabling this option will make font resolution default to the Ahem test font on all disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition switch_defs.h:36
std::shared_ptr< ContextGLES > context
impeller::ShaderType type
int32_t height
int32_t width
EGLint depth_size
Definition mock_epoxy.cc:23
EGLint renderable_type
Definition mock_epoxy.cc:33
EGLint native_renderable
Definition mock_epoxy.cc:29
EGLint bind_to_texture_rgba
Definition mock_epoxy.cc:32
EGLint native_visual_type
Definition mock_epoxy.cc:28
EGLint max_pbuffer_width
Definition mock_epoxy.cc:36
EGLint conformant
Definition mock_epoxy.cc:34
EGLint green_size
Definition mock_epoxy.cc:20
EGLint config_id
Definition mock_epoxy.cc:14
EGLint buffer_size
Definition mock_epoxy.cc:15
EGLint surface_type
Definition mock_epoxy.cc:35
EGLint level
Definition mock_epoxy.cc:18
EGLint config_caveat
Definition mock_epoxy.cc:30
EGLint color_buffer_type
Definition mock_epoxy.cc:16
EGLint min_swap_interval
Definition mock_epoxy.cc:39
EGLint native_visual_id
Definition mock_epoxy.cc:27
EGLint max_pbuffer_pixels
Definition mock_epoxy.cc:38
EGLint red_size
Definition mock_epoxy.cc:19
EGLint max_pbuffer_height
Definition mock_epoxy.cc:37
EGLint sample_buffers
Definition mock_epoxy.cc:26
EGLint max_swap_interval
Definition mock_epoxy.cc:40
EGLint stencil_size
Definition mock_epoxy.cc:24
EGLint samples
Definition mock_epoxy.cc:25
EGLint blue_size
Definition mock_epoxy.cc:21
EGLint alpha_size
Definition mock_epoxy.cc:22
EGLint transparent_type
Definition mock_epoxy.cc:17
EGLint bind_to_texture_rgb
Definition mock_epoxy.cc:31