#ifndef AL_BUFFER_H #define AL_BUFFER_H #include #include "AL/al.h" #include "albyte.h" #include "alc/inprogext.h" #include "almalloc.h" #include "atomic.h" #include "core/buffer_storage.h" #include "vector.h" #ifdef ALSOFT_EAX #include "eax/x_ram.h" #endif // ALSOFT_EAX /* User formats */ enum UserFmtType : unsigned char { UserFmtUByte = FmtUByte, UserFmtShort = FmtShort, UserFmtFloat = FmtFloat, UserFmtMulaw = FmtMulaw, UserFmtAlaw = FmtAlaw, UserFmtDouble = FmtDouble, UserFmtIMA4 = 128, UserFmtMSADPCM, }; enum UserFmtChannels : unsigned char { UserFmtMono = FmtMono, UserFmtStereo = FmtStereo, UserFmtRear = FmtRear, UserFmtQuad = FmtQuad, UserFmtX51 = FmtX51, UserFmtX61 = FmtX61, UserFmtX71 = FmtX71, UserFmtBFormat2D = FmtBFormat2D, UserFmtBFormat3D = FmtBFormat3D, UserFmtUHJ2 = FmtUHJ2, UserFmtUHJ3 = FmtUHJ3, UserFmtUHJ4 = FmtUHJ4, }; struct ALbuffer : public BufferStorage { ALbitfieldSOFT Access{0u}; al::vector mData; UserFmtType OriginalType{UserFmtShort}; ALuint OriginalSize{0}; ALuint OriginalAlign{0}; ALuint UnpackAlign{0}; ALuint PackAlign{0}; ALuint UnpackAmbiOrder{1}; ALbitfieldSOFT MappedAccess{0u}; ALsizei MappedOffset{0}; ALsizei MappedSize{0}; ALuint mLoopStart{0u}; ALuint mLoopEnd{0u}; /* Number of times buffer was attached to a source (deletion can only occur when 0) */ RefCount ref{0u}; /* Self ID */ ALuint id{0}; DISABLE_ALLOC() #ifdef ALSOFT_EAX ALenum eax_x_ram_mode{AL_STORAGE_AUTOMATIC}; bool eax_x_ram_is_hardware{}; #endif // ALSOFT_EAX }; #endif