57 lines
1.6 KiB
C
57 lines
1.6 KiB
C
|
#pragma once
|
|||
|
|
|||
|
#include<hgl/type/DataType.h>
|
|||
|
|
|||
|
namespace hgl
|
|||
|
{
|
|||
|
namespace bitmap
|
|||
|
{
|
|||
|
enum class BlendMode
|
|||
|
{
|
|||
|
NoBlend, ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Alpha, ///<Alpha<68><61><EFBFBD><EFBFBD>
|
|||
|
Add, ///<<3C>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Sub, ///<<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
};//enum class BlendMode
|
|||
|
|
|||
|
template<typename T> struct BlendColor
|
|||
|
{
|
|||
|
BlendMode mode=BlendMode::NoBlend;
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
virtual const T &BlendNoBlend(const T &src,const T &dst,const float alpha)
|
|||
|
{
|
|||
|
return src;
|
|||
|
}
|
|||
|
|
|||
|
virtual const T &BlendAlpha(const T &src,const T &dst,const float alpha)
|
|||
|
{
|
|||
|
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<typename T> class BlendColor
|
|||
|
}//namespace bitmap
|
|||
|
}//namespace hgl
|