9#include <EGL/eglplatform.h>
20 const char* r = strstr(extensions,
name);
21 auto len = strlen(
name);
23 return r !=
nullptr && (r[len] ==
' ' || r[len] == 0);
26void CheckSwanglekExtensions() {
27 const char* extensions = ::eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
32 "EGL_ANGLE_platform_angle_device_type_swiftshader"))
36EGLDisplay CreateSwangleDisplay() {
37 CheckSwanglekExtensions();
39 PFNEGLGETPLATFORMDISPLAYEXTPROC egl_get_platform_display_EXT =
40 reinterpret_cast<PFNEGLGETPLATFORMDISPLAYEXTPROC
>(
41 eglGetProcAddress(
"eglGetPlatformDisplayEXT"));
43 <<
"eglGetPlatformDisplayEXT not available.";
45 const EGLint display_config[] = {
46 EGL_PLATFORM_ANGLE_TYPE_ANGLE,
47 EGL_PLATFORM_ANGLE_TYPE_VULKAN_ANGLE,
48 EGL_PLATFORM_ANGLE_DEVICE_TYPE_ANGLE,
49 EGL_PLATFORM_ANGLE_DEVICE_TYPE_SWIFTSHADER_ANGLE,
50 EGL_PLATFORM_ANGLE_NATIVE_PLATFORM_TYPE_ANGLE,
51 EGL_PLATFORM_VULKAN_DISPLAY_MODE_HEADLESS_ANGLE,
55 return egl_get_platform_display_EXT(
56 EGL_PLATFORM_ANGLE_ANGLE,
57 reinterpret_cast<EGLNativeDisplayType*
>(EGL_DEFAULT_DISPLAY),
63 display = CreateSwangleDisplay();
66 auto result = ::eglInitialize(
display,
nullptr,
nullptr);
71 EGLint num_config = 0;
72 const EGLint attribute_list[] = {EGL_RED_SIZE,
88 result = ::eglChooseConfig(
display, attribute_list, &
config, 1, &num_config);
93 const EGLint context_attributes[] = {
94 EGL_CONTEXT_CLIENT_VERSION,
124 result = ::eglTerminate(
display);
#define FML_CHECK(condition)
static bool HasExtension(const char *extensions, const char *name)
std::string GetEGLError()
DEF_SWITCHES_START aot vmservice shared library name
EGLContext offscreen_context
EGLContext onscreen_context