75 handle_(nullptr, &DestroyWindowHandle),
77 use_angle_(switches.use_angle) {
79#if IMPELLER_PLAYGROUND_SUPPORTS_ANGLE
80 angle_glesv2_ = dlopen(
"libGLESv2.dylib", RTLD_LAZY);
85 ::glfwDefaultWindowHints();
88 FML_CHECK(use_angle_) <<
"Must use Angle on macOS for OpenGL ES.";
89 ::glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API);
94 ::glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API);
96 ::glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
97 ::glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
98 ::glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
99 ::glfwWindowHint(GLFW_RED_BITS, 8);
100 ::glfwWindowHint(GLFW_GREEN_BITS, 8);
101 ::glfwWindowHint(GLFW_BLUE_BITS, 8);
102 ::glfwWindowHint(GLFW_ALPHA_BITS, 8);
103 ::glfwWindowHint(GLFW_DEPTH_BITS, 32);
104 ::glfwWindowHint(GLFW_STENCIL_BITS, 8);
105 ::glfwWindowHint(GLFW_SAMPLES, 4);
109 ::glfwWindowHint(GLFW_CONTEXT_DEBUG,
GLFW_TRUE);
112 auto window = ::glfwCreateWindow(1, 1,
"Test",
nullptr,
nullptr);
114 ::glfwMakeContextCurrent(
window);
115 worker_->SetReactionsAllowedOnCurrentThread(
true);
119 auto gl = std::make_unique<ProcTableGLES>(CreateGLProcAddressResolver());
120 if (!gl->IsValid()) {
121 FML_LOG(ERROR) <<
"Proc table when creating a playground was invalid.";
125 if (gl->GetDescription()->HasDebugExtension()) {
126 gl->DebugMessageCallbackKHR(
127 +[](GLenum , GLenum message_type, GLuint ,
128 GLenum , GLsizei ,
const GLchar*
message,
130 switch (message_type) {
131 case GL_DEBUG_TYPE_ERROR_KHR:
141 gl->Enable(GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR);
144 bool is_gles3 = gl->GetDescription()->GetGlVersion().IsAtLeast(
Version(3));
149 FML_LOG(ERROR) <<
"Could not create context.";
153 auto worker_id = context_gles->AddReactorWorker(worker_);
154 if (!worker_id.has_value()) {
155 FML_LOG(ERROR) <<
"Could not add reactor worker.";
158 context_ = std::move(context_gles);
167 std::make_shared<fml::NonOwnedMapping>(
168 impeller_entity_shaders_gles3_data,
169 impeller_entity_shaders_gles3_length),
170 std::make_shared<fml::NonOwnedMapping>(
171 impeller_modern_shaders_gles3_data,
172 impeller_modern_shaders_gles3_length),
173 std::make_shared<fml::NonOwnedMapping>(
174 impeller_framebuffer_blend_shaders_gles3_data,
175 impeller_framebuffer_blend_shaders_gles3_length),
176 std::make_shared<fml::NonOwnedMapping>(
177 impeller_fixtures_shaders_gles3_data,
178 impeller_fixtures_shaders_gles3_length),
179 std::make_shared<fml::NonOwnedMapping>(
180 impeller_modern_fixtures_shaders_gles3_data,
181 impeller_modern_fixtures_shaders_gles3_length),
182 std::make_shared<fml::NonOwnedMapping>(
183 impeller_imgui_shaders_gles3_data,
184 impeller_imgui_shaders_gles3_length),
188 std::make_shared<fml::NonOwnedMapping>(
189 impeller_entity_shaders_gles_data,
190 impeller_entity_shaders_gles_length),
191 std::make_shared<fml::NonOwnedMapping>(
192 impeller_modern_shaders_gles_data,
193 impeller_modern_shaders_gles_length),
194 std::make_shared<fml::NonOwnedMapping>(
195 impeller_framebuffer_blend_shaders_gles_data,
196 impeller_framebuffer_blend_shaders_gles_length),
197 std::make_shared<fml::NonOwnedMapping>(
198 impeller_fixtures_shaders_gles_data,
199 impeller_fixtures_shaders_gles_length),
200 std::make_shared<fml::NonOwnedMapping>(
201 impeller_modern_fixtures_shaders_gles_data,
202 impeller_modern_fixtures_shaders_gles_length),
203 std::make_shared<fml::NonOwnedMapping>(
204 impeller_imgui_shaders_gles_data, impeller_imgui_shaders_gles_length),
static std::shared_ptr< ContextGLES > Create(const Flags &flags, std::unique_ptr< ProcTableGLES > gl, const std::vector< std::shared_ptr< fml::Mapping > > &shader_libraries, bool enable_gpu_tracing)