这是我的代码:

template<typename G, typename N> void load_xbm(G* g,N w, N h,unsigned char* data)
{
    Uint32 rmask, gmask, bmask, amask;

        /* SDL interprets each pixel as a 32-bit number, so our masks must depend
           on the endianness (byte order) of the machine */
    #if SDL_BYTEORDER == SDL_BIG_ENDIAN
        rmask = 0xff000000;
        gmask = 0x00ff0000;
        bmask = 0x0000ff00;
        amask = 0x000000ff;
    #else
        rmask = 0x000000ff;
        gmask = 0x0000ff00;
        bmask = 0x00ff0000;
        amask = 0xff000000;
    #endif

    SDL_Surface* s = g->backend_surface();
    s = SDL_CreateRGBSurface(SDL_HWSURFACE,w,h,16,rmask,gmask,bmask,amask);
    g->backend_surface( s );

    for (N x = 0; x < w; x++)
    {
        for(N y = 0; y < h; y++)
        {
            g->put_pixel(x,y,data[y*x]);
        }
    }

    SDL_Flip( s );
}


g->backend_surface()只是在SDL_Surface*中返回一个G成员。
w是xbm位图的宽度,h是高度,dataunsigned char的数组,其中包含每个像素的颜色。

g->put_pixel()SDL docsputpixel方法的简单包装,使用backend_surface作为示例putpixel函数的第一个参数。

现在,当我执行它时,程序会以0x3退出。通过调试代码,我发现它在调用putpixel方法时退出,请注意putpixel方法在其他地方工作正常。我还发现,只有当xyputpixel参数大于Surface的原始宽度和高度时,它才会退出,但是我没有使用SDL_CreateRGBSurface将表面调整为所需的宽度和高度?

最佳答案

在这里野外猜测...

SDL tutorial example(第2.5点)表示在调用此函数之前必须锁定Surface。是你的?

关于c++ - 在SDL中编码X位图加载器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9016121/

10-12 20:39