1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /*
- * Copyright 2019 Google LLC
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SkColorFilterPriv_DEFINED
- #define SkColorFilterPriv_DEFINED
- #ifdef SK_SUPPORT_GPU
- #include "include/core/SkColorFilter.h"
- #include "include/core/SkString.h"
- using SkRuntimeColorFilterFn = void(*)(float[4], const void*);
- class SK_API SkRuntimeColorFilterFactory {
- public:
- /**
- * Creates a factory which creates runtime color filters. The SkSL must define a 'main' function
- * with the signature 'void main(inout half4 color)'. The SkSL will be used when rendering in
- * GPU mode, with the 'color' parameter providing the current value on input and receiving the
- * new color value on exit. In software mode, the cpuFunc will be called with the current color
- * and a pointer to the 'inputs' bytes. cpuFunc may be left null, in which case only GPU
- * rendering is supported.
- */
- SkRuntimeColorFilterFactory(SkString sksl, SkRuntimeColorFilterFn cpuFunc = nullptr);
- /**
- * Creates a color filter instance with the specified inputs. In GPU rendering, the inputs are
- * used to populate the values of 'in' variables. For instance, given the color filter:
- * in uniform float x;
- * in uniform float y;
- * void main(inout half4 color) {
- * ...
- * }
- * The values of the x and y inputs come from the 'inputs' SkData, which are laid out as a
- * struct with two float elements. If there are no inputs, the 'inputs' parameter may be null.
- *
- * In CPU rendering, a pointer to the input bytes is passed as the second parameter to
- * 'cpuFunc'.
- */
- sk_sp<SkColorFilter> make(sk_sp<SkData> inputs);
- private:
- int fIndex;
- SkString fSkSL;
- SkRuntimeColorFilterFn fCpuFunc;
- };
- #endif // SK_SUPPORT_GPU
- #endif // SkColorFilterPriv_DEFINED
|