无法对从C中具有SDL 2 lib的字体获得的纹理设置混合模式

无法对从C中具有SDL 2 lib的字体获得的纹理设置混合模式,c,fonts,sdl,sdl-2,alphablending,C,Fonts,Sdl,Sdl 2,Alphablending,我可以使用SDL 2功能在纹理上设置混合模式: SDL_SetTextureBlendMode(纹理,SDL_BLENDMODE_混合) 但是,这不适用于从字体派生的纹理: SDL_Surface * fontSurface; SDL_Texture * fontTexture; fontSurface = TTF_RenderText_Blended(displayFont, text, color); //SDL_SetSurfaceBlendMode(fontSurface, SDL_BL

我可以使用SDL 2功能在纹理上设置混合模式:

SDL_SetTextureBlendMode(纹理,SDL_BLENDMODE_混合)

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

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));

字体表面是否在纹理之前设置了混合模式没有区别。打印输出显示混合设置函数返回0表示成功,但混合模式为0表示
SDL\u BLENDMODE\u NONE
,而不是1表示
SDL\u BLENDMODE\u blend
。使用
TTF\u RenderText\u Shaded
(使用附加的背景色参数)或
TTF\u RenderText\u Solid
创建纹理也不成功。是否有可能在从字体派生的纹理上设置混合模式?

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

int bmr = SDL_SetTextureAlphaMod(fontTexture, color.a);
问题解决了,我希望这能帮助其他面临同样问题的人