mirror of
https://github.com/thorvg/thorvg.git
synced 2025-07-23 14:48:24 +00:00
api: Add Composition blend mode
Some checks are pending
Android / build_x86_64 (push) Waiting to run
Android / build_aarch64 (push) Waiting to run
iOS / build_x86_64 (push) Waiting to run
iOS / build_arm64 (push) Waiting to run
macOS / build (push) Waiting to run
macOS / compact_test (push) Waiting to run
macOS / unit_test (push) Waiting to run
Ubuntu / build (push) Waiting to run
Ubuntu / compact_test (push) Waiting to run
Ubuntu / unit_test (push) Waiting to run
Windows / build (push) Waiting to run
Windows / compact_test (push) Waiting to run
Windows / unit_test (push) Waiting to run
Some checks are pending
Android / build_x86_64 (push) Waiting to run
Android / build_aarch64 (push) Waiting to run
iOS / build_x86_64 (push) Waiting to run
iOS / build_arm64 (push) Waiting to run
macOS / build (push) Waiting to run
macOS / compact_test (push) Waiting to run
macOS / unit_test (push) Waiting to run
Ubuntu / build (push) Waiting to run
Ubuntu / compact_test (push) Waiting to run
Ubuntu / unit_test (push) Waiting to run
Windows / build (push) Waiting to run
Windows / compact_test (push) Waiting to run
Windows / unit_test (push) Waiting to run
The composition mode enables intermediate blending. When a scene uses Composition mode, it generates an intermediate buffer to render the scene image first. This image can then be blended with the canvas afterward. Please avoid to use this, unless you really need to composite the precomposite scene. This feature is relatively expensive at performance. C++ API: +BlendMethod::Composition C API: +Tvg_Blend_Method::TVG_BLEND_METHOD_COMPOSITION
This commit is contained in:
parent
3ca2c0edfd
commit
930de44359
4 changed files with 11 additions and 5 deletions
|
@ -214,7 +214,8 @@ enum class BlendMethod : uint8_t
|
|||
Color, ///< Reserved. Not supported.
|
||||
Luminosity, ///< Reserved. Not supported.
|
||||
Add, ///< Simply adds pixel values of one layer with the other. (S + D)
|
||||
HardMix ///< Reserved. Not supported.
|
||||
HardMix, ///< Reserved. Not supported.
|
||||
Composition = 255 ///< Used for intermediate composition. @since 1.0
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -164,7 +164,8 @@ typedef enum {
|
|||
TVG_BLEND_METHOD_COLOR, ///< Reserved. Not supported.
|
||||
TVG_BLEND_METHOD_LUMINOSITY, ///< Reserved. Not supported.
|
||||
TVG_BLEND_METHOD_ADD, ///< Simply adds pixel values of one layer with the other. (S + D)
|
||||
TVG_BLEND_METHOD_HARDMIX ///< Reserved. Not supported.
|
||||
TVG_BLEND_METHOD_HARDMIX, ///< Reserved. Not supported.
|
||||
TVG_BLEND_METHOD_COMPOSITION = 255 ///< Used for intermediate composition. @since 1.0
|
||||
} Tvg_Blend_Method;
|
||||
|
||||
|
||||
|
|
|
@ -528,6 +528,7 @@ bool SwRenderer::blend(BlendMethod method)
|
|||
|
||||
switch (method) {
|
||||
case BlendMethod::Normal:
|
||||
case BlendMethod::Composition:
|
||||
surface->blender = nullptr;
|
||||
break;
|
||||
case BlendMethod::Multiply:
|
||||
|
|
|
@ -429,11 +429,14 @@ uint8_t Paint::opacity() const noexcept
|
|||
|
||||
Result Paint::blend(BlendMethod method) noexcept
|
||||
{
|
||||
if (method > BlendMethod::HardMix) return Result::InvalidArguments;
|
||||
//TODO: Remove later
|
||||
if (method == BlendMethod::Hue || method == BlendMethod::Saturation || method == BlendMethod::Color || method == BlendMethod::Luminosity || method == BlendMethod::HardMix) return Result::NonSupport;
|
||||
pImpl->blend(method);
|
||||
return Result::Success;
|
||||
|
||||
if (method == BlendMethod::Composition || method <= BlendMethod::HardMix) {
|
||||
pImpl->blend(method);
|
||||
return Result::Success;
|
||||
}
|
||||
return Result::InvalidArguments;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue