diff --git a/inc/hgl/2d/Blend.h b/inc/hgl/2d/Blend.h index eb6b5fe..3b16ad0 100644 --- a/inc/hgl/2d/Blend.h +++ b/inc/hgl/2d/Blend.h @@ -6,52 +6,17 @@ namespace hgl { namespace bitmap { - enum class BlendMode - { - NoBlend, ///<不混合 - Alpha, /// struct BlendColor { - BlendMode mode=BlendMode::NoBlend; - - public: - - virtual const T &BlendNoBlend(const T &src,const T &dst,const float alpha) + virtual const T operator()(const T &src,const T &)const { return src; } - virtual const T &BlendAlpha(const T &src,const T &dst,const float alpha) + virtual const T operator()(const T &src,const T &,const float &)const { - return src*alpha+dst*(1-alpha); - } - - virtual const T &BlendAdd(const T &src,const T &dst,const float alpha) - { - return src*alpha+dst; - } - - virtual const T &BlendSub(const T &src,const T &dst,const float alpha) - { - return src*alpha-dst; - } - - virtual const T &Blend(const T &src,const T &dst,const float alpha) - { - switch(mode) - { - case BlendMode::NoBlend: return BlendNoBlend(src,dst,alpha); - case BlendMode::Alpha: return BlendAlpha(src,dst,alpha); - case BlendMode::Add: return BlendAdd(src,dst,alpha); - case BlendMode::Sub: return BlendSub(src,dst,alpha); - } - return src; } - };//template class BlendColor + };//template struct BlendColor }//namespace bitmap }//namespace hgl \ No newline at end of file diff --git a/inc/hgl/2d/DrawGeometry.h b/inc/hgl/2d/DrawGeometry.h index 84aa1cd..0487d22 100644 --- a/inc/hgl/2d/DrawGeometry.h +++ b/inc/hgl/2d/DrawGeometry.h @@ -21,6 +21,7 @@ namespace hgl T draw_color; float alpha; + BlendColor no_blend; BlendColor *blend; public: @@ -28,8 +29,9 @@ namespace hgl DrawGeometry(FormatBitmap *fb) { bitmap=fb; - draw_color=0; + hgl_zero(draw_color); alpha=1; + blend=&no_blend; } virtual ~DrawGeometry()=default; @@ -44,14 +46,9 @@ namespace hgl blend=bc; } - virtual void SetBlend(const BlendMode &mode) - { - blend->mode=mode; - } - void CloseBlend() { - blend->mode=BlendMode.NoBlend; + blend=&no_blend; } void SetAlpha(const float &a) @@ -80,7 +77,7 @@ namespace hgl if(!p)return(false); - *p=blend->Blend(draw_color,*p,alpha); + *p=(*blend)(draw_color,*p,alpha); return(true); } @@ -102,7 +99,7 @@ namespace hgl T *p=bitmap->GetData(x,y); for(int i=0;iBlend(draw_color,*p,alpha); + *p++=(*blend)(draw_color,*p,alpha); return(true); } @@ -129,7 +126,7 @@ namespace hgl for(int y=t;yBlend(draw_color,*p,alpha); + *p++=(*blend)Blend(draw_color,*p,alpha); p+=width-w; } @@ -156,7 +153,7 @@ namespace hgl for(int i=0;iBlend(draw_color,*p,alpha); + *p=(*blend)Blend(draw_color,*p,alpha); p+=line_bytes; }