Allocate a new RGB surface.
SDL_Surface* SDL_CreateRGBSurfaceint width, int height, int depth,
(Uint32 flags, Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);
flags |
the flags are unused and should be set to 0 |
width |
the width of the surface |
height |
the height of the surface |
depth |
the depth of the surface in bits |
Rmask |
the red mask for the pixels |
Gmask |
the green mask for the pixels |
Bmask |
the blue mask for the pixels |
Amask |
the alpha mask for the pixels |
Returns the new SDL_Surface structure that is created or NULL if it fails; call SDL_GetError() for more information.
If depth
is 4 or 8 bits, an empty palette is allocated for the surface. If depth
is greater than 8 bits, the pixel format is set using the [RGBA]mask parameters.
The [RGBA]mask parameters are the bitmasks used to extract that color from a pixel. For instance, Rmask
being 0xFF000000 means the red data is stored in the most significant byte. Using zeros for the RGB masks sets a default value, based on the depth. For example:
++0,w,h,32,0,0,0,0); [[SDL_CreateRGBSurface]](
However, using zero for the Amask results in an Amask of 0.
By default surfaces with an alpha mask are set up for blending as with:
++ [[SDL_SetSurfaceBlendMode]](surface, [[SDL_BLENDMODE_BLEND]])
You can change this by calling SDL_SetSurfaceBlendMode() and selecting a different blendMode
.
/* Create a 32-bit surface with the bytes of each pixel in R,G,B,A order,
as expected by OpenGL for textures */
SDL_Surface *surface;
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
0xff000000;
rmask = 0x00ff0000;
gmask = 0x0000ff00;
bmask = 0x000000ff;
amask = #else
0x000000ff;
rmask = 0x0000ff00;
gmask = 0x00ff0000;
bmask = 0xff000000;
amask = #endif
0, width, height, 32,
surface = SDL_CreateRGBSurface(
rmask, gmask, bmask, amask);if (surface == NULL) {
"SDL_CreateRGBSurface() failed: %s", SDL_GetError());
SDL_Log(1);
exit(
}
/* or using the default masks for the depth: */
0, width, height, 32, 0, 0, 0, 0); surface = SDL_CreateRGBSurface(