以下代码用于在黑色背景上显示绿色方块。它会执行,但绿色方块不会显示。但是,如果我将SDL_DisplayFormatAlpha
更改为SDL_DisplayFormat
,则会正确呈现正方形。
那我不明白什么?在我看来,我正在使用alpha蒙版创建*surface
,并且我使用SDL_MapRGBA
来映射我的绿色,因此使用SDL_DisplayFormatAlpha
也是一致的。
(为清楚起见,我删除了错误检查,但在此示例中没有任何SDL API调用失败。)
#include <SDL.h>
int main(int argc, const char *argv[])
{
SDL_Init( SDL_INIT_EVERYTHING );
SDL_Surface *screen = SDL_SetVideoMode(
640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF
);
SDL_Surface *temp = SDL_CreateRGBSurface(
SDL_HWSURFACE, 100, 100, 32, 0, 0, 0,
( SDL_BYTEORDER == SDL_BIG_ENDIAN ? 0x000000ff : 0xff000000 )
);
SDL_Surface *surface = SDL_DisplayFormatAlpha( temp );
SDL_FreeSurface( temp );
SDL_FillRect(
surface, &surface->clip_rect, SDL_MapRGBA(
screen->format, 0x00, 0xff, 0x00, 0xff
)
);
SDL_Rect r;
r.x = 50;
r.y = 50;
SDL_BlitSurface( surface, NULL, screen, &r );
SDL_Flip( screen );
SDL_Delay( 1000 );
SDL_Quit();
return 0;
}
答案 0 :(得分:0)
我使用了错误的SDL_MapRGBA格式。应该是
SDL_FillRect(
surface, NULL, SDL_MapRGBA(
surface->format, 0xff, 0xff, 0x00, 0xff
)
);
(surface->format
而不是screen->format
。)我认为这两者是等价的。他们在致电SDL_DisplayFormat()
后致电SDL_DisplayFormatAlpha()
,但不。屏幕表面没有alpha通道,因此两者之间的格式不同。
(从gamedev.stackexchange.com交叉发布)