dungeon_crawler
annotate prototype/src/audio/audio.cc @ 51:d57df51f6b50
- fixed audio panning (listener direction)
- particles had no fog
- sound sources were not destroyed properly
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Tue, 18 Sep 2012 09:40:56 +0300 |
parents | c40efa9cf844 |
children |
rev | line source |
---|---|
nuclear@47 | 1 #include <stdio.h> |
nuclear@47 | 2 #include "openal.h" |
nuclear@47 | 3 #include "audio.h" |
nuclear@47 | 4 |
nuclear@47 | 5 static ALCdevice *dev; |
nuclear@47 | 6 static ALCcontext *ctx; |
nuclear@47 | 7 |
nuclear@47 | 8 |
nuclear@47 | 9 bool init_audio() |
nuclear@47 | 10 { |
nuclear@47 | 11 if(dev) { |
nuclear@47 | 12 return true; |
nuclear@47 | 13 } |
nuclear@47 | 14 |
nuclear@47 | 15 if(!(dev = alcOpenDevice(0))) { |
nuclear@47 | 16 fprintf(stderr, "failed to open OpenAL device\n"); |
nuclear@47 | 17 return false; |
nuclear@47 | 18 } |
nuclear@47 | 19 ctx = alcCreateContext(dev, 0); |
nuclear@47 | 20 alcMakeContextCurrent(ctx); |
nuclear@47 | 21 |
nuclear@47 | 22 alGetError(); // clear error code |
nuclear@47 | 23 return true; |
nuclear@47 | 24 } |
nuclear@47 | 25 |
nuclear@47 | 26 void destroy_audio() |
nuclear@47 | 27 { |
nuclear@47 | 28 alcMakeContextCurrent(0); |
nuclear@47 | 29 if(ctx) { |
nuclear@47 | 30 alcDestroyContext(ctx); |
nuclear@47 | 31 } |
nuclear@47 | 32 if(dev) { |
nuclear@47 | 33 alcCloseDevice(dev); |
nuclear@47 | 34 } |
nuclear@47 | 35 } |
nuclear@50 | 36 |
nuclear@50 | 37 void set_audio_listener(const Matrix4x4 &xform) |
nuclear@50 | 38 { |
nuclear@50 | 39 float pos[3], orient[6]; |
nuclear@50 | 40 |
nuclear@50 | 41 pos[0] = xform[0][3]; |
nuclear@50 | 42 pos[1] = xform[1][3]; |
nuclear@50 | 43 pos[2] = xform[2][3]; |
nuclear@50 | 44 |
nuclear@50 | 45 orient[0] = xform[0][2]; |
nuclear@50 | 46 orient[1] = xform[1][2]; |
nuclear@51 | 47 orient[2] = -xform[2][2]; |
nuclear@50 | 48 |
nuclear@50 | 49 orient[3] = xform[0][1]; |
nuclear@50 | 50 orient[4] = xform[1][1]; |
nuclear@50 | 51 orient[5] = xform[2][1]; |
nuclear@50 | 52 |
nuclear@50 | 53 alListenerfv(AL_POSITION, pos); |
nuclear@50 | 54 alListenerfv(AL_ORIENTATION, orient); |
nuclear@50 | 55 } |