Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
shaders.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
5#include <vector>
6
14#include "third_party/skia/include/effects/SkRuntimeEffect.h"
15
16namespace Skwasm {
18 std::shared_ptr<std::vector<uint8_t>> data;
19};
20
21sk_sp<flutter::DlRuntimeEffect> CreateRuntimeEffect(SkString* string);
22} // namespace Skwasm
23
26 uint32_t* colors,
27 flutter::DlScalar* stops,
28 int count, // Number of stops/colors
29 flutter::DlTileMode tile_mode,
30 flutter::DlScalar* matrix_33 // Can be nullptr
31) {
33 std::vector<flutter::DlColor> dl_colors;
34 dl_colors.resize(count);
35 for (int i = 0; i < count; i++) {
36 dl_colors[i] = flutter::DlColor(colors[i]);
37 }
38 if (matrix_33) {
39 auto matrix = Skwasm::CreateDlMatrixFrom3x3(matrix_33);
41 flutter::DlColorSource::MakeLinear(end_points[0], end_points[1], count,
42 dl_colors.data(), stops, tile_mode,
43 &matrix));
44 } else {
46 flutter::DlColorSource::MakeLinear(end_points[0], end_points[1], count,
47 dl_colors.data(), stops, tile_mode));
48 }
49}
50
53 flutter::DlScalar center_y,
54 flutter::DlScalar radius,
55 uint32_t* colors,
56 flutter::DlScalar* stops,
57 int count,
58 flutter::DlTileMode tile_mode,
59 flutter::DlScalar* matrix_33) {
61 std::vector<flutter::DlColor> dl_colors;
62 dl_colors.resize(count);
63 for (int i = 0; i < count; i++) {
64 dl_colors[i] = flutter::DlColor(colors[i]);
65 }
66 if (matrix_33) {
67 auto local_matrix = Skwasm::CreateDlMatrixFrom3x3(matrix_33);
70 radius, count, dl_colors.data(),
71 stops, tile_mode, &local_matrix));
72 } else {
75 radius, count, dl_colors.data(),
76 stops, tile_mode));
77 }
78}
79
82 flutter::DlScalar start_radius,
83 flutter::DlScalar end_radius,
84 uint32_t* colors,
85 flutter::DlScalar* stops,
86 int count,
87 flutter::DlTileMode tile_mode,
88 flutter::DlScalar* matrix_33) {
90 std::vector<flutter::DlColor> dl_colors;
91 dl_colors.resize(count);
92 for (int i = 0; i < count; i++) {
93 dl_colors[i] = flutter::DlColor(colors[i]);
94 }
95 if (matrix_33) {
96 auto local_matrix = Skwasm::CreateDlMatrixFrom3x3(matrix_33);
99 end_points[0], start_radius, end_points[1], end_radius, count,
100 dl_colors.data(), stops, tile_mode, &local_matrix));
101 } else {
104 end_points[0], start_radius, end_points[1], end_radius, count,
105 dl_colors.data(), stops, tile_mode));
106 }
107}
108
111 flutter::DlScalar center_y,
112 uint32_t* colors,
113 flutter::DlScalar* stops,
114 int count,
115 flutter::DlTileMode tile_mode,
116 flutter::DlScalar start_angle,
117 flutter::DlScalar end_angle,
118 flutter::DlScalar* matrix_33) {
120 std::vector<flutter::DlColor> dl_colors;
121 dl_colors.resize(count);
122 for (int i = 0; i < count; i++) {
123 dl_colors[i] = flutter::DlColor(colors[i]);
124 }
125 if (matrix_33) {
126 auto local_matrix = Skwasm::CreateDlMatrixFrom3x3(matrix_33);
129 flutter::DlPoint{center_x, center_y}, start_angle, end_angle, count,
130 dl_colors.data(), stops, tile_mode, &local_matrix));
131 } else {
134 start_angle, end_angle, count,
135 dl_colors.data(), stops, tile_mode));
136 }
137}
138
144
149
154
155SKWASM_EXPORT size_t
159
162 flutter::DlRuntimeEffect* runtime_effect,
163 Skwasm::UniformData* uniforms,
165 size_t child_count) {
167 std::vector<std::shared_ptr<flutter::DlColorSource>> child_pointers;
168 child_pointers.resize(child_count);
169 for (size_t i = 0; i < child_count; i++) {
170 child_pointers[i] = children[i]->Shared();
171 }
172
174 flutter::DlColorSource::MakeRuntimeEffect(sk_ref_sp(runtime_effect),
175 std::move(child_pointers),
176 uniforms->data));
177}
178
181 flutter::DlTileMode tile_mode_x,
182 flutter::DlTileMode tile_mode_y,
183 Skwasm::FilterQuality quality,
184 flutter::DlScalar* matrix_33) {
186 if (matrix_33) {
187 auto local_matrix = Skwasm::CreateDlMatrixFrom3x3(matrix_33);
190 sk_ref_sp(image), tile_mode_x, tile_mode_y,
191 Skwasm::SamplingOptionsForQuality(quality), &local_matrix));
192 } else {
195 sk_ref_sp(image), tile_mode_x, tile_mode_y,
197 }
198}
199
201 return new Skwasm::UniformData{std::make_shared<std::vector<uint8_t>>(size)};
202}
203
207
const std::shared_ptr< T > & Shared()
Definition helpers.h:21
static std::shared_ptr< DlColorSource > MakeSweep(DlPoint center, DlScalar start, DlScalar end, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlColorSource > MakeImage(const sk_sp< const DlImage > &image, DlTileMode horizontal_tile_mode, DlTileMode vertical_tile_mode, DlImageSampling sampling=DlImageSampling::kLinear, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlColorSource > MakeLinear(const DlPoint start_point, const DlPoint end_point, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlColorSource > MakeRuntimeEffect(sk_sp< DlRuntimeEffect > runtime_effect, std::vector< std::shared_ptr< DlColorSource > > samplers, std::shared_ptr< std::vector< uint8_t > > uniform_data)
static std::shared_ptr< DlColorSource > MakeConical(DlPoint start_center, DlScalar start_radius, DlPoint end_center, DlScalar end_radius, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlColorSource > MakeRadial(DlPoint center, DlScalar radius, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
Represents an image whose allocation is (usually) resident on device memory.
Definition dl_image.h:32
virtual size_t uniform_size() const =0
Returns the total combined size of all uniforms in bytes.
FlutterVulkanImage * image
flutter::DlMatrix CreateDlMatrixFrom3x3(const flutter::DlScalar *f)
Definition helpers.h:29
uint32_t live_shader_count
flutter::DlImageSampling SamplingOptionsForQuality(FilterQuality quality)
Definition helpers.h:101
FilterQuality
Definition helpers.h:83
sk_sp< flutter::DlRuntimeEffect > CreateRuntimeEffect(SkString *string)
uint32_t live_runtime_effect_count
impeller::Scalar DlScalar
SKWASM_EXPORT void shader_dispose(Skwasm::sp_wrapper< flutter::DlColorSource > *shader)
Definition shaders.cc:139
SKWASM_EXPORT void * uniformData_getPointer(Skwasm::UniformData *data)
Definition shaders.cc:208
SKWASM_EXPORT void uniformData_dispose(Skwasm::UniformData *data)
Definition shaders.cc:204
SKWASM_EXPORT Skwasm::sp_wrapper< flutter::DlColorSource > * shader_createRadialGradient(flutter::DlScalar center_x, flutter::DlScalar center_y, flutter::DlScalar radius, uint32_t *colors, flutter::DlScalar *stops, int count, flutter::DlTileMode tile_mode, flutter::DlScalar *matrix_33)
Definition shaders.cc:52
SKWASM_EXPORT Skwasm::sp_wrapper< flutter::DlColorSource > * shader_createFromImage(flutter::DlImage *image, flutter::DlTileMode tile_mode_x, flutter::DlTileMode tile_mode_y, Skwasm::FilterQuality quality, flutter::DlScalar *matrix_33)
Definition shaders.cc:180
SKWASM_EXPORT Skwasm::UniformData * uniformData_create(int size)
Definition shaders.cc:200
SKWASM_EXPORT Skwasm::sp_wrapper< flutter::DlColorSource > * shader_createLinearGradient(flutter::DlPoint *end_points, uint32_t *colors, flutter::DlScalar *stops, int count, flutter::DlTileMode tile_mode, flutter::DlScalar *matrix_33)
Definition shaders.cc:25
SKWASM_EXPORT Skwasm::sp_wrapper< flutter::DlColorSource > * shader_createRuntimeEffectShader(flutter::DlRuntimeEffect *runtime_effect, Skwasm::UniformData *uniforms, Skwasm::sp_wrapper< flutter::DlColorSource > **children, size_t child_count)
Definition shaders.cc:161
SKWASM_EXPORT flutter::DlRuntimeEffect * runtimeEffect_create(SkString *source)
Definition shaders.cc:145
SKWASM_EXPORT void runtimeEffect_dispose(flutter::DlRuntimeEffect *effect)
Definition shaders.cc:150
SKWASM_EXPORT Skwasm::sp_wrapper< flutter::DlColorSource > * shader_createConicalGradient(flutter::DlPoint *end_points, flutter::DlScalar start_radius, flutter::DlScalar end_radius, uint32_t *colors, flutter::DlScalar *stops, int count, flutter::DlTileMode tile_mode, flutter::DlScalar *matrix_33)
Definition shaders.cc:81
SKWASM_EXPORT Skwasm::sp_wrapper< flutter::DlColorSource > * shader_createSweepGradient(flutter::DlScalar center_x, flutter::DlScalar center_y, uint32_t *colors, flutter::DlScalar *stops, int count, flutter::DlTileMode tile_mode, flutter::DlScalar start_angle, flutter::DlScalar end_angle, flutter::DlScalar *matrix_33)
Definition shaders.cc:110
SKWASM_EXPORT size_t runtimeEffect_getUniformSize(flutter::DlRuntimeEffect *effect)
Definition shaders.cc:156
#define SKWASM_EXPORT
Definition export.h:10
std::shared_ptr< std::vector< uint8_t > > data
Definition shaders.cc:18
std::shared_ptr< const fml::Mapping > data