Mercurial > repos > simple16
annotate src/system_sdl.c @ 23:a085f17b79e9
Implement hflip
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 30 Mar 2016 20:31:04 -0700 |
parents | 41ec033ef8c3 |
children | 4c9dbfa30a66 |
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 | 17 window = SDL_CreateWindow("simple16", 0, 0, width, height, 0); |
18 if (!window) { | |
19 fprintf(stderr, "Failed to create window: %s\n", SDL_GetError()); | |
15 | 20 return 0; |
21 } | |
17 | 22 |
23 renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); | |
24 if (!renderer) { | |
25 fprintf(stderr, "Failed to create renderer: %s\n", SDL_GetError()); | |
26 return 0; | |
27 } | |
28 | |
15 | 29 texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB444, SDL_TEXTUREACCESS_STREAMING, 320, 240); |
30 if (!texture) { | |
31 fprintf(stderr, "Failed to create texture: %s\n", SDL_GetError()); | |
32 SDL_DestroyRenderer(renderer); | |
33 SDL_DestroyWindow(window); | |
34 return 0; | |
35 } | |
36 return 1; | |
37 } | |
38 | |
39 //Should be called once per frame to get a pointer to the output buffer at the start of rendering | |
40 uint16_t *system_get_framebuffer(int *pitch) | |
41 { | |
42 void *pixels; | |
43 if (SDL_LockTexture(texture, NULL, &pixels, pitch) < 0) { | |
44 fprintf(stderr, "Failed to lock texture: %s\n", SDL_GetError()); | |
45 return NULL; | |
46 } | |
47 return pixels; | |
48 } | |
49 | |
50 //Should be called once per frame at the competion of rendering | |
51 //The pointer returned by system_get_framebuffer should be discarded after calling this function | |
52 void system_framebuffer_updated() | |
53 { | |
54 SDL_UnlockTexture(texture); | |
55 SDL_RenderCopy(renderer, texture, NULL, NULL); | |
56 SDL_RenderPresent(renderer); | |
57 } | |
58 | |
16
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
59 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
|
60 { |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
61 SDL_Event event; |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
62 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
|
63 { |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
64 switch (event.type) |
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 case SDL_QUIT: |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
67 exit(0); |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
68 break; |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
69 } |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
70 } |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
71 } |
ae58e7c3c328
Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents:
15
diff
changeset
|
72 |