1 module prova.init;
2 
3 import derelict.freetype;
4 import derelict.openal.al;
5 import derelict.sdl2.sdl;
6 import derelict.vorbis;
7 import prova;
8 import std.conv;
9 
10 package void init()
11 {
12   initSDL();
13   initOpenAL();
14   initVorbis();
15   initFreeType();
16 }
17 
18 private void initSDL()
19 {
20   DerelictSDL2.load();
21 
22   if(SDL_Init(SDL_INIT_EVERYTHING) < 0)
23     throw new Exception("Initialization Error: " ~ to!string(SDL_GetError()));
24 }
25 
26 private void initOpenAL()
27 {
28   DerelictAL.load();
29 
30   Audio.device = alcOpenDevice(null);
31 
32   if(!Audio.device)
33     throw new Exception("Initialization Error: Failed to open audio device");
34 
35   Audio.context = alcCreateContext(Audio.device, null);
36 
37   if(!Audio.context)
38     throw new Exception("Initialization Error: Failed audio context creation");
39 
40   alcMakeContextCurrent(Audio.context);
41 }
42 
43 private void initVorbis()
44 {
45   DerelictVorbisFile.load();
46 }
47 
48 private void initFreeType()
49 {
50   DerelictFT.load();
51   int error = FT_Init_FreeType(&Font.ftlibrary);
52 
53   if(error != 0)
54     throw new Exception("Initialization Error: Failed to initalize FreeType library");
55 }
56 
57 package void finalize()
58 {
59   finalizeOpenAL();
60   finalizeSDL();
61   finalizeFreeType();
62 }
63 
64 private void finalizeOpenAL()
65 {
66   alcMakeContextCurrent(null);
67   alcDestroyContext(Audio.context);
68   alcCloseDevice(Audio.device);
69 }
70 
71 private void finalizeSDL()
72 {
73   SDL_Quit();
74 }
75 
76 private void finalizeFreeType()
77 {
78   FT_Done_FreeType(Font.ftlibrary);
79 }