无法在从 C 语言中具有 SDL 2 lib 的字体获取的纹理上设置混合模式



我通常可以使用 SDL 2 函数在纹理上设置混合模式:

SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);

但是,这不适用于从字体派生的纹理:

SDL_Surface * fontSurface;
SDL_Texture * fontTexture;
fontSurface = TTF_RenderText_Blended(displayFont, text, color);
//SDL_SetSurfaceBlendMode(fontSurface, SDL_BLENDMODE_BLEND);
fontTexture = SDL_CreateTextureFromSurface(renderer, fontSurface);
int bmr = SDL_SetTextureBlendMode(fontTexture, SDL_BLENDMODE_BLEND);
printf("bmr %dn", bmr);
SDL_BlendMode bm;
printf("bm %dn", SDL_GetTextureBlendMode(fontTexture, &bm));

字体表面是否在纹理之前设置了混合模式没有区别。打印输出显示混合设置函数返回 0 表示成功,但混合模式为 0 表示SDL_BLENDMODE_NONE,而不是 1 表示SDL_BLENDMODE_BLEND。使用TTF_RenderText_Shaded(使用附加背景颜色参数(或实际上TTF_RenderText_Solid创建纹理也不成功。是否可以在从字体派生的纹理上设置混合模式?

进一步的调查得出答案。从SDL_ttf文档中的示例代码来看,预计只有 3 个成员的 SDL_Color 值,缺少 4 个成员结构的 Alpha。忽略 Alpha 时,不会设置混合模式。另一个功能允许 Alpha 用于混合:

int bmr = SDL_SetTextureAlphaMod(fontTexture, color.a);

问题解决了,我希望这有助于其他面临相同问题的人。

最新更新