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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
#pragma once
namespace sound {
/**
* Platform specific types in a generic way so that we can use them inside Storm types.
*/
/**
* A SoundBuffer is an object that contains a playable buffer of sound samples.
*/
class SoundBuffer {
STORM_VALUE;
public:
#ifdef SOUND_DX
SoundBuffer(IDirectSoundBuffer8 *buffer) { data = (size_t)buffer; }
inline IDirectSoundBuffer8 *operator ->() const {
return (IDirectSoundBuffer8 *)data;
}
inline void release() {
if (data) {
(*this)->Release();
data = 0;
}
}
#endif
#ifdef SOUND_AL
SoundBuffer(ALuint buffer) { data = (size_t)buffer; }
inline operator ALuint() const {
return (ALuint)data;
}
#endif
SoundBuffer() { data = 0; }
inline operator bool() const {
return data != 0;
}
private:
// The actual storage.
UNKNOWN(PTR_NOGC) size_t data;
};
/**
* A SoundDevice represents the device onto which we will play sound.
*/
class SoundDevice {
STORM_VALUE;
public:
#ifdef SOUND_DX
SoundDevice(IDirectSound8 *device) { data = (size_t)device; }
inline IDirectSound8 *operator ->() const {
return (IDirectSound8 *)data;
}
inline void release() {
if (data) {
(*this)->Release();
data = 0;
}
}
#endif
#ifdef SOUND_AL
SoundDevice(ALCdevice *device) { data = (size_t)device; }
inline operator ALCdevice *() const {
return (ALCdevice *)data;
}
#endif
SoundDevice() { data = 0; }
inline operator bool() const {
return data != 0;
}
private:
// The actual storage.
UNKNOWN(PTR_NOGC) size_t data;
};
/**
* A SoundContext represents the device onto which we will play sound.
*/
class SoundContext {
STORM_VALUE;
public:
#ifdef SOUND_DX
// A context does not exist in DirectSound.
#endif
#ifdef SOUND_AL
SoundContext(ALCcontext *ctx) { data = (size_t)ctx; }
inline operator ALCcontext *() const {
return (ALCcontext *)data;
}
#endif
SoundContext() { data = 0; }
inline operator bool() const {
return data != 0;
}
private:
// The actual storage.
UNKNOWN(PTR_NOGC) size_t data;
};
}
|