forked from jckarter/hello-gl-ch3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsdl.c
73 lines (60 loc) · 1.69 KB
/
sdl.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "SDL/SDL.h"
SDL_Surface *surface;
int done = 0;
void initSDL() {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
fprintf(stderr, "Video initialization failed: %s\n", SDL_GetError());
exit(1);
}
const SDL_VideoInfo *videoInfo;
videoInfo = SDL_GetVideoInfo();
if (!videoInfo) {
fprintf(stderr, "Video query failed: %s\n", SDL_GetError());
exit(1);
}
int videoFlags;
videoFlags = SDL_OPENGL;
videoFlags |= SDL_GL_DOUBLEBUFFER;
videoFlags |= SDL_HWPALETTE;
videoFlags |= SDL_RESIZABLE;
// videoFlags |= SDL_FULLSCREEN;
if (videoInfo->hw_available) {
videoFlags |= SDL_HWSURFACE;
} else {
videoFlags |= SDL_SWSURFACE;
}
if (videoInfo->blit_hw) {
videoFlags |= SDL_HWACCEL;
}
SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, 0);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
surface = SDL_SetVideoMode(400, 300, 32, videoFlags);
if (!surface) {
fprintf(stderr, "Video mode set failed: %s\n", SDL_GetError());
exit(1);
}
}
void handleInput() {
SDL_Event event;
while (SDL_PollEvent(&event)) {
switch (event.type) {
case SDL_KEYDOWN:
switch (event.key.keysym.sym) {
case SDLK_ESCAPE:
done = 1;
break;
case SDLK_F1:
SDL_WM_ToggleFullScreen(surface);
break;
default:
break;
}
break;
case SDL_QUIT:
done = 1;
break;
default:
break;
}
}
}