|
Size: 3208
Comment: minor change
|
Size: 3424
Comment: update content - w/ Sam (in progress)
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 6: | Line 6: |
| Use this function to allocate and free an RGB surface. | Use this function to allocate a new RGB surface. |
| Line 23: | Line 23: |
| <<Color2(green,Should flags be gray? Why is there so much reference to '''flags''' if they're obsolete? (See below and [[SDL_ConvertSurface]] for example.))>> ||'''flags'''||the flags are obsolete and should be set to 0|| |
||'''flags'''||the flags are unused and should be set to 0|| |
| Line 34: | Line 33: |
| Returns a pointer to an [[SDL_Surface]] to be created. If the function runs out of memory, it will return NULL. | Returns the new [[SDL_Surface]] structure that is created or NULL if it fails; call [[SDL_GetError]]() for more information. |
| Line 58: | Line 57: |
| surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32, | surface = SDL_CreateRGBSurface(0, width, height, 32, |
| Line 66: | Line 65: |
| surface=SDL_CreateRGBSurface(SDL_SWSURFACE,width,height,32,0,0,0,0); | surface = SDL_CreateRGBSurface(0,width,height,32,0,0,0,0); |
| Line 70: | Line 69: |
| If ,,the,, '''depth''' is 4 or 8 bits, an empty palette is allocated for the surface. If ,,the,, '''depth''' is greater than 8 bits, the pixel format is set using the '''flags''' '[RGB]mask'. | 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. |
| Line 72: | Line 71: |
| <<Color2(green,There is a lot of extra info in the old wiki but most relates to '''flags'''. Should any of it be transferred here? http://www.libsdl.org/cgi/docwiki.cgi/SDL_CreateRGBSurface)>> | 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`. |
DRAFT |
SDL_CreateRGBSurface
Use this function to allocate a new RGB surface.
Contents
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
green
/* 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) {
fprintf(stderr, "CreateRGBSurface failed: %s\n", 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.
