* adds SDL_getpixel and SDL_putpixel helper routines

git-svn-id: trunk@6764 -
This commit is contained in:
Almindor 2007-03-09 22:09:38 +00:00
parent 51677fe681
commit 86faa3a8fd

View File

@ -2954,6 +2954,11 @@ cdecl; external {$IFDEF __GPC__}name 'SDL_GetGammaRamp'{$ELSE} SDLLibName{$ENDIF
emulation. }
function SDL_GetPixel(Surface: PSDL_Surface; const x, y: integer): SInt32; {$ifdef fpc} inline; {$endif}
procedure SDL_PutPixel(Surface: PSDL_Surface; const x, y: integer; pixel: UInt32); {$ifdef fpc} inline; {$endif}
function SDL_SetColors(surface: PSDL_Surface; colors: PSDL_Color; firstcolor : Integer; ncolors: Integer) : Integer;
cdecl; external {$IFDEF __GPC__}name 'SDL_SetColors'{$ELSE} SDLLibName{$ENDIF __GPC__};
{$EXTERNALSYM SDL_SetColors}
@ -3850,6 +3855,51 @@ begin
{$ENDIF}
end;
function SDL_GetPixel(Surface: PSDL_Surface; const x, y: integer): SInt32;{$ifdef fpc} inline; {$endif}
var bits: PByte;
Bpp: UInt32;
r, g, b: byte;
begin
assert(x>=0);
assert(x<Surface^.w);
SDL_GetPixel:=-1;
Bpp:=Surface^.Format^.BytesPerPixel;
bits:=PByte(Surface^.Pixels) + Word(Y) * Word(Surface^.Pitch) + Word(X) * Bpp;
case Bpp of
1: SDL_GetPixel:=(PByte(Surface^.Pixels) + Y * Surface^.Pitch + X)^;
2: SDL_GetPixel:=(PWord(Surface^.Pixels) + Y * Surface^.Pitch div 2 + X)^;
3: begin
r:=(bits + Surface^.Format^.RShift div 8)^;
g:=(bits + Surface^.Format^.GShift div 8)^;
b:=(bits + Surface^.Format^.BShift div 8)^;
SDL_GetPixel:=SDL_MapRGB(Surface^.Format, r, g, b);
end;
4: SDL_GetPixel:=(PCardinal(Surface^.Pixels) + Y * Surface^.Pitch div 4 + X)^;
end;
end;
procedure SDL_PutPixel(Surface: PSDL_Surface; const x, y: integer; pixel: UInt32); {$ifdef fpc} inline; {$endif}
var bits: PByte;
Bpp: UInt32;
r, g, b: byte;
begin
assert(x>=0);
assert(x<Surface^.w);
Bpp:=Surface^.Format^.BytesPerPixel;
bits:=PByte(Surface^.Pixels) + Word(Y) * Word(Surface^.Pitch) + Word(X) * Bpp;
case Bpp of
1: PUInt32(PByte(Surface^.Pixels) + Y * Surface^.Pitch + X)^:=Pixel;
2: PUint32(PWord(Surface^.Pixels) + Y * Surface^.Pitch div 2 + X)^:=Pixel;
3: begin
SDL_GetRGB(pixel, Surface^.Format, @r, @g, @b);
(bits + Surface^.Format^.RShift div 8)^:=r;
(bits + Surface^.Format^.GShift div 8)^:=g;
(bits + Surface^.Format^.BShift div 8)^:=b;
end;
4: (PCardinal(Surface^.Pixels) + Y * Surface^.Pitch div 4 + X)^:=Pixel;
end;
end;
function SDL_RWSeek(context: PSDL_RWops; offset: Integer; whence: Integer) : Integer;
begin
Result := context^.seek(context, offset, whence);