我正在尝试为 awesomium 制作一个自定义 Surface 类,以将其传送到常规 SDL 窗口。Awesomium 声称他们的像素格式是 BGRA ( http://awesomium.com/docs/1_7_0/cpp_api/class_awesomium_1_1_surface.html),SDL为我提供了一个 ARGB 窗口。
virtual void Paint( unsigned char* src_buffer, int src_row_span, const Awesomium::Rect& src_rect, const Awesomium::Rect& dest_rect )
{
SDL_LockSurface(screen);
for(int x=0;x<src_rect.width;x++)
for(int y=0;y<src_rect.height;y++)
{
unsigned char *s=src_buffer+src_rect.x*4+src_rect.y*src_row_span;
Uint32 *d=(Uint32*)screen->pixels+(x+dest_rect.x)+(y+dest_rect.y)*screen->w;
Uint32 sp=*((Uint32*)s);
int r=(sp&0xFF00)>>8;
int g=(sp&0xFF0000)>>16;
int b=(sp&0xFF000000)>>24;
Uint32 dp=0xFF000000|(r<<16)|(g<<8)|(b);
*d=dp;
if(x==491 && y==235)
printf("");
}
SDL_UnlockSurface(screen);
SDL_UpdateRect(screen,dest_rect.x,dest_rect.y,dest_rect.width,dest_rect.height);
}
但是,当我在 Google 的主页上运行此程序时,我得到一个带有两个白色矩形的蓝屏,一次与 google 的搜索框匹配,另一个在它下方的 google.com 上只有空白区域。