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 }