通过SDL设置帧缓冲区alpha值

时间:2015-04-30 08:50:37

标签: sdl embedded-linux

我正在研究嵌入式Linux系统上的图形应用程序。该应用程序使用SDL,它使用/ dev / fb0。该设备具有4字节像素格式,分别用于红色,绿色,蓝色和alpha。 alpha值用于将/ dev / fb0与运动视频平面混合。

/ dev / fb0 alpha值在我直接写入/ dev / fb0时的指定工作。

不幸的是,当我调用SDL函数时,/ dev / fb0中的alpha值设置为零。 (例如,调用boxRGBA设置矩形白色会导致矩形中的每个帧缓冲像素设置为0xFFFFFF00。)

有没有办法让SDL将/ dev / fb0中的alpha值设置为我想要的值?

有很多关于alpha的SDL文档,但这似乎与SDL操作有关,而不是最终帧缓冲输出中的alpha值。

编辑 fbset输出:

mode "1360x768-60"
    # D: 85.507 MHz, H: 47.716 kHz, V: 60.020 Hz
    geometry 1360 768 1360 768 32
    timings 11695 256 64 18 3 112 6
    rgba 8/16,8/8,8/0,8/24
endmode

编辑 SDL初始化和测试矩形填充(注意这是SDL 1.2)

SDL_Init(SDL_INIT_VIDEO);
m_screen = SDL_SetVideoMode(0, 0, 0, SDL_FULLSCREEN | SDL_HWSURFACE);
SDL_ShowCursor(SDL_DISABLE);
SDL_FillRect(m_screen, NULL, SDL_MapRGBA(m_screen->format, 0x80, 0x80, 0x80, 0xFF));
SDL_Flip(m_screen);

编辑调试显示SDL_SetVideoMode()返回的SDL_Surface有一个没有alpha的SDL_PixelFormat,即Amask为0,Ashift为0,Aloss为8。

编辑在SDL_Surface上显式设置alpha通道可以得到正确的结果。但代码看起来并不令人满意:我设置的字段仅供内部使用:

m_screen = SDL_SetVideoMode(0, 0, 0, SDL_FULLSCREEN | SDL_HWSURFACE);
m_screen->format->Amask = 0xFF000000;
m_screen->format->Ashift = 24;
m_screen->format->Aloss = 0;

0 个答案:

没有答案