无法在从 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);
问题已解决,希望对遇到同样问题的其他人有所帮助。
我通常可以使用 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);
问题已解决,希望对遇到同样问题的其他人有所帮助。