testspriteminimal.c File Reference
`#include <stdlib.h>`
`#include <stdio.h>`
`#include <time.h>`
`#include "SDL.h"`
Include dependency graph for testspriteminimal.c:

Go to the source code of this file.

## Macros

#define | WINDOW_WIDTH 640
#define | WINDOW_HEIGHT 480
#define | NUM_SPRITES 100
#define | MAX_SPEED 1

## Functions

static void | quit (int rc)
int | LoadSprite (char *file, SDL_Renderer *renderer)
void | MoveSprites (SDL_Renderer *renderer, SDL_Texture *sprite)
void | loop ()
int | main (int argc, char *argv[])

## Variables

static SDL_Texture * | sprite
static SDL_Rect | positions [NUM_SPRITES]
static SDL_Rect | velocities [NUM_SPRITES]
static int | sprite_w
static int | sprite_h
SDL_Renderer * | renderer
int | done

## Macro Definition Documentation

#define MAX_SPEED 1

Definition at line 27 of file testspriteminimal.c.

Referenced by main().

#define NUM_SPRITES 100

Definition at line 26 of file testspriteminimal.c.

Referenced by main(), and MoveSprites().

#define WINDOW_HEIGHT 480

Definition at line 25 of file testspriteminimal.c.

Referenced by main(), and MoveSprites().

#define WINDOW_WIDTH 640

Definition at line 24 of file testspriteminimal.c.

Referenced by main(), and MoveSprites().

## Function Documentation

int LoadSprite | ( | char * | file,
|  | SDL_Renderer * | renderer
| ) |  |

Definition at line 45 of file testspriteminimal.c.

References SDL_PixelFormat::BitsPerPixel, SDL_Surface::format, SDL_Surface::h, NULL, SDL_PixelFormat::palette, SDL_Surface::pixels, SDL_CreateTextureFromSurface, SDL_FreeSurface, SDL_GetError, SDL_LoadBMP, SDL_LOG_CATEGORY_APPLICATION, SDL_LogError, SDL_SetColorKey, SDL_TRUE, sprite_h, sprite_w, and SDL_Surface::w.

Referenced by main().

{
SDL_Surface *temp;
/* Load the sprite image */
temp = SDL_LoadBMP(file);
if (temp == NULL) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't load %s: %s\n", 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(renderer, temp);
if (!sprite) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s\n", SDL_GetError());
SDL_FreeSurface(temp);
return (-1);
}
SDL_FreeSurface(temp);
/* We're ready to roll. :) */
return (0);
}
SDL_GetError
#define SDL_GetError
Definition: SDL_dynapi_overrides.h:119
Uint32
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:155
SDL_Surface::h
int h
Definition: SDL_surface.h:73
SDL_LoadBMP
#define SDL_LoadBMP(file)
Definition: SDL_surface.h:182
SDL_Surface
A collection of pixels used in software blitting.
Definition: SDL_surface.h:69
sprite_w
static int sprite_w
Definition: testspriteminimal.c:32
SDL_Surface::w
int w
Definition: SDL_surface.h:73
sprite_h
static int sprite_h
Definition: testspriteminimal.c:32
SDL_LogError
#define SDL_LogError
Definition: SDL_dynapi_overrides.h:42
SDL_CreateTextureFromSurface
#define SDL_CreateTextureFromSurface
Definition: SDL_dynapi_overrides.h:313
SDL_Surface::pixels
void * pixels
Definition: SDL_surface.h:75
SDL_FreeSurface
#define SDL_FreeSurface
Definition: SDL_dynapi_overrides.h:450
Uint8
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
SDL_PixelFormat::BitsPerPixel
Uint8 BitsPerPixel
Definition: SDL_pixels.h:303
SDL_SetColorKey
#define SDL_SetColorKey
Definition: SDL_dynapi_overrides.h:457
SDL_TRUE
Definition: SDL_stdinc.h:129
NULL
#define NULL
Definition: begin_code.h:143
SDL_Surface::format
SDL_PixelFormat * format
Definition: SDL_surface.h:72
sprite
static SDL_Texture * sprite
Definition: testspriteminimal.c:29
Uint16
uint16_t Uint16
An unsigned 16-bit integer type.
Definition: SDL_stdinc.h:147
SDL_PixelFormat::palette
SDL_Palette * palette
Definition: SDL_pixels.h:302
SDL_LOG_CATEGORY_APPLICATION
Definition: SDL_log.h:66

