描画テキストにぼかし効果を追加したい。と を使用SDL2
しSDL_TTF
ます。
SDL_Surface
透明性があります。
シェーダーなしでそれを行う方法は?
以下は私が使用するアルゴリズムです。これは単純な平均です。
Uint32 p;
Uint8 r, g, b, a;
int x, y, px, py;
int blur_sum_factor;
for (y = 0; y < sfc_blur->h; y++)
{
for (x = 0; x < sfc_blur->w; x++)
{
double rd = 0.0, gd = 0.0, bd = 0.0, ad = 0.0;
blur_sum_factor = 0;
for (py = -blur_size; py <= blur_size; py++)
{
for (px = -blur_size; px <= blur_size; px++)
{
int x1 = x + px;
int y1 = y + py;
if (x1 < 0 || x1 >= sfc_blur->w || y1 < 0 || y1 >= sfc_blur->h)
continue;
p = get_pixel32(sfc_blur, x1, y1);
SDL_GetRGBA(p, sfc_blur->format, &r, &g, &b, &a);
rd += r;
gd += g;
bd += b;
blur_sum_factor++;
ad += a;
}
}
rd /= blur_sum_factor;
gd /= blur_sum_factor;
bd /= blur_sum_factor;
ad /= blur_sum_factor;
r = (Uint8)rd;
g = (Uint8)gd;
b = (Uint8)bd;
a = (Uint8)ad;
p = SDL_MapRGBA(sfc_blur_target->format, r, g, b, a);
put_pixel32(sfc_blur_target, x, y, p);
}
}
その結果、テキストの周りに暗い領域があります。
(見やすいように赤い背景 - 透明度のあるテキストにのみぼかしが適用されます。)
psシェーダーを使用したことがありません。そして、このタスクでは、シェーダーを使用できません (たとえ使用したかったとしても)。