#include "SDL.h"
SDL_Surface *SDL_CreateRGBSurface(Uint32 flags, int width, int height, int depth, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);
分配一個空平面(必須在調用SDL_SetVideoMode之後調用)。
若depth為8位,則為平面分配一個空的調色板;否則,以給定的[RGBA]mask創建符合SDL_PixelFormat格式(參見SDL_PixelFormat)的"組合像素"(譯注:像素在存儲器內的存儲方式有兩種。一種是組合像素法,即像素的所有位都一起放在存儲器的同一頁面;另一種是位平面法,即像素的各個位分別存放在存儲器的各分頁內)。flags指定所要創建的平面類型,它是以下可能值按位或的組合:
若指定了alpha通道(亦即,Amask不為0),則自動設置SDL_SRCALPHA標記。平面創建之後,你可以通過調用SDL_SetAlpha來刪除此標記。
/* 像OpenGL紋理那樣,以R、G、B、A的像素字節序列創建一個32位平面 */ SDL_Surface *surface; Uint32 rmask, gmask, bmask, amask; /* SDL將每個像素解釋為32位數。因此,我們的掩碼必須依賴于機器字節序 */ #if SDL_BYTEORDER == SDL_BIG_ENDIAN rmask = 0xff000000; gmask = 0x00ff0000; bmask = 0x0000ff00; amask = 0x000000ff; #else rmask = 0x000000ff; gmask = 0x0000ff00; bmask = 0x00ff0000; amask = 0xff000000; #endif surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32, rmask, gmask, bmask, amask); if(surface == NULL) { fprintf(stderr, "CreateRGBSurface failed: %s", SDL_GetError()); exit(1); }
SDL_CreateRGBSurfaceFrom、SDL_FreeSurface、SDL_SetVideoMode、SDL_LockSurface、SDL_PixelFormat、SDL_Surface、SDL_SetAlpha、SDL_SetColorKey
2010年2月23日