void loop | ( |  | ) |

Definition at line 128 of file testspriteminimal.c.

References done, MoveSprites(), SDL_KEYDOWN, SDL_PollEvent, SDL_QUIT, and SDL_Event::type.

Referenced by main().

{
SDL_Event event;
/* Check for events */
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT || event.type == SDL_KEYDOWN) {
done = 1;
}
}
MoveSprites(renderer, sprite);
#ifdef __EMSCRIPTEN__
if (done) {
emscripten_cancel_main_loop();
}
#endif
}
SDL_PollEvent
#define SDL_PollEvent
Definition: SDL_dynapi_overrides.h:128
SDL_KEYDOWN
Definition: SDL_events.h:93
SDL_QUIT
Definition: SDL_events.h:60
MoveSprites
void MoveSprites(SDL_Renderer *renderer, SDL_Texture *sprite)
Definition: testspriteminimal.c:94
renderer
SDL_Renderer * renderer
Definition: testspriteminimal.c:34
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
sprite
static SDL_Texture * sprite
Definition: testspriteminimal.c:29
done
int done
Definition: testspriteminimal.c:35
SDL_Event
General event structure.
Definition: SDL_events.h:521
SDL_Event::type
Uint32 type
Definition: SDL_events.h:523

int main | ( | int | argc,
|  | char * | argv[]
| ) |  |

Definition at line 147 of file testspriteminimal.c.

References done, SDL_Rect::h, i, LoadSprite(), loop(), MAX_SPEED, NULL, NUM_SPRITES, quit(), SDL_CreateWindowAndRenderer, SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, SDL_LogSetPriority, sprite_h, sprite_w, SDL_Rect::w, window, WINDOW_HEIGHT, WINDOW_WIDTH, SDL_Rect::x, and SDL_Rect::y.

