From 494a4d05f902b4af4ad01edc2c96da122f594cd2 Mon Sep 17 00:00:00 2001 From: Nomango Date: Sun, 24 Sep 2023 16:22:01 +0800 Subject: [PATCH] feat: add render context blend mode --- src/kiwano/render/DirectX/RenderContextImpl.cpp | 6 ++++++ src/kiwano/render/DirectX/RenderContextImpl.h | 2 ++ src/kiwano/render/RenderContext.h | 15 +++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/src/kiwano/render/DirectX/RenderContextImpl.cpp b/src/kiwano/render/DirectX/RenderContextImpl.cpp index 28d91082..56164665 100644 --- a/src/kiwano/render/DirectX/RenderContextImpl.cpp +++ b/src/kiwano/render/DirectX/RenderContextImpl.cpp @@ -429,6 +429,12 @@ void RenderContextImpl::SetTransform(const Matrix3x2& matrix) } } +void RenderContextImpl::SetBlendMode(BlendMode blend) +{ + KGE_ASSERT(render_ctx_ && "Render target has not been initialized!"); + render_ctx_->SetPrimitiveBlend(D2D1_PRIMITIVE_BLEND(blend)); +} + void RenderContextImpl::SetAntialiasMode(bool enabled) { KGE_ASSERT(render_ctx_ && "Render target has not been initialized!"); diff --git a/src/kiwano/render/DirectX/RenderContextImpl.h b/src/kiwano/render/DirectX/RenderContextImpl.h index d09b73a1..566c3f25 100644 --- a/src/kiwano/render/DirectX/RenderContextImpl.h +++ b/src/kiwano/render/DirectX/RenderContextImpl.h @@ -87,6 +87,8 @@ public: void SetTransform(const Matrix3x2& matrix) override; + void SetBlendMode(BlendMode blend) override; + void SetAntialiasMode(bool enabled) override; void SetTextAntialiasMode(TextAntialiasMode mode) override; diff --git a/src/kiwano/render/RenderContext.h b/src/kiwano/render/RenderContext.h index 046ed54c..3f4e1a8f 100644 --- a/src/kiwano/render/RenderContext.h +++ b/src/kiwano/render/RenderContext.h @@ -46,6 +46,17 @@ enum class TextAntialiasMode None ///< 不启用抗锯齿 }; +/// \~chinese +/// @brief 混合模式 +enum class BlendMode +{ + SourceOver = 0, + Copy = 1, + Min = 2, + Add = 3, + Max = 4, +}; + /// \~chinese /// @brief 渲染上下文 /// @details 渲染上下文将完成基础图元的绘制,并将绘制结果输出到特定的平面中 @@ -204,6 +215,10 @@ public: /// @brief 设置当前使用的线条样式 virtual void SetCurrentStrokeStyle(StrokeStylePtr stroke); + /// \~chinese + /// @brief 设置混合模式 + virtual void SetBlendMode(BlendMode blend) = 0; + /// \~chinese /// @brief 设置抗锯齿模式 virtual void SetAntialiasMode(bool enabled) = 0;