dbf-halloween2015
annotate src/audio/audio.cc @ 3:c37fe5d8a4ed
windows port
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 01 Nov 2015 06:04:28 +0200 |
parents | |
children |
rev | line source |
---|---|
nuclear@0 | 1 #include <stdio.h> |
nuclear@0 | 2 |
nuclear@0 | 3 #include "openal.h" |
nuclear@0 | 4 #include "audio.h" |
nuclear@0 | 5 |
nuclear@0 | 6 static ALCdevice *dev; |
nuclear@0 | 7 static ALCcontext *ctx; |
nuclear@0 | 8 |
nuclear@0 | 9 bool init_audio() |
nuclear@0 | 10 { |
nuclear@0 | 11 if (dev) { |
nuclear@0 | 12 // Already initiated. |
nuclear@0 | 13 return true; |
nuclear@0 | 14 } |
nuclear@0 | 15 else if (!(dev = alcOpenDevice(0))) { |
nuclear@0 | 16 fprintf(stderr, "failed to open OpenAL device\n"); |
nuclear@0 | 17 return false; |
nuclear@0 | 18 } |
nuclear@0 | 19 |
nuclear@0 | 20 if (ctx) |
nuclear@0 | 21 { |
nuclear@0 | 22 return true; |
nuclear@0 | 23 } |
nuclear@0 | 24 else if (!(ctx = alcCreateContext(dev, 0))) |
nuclear@0 | 25 { |
nuclear@0 | 26 fprintf(stderr, "failed to create context\n"); |
nuclear@0 | 27 alcCloseDevice(dev); |
nuclear@0 | 28 return false; |
nuclear@0 | 29 } |
nuclear@0 | 30 |
nuclear@0 | 31 alcMakeContextCurrent(ctx); |
nuclear@0 | 32 |
nuclear@0 | 33 // Clear error state. |
nuclear@0 | 34 alGetError(); |
nuclear@0 | 35 |
nuclear@0 | 36 return true; |
nuclear@0 | 37 } |
nuclear@0 | 38 |
nuclear@0 | 39 void destroy_audio() |
nuclear@0 | 40 { |
nuclear@0 | 41 alcMakeContextCurrent(0); |
nuclear@0 | 42 |
nuclear@0 | 43 if (ctx) { |
nuclear@0 | 44 alcDestroyContext(ctx); |
nuclear@0 | 45 } |
nuclear@0 | 46 |
nuclear@0 | 47 if (dev) { |
nuclear@0 | 48 alcCloseDevice(dev); |
nuclear@0 | 49 } |
nuclear@0 | 50 } |
nuclear@0 | 51 |
nuclear@0 | 52 void set_audio_listener(const Matrix4x4 &xform) |
nuclear@0 | 53 { |
nuclear@0 | 54 float pos[3], orient[6]; |
nuclear@0 | 55 |
nuclear@0 | 56 pos[0] = xform[0][3]; |
nuclear@0 | 57 pos[1] = xform[1][3]; |
nuclear@0 | 58 pos[2] = xform[2][3]; |
nuclear@0 | 59 |
nuclear@0 | 60 orient[0] = xform[0][2]; |
nuclear@0 | 61 orient[1] = xform[1][2]; |
nuclear@0 | 62 orient[2] = -xform[2][2]; |
nuclear@0 | 63 |
nuclear@0 | 64 orient[3] = xform[0][1]; |
nuclear@0 | 65 orient[4] = xform[1][1]; |
nuclear@0 | 66 orient[5] = xform[2][1]; |
nuclear@0 | 67 |
nuclear@0 | 68 alListenerfv(AL_POSITION, pos); |
nuclear@0 | 69 alListenerfv(AL_ORIENTATION, orient); |
nuclear@0 | 70 } |