Wiki Page Content

SDL_CreateRGBSurface

Use this function to 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; see Remarks for details

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.

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);

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 FF000000 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. (e.g. 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.


CategoryAPI, CategorySurface

None: SDL_CreateRGBSurface (last edited 2016-10-20 20:36:00 by PhilippWiesemann)

Feedback
Please include your contact information if you'd like to receive a reply.
Submit