无法在从 C 中使用 SDL 2 库的字体获得的纹理上设置混合模式

Cannot set blend mode on texture obtained from a font with SDL 2 lib in C

我通常可以使用 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 %d\n", bmr);
SDL_BlendMode bm;
printf("bm %d\n", SDL_GetTextureBlendMode(fontTexture, &bm));

字体表面是否在纹理之前设置混合模式没有区别。打印输出显示混合设置函数 returns 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);

问题已解决,希望对遇到同样问题的其他人有所帮助。