|
18 | 18 |
|
19 | 19 | #include "src/c/sk_types_priv.h" |
20 | 20 |
|
21 | | -using namespace skia_private; |
22 | | - |
23 | 21 | sk_runtimeeffect_t* sk_runtimeeffect_make_for_color_filter(sk_string_t* sksl, sk_string_t* error) { |
24 | 22 | auto [effect, errorMessage] = SkRuntimeEffect::MakeForColorFilter(AsString(*sksl)); |
25 | 23 | if (error && errorMessage.size() > 0) |
@@ -135,18 +133,28 @@ void sk_runtimeeffect_get_child_from_name(const sk_runtimeeffect_t* effect, cons |
135 | 133 | *cchild = *ToRuntimeEffectChild(AsRuntimeEffect(effect)->findChild(std::string_view(name, len))); |
136 | 134 | } |
137 | 135 |
|
138 | | -sk_imagefilter_t* sk_runtimeeffect_make_image_filter(sk_runtimeeffect_t* effect, sk_data_t* uniforms, const char* childShaderName, const sk_imagefilter_t* input) { |
| 136 | +sk_imagefilter_t* sk_runtimeeffect_make_image_filter(sk_runtimeeffect_t* effect, sk_data_t* uniforms, sk_flattenable_t** children, size_t childCount, const char* childShaderName, const sk_imagefilter_t* input) { |
139 | 137 | SkRuntimeShaderBuilder builder(sk_ref_sp(AsRuntimeEffect(effect)), sk_ref_sp(AsData(uniforms))); |
140 | 138 |
|
| 139 | + auto effectChildren = AsRuntimeEffect(effect)->children(); |
| 140 | + for (size_t i = 0; i < childCount && i < effectChildren.size(); i++) { |
| 141 | + builder.child(effectChildren[i].name) = sk_ref_sp(AsFlattenable(children[i])); |
| 142 | + } |
| 143 | + |
141 | 144 | std::string_view name = childShaderName ? std::string_view(childShaderName) : std::string_view(); |
142 | 145 | return ToImageFilter(SkImageFilters::RuntimeShader(builder, name, sk_ref_sp(AsImageFilter(input))).release()); |
143 | 146 | } |
144 | 147 |
|
145 | | -sk_imagefilter_t* sk_runtimeeffect_make_image_filter_with_children(sk_runtimeeffect_t* effect, sk_data_t* uniforms, float maxSampleRadius, const char** childShaderNames, const sk_imagefilter_t** inputs, int inputCount) { |
| 148 | +sk_imagefilter_t* sk_runtimeeffect_make_image_filter_with_children(sk_runtimeeffect_t* effect, sk_data_t* uniforms, sk_flattenable_t** children, size_t childCount, float maxSampleRadius, const char** childShaderNames, const sk_imagefilter_t** inputs, int inputCount) { |
146 | 149 | SkRuntimeShaderBuilder builder(sk_ref_sp(AsRuntimeEffect(effect)), sk_ref_sp(AsData(uniforms))); |
147 | 150 |
|
148 | | - STArray<4, std::string_view> names(inputCount); |
149 | | - STArray<4, sk_sp<SkImageFilter>> skInputs(inputCount); |
| 151 | + auto effectChildren = AsRuntimeEffect(effect)->children(); |
| 152 | + for (size_t i = 0; i < childCount && i < effectChildren.size(); i++) { |
| 153 | + builder.child(effectChildren[i].name) = sk_ref_sp(AsFlattenable(children[i])); |
| 154 | + } |
| 155 | + |
| 156 | + skia_private::STArray<4, std::string_view> names(inputCount); |
| 157 | + skia_private::STArray<4, sk_sp<SkImageFilter>> skInputs(inputCount); |
150 | 158 | for (int i = 0; i < inputCount; i++) { |
151 | 159 | names.push_back(std::string_view(childShaderNames[i])); |
152 | 160 | skInputs.push_back(sk_ref_sp(AsImageFilter(inputs[i]))); |
|
0 commit comments