我通常可以使用 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);
问题解决了,我希望这有助于其他面临相同问题的人。