annotate src/system_sdl.c @ 24:4c9dbfa30a66

Implemented audio
author Michael Pavone <pavone@retrodev.com>
date Thu, 31 Mar 2016 00:07:37 -0700
parents 41ec033ef8c3
children c677507682e3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <SDL.h>
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
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
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5
24
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
6 static SDL_Window *window;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
7 static SDL_Renderer *renderer;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
8 static SDL_Texture *texture;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
9 static int sample_rate;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
10 static int buffer_size;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
11 static uint8_t quitting;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
12
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
13 static SDL_mutex * audio_mutex;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
14 static SDL_cond * source_ready;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
15 static SDL_cond * output_ready;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
16 static int16_t *source_buffer;
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17
24
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
18 static void audio_callback(void * userdata, uint8_t *stream, int len)
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
19 {
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
20 uint8_t local_quit;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
21 int16_t *local_source;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
22 SDL_LockMutex(audio_mutex);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
23 local_source = NULL;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
24 do {
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
25 if (!local_source) {
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
26 local_source = source_buffer;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
27 source_buffer = NULL;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
28 SDL_CondSignal(output_ready);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
29 }
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
30 if (!quitting && !local_source) {
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
31 SDL_CondWait(source_ready, audio_mutex);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
32 }
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
33 } while (!quitting && !local_source);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
34 local_quit = quitting;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
35 SDL_UnlockMutex(audio_mutex);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
36 if (!local_quit) {
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
37 fflush(stdout);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
38 memcpy(stream, local_source, len);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
39 }
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
40 }
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
41
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
42 static void close_audio()
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43 {
24
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
44 SDL_LockMutex(audio_mutex);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
45 quitting = 1;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
46 SDL_CondSignal(source_ready);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
47 SDL_UnlockMutex(audio_mutex);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
48 SDL_CloseAudio();
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
49 }
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
50
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
51 void system_present_audio(int16_t *buffer)
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
52 {
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
53 SDL_LockMutex(audio_mutex);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
54 while (source_buffer) {
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
55 SDL_CondWait(output_ready, audio_mutex);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
56 }
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
57 source_buffer = buffer;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
58 SDL_CondSignal(source_ready);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
59 SDL_UnlockMutex(audio_mutex);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
60 }
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
61
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
62 int system_sample_rate()
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
63 {
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
64 return sample_rate;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
65 }
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
66
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
67 int system_buffer_size()
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
68 {
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
69 return buffer_size;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
70 }
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
71
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
72 int system_init(int width, int height, int desired_sample_rate)
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
73 {
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
74 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) {
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
75 fprintf(stderr, "Failed to init SDL: %s\n", SDL_GetError());
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
76 return 0;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
77 }
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
78 atexit(SDL_Quit);
17
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
79 window = SDL_CreateWindow("simple16", 0, 0, width, height, 0);
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
80 if (!window) {
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
81 fprintf(stderr, "Failed to create window: %s\n", SDL_GetError());
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
82 return 0;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
83 }
17
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
84
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
85 renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
86 if (!renderer) {
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
87 fprintf(stderr, "Failed to create renderer: %s\n", SDL_GetError());
24
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
88 goto renderer_error;
17
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
89 }
41ec033ef8c3 Enable vsync
Michael Pavone <pavone@retrodev.com>
parents: 16
diff changeset
90
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
91 texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB444, SDL_TEXTUREACCESS_STREAMING, 320, 240);
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
92 if (!texture) {
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
93 fprintf(stderr, "Failed to create texture: %s\n", SDL_GetError());
24
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
94 goto error;
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
95 }
24
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
96
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
97 audio_mutex = SDL_CreateMutex();
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
98 source_ready = SDL_CreateCond();
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
99 output_ready = SDL_CreateCond();
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
100
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
101 SDL_AudioSpec desired, actual;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
102 desired.freq = desired_sample_rate;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
103 desired.format = AUDIO_S16SYS;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
104 desired.channels = 1;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
105 desired.callback = audio_callback;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
106 desired.userdata = NULL;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
107 desired.samples = 512;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
108
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
109 if (SDL_OpenAudio(&desired, &actual) < 0) {
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
110 fprintf(stderr, "Failed to open audio: %s\n", SDL_GetError());
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
111 goto error;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
112 }
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
113 printf("Initialized audio at frequency %d with a %d sample buffer and %d channels\n", actual.freq, actual.samples, actual.channels);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
114 sample_rate = actual.freq;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
115 buffer_size = actual.samples;
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
116 atexit(close_audio);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
117 SDL_PauseAudio(0);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
118
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
119 return 1;
24
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
120
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
121 error:
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
122 SDL_DestroyRenderer(renderer);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
123 renderer_error:
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
124 SDL_DestroyWindow(window);
4c9dbfa30a66 Implemented audio
Michael Pavone <pavone@retrodev.com>
parents: 17
diff changeset
125 return 0;
15
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
126 }
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
127
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
128 uint16_t *system_get_framebuffer(int *pitch)
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
129 {
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
130 void *pixels;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
131 if (SDL_LockTexture(texture, NULL, &pixels, pitch) < 0) {
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
132 fprintf(stderr, "Failed to lock texture: %s\n", SDL_GetError());
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
133 return NULL;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
134 }
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
135 return pixels;
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
136 }
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
137
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
138 void system_framebuffer_updated()
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
139 {
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
140 SDL_UnlockTexture(texture);
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
141 SDL_RenderCopy(renderer, texture, NULL, NULL);
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
142 SDL_RenderPresent(renderer);
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
143 }
c8a0dbd7752c Forgot to commit SDL code
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
144
16
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
145 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
146 {
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
147 SDL_Event event;
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
148 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
149 {
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
150 switch (event.type)
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
151 {
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
152 case SDL_QUIT:
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
153 exit(0);
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
154 break;
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
155 }
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
156 }
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
157 }
ae58e7c3c328 Poll events regularly to avoid unresponsive app warnings. Handle quit event
Michael Pavone <pavone@retrodev.com>
parents: 15
diff changeset
158