{
SDL_Window *window;
int i;
/* Enable standard application logging */
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
if (SDL_CreateWindowAndRenderer(WINDOW_WIDTH, WINDOW_HEIGHT, 0, &window, &renderer) < 0) {
quit(2);
}
if (LoadSprite("icon.bmp", renderer) < 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;
#ifdef __EMSCRIPTEN__
emscripten_set_main_loop(loop, 0, 1);
#else
while (!done) {
loop();
}
#endif
quit(0);
return 0; /* to prevent compiler warning */
}
NUM_SPRITES
#define NUM_SPRITES
Definition: testspriteminimal.c:26
LoadSprite
int LoadSprite(char *file, SDL_Renderer *renderer)
Definition: testspriteminimal.c:45
x
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1567
window
SDL_Window * window
Definition: testautomation_render.c:26
loop
void loop()
Definition: testspriteminimal.c:128
velocities
static SDL_Rect velocities[NUM_SPRITES]
Definition: testspriteminimal.c:31
sprite_w
static int sprite_w
Definition: testspriteminimal.c:32
MAX_SPEED
#define MAX_SPEED
Definition: testspriteminimal.c:27
renderer
SDL_Renderer * renderer
Definition: testspriteminimal.c:34
sprite_h
static int sprite_h
Definition: testspriteminimal.c:32
positions
static SDL_Rect positions[NUM_SPRITES]
Definition: testspriteminimal.c:30
y
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1567
SDL_LOG_PRIORITY_INFO
Definition: SDL_log.h:106
SDL_Rect::x
int x
Definition: SDL_rect.h:66
WINDOW_WIDTH
#define WINDOW_WIDTH
Definition: testspriteminimal.c:24
SDL_Rect::w
int w
Definition: SDL_rect.h:67
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:42
SDL_LogSetPriority
#define SDL_LogSetPriority
Definition: SDL_dynapi_overrides.h:242
NULL
#define NULL
Definition: begin_code.h:143
SDL_Rect::h
int h
Definition: SDL_rect.h:67
WINDOW_HEIGHT
#define WINDOW_HEIGHT
Definition: testspriteminimal.c:25
SDL_Window
The type used to identify a window.
Definition: SDL_sysvideo.h:71
SDL_CreateWindowAndRenderer
#define SDL_CreateWindowAndRenderer
Definition: SDL_dynapi_overrides.h:306
done
int done
Definition: testspriteminimal.c:35
SDL_LOG_CATEGORY_APPLICATION
Definition: SDL_log.h:66
SDL_Rect::y
int y
Definition: SDL_rect.h:66
quit
static void quit(int rc)
Definition: testspriteminimal.c:39

void MoveSprites | ( | SDL_Renderer * | renderer,
|  | SDL_Texture * | sprite
| ) |  |

Definition at line 94 of file testspriteminimal.c.

References i, NULL, NUM_SPRITES, SDL_RenderClear, SDL_RenderCopy, SDL_RenderPresent, SDL_SetRenderDrawColor, sprite_h, sprite_w, window_h, WINDOW_HEIGHT, window_w, WINDOW_WIDTH, SDL_Rect::x, and SDL_Rect::y.

Referenced by loop().

{
int i;
int window_w = WINDOW_WIDTH;
int window_h = WINDOW_HEIGHT;
SDL_Rect *position, *velocity;
/* Draw a gray background */
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) {
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(renderer, sprite, NULL, position);
}
/* Update the screen! */
SDL_RenderPresent(renderer);
}
NUM_SPRITES
#define NUM_SPRITES
Definition: testspriteminimal.c:26
velocities
static SDL_Rect velocities[NUM_SPRITES]
Definition: testspriteminimal.c:31
sprite_w
static int sprite_w
Definition: testspriteminimal.c:32
sprite_h
static int sprite_h
Definition: testspriteminimal.c:32
SDL_RenderCopy
#define SDL_RenderCopy
Definition: SDL_dynapi_overrides.h:349
positions
static SDL_Rect positions[NUM_SPRITES]
Definition: testspriteminimal.c:30
SDL_Rect::x
int x
Definition: SDL_rect.h:66
WINDOW_WIDTH
#define WINDOW_WIDTH
Definition: testspriteminimal.c:24
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:42
NULL
#define NULL
Definition: begin_code.h:143
SDL_RenderClear
#define SDL_RenderClear
Definition: SDL_dynapi_overrides.h:340
WINDOW_HEIGHT
#define WINDOW_HEIGHT
Definition: testspriteminimal.c:25
window_h
int window_h
Definition: testoverlay2.c:146
SDL_SetRenderDrawColor
#define SDL_SetRenderDrawColor
Definition: SDL_dynapi_overrides.h:336
SDL_Rect::y
int y
Definition: SDL_rect.h:66
window_w
int window_w
Definition: testoverlay2.c:145
SDL_Rect
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64
SDL_RenderPresent
#define SDL_RenderPresent
Definition: SDL_dynapi_overrides.h:352

static void quit | ( | int | rc | ) |

static

Definition at line 39 of file testspriteminimal.c.

Referenced by main().

{
exit(rc);
}

## Variable Documentation

int done

Definition at line 35 of file testspriteminimal.c.

Referenced by loop(), and main().

SDL_Rect positions[NUM_SPRITES]

static

Definition at line 30 of file testspriteminimal.c.

SDL_Renderer* renderer

Definition at line 34 of file testspriteminimal.c.

SDL_Texture* sprite

static

Definition at line 29 of file testspriteminimal.c.

Referenced by LoadSprite(), and main().

int sprite_h

static

Definition at line 32 of file testspriteminimal.c.

Referenced by LoadSprite(), main(), and MoveSprites().

int sprite_w

static

Definition at line 32 of file testspriteminimal.c.

Referenced by LoadSprite(), main(), and MoveSprites().

SDL_Rect velocities[NUM_SPRITES]

static

Definition at line 31 of file testspriteminimal.c.