2

awesomium が通常の SDL ウィンドウにブリットするためのカスタム Surface クラスを作成しようとしています。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 のホームページで実行すると、2 つの白い四角形が表示された青い画面が表示されます。1 つは Google の検索ボックスと一致し、もう 1 つはその下にある google.com の空白スペースのみです。

4

0 に答える 0