Automatically initialize the video system and create a renderer to simplify use.
--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%404141
This commit is contained in:
parent
47997f877c
commit
6d92d75009
4 changed files with 232 additions and 71 deletions
|
@ -396,6 +396,7 @@ extern VideoBootStrap PND_bootstrap;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SDL_CurrentDisplay (_this->displays[_this->current_display])
|
#define SDL_CurrentDisplay (_this->displays[_this->current_display])
|
||||||
|
#define SDL_CurrentRenderer (SDL_CurrentDisplay.current_renderer)
|
||||||
|
|
||||||
extern SDL_VideoDevice *SDL_GetVideoDevice();
|
extern SDL_VideoDevice *SDL_GetVideoDevice();
|
||||||
extern int SDL_AddBasicVideoDisplay(const SDL_DisplayMode * desktop_mode);
|
extern int SDL_AddBasicVideoDisplay(const SDL_DisplayMode * desktop_mode);
|
||||||
|
|
|
@ -754,9 +754,11 @@ SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
|
||||||
SDL_Window *windows;
|
SDL_Window *windows;
|
||||||
|
|
||||||
if (!_this) {
|
if (!_this) {
|
||||||
SDL_UninitializedVideo();
|
/* Initialize the video system if needed */
|
||||||
|
if (SDL_VideoInit(NULL, 0) < 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (flags & SDL_WINDOW_OPENGL) {
|
if (flags & SDL_WINDOW_OPENGL) {
|
||||||
if (!_this->GL_CreateContext) {
|
if (!_this->GL_CreateContext) {
|
||||||
SDL_SetError("No OpenGL support in video driver");
|
SDL_SetError("No OpenGL support in video driver");
|
||||||
|
@ -926,6 +928,7 @@ SDL_GetWindowFromID(SDL_WindowID windowID)
|
||||||
SDL_UninitializedVideo();
|
SDL_UninitializedVideo();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (windowID) {
|
||||||
for (i = 0; i < _this->num_displays; ++i) {
|
for (i = 0; i < _this->num_displays; ++i) {
|
||||||
SDL_VideoDisplay *display = &_this->displays[i];
|
SDL_VideoDisplay *display = &_this->displays[i];
|
||||||
for (j = 0; j < display->num_windows; ++j) {
|
for (j = 0; j < display->num_windows; ++j) {
|
||||||
|
@ -935,6 +938,18 @@ SDL_GetWindowFromID(SDL_WindowID windowID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
/* Just return the first active window */
|
||||||
|
for (i = 0; i < _this->num_displays; ++i) {
|
||||||
|
SDL_VideoDisplay *display = &_this->displays[i];
|
||||||
|
for (j = 0; j < display->num_windows; ++j) {
|
||||||
|
SDL_Window *window = &display->windows[j];
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Couldn't find the window with the requested ID */
|
||||||
|
SDL_SetError("Invalid window ID");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -951,6 +966,23 @@ SDL_GetDisplayFromWindow(SDL_Window * window)
|
||||||
return &_this->displays[window->display];
|
return &_this->displays[window->display];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static __inline__ SDL_Renderer *
|
||||||
|
SDL_GetCurrentRenderer()
|
||||||
|
{
|
||||||
|
SDL_Renderer *renderer;
|
||||||
|
|
||||||
|
if (!_this) {
|
||||||
|
SDL_UninitializedVideo();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (!SDL_CurrentRenderer) {
|
||||||
|
if (SDL_CreateRenderer(0, -1, 0) < 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return SDL_CurrentRenderer;
|
||||||
|
}
|
||||||
|
|
||||||
Uint32
|
Uint32
|
||||||
SDL_GetWindowFlags(SDL_WindowID windowID)
|
SDL_GetWindowFlags(SDL_WindowID windowID)
|
||||||
{
|
{
|
||||||
|
@ -1506,31 +1538,29 @@ SDL_SelectRenderer(SDL_WindowID windowID)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
renderer = window->renderer;
|
renderer = window->renderer;
|
||||||
if (!renderer) {
|
if (renderer) {
|
||||||
SDL_SetError("Renderer hasn't been created yet");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (renderer->ActivateRenderer) {
|
if (renderer->ActivateRenderer) {
|
||||||
if (renderer->ActivateRenderer(renderer) < 0) {
|
if (renderer->ActivateRenderer(renderer) < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SDL_CurrentDisplay.current_renderer = renderer;
|
SDL_CurrentDisplay.current_renderer = renderer;
|
||||||
|
} else {
|
||||||
|
if (SDL_CreateRenderer(windowID, -1, 0) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
SDL_GetRendererInfo(SDL_RendererInfo * info)
|
SDL_GetRendererInfo(SDL_RendererInfo * info)
|
||||||
{
|
{
|
||||||
if (!_this) {
|
SDL_Renderer *renderer = SDL_GetCurrentRenderer();
|
||||||
SDL_UninitializedVideo();
|
if (!renderer) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!SDL_CurrentDisplay.current_renderer) {
|
*info = renderer->info;
|
||||||
SDL_SetError("There is no current renderer");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*info = SDL_CurrentDisplay.current_renderer->info;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1541,11 +1571,7 @@ SDL_CreateTexture(Uint32 format, int access, int w, int h)
|
||||||
SDL_Renderer *renderer;
|
SDL_Renderer *renderer;
|
||||||
SDL_Texture *texture;
|
SDL_Texture *texture;
|
||||||
|
|
||||||
if (!_this) {
|
renderer = SDL_GetCurrentRenderer();
|
||||||
SDL_UninitializedVideo();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
renderer = SDL_CurrentDisplay.current_renderer;
|
|
||||||
if (!renderer) {
|
if (!renderer) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1599,9 +1625,8 @@ SDL_CreateTextureFromSurface(Uint32 format, SDL_Surface * surface)
|
||||||
}
|
}
|
||||||
fmt = surface->format;
|
fmt = surface->format;
|
||||||
|
|
||||||
renderer = SDL_CurrentDisplay.current_renderer;
|
renderer = SDL_GetCurrentRenderer();
|
||||||
if (!renderer) {
|
if (!renderer) {
|
||||||
SDL_SetError("No current renderer available");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2234,11 +2259,7 @@ SDL_SetRenderDrawColor(Uint8 r, Uint8 g, Uint8 b, Uint8 a)
|
||||||
{
|
{
|
||||||
SDL_Renderer *renderer;
|
SDL_Renderer *renderer;
|
||||||
|
|
||||||
if (!_this) {
|
renderer = SDL_GetCurrentRenderer();
|
||||||
SDL_UninitializedVideo();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
renderer = SDL_CurrentDisplay.current_renderer;
|
|
||||||
if (!renderer) {
|
if (!renderer) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -2258,11 +2279,7 @@ SDL_GetRenderDrawColor(Uint8 * r, Uint8 * g, Uint8 * b, Uint8 * a)
|
||||||
{
|
{
|
||||||
SDL_Renderer *renderer;
|
SDL_Renderer *renderer;
|
||||||
|
|
||||||
if (!_this) {
|
renderer = SDL_GetCurrentRenderer();
|
||||||
SDL_UninitializedVideo();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
renderer = SDL_CurrentDisplay.current_renderer;
|
|
||||||
if (!renderer) {
|
if (!renderer) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -2286,11 +2303,7 @@ SDL_SetRenderDrawBlendMode(int blendMode)
|
||||||
{
|
{
|
||||||
SDL_Renderer *renderer;
|
SDL_Renderer *renderer;
|
||||||
|
|
||||||
if (!_this) {
|
renderer = SDL_GetCurrentRenderer();
|
||||||
SDL_UninitializedVideo();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
renderer = SDL_CurrentDisplay.current_renderer;
|
|
||||||
if (!renderer) {
|
if (!renderer) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -2307,11 +2320,7 @@ SDL_GetRenderDrawBlendMode(int *blendMode)
|
||||||
{
|
{
|
||||||
SDL_Renderer *renderer;
|
SDL_Renderer *renderer;
|
||||||
|
|
||||||
if (!_this) {
|
renderer = SDL_GetCurrentRenderer();
|
||||||
SDL_UninitializedVideo();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
renderer = SDL_CurrentDisplay.current_renderer;
|
|
||||||
if (!renderer) {
|
if (!renderer) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -2325,11 +2334,7 @@ SDL_RenderPoint(int x, int y)
|
||||||
SDL_Renderer *renderer;
|
SDL_Renderer *renderer;
|
||||||
SDL_Window *window;
|
SDL_Window *window;
|
||||||
|
|
||||||
if (!_this) {
|
renderer = SDL_GetCurrentRenderer();
|
||||||
SDL_UninitializedVideo();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
renderer = SDL_CurrentDisplay.current_renderer;
|
|
||||||
if (!renderer) {
|
if (!renderer) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -2355,11 +2360,7 @@ SDL_RenderLine(int x1, int y1, int x2, int y2)
|
||||||
return SDL_RenderPoint(x1, y1);
|
return SDL_RenderPoint(x1, y1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_this) {
|
renderer = SDL_GetCurrentRenderer();
|
||||||
SDL_UninitializedVideo();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
renderer = SDL_CurrentDisplay.current_renderer;
|
|
||||||
if (!renderer) {
|
if (!renderer) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -2386,11 +2387,7 @@ SDL_RenderFill(const SDL_Rect * rect)
|
||||||
SDL_Window *window;
|
SDL_Window *window;
|
||||||
SDL_Rect real_rect;
|
SDL_Rect real_rect;
|
||||||
|
|
||||||
if (!_this) {
|
renderer = SDL_GetCurrentRenderer();
|
||||||
SDL_UninitializedVideo();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
renderer = SDL_CurrentDisplay.current_renderer;
|
|
||||||
if (!renderer) {
|
if (!renderer) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -2422,9 +2419,8 @@ SDL_RenderCopy(SDL_TextureID textureID, const SDL_Rect * srcrect,
|
||||||
SDL_Rect real_srcrect;
|
SDL_Rect real_srcrect;
|
||||||
SDL_Rect real_dstrect;
|
SDL_Rect real_dstrect;
|
||||||
|
|
||||||
renderer = SDL_CurrentDisplay.current_renderer;
|
renderer = SDL_GetCurrentRenderer();
|
||||||
if (!renderer) {
|
if (!renderer) {
|
||||||
SDL_SetError("No current renderer available");
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!texture) {
|
if (!texture) {
|
||||||
|
@ -2483,11 +2479,7 @@ SDL_RenderPresent(void)
|
||||||
{
|
{
|
||||||
SDL_Renderer *renderer;
|
SDL_Renderer *renderer;
|
||||||
|
|
||||||
if (!_this) {
|
renderer = SDL_GetCurrentRenderer();
|
||||||
SDL_UninitializedVideo();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
renderer = SDL_CurrentDisplay.current_renderer;
|
|
||||||
if (!renderer || !renderer->RenderPresent) {
|
if (!renderer || !renderer->RenderPresent) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@ EXE = @EXE@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
LIBS = @LIBS@
|
LIBS = @LIBS@
|
||||||
|
|
||||||
TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testresample$(EXE) testaudioinfo$(EXE) testmultiaudio$(EXE) testpower$(EXE) testalpha$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcursor$(EXE) testintersections$(EXE) testdraw2$(EXE) testdyngl$(EXE) testdyngles$(EXE) testerror$(EXE) testfile$(EXE) testgamma$(EXE) testgl$(EXE) testgl2$(EXE) testgles$(EXE) testhread$(EXE) testiconv$(EXE) testjoystick$(EXE) testkeys$(EXE) testlock$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testsem$(EXE) testsprite$(EXE) testsprite2$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm$(EXE) testwm2$(EXE) threadwin$(EXE) torturethread$(EXE) testloadso$(EXE) testhaptic$(EXE) testmmousetablet$(EXE) testatomic$(EXE) testime$(EXE)
|
TARGETS = checkkeys$(EXE) graywin$(EXE) loopwave$(EXE) testalpha$(EXE) testatomic$(EXE) testaudioinfo$(EXE) testbitmap$(EXE) testblitspeed$(EXE) testcursor$(EXE) testdraw2$(EXE) testdyngles$(EXE) testdyngl$(EXE) testerror$(EXE) testfile$(EXE) testgamma$(EXE) testgl2$(EXE) testgles$(EXE) testgl$(EXE) testhaptic$(EXE) testhread$(EXE) testiconv$(EXE) testime$(EXE) testintersections$(EXE) testjoystick$(EXE) testkeys$(EXE) testloadso$(EXE) testlock$(EXE) testmmousetablet$(EXE) testmultiaudio$(EXE) testoverlay2$(EXE) testoverlay$(EXE) testpalette$(EXE) testplatform$(EXE) testpower$(EXE) testresample$(EXE) testsem$(EXE) testsprite2$(EXE) testsprite$(EXE) testspriteminimal$(EXE) testtimer$(EXE) testver$(EXE) testvidinfo$(EXE) testwin$(EXE) testwm2$(EXE) testwm$(EXE) threadwin$(EXE) torturethread$(EXE)
|
||||||
|
|
||||||
all: Makefile $(TARGETS)
|
all: Makefile $(TARGETS)
|
||||||
|
|
||||||
|
@ -107,6 +107,9 @@ testplatform$(EXE): $(srcdir)/testplatform.c
|
||||||
testsem$(EXE): $(srcdir)/testsem.c
|
testsem$(EXE): $(srcdir)/testsem.c
|
||||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
$(CC) -o $@ $? $(CFLAGS) $(LIBS)
|
||||||
|
|
||||||
|
testspriteminimal$(EXE): $(srcdir)/testspriteminimal.c
|
||||||
|
$(CC) -o $@ $? $(CFLAGS) $(LIBS) @MATHLIB@
|
||||||
|
|
||||||
testsprite$(EXE): $(srcdir)/testsprite.c
|
testsprite$(EXE): $(srcdir)/testsprite.c
|
||||||
$(CC) -o $@ $? $(CFLAGS) $(LIBS) @MATHLIB@
|
$(CC) -o $@ $? $(CFLAGS) $(LIBS) @MATHLIB@
|
||||||
|
|
||||||
|
|
165
test/testspriteminimal.c
Normal file
165
test/testspriteminimal.c
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
/* Simple program: Move N sprites around on the screen as fast as possible */
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#include "SDL_events.h"
|
||||||
|
#include "SDL_video.h"
|
||||||
|
|
||||||
|
#define WINDOW_WIDTH 640
|
||||||
|
#define WINDOW_HEIGHT 480
|
||||||
|
#define NUM_SPRITES 100
|
||||||
|
#define MAX_SPEED 1
|
||||||
|
|
||||||
|
static SDL_TextureID sprite;
|
||||||
|
static SDL_Rect positions[NUM_SPRITES];
|
||||||
|
static SDL_Rect velocities[NUM_SPRITES];
|
||||||
|
static int sprite_w, sprite_h;
|
||||||
|
|
||||||
|
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
|
||||||
|
static void
|
||||||
|
quit(int rc)
|
||||||
|
{
|
||||||
|
exit(rc);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
LoadSprite(char *file)
|
||||||
|
{
|
||||||
|
SDL_Surface *temp;
|
||||||
|
|
||||||
|
/* Load the sprite image */
|
||||||
|
temp = SDL_LoadBMP(file);
|
||||||
|
if (temp == NULL) {
|
||||||
|
fprintf(stderr, "Couldn't load %s: %s", file, SDL_GetError());
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
sprite_w = temp->w;
|
||||||
|
sprite_h = temp->h;
|
||||||
|
|
||||||
|
/* Set transparent pixel as the pixel at (0,0) */
|
||||||
|
if (temp->format->palette) {
|
||||||
|
SDL_SetColorKey(temp, SDL_TRUE, *(Uint8 *) temp->pixels);
|
||||||
|
} else {
|
||||||
|
switch (temp->format->BitsPerPixel) {
|
||||||
|
case 15:
|
||||||
|
SDL_SetColorKey(temp, SDL_TRUE,
|
||||||
|
(*(Uint16 *) temp->pixels) & 0x00007FFF);
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
SDL_SetColorKey(temp, SDL_TRUE, *(Uint16 *) temp->pixels);
|
||||||
|
break;
|
||||||
|
case 24:
|
||||||
|
SDL_SetColorKey(temp, SDL_TRUE,
|
||||||
|
(*(Uint32 *) temp->pixels) & 0x00FFFFFF);
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
SDL_SetColorKey(temp, SDL_TRUE, *(Uint32 *) temp->pixels);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create textures from the image */
|
||||||
|
sprite = SDL_CreateTextureFromSurface(0, temp);
|
||||||
|
if (!sprite) {
|
||||||
|
SDL_SetColorKey(temp, 0, 0);
|
||||||
|
sprite = SDL_CreateTextureFromSurface(0, temp);
|
||||||
|
}
|
||||||
|
if (!sprite) {
|
||||||
|
fprintf(stderr, "Couldn't create texture: %s\n", SDL_GetError());
|
||||||
|
SDL_FreeSurface(temp);
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
SDL_FreeSurface(temp);
|
||||||
|
|
||||||
|
/* We're ready to roll. :) */
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
MoveSprites(SDL_WindowID window, SDL_TextureID sprite)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int window_w = WINDOW_WIDTH;
|
||||||
|
int window_h = WINDOW_HEIGHT;
|
||||||
|
SDL_Rect *position, *velocity;
|
||||||
|
|
||||||
|
/* Draw a gray background */
|
||||||
|
SDL_SetRenderDrawColor(0xA0, 0xA0, 0xA0, 0xFF);
|
||||||
|
SDL_RenderFill(NULL);
|
||||||
|
|
||||||
|
/* Move the sprite, bounce at the wall, and draw */
|
||||||
|
for (i = 0; i < NUM_SPRITES; ++i) {
|
||||||
|
position = &positions[i];
|
||||||
|
velocity = &velocities[i];
|
||||||
|
position->x += velocity->x;
|
||||||
|
if ((position->x < 0) || (position->x >= (window_w - sprite_w))) {
|
||||||
|
velocity->x = -velocity->x;
|
||||||
|
position->x += velocity->x;
|
||||||
|
}
|
||||||
|
position->y += velocity->y;
|
||||||
|
if ((position->y < 0) || (position->y >= (window_h - sprite_h))) {
|
||||||
|
velocity->y = -velocity->y;
|
||||||
|
position->y += velocity->y;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Blit the sprite onto the screen */
|
||||||
|
SDL_RenderCopy(sprite, NULL, position);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update the screen! */
|
||||||
|
SDL_RenderPresent();
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
SDL_WindowID window;
|
||||||
|
int i, done;
|
||||||
|
SDL_Event event;
|
||||||
|
|
||||||
|
window = SDL_CreateWindow("Happy Smileys",
|
||||||
|
SDL_WINDOWPOS_UNDEFINED,
|
||||||
|
SDL_WINDOWPOS_UNDEFINED,
|
||||||
|
WINDOW_WIDTH, WINDOW_HEIGHT,
|
||||||
|
SDL_WINDOW_SHOWN);
|
||||||
|
if (!window) {
|
||||||
|
quit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LoadSprite("icon.bmp") < 0) {
|
||||||
|
quit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize the sprite positions */
|
||||||
|
srand(time(NULL));
|
||||||
|
for (i = 0; i < NUM_SPRITES; ++i) {
|
||||||
|
positions[i].x = rand() % (WINDOW_WIDTH - sprite_w);
|
||||||
|
positions[i].y = rand() % (WINDOW_HEIGHT - sprite_h);
|
||||||
|
positions[i].w = sprite_w;
|
||||||
|
positions[i].h = sprite_h;
|
||||||
|
velocities[i].x = 0;
|
||||||
|
velocities[i].y = 0;
|
||||||
|
while (!velocities[i].x && !velocities[i].y) {
|
||||||
|
velocities[i].x = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED;
|
||||||
|
velocities[i].y = (rand() % (MAX_SPEED * 2 + 1)) - MAX_SPEED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main render loop */
|
||||||
|
done = 0;
|
||||||
|
while (!done) {
|
||||||
|
/* Check for events */
|
||||||
|
while (SDL_PollEvent(&event)) {
|
||||||
|
if (event.type == SDL_QUIT || event.type == SDL_KEYDOWN) {
|
||||||
|
done = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MoveSprites(window, sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
quit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
Loading…
Add table
Add a link
Reference in a new issue