1 #ifndef AL_BUFFER_H 2 #define AL_BUFFER_H 3 4 #include <atomic> 5 6 #include "AL/al.h" 7 8 #include "albyte.h" 9 #include "almalloc.h" 10 #include "atomic.h" 11 #include "buffer_storage.h" 12 #include "inprogext.h" 13 #include "vector.h" 14 15 16 /* User formats */ 17 enum UserFmtType : unsigned char { 18 UserFmtUByte = FmtUByte, 19 UserFmtShort = FmtShort, 20 UserFmtFloat = FmtFloat, 21 UserFmtMulaw = FmtMulaw, 22 UserFmtAlaw = FmtAlaw, 23 UserFmtDouble = FmtDouble, 24 25 UserFmtIMA4 = 128, 26 UserFmtMSADPCM, 27 }; 28 enum UserFmtChannels : unsigned char { 29 UserFmtMono = FmtMono, 30 UserFmtStereo = FmtStereo, 31 UserFmtRear = FmtRear, 32 UserFmtQuad = FmtQuad, 33 UserFmtX51 = FmtX51, 34 UserFmtX61 = FmtX61, 35 UserFmtX71 = FmtX71, 36 UserFmtBFormat2D = FmtBFormat2D, 37 UserFmtBFormat3D = FmtBFormat3D, 38 }; 39 40 41 struct ALbuffer : public BufferStorage { 42 ALbitfieldSOFT Access{0u}; 43 44 al::vector<al::byte,16> mData; 45 46 UserFmtType OriginalType{UserFmtShort}; 47 ALuint OriginalSize{0}; 48 ALuint OriginalAlign{0}; 49 50 ALuint UnpackAlign{0}; 51 ALuint PackAlign{0}; 52 ALuint UnpackAmbiOrder{1}; 53 54 ALbitfieldSOFT MappedAccess{0u}; 55 ALsizei MappedOffset{0}; 56 ALsizei MappedSize{0}; 57 58 ALuint mLoopStart{0u}; 59 ALuint mLoopEnd{0u}; 60 61 /* Number of times buffer was attached to a source (deletion can only occur when 0) */ 62 RefCount ref{0u}; 63 64 /* Self ID */ 65 ALuint id{0}; 66 67 DISABLE_ALLOC() 68 }; 69 70 #endif 71