|
Size: 1832
Comment: create page, add content (Rev 5540)
|
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 (must be called after [[SDL_SetVideoMode]]()). | Use this function to allocate a new RGB surface. |
| Line 23: | Line 23: |
| <<Color2(green,should flags be gray?)>> ||'''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: |
| 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 37: | Line 36: |
| <<Color2(green,The following code example is from the old wiki but the params are no longer exactly the same. Should it be removed or updated?)>> | |
| Line 38: | Line 38: |
| You can add your code example here | /* 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); |
| Line 42: | 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'. <<Color2(green,should it say flags or flag since there's only one listed?)>> | 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`. |
| Line 45: | Line 79: |
| .[[SDL_ConvertSurface]] ??? | |
| Line 47: | Line 82: |
| .[[SDL_LockSurface]] * .[[SDL_SetColorKey]] * |
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.
