目次 - API(機能別) - 2Dレンダリング - SDL_ComposeCustomBlendMode

# SDL_ComposeCustomBlendMode

レンダーのカスタムブレンドモードを生成する

## 構文

`SDL_BlendMode SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor, SDL_BlendFactor dstColorFactor, SDL_BlendOperation colorOperation, SDL_BlendFactor srcAlphaFactor, SDL_BlendFactor dstAlphaFactor, SDL_BlendOperation alphaOperation)`

## 引数

srcColorFactor | 描画元のピクセルの赤, 緑, 青成分に乗算されるSDL_BlendFactor
dstColorFactor | 描画先のピクセルの赤, 緑, 青成分に乗算されるSDL_BlendFactor
colorOperation | 描画元と描画先のピクセルの赤, 緑, 青成分の合成に使われるSDL_BlendOperation
srcAlphaFactor | 描画元のピクセルのα成分に乗算されるSDL_BlendFactor
dstAlphaFactor | 描画先のピクセルのα成分に乗算されるSDL_BlendFactor
alphaOperation | 描画元と描画先のピクセルのα成分の合成に使われるSDL_BlendOperation

## 戻り値

選択した係数と演算を適用したSDL_BlendModeを戻す.

## 詳細

SDL_SetRenderDrawBlendMode()とSDL_SetTextureBlendMode()は, レンダラーが対応していればこの関数が戻すSDL_BlendModeを受け付ける.

ブレンドモードは, 描画するピクセル(元)が, レンダーターゲットのピクセル(先)とどのように合成されるかを決める. 最初に描画元と描画先のピクセルの各色成分にブレンド係数が乗算される. 次にその2つの積をブレンド演算に従って計算し, 結果をレンダーターゲットに書き込む.

擬似コードで表すと次のようになる: ``

    先RGB = colorOperation(元RGB * srcColorFactor, 先RGB * dstColorFactor)
    先α = alphaOperation(元α * srcAlphaFactor, 先α * dstAlphaFactor)

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 2.0.6における各レンダラーのカスタムブレンドモードの対応を示している. 全てのレンダラーはSDL_BlendMode列挙体の4つのブレンドモードには対応している.

direct3d | SDL_BLENDOPERATION_ADD演算で全ての係数に対応
direct3d11 | 全ての係数と演算に対応. しかし, 一部の係数はSDL_BLENDOPERATION_MINIMUM演算またはSDL_BLENDOPERATION_MAXIMUM演算を指定すると予期しない結果になる
opengl | SDL_BLENDOPERATION_ADD演算で全ての係数に対応. OpenGL バージョン1.1, 1.2, 1.3はSDL 2.0.6では正常に動作しない
opengles | SDL_BLENDOPERATION_ADD演算で全ての係数に対応. 色とα係数は同じである必要がある. OpenGL ES 1 固有の特性: SDL_BLENDOPERATION_SUBTRACT演算とSDL_BLENDOPERATION_REV_SUBTRACT演算に対応しているかもしれない. 色とα成分の演算はそれぞれ異なってもよいかもしれない. 色とα成分の係数は異なってもよいかもしれない
opengles2 | SDL_BLENDOPERATION_ADD, SDL_BLENDOPERATION_SUBTRACT, SDL_BLENDOPERATION_REV_SUBTRACT演算で全ての係数に対応
psp | カスタムブレンドモードには対応していない
software | カスタムブレンドモードには対応していない

一部のレンダラーは, デフォルトのレンダーターゲットではα成分を提供しない. この場合, SDL_BLENDFACTOR_DST_ALPHA係数とSDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA係数は効果がない.

## バージョン

SDL 2.0.6以降

## 関連項目(関数)

SDL_SetRenderDrawBlendMode
SDL_GetRenderDrawBlendMode
SDL_SetTextureBlendMode
SDL_GetTextureBlendMode

## SDL Wikiへのリンク

SDL_ComposeCustomBlendMode - SDL Wiki