In pascal you don't need to use pointers everywhere. This means that you can acces object properties/record values simply by:
So your code would look something like this:
Code:
program sdltest;
uses
sdl2, SDL2_image;
const
SCREEN_WIDTH: integer = 640;
SCREEN_HEIGHT: integer = 480;
quit: boolean = false;
var
win: pSDL_WINDOW;
ren: pSDL_RENDERER;
background, sprite: pSDL_TEXTURE;
e: pSDL_EVENT;
ret: pSDL_RECT;
rect: pSDL_RECT;
thisTime, lastTime: integer;
dt: single;
begin
win := SDL_CreateWindow('Hello World', 100, 100, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
ren := SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED or SDL_RENDERER_PRESENTVSYNC);
background := IMG_LoadTexture(ren, 'background.png');
sprite := IMG_LoadTexture(ren, 'sprite.png');
new(ret);
ret.x := 0;
ret.y := 0;
ret.w := 64;
ret.h := 64;
new(rect);
rect.x := 100;
rect.y := 100;
rect.w := 64;
rect.h := 64;
new(e);
while quit = false do
begin
thisTime := SDL_GetTicks;
dt := (thisTime - lastTime) / 1000;
lastTime := thisTime;
while SDL_POLLEVENT(e) <> 0 do
begin
if e.type_ = SDL_MOUSEBUTTONDOWN then
quit := TRUE;
if e.type_ = SDL_KEYDOWN then
begin
case e.type_ of
SDLK_LEFT: rect.x := rect.x - 10;
SDLK_RIGHT: rect.x := rect.x + 10;
SDLK_UP: rect.y := rect.y - 10;
SDLK_DOWN: rect.y := rect.y + 10;
end;
end;
SDL_RenderClear(ren);
SDL_RenderCopy(ren, background, nil, nil);
SDL_RenderCopy(ren, sprite, ret, rect);
SDL_RenderPresent(ren);
end;
end;
SDL_DestroyTexture(background);
SDL_DestroyTexture(sprite);
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
IMG_QUIT;
SDL_QUIT;
end.
Not I haven't tested this out as I myself am not using SDL.
Now for learning about using SDL with pascal I recomend you visit page below. It contains sveral tutorials about using SDL with Free Pascal but they should work with other Pascal dialects also.
http://www.freepascal-meets-sdl.net/
Bookmarks