14 EXT_thread_local_context
,
22 ALCdevice
*mDevice
{nullptr};
24 std::chrono::nanoseconds mTimeBase
, mPauseTime
;
25 bool mIsPaused
{false};
27 Vector
<UniquePtr
<ContextImpl
>> mContexts
;
29 Bitfield
<static_cast<size_t>(ALC::EXTENSION_MAX
)> mHasExt
;
31 std::once_flag mSetExts
;
35 DeviceImpl(const char *name
);
38 ALCdevice
*getALCdevice() const { return mDevice
; }
40 bool hasExtension(ALC ext
) const { return mHasExt
[static_cast<size_t>(ext
)]; }
42 LPALCDEVICEPAUSESOFT alcDevicePauseSOFT
{nullptr};
43 LPALCDEVICERESUMESOFT alcDeviceResumeSOFT
{nullptr};
45 LPALCGETSTRINGISOFT alcGetStringiSOFT
{nullptr};
46 LPALCRESETDEVICESOFT alcResetDeviceSOFT
{nullptr};
48 void removeContext(ContextImpl
*ctx
);
50 String
getName(PlaybackName type
) const;
51 bool queryExtension(const char *name
) const;
53 Version
getALCVersion() const;
54 Version
getEFXVersion() const;
56 ALCuint
getFrequency() const;
58 ALCuint
getMaxAuxiliarySends() const;
60 Vector
<String
> enumerateHRTFNames() const;
61 bool isHRTFEnabled() const;
62 String
getCurrentHRTF() const;
63 void reset(ArrayView
<AttributePair
> attributes
);
65 Context
createContext(ArrayView
<AttributePair
> attributes
);
70 std::chrono::nanoseconds
getClockTime();