====== (This is the documentation for SDL3, which is under heavy development and the API is changing! SDL2 is the current stable version!) ======
= SDL_CreateRGBSurface =
Allocate a new RGB surface.
== Syntax ==
SDL_Surface* SDL_CreateRGBSurface
(Uint32 flags, int width, int height, int depth,
Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);
== Function Parameters ==
{|
|'''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
|}
== Return Value ==
Returns the new [[SDL_Surface]] structure that is created or NULL if it
fails; call [[SDL_GetError]]() for more information.
== Remarks ==
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:
SDL_CreateRGBSurface(0,w,h,32,0,0,0,0);
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
.
== Version ==
This function is available since SDL 3.0.0.
== Code Examples ==
/* 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
rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;
#else
rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0xff000000;
#endif
surface = SDL_CreateRGBSurface(0, width, height, 32,
rmask, gmask, bmask, amask);
if (surface == NULL) {
SDL_Log("SDL_CreateRGBSurface() failed: %s", SDL_GetError());
exit(1);
}
/* or using the default masks for the depth: */
surface = SDL_CreateRGBSurface(0, width, height, 32, 0, 0, 0, 0);
== Related Functions ==
:[[SDL_CreateRGBSurfaceFrom]]
:[[SDL_CreateRGBSurfaceWithFormat]]
:[[SDL_FreeSurface]]
----
[[CategoryAPI]], [[CategorySurface]]