SDL SetRenderDrawColor透明度失效问题求助
SDL_SetRenderDrawColor透明度不生效的解决办法
你遇到的问题是调用SDL_SetRenderDrawColor设置alpha参数(比如30、0)后,绘制的矩形始终完全不透明——这是因为SDL渲染器默认关闭了混合功能,alpha通道不会被处理。
解决步骤:
在绘制带透明度的图形前,调用SDL_SetRenderDrawBlendMode开启混合模式,指定SDL_BLENDMODE_BLEND即可让alpha值生效。
修改后的代码示例:
void display_end_menu(SDL_Renderer *renderer) { // 开启混合模式,让alpha通道生效 SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); if (SDL_SetRenderDrawColor(renderer, 0, 255, 0, 30) != 0) { return_error("Impossible de modifier la couleur du render"); SDL_Quit(); } SDL_Rect shadow_screen; shadow_screen.w = 1280; shadow_screen.h = 720; shadow_screen.x = (SCREEN_WIDTH - shadow_screen.w)/2; shadow_screen.y = (SCREEN_HEIGHT - shadow_screen.h)/2; if (SDL_RenderFillRect(renderer, &shadow_screen) != 0) { return_error("Impossible de dessiner le rectangle dans le render"); SDL_Quit(); } if (SDL_SetRenderDrawColor(renderer, 255, 255, 255, 30) != 0) { return_error("Impossible de modifier la couleur du render"); SDL_Quit(); } SDL_Rect quit_button; quit_button.w = 200; quit_button.h = 50; quit_button.x = (SCREEN_WIDTH - quit_button.w)/2; quit_button.y = (SCREEN_HEIGHT - quit_button.h)/2; if (SDL_RenderFillRect(renderer, &quit_button) != 0) { return_error("Impossible de dessiner le rectangle dans le render"); SDL_Quit(); } }
补充说明:
SDL_BLENDMODE_BLEND是最常用的混合模式,它会将当前绘制颜色的alpha值与目标区域的像素颜色进行混合,实现自然的半透明效果。- 如果后续需要绘制不透明图形,可以调用
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE)关闭混合,提升渲染效率。
内容的提问来源于stack exchange,提问作者NoCodeGamer
相关产品推荐
相关产品推荐

