11 #include "flutter/fml/mapping.h"
38 #if IMPELLER_ENABLE_OPENGLES
43 #if IMPELLER_ENABLE_METAL
48 #if IMPELLER_ENABLE_VULKAN
56 #define DEFINE_PEER_GETTER(cxx_type, c_type) \
57 cxx_type* GetPeer(c_type object) { \
58 return reinterpret_cast<cxx_type*>(object); \
83 std::stringstream stream;
100 <<
"doesn't match the version the user expects ("
111 void* gl_proc_address_callback_user_data) {
115 #if IMPELLER_ENABLE_OPENGLES
117 [gl_proc_address_callback,
118 gl_proc_address_callback_user_data](
const char* proc_name) ->
void* {
119 return gl_proc_address_callback(proc_name,
120 gl_proc_address_callback_user_data);
122 if (!context || !context->IsValid()) {
126 return context.Leak();
138 #if IMPELLER_ENABLE_METAL
140 if (!context || !context->IsValid()) {
144 return context.Leak();
157 #if IMPELLER_ENABLE_VULKAN
159 if (!context || !context->IsValid()) {
163 return context.Leak();
183 #if IMPELLER_ENABLE_VULKAN
184 if (!GetPeer(context)->IsVulkan()) {
188 return reinterpret_cast<ContextVK*
>(GetPeer(context))
189 ->GetInfo(*out_vulkan_info);
198 ImpellerContext context,
199 void* vulkan_surface_khr) {
200 #if IMPELLER_ENABLE_VULKAN
201 return Create<SwapchainVK>(
203 reinterpret_cast<VkSurfaceKHR
>(vulkan_surface_khr)
224 ImpellerVulkanSwapchain swapchain) {
225 return GetPeer(swapchain)->AcquireNextSurface().Leak();
230 return Create<DisplayListBuilder>(cull_rect).Leak();
245 GetPeer(builder)->Save();
252 ImpellerImageFilter backdrop) {
261 GetPeer(builder)->Restore();
268 GetPeer(builder)->Scale(
Size{x_scale, y_scale});
273 float angle_degrees) {
274 GetPeer(builder)->Rotate(
Degrees{angle_degrees});
280 float y_translation) {
281 GetPeer(builder)->Translate(
Point{x_translation, y_translation});
304 ImpellerDisplayListBuilder builder) {
305 GetPeer(builder)->ResetTransform();
310 ImpellerDisplayListBuilder builder) {
311 return GetPeer(builder)->GetSaveCount();
316 ImpellerDisplayListBuilder builder,
318 GetPeer(builder)->RestoreToCount(count);
333 *out_bounds = GetPeer(path)->GetBounds();
338 return Create<PathBuilder>().Leak();
367 GetPeer(builder)->QuadraticCurveTo(
ToImpellerType(*control_point),
391 float start_angle_degrees,
392 float end_angle_degrees) {
407 ImpellerPathBuilder builder,
416 GetPeer(builder)->Close();
447 ImpellerDisplayListBuilder builder,
466 return Create<Paint>().Leak();
506 GetPeer(paint)->SetStrokeWidth(width);
511 GetPeer(paint)->SetStrokeMiter(miter);
516 ImpellerPaint paint) {
517 GetPeer(builder)->DrawPaint(*GetPeer(paint));
524 ImpellerPaint paint) {
533 ImpellerDisplayListBuilder builder,
538 ImpellerPaint paint) {
550 ImpellerPaint paint) {
551 GetPeer(builder)->DrawRect(
ToImpellerType(*rect), *GetPeer(paint));
557 ImpellerPaint paint) {
558 GetPeer(builder)->DrawOval(
ToImpellerType(*oval_bounds), *GetPeer(paint));
563 ImpellerDisplayListBuilder builder,
566 ImpellerPaint paint) {
575 ImpellerDisplayListBuilder builder,
580 ImpellerPaint paint) {
581 GetPeer(builder)->DrawRoundedRectDifference(
ToImpellerType(*outer_rect),
592 ImpellerPaint paint) {
593 GetPeer(builder)->DrawPath(*GetPeer(path), *GetPeer(paint));
598 ImpellerContext context,
601 void* contents_on_release_user_data) {
610 auto texture = Create<Texture>(*GetPeer(context), desc);
611 if (!texture->IsValid()) {
619 auto wrapped_contents = std::make_shared<fml::NonOwnedMapping>(
622 [on_release = contents->
on_release, contents_on_release_user_data](
624 on_release(contents_on_release_user_data);
627 if (!texture->SetContents(std::move(wrapped_contents))) {
633 if (!texture->SetContents(contents->
data, contents->
length)) {
638 return texture.Leak();
643 ImpellerContext context,
645 uint64_t external_gl_handle) {
646 auto impeller_context = GetPeer(context)->GetContext();
647 if (impeller_context->GetBackendType() !=
653 const auto& impeller_context_gl =
655 const auto& reactor = impeller_context_gl.GetReactor();
671 if (!texture || !texture->IsValid()) {
693 auto interop_texture = GetPeer(texture);
694 if (interop_texture->GetBackendType() !=
696 VALIDATION_LOG <<
"Can only fetch the texture handle of an OpenGL texture.";
716 ImpellerDisplayListBuilder builder) {
717 auto dl = GetPeer(builder)->Build();
718 if (!dl->IsValid()) {
726 ImpellerDisplayListBuilder builder,
727 ImpellerDisplayList display_list,
729 GetPeer(builder)->DrawDisplayList(*GetPeer(display_list), opacity);
737 #if IMPELLER_ENABLE_OPENGLES
738 if (!GetPeer(context)->IsGL()) {
742 return Create<SurfaceGLES>(*GetPeer(context),
755 ImpellerContext context,
756 void* metal_drawable) {
757 #if IMPELLER_ENABLE_METAL
758 if (!GetPeer(context)->IsMetal()) {
762 return Create<SurfaceMTL>(*GetPeer(context), metal_drawable).Leak();
780 ImpellerDisplayList display_list) {
781 return GetPeer(surface)->DrawDisplayList(*GetPeer(display_list));
786 return GetPeer(surface)->Present();
791 ImpellerTexture texture,
794 ImpellerPaint paint) {
795 GetPeer(builder)->DrawTexture(*GetPeer(texture),
804 ImpellerDisplayListBuilder builder,
805 ImpellerTexture texture,
809 ImpellerPaint paint) {
810 GetPeer(builder)->DrawTextureRect(*GetPeer(texture),
828 static std::pair<std::vector<flutter::DlColor>, std::vector<Scalar>>
831 const float* stops) {
832 if (stop_count == 0) {
835 std::pair<std::vector<flutter::DlColor>, std::vector<Scalar>> result;
836 result.first.reserve(stop_count);
837 result.second.reserve(stop_count);
838 for (
size_t i = 0; i < stop_count; i++) {
840 result.second.emplace_back(stops[i]);
858 colors_and_stops.first,
859 colors_and_stops.second,
861 transformation ==
nullptr ?
Matrix{}
880 colors_and_stops.first,
881 colors_and_stops.second,
883 transformation ==
nullptr ?
Matrix{}
906 colors_and_stops.first,
907 colors_and_stops.second,
909 transformation ==
nullptr ?
Matrix{}
930 colors_and_stops.first,
931 colors_and_stops.second,
933 transformation ==
nullptr ?
Matrix{}
941 ImpellerTexture image,
951 transformation ==
nullptr ?
Matrix{}
958 std::vector<std::shared_ptr<flutter::DlColorSource>>
samplers;
963 size_t samplers_count,
965 size_t data_bytes_length) {
967 result.
uniforms = std::make_shared<std::vector<uint8_t>>();
968 if (data_bytes_length > 0) {
969 std::copy(
data,
data + data_bytes_length,
970 std::back_inserter(*result.
uniforms));
972 if (samplers_count > 0) {
973 result.
samplers.reserve(samplers_count);
974 for (
size_t i = 0; i < samplers_count; i++) {
975 result.
samplers.emplace_back(flutter::DlColorSource::MakeImage(
977 flutter::DlTileMode::kClamp,
978 flutter::DlTileMode::kClamp
987 ImpellerContext context,
988 ImpellerFragmentProgram fragment_program,
989 ImpellerTexture* samplers,
990 size_t samplers_count,
992 size_t data_bytes_length) {
996 *GetPeer(fragment_program),
997 std::move(bindings.samplers),
998 std::move(bindings.uniforms)
1086 ImpellerContext context,
1087 ImpellerFragmentProgram fragment_program,
1088 ImpellerTexture* samplers,
1089 size_t samplers_count,
1090 const uint8_t*
data,
1091 size_t data_bytes_length) {
1095 *GetPeer(fragment_program),
1096 std::move(bindings.samplers),
1097 std::move(bindings.uniforms)
1103 ImpellerImageFilter outer,
1104 ImpellerImageFilter inner) {
1110 ImpellerColorFilter color_filter) {
1111 GetPeer(paint)->SetColorFilter(*GetPeer(color_filter));
1116 ImpellerColorSource color_source) {
1117 GetPeer(paint)->SetColorSource(*GetPeer(color_source));
1122 ImpellerImageFilter image_filter) {
1123 GetPeer(paint)->SetImageFilter(*GetPeer(image_filter));
1128 ImpellerMaskFilter mask_filter) {
1129 GetPeer(paint)->SetMaskFilter(*GetPeer(mask_filter));
1134 return Create<ParagraphStyle>().Leak();
1149 ImpellerPaint paint) {
1150 GetPeer(paragraph_style)->SetForeground(
Ref(GetPeer(paint)));
1155 ImpellerPaint paint) {
1156 GetPeer(paragraph_style)->SetBackground(
Ref(GetPeer(paint)));
1162 GetPeer(paragraph_style)->SetFontWeight(
ToTxtType(weight));
1168 GetPeer(paragraph_style)->SetFontStyle(
ToTxtType(style));
1172 if (
string ==
nullptr) {
1175 return std::string{
string};
1180 const char* family_name) {
1181 GetPeer(paragraph_style)->SetFontFamily(
ReadString(family_name));
1187 GetPeer(paragraph_style)->SetFontSize(size);
1193 GetPeer(paragraph_style)->SetHeight(height);
1198 ImpellerParagraphStyle paragraph_style,
1200 GetPeer(paragraph_style)->SetTextAlignment(
ToTxtType(align));
1205 ImpellerParagraphStyle paragraph_style,
1207 GetPeer(paragraph_style)->SetTextDirection(
ToTxtType(direction));
1212 ImpellerParagraphStyle paragraph_style,
1214 GetPeer(paragraph_style)->SetTextDecoration(*decoration);
1219 uint32_t max_lines) {
1220 GetPeer(paragraph_style)->SetMaxLines(max_lines);
1225 const char* locale) {
1226 GetPeer(paragraph_style)->SetLocale(
ReadString(locale));
1231 const char* ellipsis) {
1232 GetPeer(paragraph_style)->SetEllipsis(
ReadString(ellipsis));
1237 ImpellerParagraph paragraph,
1239 GetPeer(builder)->DrawParagraph(*GetPeer(paragraph),
ToImpellerType(*point));
1247 bool occluder_is_transparent,
1248 float device_pixel_ratio) {
1249 GetPeer(builder)->DrawShadow(*GetPeer(path),
1252 occluder_is_transparent,
1259 ImpellerTypographyContext context) {
1261 Create<ParagraphBuilder>(Ref<TypographyContext>(GetPeer(context)));
1262 if (!builder->IsValid()) {
1266 return builder.Leak();
1271 ImpellerParagraphBuilder paragraph_builder) {
1277 ImpellerParagraphBuilder paragraph_builder) {
1283 ImpellerParagraphBuilder paragraph_builder,
1284 ImpellerParagraphStyle style) {
1285 GetPeer(paragraph_builder)->PushStyle(*GetPeer(style));
1290 ImpellerParagraphBuilder paragraph_builder) {
1291 GetPeer(paragraph_builder)->PopStyle();
1296 const uint8_t*
data,
1298 if (
data ==
nullptr) {
1304 GetPeer(paragraph_builder)->AddText(
data, length);
1309 ImpellerParagraphBuilder paragraph_builder,
1311 return GetPeer(paragraph_builder)->Build(width).Leak();
1326 return GetPeer(paragraph)->GetMaxWidth();
1331 return GetPeer(paragraph)->GetHeight();
1336 return GetPeer(paragraph)->GetLongestLineWidth();
1341 return GetPeer(paragraph)->GetMinIntrinsicWidth();
1346 return GetPeer(paragraph)->GetMaxIntrinsicWidth();
1351 return GetPeer(paragraph)->GetIdeographicBaseline();
1356 return GetPeer(paragraph)->GetAlphabeticBaseline();
1361 return GetPeer(paragraph)->GetLineCount();
1366 size_t code_unit_index,
1368 *out_range = GetPeer(paragraph)->GetWordBoundary(code_unit_index);
1373 auto context = Create<TypographyContext>();
1374 if (!context->IsValid()) {
1378 return context.Leak();
1394 void* contents_on_release_user_data,
1395 const char* family_name_alias) {
1396 auto wrapped_contents = std::make_unique<fml::NonOwnedMapping>(
1399 [on_release = contents->
on_release, contents_on_release_user_data](
auto,
1401 on_release(contents_on_release_user_data);
1404 return GetPeer(context)->RegisterFont(std::move(wrapped_contents),
1410 ImpellerParagraph paragraph) {
1411 return GetPeer(paragraph)->GetLineMetrics().GetC();
1416 ImpellerParagraph paragraph,
1417 size_t code_unit_index) {
1418 return GetPeer(paragraph)
1419 ->GetGlyphInfoAtCodeUnitIndex(code_unit_index)
1425 ImpellerParagraph paragraph,
1428 return GetPeer(paragraph)
1429 ->GetClosestGlyphInfoAtParagraphCoordinates(
x, y)
1450 return GetPeer(metrics)->GetUnscaledAscent(line);
1455 return GetPeer(metrics)->GetAscent(line);
1460 return GetPeer(metrics)->GetDescent(line);
1466 return GetPeer(metrics)->GetBaseline(line);
1471 return GetPeer(metrics)->IsHardbreak(line);
1476 return GetPeer(metrics)->GetWidth(line);
1481 return GetPeer(metrics)->GetHeight(line);
1486 return GetPeer(metrics)->GetLeft(line);
1492 return GetPeer(metrics)->GetCodeUnitStartIndex(line);
1498 return GetPeer(metrics)->GetCodeUnitEndIndex(line);
1503 ImpellerLineMetrics metrics,
1505 return GetPeer(metrics)->GetCodeUnitEndIndexExcludingWhitespace(line);
1510 ImpellerLineMetrics metrics,
1512 return GetPeer(metrics)->GetCodeUnitEndIndexIncludingNewline(line);
1531 ImpellerGlyphInfo glyph_info) {
1532 return GetPeer(glyph_info)->GetGraphemeClusterCodeUnitRangeBegin();
1537 ImpellerGlyphInfo glyph_info) {
1538 return GetPeer(glyph_info)->GetGraphemeClusterCodeUnitRangeEnd();
1544 *out_bounds = GetPeer(glyph_info)->GetGraphemeClusterBounds();
1549 return GetPeer(glyph_info)->IsEllipsis();
1554 ImpellerGlyphInfo glyph_info) {
1555 return GetPeer(glyph_info)->GetTextDirection();
1565 if (
data ==
nullptr) {
1570 if (
auto callback =
data->on_release) {
1571 return std::make_shared<fml::NonOwnedMapping>(
1574 [user_data, callback](
const uint8_t*
data,
size_t size) {
1575 callback(user_data);
1579 return std::make_shared<fml::MallocMapping>(
1580 fml::MallocMapping::Copy(
data->data,
data->length));
1586 void* data_release_user_data) {
1588 auto program = Create<FragmentProgram>(std::move(data_mapping));
1589 if (!program->IsValid()) {
1593 return program.Leak();
static ContextGLES & Cast(Context &base)
static sk_sp< DlImageImpeller > Make(std::shared_ptr< Texture > texture, OwningContext owning_context=OwningContext::kIO)
std::optional< GLuint > GetGLHandle() const
static std::shared_ptr< TextureGLES > WrapTexture(std::shared_ptr< ReactorGLES > reactor, TextureDescriptor desc, HandleGLES external_handle)
Create a texture by wrapping an external OpenGL texture handle. Ownership of the texture handle is as...
static ScopedObject< ColorFilter > MakeMatrix(const float matrix[20])
static ScopedObject< ColorFilter > MakeBlend(Color color, BlendMode mode)
static ScopedObject< ColorSource > MakeSweepGradient(const Point ¢er, Scalar start, Scalar end, const std::vector< flutter::DlColor > &colors, const std::vector< Scalar > &stops, flutter::DlTileMode tile_mode, const Matrix &transformation)
static ScopedObject< ColorSource > MakeFragmentProgram(const Context &context, const FragmentProgram &program, std::vector< std::shared_ptr< flutter::DlColorSource >> samplers, std::shared_ptr< std::vector< uint8_t >> uniform_data)
static ScopedObject< ColorSource > MakeImage(const Texture &image, flutter::DlTileMode horizontal_tile_mode, flutter::DlTileMode vertical_tile_mode, flutter::DlImageSampling sampling, const Matrix &transformation)
static ScopedObject< ColorSource > MakeRadialGradient(const Point ¢er, Scalar radius, const std::vector< flutter::DlColor > &colors, const std::vector< Scalar > &stops, flutter::DlTileMode tile_mode, const Matrix &transformation)
static ScopedObject< ColorSource > MakeLinearGradient(const Point &start_point, const Point &end_point, const std::vector< flutter::DlColor > &colors, const std::vector< Scalar > &stops, flutter::DlTileMode tile_mode, const Matrix &transformation)
static ScopedObject< ColorSource > MakeConicalGradient(const Point &start_center, Scalar start_radius, const Point &end_center, Scalar end_radius, const std::vector< flutter::DlColor > &colors, const std::vector< Scalar > &stops, flutter::DlTileMode tile_mode, const Matrix &transformation)
static ScopedObject< Context > Create(std::function< void *(const char *gl_proc_name)> proc_address_callback)
static ScopedObject< Context > Create()
static ScopedObject< Context > Create(const Settings &settings)
Internal C++ peer of ImpellerGlyphInfo. For detailed documentation, refer to the headerdocs in the pu...
static ScopedObject< ImageFilter > MakeDilate(Scalar x_radius, Scalar y_radius)
static ScopedObject< ImageFilter > MakeFragmentProgram(const Context &context, const FragmentProgram &program, std::vector< std::shared_ptr< flutter::DlColorSource >> samplers, std::shared_ptr< std::vector< uint8_t >> uniform_data)
static ScopedObject< ImageFilter > MakeErode(Scalar x_radius, Scalar y_radius)
static ScopedObject< ImageFilter > MakeCompose(const ImageFilter &outer, const ImageFilter &inner)
static ScopedObject< ImageFilter > MakeBlur(Scalar x_sigma, Scalar y_sigma, flutter::DlTileMode tile_mode)
static ScopedObject< ImageFilter > MakeMatrix(const Matrix &matrix, flutter::DlImageSampling sampling)
Internal C++ peer of ImpellerLineMetrics. For detailed documentation, refer to the headerdocs in the ...
static ScopedObject< MaskFilter > MakeBlur(flutter::DlBlurStyle style, float sigma)
static void SafeRelease(void *ptr)
static void SafeRetain(void *ptr)
#define IMPELLER_VERSION_GET_PATCH(version)
#define IMPELLER_VERSION_GET_MAJOR(version)
#define IMPELLER_VERSION_GET_VARIANT(version)
#define IMPELLER_VERSION_GET_MINOR(version)
void *IMPELLER_NULLABLE(* ImpellerProcAddressCallback)(const char *IMPELLER_NONNULL proc_name, void *IMPELLER_NULLABLE user_data)
#define IMPELLER_EXTERN_C
IMPELLER_EXTERN_C ImpellerImageFilter ImpellerImageFilterCreateComposeNew(ImpellerImageFilter outer, ImpellerImageFilter inner)
IMPELLER_EXTERN_C void ImpellerParagraphBuilderRetain(ImpellerParagraphBuilder paragraph_builder)
IMPELLER_EXTERN_C ImpellerColorSource ImpellerColorSourceCreateSweepGradientNew(const ImpellerPoint *center, float start, float end, uint32_t stop_count, const ImpellerColor *colors, const float *stops, ImpellerTileMode tile_mode, const ImpellerMatrix *transformation)
IMPELLER_EXTERN_C bool ImpellerLineMetricsIsHardbreak(ImpellerLineMetrics metrics, size_t line)
IMPELLER_EXTERN_C void ImpellerGlyphInfoRelease(ImpellerGlyphInfo glyph_info)
IMPELLER_EXTERN_C ImpellerImageFilter ImpellerImageFilterCreateMatrixNew(const ImpellerMatrix *matrix, ImpellerTextureSampling sampling)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawPaint(ImpellerDisplayListBuilder builder, ImpellerPaint paint)
IMPELLER_EXTERN_C void ImpellerSurfaceRetain(ImpellerSurface surface)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetEllipsis(ImpellerParagraphStyle paragraph_style, const char *ellipsis)
IMPELLER_EXTERN_C void ImpellerParagraphStyleRelease(ImpellerParagraphStyle paragraph_style)
IMPELLER_EXTERN_C uint32_t ImpellerGetVersion()
IMPELLER_EXTERN_C ImpellerColorSource ImpellerColorSourceCreateFragmentProgramNew(ImpellerContext context, ImpellerFragmentProgram fragment_program, ImpellerTexture *samplers, size_t samplers_count, const uint8_t *data, size_t data_bytes_length)
IMPELLER_EXTERN_C void ImpellerParagraphStyleRetain(ImpellerParagraphStyle paragraph_style)
IMPELLER_EXTERN_C size_t ImpellerLineMetricsGetCodeUnitStartIndex(ImpellerLineMetrics metrics, size_t line)
IMPELLER_EXTERN_C ImpellerTextDirection ImpellerGlyphInfoGetTextDirection(ImpellerGlyphInfo glyph_info)
IMPELLER_EXTERN_C void ImpellerPaintSetColorSource(ImpellerPaint paint, ImpellerColorSource color_source)
IMPELLER_EXTERN_C void ImpellerPathBuilderClose(ImpellerPathBuilder builder)
IMPELLER_EXTERN_C void ImpellerPathBuilderQuadraticCurveTo(ImpellerPathBuilder builder, const ImpellerPoint *control_point, const ImpellerPoint *end_point)
IMPELLER_EXTERN_C void ImpellerParagraphGetWordBoundary(ImpellerParagraph paragraph, size_t code_unit_index, ImpellerRange *out_range)
IMPELLER_EXTERN_C uint64_t ImpellerTextureGetOpenGLHandle(ImpellerTexture texture)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderRetain(ImpellerDisplayListBuilder builder)
IMPELLER_EXTERN_C void ImpellerParagraphBuilderPopStyle(ImpellerParagraphBuilder paragraph_builder)
static bool CheckVersion(uint32_t version)
IMPELLER_EXTERN_C ImpellerMaskFilter ImpellerMaskFilterCreateBlurNew(ImpellerBlurStyle style, float sigma)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetMaxLines(ImpellerParagraphStyle paragraph_style, uint32_t max_lines)
IMPELLER_EXTERN_C size_t ImpellerLineMetricsGetCodeUnitEndIndex(ImpellerLineMetrics metrics, size_t line)
IMPELLER_EXTERN_C void ImpellerColorFilterRetain(ImpellerColorFilter color_filter)
IMPELLER_EXTERN_C ImpellerSurface ImpellerSurfaceCreateWrappedFBONew(ImpellerContext context, uint64_t fbo, ImpellerPixelFormat format, const ImpellerISize *size)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawTextureRect(ImpellerDisplayListBuilder builder, ImpellerTexture texture, const ImpellerRect *src_rect, const ImpellerRect *dst_rect, ImpellerTextureSampling sampling, ImpellerPaint paint)
IMPELLER_EXTERN_C ImpellerFragmentProgram ImpellerFragmentProgramNew(const ImpellerMapping *data, void *data_release_user_data)
IMPELLER_EXTERN_C ImpellerImageFilter ImpellerImageFilterCreateFragmentProgramNew(ImpellerContext context, ImpellerFragmentProgram fragment_program, ImpellerTexture *samplers, size_t samplers_count, const uint8_t *data, size_t data_bytes_length)
IMPELLER_EXTERN_C void ImpellerLineMetricsRelease(ImpellerLineMetrics line_metrics)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderSave(ImpellerDisplayListBuilder builder)
IMPELLER_EXTERN_C ImpellerDisplayList ImpellerDisplayListBuilderCreateDisplayListNew(ImpellerDisplayListBuilder builder)
IMPELLER_EXTERN_C bool ImpellerGlyphInfoIsEllipsis(ImpellerGlyphInfo glyph_info)
IMPELLER_EXTERN_C void ImpellerPathBuilderRelease(ImpellerPathBuilder builder)
constexpr txt::TextDecorationStyle ToTxtType(ImpellerTextDecorationStyle style)
IMPELLER_EXTERN_C ImpellerParagraphBuilder ImpellerParagraphBuilderNew(ImpellerTypographyContext context)
IMPELLER_EXTERN_C ImpellerColorFilter ImpellerColorFilterCreateColorMatrixNew(const ImpellerColorMatrix *color_matrix)
static std::pair< std::vector< flutter::DlColor >, std::vector< Scalar > > ParseColorsAndStops(uint32_t stop_count, const ImpellerColor *colors, const float *stops)
static std::shared_ptr< fml::Mapping > MakeCopyableMapping(const ImpellerMapping *data, void *user_data)
IMPELLER_EXTERN_C void ImpellerPaintRelease(ImpellerPaint paint)
IMPELLER_EXTERN_C ImpellerDisplayListBuilder ImpellerDisplayListBuilderNew(const ImpellerRect *cull_rect)
IMPELLER_EXTERN_C double ImpellerLineMetricsGetDescent(ImpellerLineMetrics metrics, size_t line)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetFontStyle(ImpellerParagraphStyle paragraph_style, ImpellerFontStyle style)
IMPELLER_EXTERN_C ImpellerPaint ImpellerPaintNew()
IMPELLER_EXTERN_C void ImpellerTypographyContextRetain(ImpellerTypographyContext context)
static SamplersAndUniforms ReadSamplersAndUniforms(ImpellerTexture *samplers, size_t samplers_count, const uint8_t *data, size_t data_bytes_length)
IMPELLER_EXTERN_C size_t ImpellerLineMetricsGetCodeUnitEndIndexIncludingNewline(ImpellerLineMetrics metrics, size_t line)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetTextDirection(ImpellerParagraphStyle paragraph_style, ImpellerTextDirection direction)
ScopedObject< Object > Ref(Object *object)
IMPELLER_EXTERN_C ImpellerSurface ImpellerSurfaceCreateWrappedMetalDrawableNew(ImpellerContext context, void *metal_drawable)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawOval(ImpellerDisplayListBuilder builder, const ImpellerRect *oval_bounds, ImpellerPaint paint)
IMPELLER_EXTERN_C size_t ImpellerLineMetricsGetCodeUnitEndIndexExcludingWhitespace(ImpellerLineMetrics metrics, size_t line)
IMPELLER_EXTERN_C ImpellerContext ImpellerContextCreateVulkanNew(uint32_t version, const ImpellerContextVulkanSettings *settings)
IMPELLER_EXTERN_C ImpellerParagraph ImpellerParagraphBuilderBuildParagraphNew(ImpellerParagraphBuilder paragraph_builder, float width)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderSaveLayer(ImpellerDisplayListBuilder builder, const ImpellerRect *bounds, ImpellerPaint paint, ImpellerImageFilter backdrop)
IMPELLER_EXTERN_C void ImpellerPathBuilderAddRect(ImpellerPathBuilder builder, const ImpellerRect *rect)
IMPELLER_EXTERN_C ImpellerGlyphInfo ImpellerParagraphCreateGlyphInfoAtCodeUnitIndexNew(ImpellerParagraph paragraph, size_t code_unit_index)
IMPELLER_EXTERN_C double ImpellerLineMetricsGetBaseline(ImpellerLineMetrics metrics, size_t line)
IMPELLER_EXTERN_C void ImpellerPaintSetStrokeCap(ImpellerPaint paint, ImpellerStrokeCap cap)
IMPELLER_EXTERN_C void ImpellerParagraphBuilderRelease(ImpellerParagraphBuilder paragraph_builder)
IMPELLER_EXTERN_C double ImpellerLineMetricsGetUnscaledAscent(ImpellerLineMetrics metrics, size_t line)
IMPELLER_EXTERN_C void ImpellerPathBuilderLineTo(ImpellerPathBuilder builder, const ImpellerPoint *location)
IMPELLER_EXTERN_C void ImpellerPathRetain(ImpellerPath path)
IMPELLER_EXTERN_C void ImpellerPaintSetStrokeJoin(ImpellerPaint paint, ImpellerStrokeJoin join)
IMPELLER_EXTERN_C ImpellerGlyphInfo ImpellerParagraphCreateGlyphInfoAtParagraphCoordinatesNew(ImpellerParagraph paragraph, double x, double y)
IMPELLER_EXTERN_C float ImpellerParagraphGetHeight(ImpellerParagraph paragraph)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderClipOval(ImpellerDisplayListBuilder builder, const ImpellerRect *oval_bounds, ImpellerClipOperation op)
IMPELLER_EXTERN_C void ImpellerPathBuilderRetain(ImpellerPathBuilder builder)
IMPELLER_EXTERN_C void ImpellerParagraphBuilderPushStyle(ImpellerParagraphBuilder paragraph_builder, ImpellerParagraphStyle style)
IMPELLER_EXTERN_C void ImpellerPathBuilderAddOval(ImpellerPathBuilder builder, const ImpellerRect *oval_bounds)
IMPELLER_EXTERN_C ImpellerTypographyContext ImpellerTypographyContextNew()
IMPELLER_EXTERN_C float ImpellerParagraphGetAlphabeticBaseline(ImpellerParagraph paragraph)
IMPELLER_EXTERN_C void ImpellerPathRelease(ImpellerPath path)
IMPELLER_EXTERN_C ImpellerImageFilter ImpellerImageFilterCreateBlurNew(float x_sigma, float y_sigma, ImpellerTileMode tile_mode)
IMPELLER_EXTERN_C void ImpellerColorSourceRetain(ImpellerColorSource color_source)
IMPELLER_EXTERN_C float ImpellerParagraphGetMinIntrinsicWidth(ImpellerParagraph paragraph)
IMPELLER_EXTERN_C void ImpellerPaintSetStrokeWidth(ImpellerPaint paint, float width)
IMPELLER_EXTERN_C void ImpellerMaskFilterRetain(ImpellerMaskFilter mask_filter)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawDashedLine(ImpellerDisplayListBuilder builder, const ImpellerPoint *from, const ImpellerPoint *to, float on_length, float off_length, ImpellerPaint paint)
IMPELLER_EXTERN_C ImpellerPath ImpellerPathBuilderTakePathNew(ImpellerPathBuilder builder, ImpellerFillType fill)
IMPELLER_EXTERN_C ImpellerPath ImpellerPathBuilderCopyPathNew(ImpellerPathBuilder builder, ImpellerFillType fill)
IMPELLER_EXTERN_C void ImpellerColorSourceRelease(ImpellerColorSource color_source)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderClipRoundedRect(ImpellerDisplayListBuilder builder, const ImpellerRect *rect, const ImpellerRoundingRadii *radii, ImpellerClipOperation op)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderClipRect(ImpellerDisplayListBuilder builder, const ImpellerRect *rect, ImpellerClipOperation op)
IMPELLER_EXTERN_C double ImpellerLineMetricsGetAscent(ImpellerLineMetrics metrics, size_t line)
constexpr Matrix ToImpellerType(const ImpellerMatrix &m)
IMPELLER_EXTERN_C void ImpellerGlyphInfoGetGraphemeClusterBounds(ImpellerGlyphInfo glyph_info, ImpellerRect *out_bounds)
IMPELLER_EXTERN_C size_t ImpellerGlyphInfoGetGraphemeClusterCodeUnitRangeEnd(ImpellerGlyphInfo glyph_info)
IMPELLER_EXTERN_C ImpellerColorSource ImpellerColorSourceCreateRadialGradientNew(const ImpellerPoint *center, float radius, uint32_t stop_count, const ImpellerColor *colors, const float *stops, ImpellerTileMode tile_mode, const ImpellerMatrix *transformation)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetTextAlignment(ImpellerParagraphStyle paragraph_style, ImpellerTextAlignment align)
IMPELLER_EXTERN_C void ImpellerTypographyContextRelease(ImpellerTypographyContext context)
IMPELLER_EXTERN_C ImpellerTexture ImpellerTextureCreateWithOpenGLTextureHandleNew(ImpellerContext context, const ImpellerTextureDescriptor *descriptor, uint64_t external_gl_handle)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawRoundedRect(ImpellerDisplayListBuilder builder, const ImpellerRect *rect, const ImpellerRoundingRadii *radii, ImpellerPaint paint)
IMPELLER_EXTERN_C ImpellerTexture ImpellerTextureCreateWithContentsNew(ImpellerContext context, const ImpellerTextureDescriptor *descriptor, const ImpellerMapping *contents, void *contents_on_release_user_data)
IMPELLER_EXTERN_C void ImpellerPathBuilderMoveTo(ImpellerPathBuilder builder, const ImpellerPoint *location)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderTransform(ImpellerDisplayListBuilder builder, const ImpellerMatrix *transform)
IMPELLER_EXTERN_C double ImpellerLineMetricsGetWidth(ImpellerLineMetrics metrics, size_t line)
IMPELLER_EXTERN_C void ImpellerColorFilterRelease(ImpellerColorFilter color_filter)
IMPELLER_EXTERN_C bool ImpellerTypographyContextRegisterFont(ImpellerTypographyContext context, const ImpellerMapping *contents, void *contents_on_release_user_data, const char *family_name_alias)
IMPELLER_EXTERN_C double ImpellerLineMetricsGetLeft(ImpellerLineMetrics metrics, size_t line)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetFontWeight(ImpellerParagraphStyle paragraph_style, ImpellerFontWeight weight)
IMPELLER_EXTERN_C float ImpellerParagraphGetMaxIntrinsicWidth(ImpellerParagraph paragraph)
IMPELLER_EXTERN_C ImpellerColorSource ImpellerColorSourceCreateLinearGradientNew(const ImpellerPoint *start_point, const ImpellerPoint *end_point, uint32_t stop_count, const ImpellerColor *colors, const float *stops, ImpellerTileMode tile_mode, const ImpellerMatrix *transformation)
IMPELLER_EXTERN_C ImpellerSurface ImpellerVulkanSwapchainAcquireNextSurfaceNew(ImpellerVulkanSwapchain swapchain)
IMPELLER_EXTERN_C ImpellerPathBuilder ImpellerPathBuilderNew()
IMPELLER_EXTERN_C ImpellerContext ImpellerContextCreateMetalNew(uint32_t version)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetFontSize(ImpellerParagraphStyle paragraph_style, float size)
IMPELLER_EXTERN_C void ImpellerTextureRelease(ImpellerTexture texture)
IMPELLER_EXTERN_C bool ImpellerContextGetVulkanInfo(ImpellerContext IMPELLER_NONNULL context, ImpellerContextVulkanInfo *out_vulkan_info)
IMPELLER_EXTERN_C void ImpellerContextRelease(ImpellerContext context)
IMPELLER_EXTERN_C void ImpellerImageFilterRelease(ImpellerImageFilter image_filter)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawParagraph(ImpellerDisplayListBuilder builder, ImpellerParagraph paragraph, const ImpellerPoint *point)
IMPELLER_EXTERN_C ImpellerContext ImpellerContextCreateOpenGLESNew(uint32_t version, ImpellerProcAddressCallback gl_proc_address_callback, void *gl_proc_address_callback_user_data)
IMPELLER_EXTERN_C ImpellerColorSource ImpellerColorSourceCreateImageNew(ImpellerTexture image, ImpellerTileMode horizontal_tile_mode, ImpellerTileMode vertical_tile_mode, ImpellerTextureSampling sampling, const ImpellerMatrix *transformation)
IMPELLER_EXTERN_C void ImpellerMaskFilterRelease(ImpellerMaskFilter mask_filter)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetFontFamily(ImpellerParagraphStyle paragraph_style, const char *family_name)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetHeight(ImpellerParagraphStyle paragraph_style, float height)
IMPELLER_EXTERN_C void ImpellerPaintRetain(ImpellerPaint paint)
IMPELLER_EXTERN_C void ImpellerContextRetain(ImpellerContext context)
IMPELLER_EXTERN_C void ImpellerParagraphRelease(ImpellerParagraph paragraph)
IMPELLER_EXTERN_C void ImpellerPaintSetBlendMode(ImpellerPaint paint, ImpellerBlendMode mode)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderResetTransform(ImpellerDisplayListBuilder builder)
static std::string GetVersionAsString(uint32_t version)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderScale(ImpellerDisplayListBuilder builder, float x_scale, float y_scale)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetLocale(ImpellerParagraphStyle paragraph_style, const char *locale)
IMPELLER_EXTERN_C bool ImpellerSurfaceDrawDisplayList(ImpellerSurface surface, ImpellerDisplayList display_list)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetTextDecoration(ImpellerParagraphStyle paragraph_style, const ImpellerTextDecoration *decoration)
IMPELLER_EXTERN_C bool ImpellerSurfacePresent(ImpellerSurface surface)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawLine(ImpellerDisplayListBuilder builder, const ImpellerPoint *from, const ImpellerPoint *to, ImpellerPaint paint)
IMPELLER_EXTERN_C size_t ImpellerGlyphInfoGetGraphemeClusterCodeUnitRangeBegin(ImpellerGlyphInfo glyph_info)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawDisplayList(ImpellerDisplayListBuilder builder, ImpellerDisplayList display_list, float opacity)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderRestore(ImpellerDisplayListBuilder builder)
IMPELLER_EXTERN_C void ImpellerFragmentProgramRetain(ImpellerFragmentProgram fragment_program)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawShadow(ImpellerDisplayListBuilder builder, ImpellerPath path, const ImpellerColor *color, float elevation, bool occluder_is_transparent, float device_pixel_ratio)
IMPELLER_EXTERN_C void ImpellerVulkanSwapchainRelease(ImpellerVulkanSwapchain swapchain)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderTranslate(ImpellerDisplayListBuilder builder, float x_translation, float y_translation)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetForeground(ImpellerParagraphStyle paragraph_style, ImpellerPaint paint)
IMPELLER_EXTERN_C uint32_t ImpellerDisplayListBuilderGetSaveCount(ImpellerDisplayListBuilder builder)
IMPELLER_EXTERN_C ImpellerImageFilter ImpellerImageFilterCreateDilateNew(float x_radius, float y_radius)
IMPELLER_EXTERN_C void ImpellerPaintSetStrokeMiter(ImpellerPaint paint, float miter)
IMPELLER_EXTERN_C ImpellerParagraphStyle ImpellerParagraphStyleNew()
IMPELLER_EXTERN_C void ImpellerTextureRetain(ImpellerTexture texture)
IMPELLER_EXTERN_C ImpellerLineMetrics ImpellerParagraphGetLineMetrics(ImpellerParagraph paragraph)
IMPELLER_EXTERN_C void ImpellerPathBuilderCubicCurveTo(ImpellerPathBuilder builder, const ImpellerPoint *control_point_1, const ImpellerPoint *control_point_2, const ImpellerPoint *end_point)
IMPELLER_EXTERN_C void ImpellerImageFilterRetain(ImpellerImageFilter image_filter)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawRoundedRectDifference(ImpellerDisplayListBuilder builder, const ImpellerRect *outer_rect, const ImpellerRoundingRadii *outer_radii, const ImpellerRect *inner_rect, const ImpellerRoundingRadii *inner_radii, ImpellerPaint paint)
IMPELLER_EXTERN_C void ImpellerParagraphRetain(ImpellerParagraph paragraph)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderRelease(ImpellerDisplayListBuilder builder)
IMPELLER_EXTERN_C ImpellerColorFilter ImpellerColorFilterCreateBlendNew(const ImpellerColor *color, ImpellerBlendMode blend_mode)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderRestoreToCount(ImpellerDisplayListBuilder builder, uint32_t count)
IMPELLER_EXTERN_C float ImpellerParagraphGetLongestLineWidth(ImpellerParagraph paragraph)
IMPELLER_EXTERN_C void ImpellerGlyphInfoRetain(ImpellerGlyphInfo glyph_info)
IMPELLER_EXTERN_C void ImpellerPaintSetMaskFilter(ImpellerPaint paint, ImpellerMaskFilter mask_filter)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderSetTransform(ImpellerDisplayListBuilder builder, const ImpellerMatrix *transform)
IMPELLER_EXTERN_C uint32_t ImpellerParagraphGetLineCount(ImpellerParagraph paragraph)
IMPELLER_EXTERN_C void ImpellerLineMetricsRetain(ImpellerLineMetrics line_metrics)
IMPELLER_EXTERN_C ImpellerImageFilter ImpellerImageFilterCreateErodeNew(float x_radius, float y_radius)
IMPELLER_EXTERN_C double ImpellerLineMetricsGetHeight(ImpellerLineMetrics metrics, size_t line)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderGetTransform(ImpellerDisplayListBuilder builder, ImpellerMatrix *out_transform)
IMPELLER_EXTERN_C void ImpellerSurfaceRelease(ImpellerSurface surface)
constexpr void FromImpellerType(const Matrix &from, ImpellerMatrix &to)
static std::string ReadString(const char *string)
IMPELLER_EXTERN_C void ImpellerPaintSetColorFilter(ImpellerPaint paint, ImpellerColorFilter color_filter)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderRotate(ImpellerDisplayListBuilder builder, float angle_degrees)
IMPELLER_EXTERN_C float ImpellerParagraphGetMaxWidth(ImpellerParagraph paragraph)
DEFINE_PEER_GETTER(ColorFilter, ImpellerColorFilter)
IMPELLER_EXTERN_C void ImpellerPathBuilderAddRoundedRect(ImpellerPathBuilder builder, const ImpellerRect *rect, const ImpellerRoundingRadii *rounding_radii)
IMPELLER_EXTERN_C void ImpellerVulkanSwapchainRetain(ImpellerVulkanSwapchain swapchain)
IMPELLER_EXTERN_C ImpellerVulkanSwapchain ImpellerVulkanSwapchainCreateNew(ImpellerContext context, void *vulkan_surface_khr)
IMPELLER_EXTERN_C float ImpellerParagraphGetIdeographicBaseline(ImpellerParagraph paragraph)
constexpr flutter::DlColor ToDisplayListType(Color color)
IMPELLER_EXTERN_C void ImpellerPaintSetDrawStyle(ImpellerPaint paint, ImpellerDrawStyle style)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawTexture(ImpellerDisplayListBuilder builder, ImpellerTexture texture, const ImpellerPoint *point, ImpellerTextureSampling sampling, ImpellerPaint paint)
IMPELLER_EXTERN_C void ImpellerPaintSetImageFilter(ImpellerPaint paint, ImpellerImageFilter image_filter)
IMPELLER_EXTERN_C void ImpellerPathGetBounds(ImpellerPath path, ImpellerRect *out_bounds)
IMPELLER_EXTERN_C void ImpellerDisplayListRelease(ImpellerDisplayList display_list)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderClipPath(ImpellerDisplayListBuilder builder, ImpellerPath path, ImpellerClipOperation op)
IMPELLER_EXTERN_C ImpellerColorSource ImpellerColorSourceCreateConicalGradientNew(const ImpellerPoint *start_center, float start_radius, const ImpellerPoint *end_center, float end_radius, uint32_t stop_count, const ImpellerColor *colors, const float *stops, ImpellerTileMode tile_mode, const ImpellerMatrix *transformation)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawPath(ImpellerDisplayListBuilder builder, ImpellerPath path, ImpellerPaint paint)
IMPELLER_EXTERN_C void ImpellerPathBuilderAddArc(ImpellerPathBuilder builder, const ImpellerRect *oval_bounds, float start_angle_degrees, float end_angle_degrees)
IMPELLER_EXTERN_C void ImpellerDisplayListRetain(ImpellerDisplayList display_list)
IMPELLER_EXTERN_C void ImpellerParagraphStyleSetBackground(ImpellerParagraphStyle paragraph_style, ImpellerPaint paint)
IMPELLER_EXTERN_C void ImpellerDisplayListBuilderDrawRect(ImpellerDisplayListBuilder builder, const ImpellerRect *rect, ImpellerPaint paint)
IMPELLER_EXTERN_C void ImpellerPaintSetColor(ImpellerPaint paint, const ImpellerColor *color)
IMPELLER_EXTERN_C void ImpellerParagraphBuilderAddText(ImpellerParagraphBuilder paragraph_builder, const uint8_t *data, uint32_t length)
IMPELLER_EXTERN_C void ImpellerFragmentProgramRelease(ImpellerFragmentProgram fragment_program)
ImpellerCallback IMPELLER_NULLABLE on_release
const uint8_t *IMPELLER_NONNULL data
ImpellerPixelFormat pixel_format
A 4x4 matrix using column-major storage.
A lightweight object that describes the attributes of a texture that can then used an allocator to cr...
CompressionType compression_type
std::shared_ptr< const fml::Mapping > data