The rendering functions take a context so it's clear what window they're drawing to. This also potentially opens to the door to multi-threaded rendering in the future.

This commit is contained in:
Sam Lantinga 2011-02-01 19:19:43 -08:00
parent 52cf8a6451
commit df94d4c6a4
15 changed files with 617 additions and 690 deletions

View file

@ -24,7 +24,7 @@ quit(int rc)
}
int
LoadSprite(char *file)
LoadSprite(char *file, SDL_Renderer *renderer)
{
SDL_Surface *temp;
@ -60,10 +60,10 @@ LoadSprite(char *file)
}
/* Create textures from the image */
sprite = SDL_CreateTextureFromSurface(0, temp);
sprite = SDL_CreateTextureFromSurface(renderer, 0, temp);
if (!sprite) {
SDL_SetColorKey(temp, 0, 0);
sprite = SDL_CreateTextureFromSurface(0, temp);
sprite = SDL_CreateTextureFromSurface(renderer, 0, temp);
}
if (!sprite) {
fprintf(stderr, "Couldn't create texture: %s\n", SDL_GetError());
@ -77,7 +77,7 @@ LoadSprite(char *file)
}
void
MoveSprites(SDL_Window * window, SDL_Texture * sprite)
MoveSprites(SDL_Window * window, SDL_Renderer * renderer, SDL_Texture * sprite)
{
int i;
int window_w = WINDOW_WIDTH;
@ -85,8 +85,8 @@ MoveSprites(SDL_Window * window, SDL_Texture * sprite)
SDL_Rect *position, *velocity;
/* Draw a gray background */
SDL_SetRenderDrawColor(0xA0, 0xA0, 0xA0, 0xFF);
SDL_RenderClear();
SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
SDL_RenderClear(renderer);
/* Move the sprite, bounce at the wall, and draw */
for (i = 0; i < NUM_SPRITES; ++i) {
@ -104,17 +104,18 @@ MoveSprites(SDL_Window * window, SDL_Texture * sprite)
}
/* Blit the sprite onto the screen */
SDL_RenderCopy(sprite, NULL, position);
SDL_RenderCopy(renderer, sprite, NULL, position);
}
/* Update the screen! */
SDL_RenderPresent();
SDL_RenderPresent(renderer);
}
int
main(int argc, char *argv[])
{
SDL_Window *window;
SDL_Renderer *renderer;
int i, done;
SDL_Event event;
@ -127,7 +128,12 @@ main(int argc, char *argv[])
quit(2);
}
if (LoadSprite("icon.bmp") < 0) {
renderer = SDL_CreateRenderer(window, -1, 0);
if (!renderer) {
quit(2);
}
if (LoadSprite("icon.bmp", renderer) < 0) {
quit(2);
}
@ -155,7 +161,7 @@ main(int argc, char *argv[])
done = 1;
}
}
MoveSprites(window, sprite);
MoveSprites(window, renderer, sprite);
}
quit(0);