Flutter Impeller
playground_test.cc
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
6 
8 
9 namespace IMPELLER_HPP_NAMESPACE {
11 } // namespace IMPELLER_HPP_NAMESPACE
12 
14 
16  static std::once_flag sOnceFlag;
17  std::call_once(sOnceFlag, []() {
18  std::map<std::string, void*> proc_map;
19 #define IMPELLER_HPP_PROC(name) \
20  proc_map[#name] = reinterpret_cast<void*>(&name);
22 #undef IMPELLER_HPP_PROC
24  [&](auto name) { return proc_map.at(name); });
25  });
26 }
27 
29 
30 // |PlaygroundTest|
33 }
34 
35 // |PlaygroundTest|
38 }
39 
41  switch (GetBackend()) {
43  FML_CHECK(false) << "Metal not yet implemented.";
44  return nullptr;
46  Playground::GLProcAddressResolver playground_gl_proc_address_callback =
48  ImpellerProcAddressCallback gl_proc_address_callback =
49  [](const char* proc_name, void* user_data) -> void* {
50  return (*reinterpret_cast<Playground::GLProcAddressResolver*>(
51  user_data))(proc_name);
52  };
53  return Adopt<Context>(ImpellerContextCreateOpenGLESNew(
54  ImpellerGetVersion(), gl_proc_address_callback,
55  &playground_gl_proc_address_callback));
56  }
58  FML_CHECK(false) << "Vulkan not yet implemented.";
59  return nullptr;
60  }
61  FML_UNREACHABLE();
62 }
63 
65  auto context = GetInteropContext();
66  if (!context) {
67  return false;
68  }
69  return Playground::OpenPlaygroundHere([&](RenderTarget& target) -> bool {
70  auto impeller_surface = std::make_shared<impeller::Surface>(target);
71  auto surface = Create<Surface>(*context.Get(), impeller_surface);
72  if (!surface) {
73  return false;
74  }
75  return callback(context, surface);
76  });
77 }
78 
80  if (interop_context_) {
81  return interop_context_;
82  }
83  auto context = Create<Context>(GetContext(), nullptr);
84  if (!context) {
85  return nullptr;
86  }
87  interop_context_ = std::move(context);
88  return interop_context_;
89 }
90 
91 } // namespace impeller::interop::testing
bool OpenPlaygroundHere(const RenderCallback &render_callback)
Definition: playground.cc:201
GLProcAddressResolver CreateGLProcAddressResolver() const
Definition: playground.cc:519
std::shared_ptr< Context > GetContext() const
Definition: playground.cc:91
std::function< void *(const char *proc_name)> GLProcAddressResolver
Definition: playground.h:118
PlaygroundBackend GetBackend() const
ScopedObject< Context > CreateContext() const
ScopedObject< Context > GetInteropContext()
std::function< bool(const ScopedObject< Context > &context, const ScopedObject< Surface > &surface)> InteropPlaygroundCallback
bool OpenPlaygroundHere(InteropPlaygroundCallback callback)
void *IMPELLER_NULLABLE(* ImpellerProcAddressCallback)(const char *IMPELLER_NONNULL proc_name, void *IMPELLER_NULLABLE user_data)
Definition: impeller.h:310
#define IMPELLER_HPP_EACH_PROC(PROC)
Definition: impeller.hpp:47
IMPELLER_EXTERN_C uint32_t ImpellerGetVersion()
Definition: impeller.cc:68
IMPELLER_EXTERN_C ImpellerContext ImpellerContextCreateOpenGLESNew(uint32_t version, ImpellerProcAddressCallback gl_proc_address_callback, void *gl_proc_address_callback_user_data)
Definition: impeller.cc:73
bool Initialize(const std::function< void *(const char *function_name)> &resolver)
Definition: impeller.hpp:183
#define IMPELLER_HPP_PROC(name)