diff options
author | Chris Robinson <[email protected]> | 2019-07-28 19:09:07 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2019-07-28 19:09:07 -0700 |
commit | 83432a7e5c7f565a08c41bb104ae25286c5fc82b (patch) | |
tree | b16a5b86f037190bac4686adede6078d9928131a /OpenAL32/alBuffer.h | |
parent | cb3e96e75640730b9391f0d2d922eecd9ee2ce79 (diff) |
Move some headers out of the Include subdirectory
Diffstat (limited to 'OpenAL32/alBuffer.h')
-rw-r--r-- | OpenAL32/alBuffer.h | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/OpenAL32/alBuffer.h b/OpenAL32/alBuffer.h new file mode 100644 index 00000000..92655784 --- /dev/null +++ b/OpenAL32/alBuffer.h @@ -0,0 +1,120 @@ +#ifndef _AL_BUFFER_H_ +#define _AL_BUFFER_H_ + +#include "AL/alc.h" +#include "AL/al.h" +#include "AL/alext.h" + +#include "inprogext.h" +#include "atomic.h" +#include "vector.h" +#include "albyte.h" + + +/* User formats */ +enum UserFmtType : unsigned char { + UserFmtUByte, + UserFmtShort, + UserFmtFloat, + UserFmtDouble, + UserFmtMulaw, + UserFmtAlaw, + UserFmtIMA4, + UserFmtMSADPCM, +}; +enum UserFmtChannels : unsigned char { + UserFmtMono, + UserFmtStereo, + UserFmtRear, + UserFmtQuad, + UserFmtX51, /* (WFX order) */ + UserFmtX61, /* (WFX order) */ + UserFmtX71, /* (WFX order) */ + UserFmtBFormat2D, /* WXY */ + UserFmtBFormat3D, /* WXYZ */ +}; + +ALsizei BytesFromUserFmt(UserFmtType type); +ALsizei ChannelsFromUserFmt(UserFmtChannels chans); +inline ALsizei FrameSizeFromUserFmt(UserFmtChannels chans, UserFmtType type) +{ return ChannelsFromUserFmt(chans) * BytesFromUserFmt(type); } + + +/* Storable formats */ +enum FmtType : unsigned char { + FmtUByte = UserFmtUByte, + FmtShort = UserFmtShort, + FmtFloat = UserFmtFloat, + FmtDouble = UserFmtDouble, + FmtMulaw = UserFmtMulaw, + FmtAlaw = UserFmtAlaw, +}; +enum FmtChannels : unsigned char { + FmtMono = UserFmtMono, + FmtStereo = UserFmtStereo, + FmtRear = UserFmtRear, + FmtQuad = UserFmtQuad, + FmtX51 = UserFmtX51, + FmtX61 = UserFmtX61, + FmtX71 = UserFmtX71, + FmtBFormat2D = UserFmtBFormat2D, + FmtBFormat3D = UserFmtBFormat3D, +}; +#define MAX_INPUT_CHANNELS (8) + +/* DevFmtType traits, providing the type, etc given a DevFmtType. */ +template<FmtType T> +struct FmtTypeTraits { }; + +template<> +struct FmtTypeTraits<FmtUByte> { using Type = ALubyte; }; +template<> +struct FmtTypeTraits<FmtShort> { using Type = ALshort; }; +template<> +struct FmtTypeTraits<FmtFloat> { using Type = ALfloat; }; +template<> +struct FmtTypeTraits<FmtDouble> { using Type = ALdouble; }; +template<> +struct FmtTypeTraits<FmtMulaw> { using Type = ALubyte; }; +template<> +struct FmtTypeTraits<FmtAlaw> { using Type = ALubyte; }; + + +ALsizei BytesFromFmt(FmtType type); +ALsizei ChannelsFromFmt(FmtChannels chans); +inline ALsizei FrameSizeFromFmt(FmtChannels chans, FmtType type) +{ return ChannelsFromFmt(chans) * BytesFromFmt(type); } + + +struct ALbuffer { + al::vector<al::byte,16> mData; + + ALsizei Frequency{0}; + ALbitfieldSOFT Access{0u}; + ALsizei SampleLen{0}; + + FmtChannels mFmtChannels{}; + FmtType mFmtType{}; + + UserFmtType OriginalType{}; + ALsizei OriginalSize{0}; + ALsizei OriginalAlign{0}; + + ALsizei LoopStart{0}; + ALsizei LoopEnd{0}; + + std::atomic<ALsizei> UnpackAlign{0}; + std::atomic<ALsizei> PackAlign{0}; + + ALbitfieldSOFT MappedAccess{0u}; + ALsizei MappedOffset{0}; + ALsizei MappedSize{0}; + + /* Number of times buffer was attached to a source (deletion can only occur when 0) */ + RefCount ref{0u}; + + /* Self ID */ + ALuint id{0}; +}; + +#endif |