#ifndef AL_BUFFER_H
|
|
#define AL_BUFFER_H
|
|
|
|
#include <atomic>
|
|
|
|
#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<al::byte,16> 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
|