Mercurial > repos > simple16
annotate src/system_sdl.c @ 16:ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 27 Mar 2016 21:42:10 -0700 |
parents | c8a0dbd7752c |
children | 41ec033ef8c3 |
rev | line source |
---|---|
15 | 1 #include <SDL.h> |
2 #include <stdint.h> | |
16
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
3 #include <stdlib.h> |
15 | 4 |
5 | |
6 SDL_Window *window; | |
7 SDL_Renderer *renderer; | |
8 SDL_Texture *texture; | |
9 | |
10 int system_init(int width, int height) | |
11 { | |
12 if (SDL_Init(SDL_INIT_VIDEO) < 0) { | |
13 fprintf(stderr, "Failed to init SDL: %s\n", SDL_GetError()); | |
14 return 0; | |
15 } | |
16 atexit(SDL_Quit); | |
17 SDL_CreateWindowAndRenderer(width, height, 0, &window, &renderer); | |
18 | |
19 if (!window || !renderer) { | |
20 fprintf(stderr, "Failed to create window or renderer: %s\n", SDL_GetError()); | |
21 return 0; | |
22 } | |
23 texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB444, SDL_TEXTUREACCESS_STREAMING, 320, 240); | |
24 if (!texture) { | |
25 fprintf(stderr, "Failed to create texture: %s\n", SDL_GetError()); | |
26 SDL_DestroyRenderer(renderer); | |
27 SDL_DestroyWindow(window); | |
28 return 0; | |
29 } | |
30 return 1; | |
31 } | |
32 | |
33 //Should be called once per frame to get a pointer to the output buffer at the start of rendering | |
34 uint16_t *system_get_framebuffer(int *pitch) | |
35 { | |
36 void *pixels; | |
37 if (SDL_LockTexture(texture, NULL, &pixels, pitch) < 0) { | |
38 fprintf(stderr, "Failed to lock texture: %s\n", SDL_GetError()); | |
39 return NULL; | |
40 } | |
41 return pixels; | |
42 } | |
43 | |
44 //Should be called once per frame at the competion of rendering | |
45 //The pointer returned by system_get_framebuffer should be discarded after calling this function | |
46 void system_framebuffer_updated() | |
47 { | |
48 SDL_UnlockTexture(texture); | |
49 SDL_RenderCopy(renderer, texture, NULL, NULL); | |
50 SDL_RenderPresent(renderer); | |
51 } | |
52 | |
16
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
53 void system_poll_events() |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
54 { |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
55 SDL_Event event; |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
56 while(SDL_PollEvent(&event)) |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
57 { |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
58 switch (event.type) |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
59 { |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
60 case SDL_QUIT: |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
61 exit(0); |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
62 break; |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
63 } |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
64 } |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
65 } |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
66 |