SDL_BlendMode SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor, SDL_BlendFactor dstColorFactor, SDL_BlendOperation colorOperation, SDL_BlendFactor srcAlphaFactor, SDL_BlendFactor dstAlphaFactor, SDL_BlendOperation alphaOperation);
| SDL_BlendFactor | srcColorFactor | 元ピクセルの赤, 緑, 青要素に適用されるSDL_BlendFactor |
| SDL_BlendFactor | dstColorFactor | 先ピクセルの赤, 緑, 青要素に適用されるSDL_BlendFactor |
| SDL_BlendOperation | colorOperation | 元ピクセルと先ピクセルの赤, 緑, 青要素のブレンドに使われるSDL_BlendOperation |
| SDL_BlendFactor | srcAlphaFactor | 元ピクセルのα要素に適用されるSDL_BlendFactor |
| SDL_BlendFactor | dstAlphaFactor | 先ピクセルのα要素に適用されるSDL_BlendFactor |
| SDL_BlendOperation | alphaOperation | 元ピクセルと先ピクセルのα要素のブレンドに使われるSDL_BlendOperation |
レンダラが対応していれば, この関数が戻したSDL_BlendModeをSDL_SetRenderDrawBlendModeとSDL_SetTextureBlendModeで使用することができる.
ブレンドモードは, 描画するピクセル(元)とレンダーターゲットのピクセル(先)のブレンドの方法を決めるものである. 初めに, 元と先のピクセルの要素とブレンド係数を積算する. 次に, その2つの結果をブレンド操作に渡し, レンダーターゲットに書き込む結果を求める.
疑似コードで表すと次の様になる:
dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor);
dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor);
(srcRGB = 描画元の色要素, srcColorFactor = 描画元の色ブレンド係数, dstRGB = 描画先の色要素, dstColorFactor = 描画先の色ブレンド係数, colorOperation() = 色ブレンド操作)
(srcA = 描画元のα値, srcAlphaFactor = 描画元のαブレンド係数, dstA = 描画先のα値, dstAlphaFactor = 描画先のαブレンド係数, alphaOperation() = αブレンド操作)
関数のcolorOperation(src, dst)とalphaOperation(src, dst)は次の内の1つを戻す:
src + dst
src - dst
dst - src
min(src, dst)
max(src, dst)
赤, 緑, 青要素は, それぞれSDL_BlendFactorの1番目, 2番目, 3番目と積算される. 4番目の値は使用しない.
α値はSDL_BlendFactorの4番目と積算される. 他の値はα値の計算では使用しない.
生成したブレンドモードに対応しているかはレンダラによる. 特定のSDL_BlendModeが対応しているかをチェックするには, レンダラを生成してSDL_SetRenderDrawBlendModeまたはSDL_SetTextureBlendModeに渡すこと. そのブレンドモードに対応していない場合はエラーを戻す.
次の一覧は, それぞれのレンダラのカスタムブレンドモードの対応の説明である. 全てのレンダラは, SDL_BlendMode列挙体のブレンドモードに対応している.
一部のレンダラはデフォルトレンダーターゲットに対してα要素を提供しない. この場合, ブレンド係数SDL_BLENDFACTOR_DST_ALPHAとSDL_BLENDFACTOR_ONE_MINUS_DST_ALPHAは効果がない.
この関数はどのスレッドからも安全に呼べる.