Use shared pointers instead of unique_ptr
[alure.git] / src / source.h
blobe06e7687f1ebbd552bc64c8e90de36b22381fa5e
1 #ifndef SOURCE_H
2 #define SOURCE_H
4 #include "main.h"
6 #include <map>
8 #include "al.h"
9 #include "alext.h"
11 namespace alure {
13 class ALContext;
14 class ALBuffer;
15 class ALBufferStream;
16 class ALAuxiliaryEffectSlot;
18 struct SendProps {
19 ALAuxiliaryEffectSlot *mSlot;
20 ALuint mFilter;
22 SendProps(ALAuxiliaryEffectSlot *slot) : mSlot(slot), mFilter(AL_FILTER_NULL)
23 { }
24 SendProps(ALuint filter) : mSlot(0), mFilter(filter)
25 { }
26 SendProps(ALAuxiliaryEffectSlot *slot, ALuint filter) : mSlot(slot), mFilter(filter)
27 { }
29 typedef std::map<ALuint,SendProps> SendPropMap;
31 class ALSource : public Source {
32 ALContext *const mContext;
33 ALuint mId;
35 ALBuffer *mBuffer;
36 ALBufferStream *mStream;
38 bool mLooping;
39 bool mPaused;
40 ALuint64SOFT mOffset;
41 ALfloat mPitch;
42 ALfloat mGain;
43 ALfloat mMinGain, mMaxGain;
44 ALfloat mRefDist, mMaxDist;
45 Vector3 mPosition;
46 Vector3 mVelocity;
47 Vector3 mDirection;
48 Vector3 mOrientation[2];
49 ALfloat mConeInnerAngle, mConeOuterAngle;
50 ALfloat mConeOuterGain;
51 ALfloat mRolloffFactor;
52 ALfloat mDopplerFactor;
53 bool mRelative;
55 ALuint mDirectFilter;
56 SendPropMap mEffectSlots;
58 ALuint mPriority;
60 void resetProperties();
61 void applyProperties(bool looping, ALuint offset) const;
63 void setFilterParams(ALuint &filterid, const FilterParams &params);
65 public:
66 ALSource(ALContext *context)
67 : mContext(context), mId(0), mBuffer(0), mStream(0), mDirectFilter(AL_FILTER_NULL)
68 { resetProperties(); }
70 void updateNoCtxCheck();
71 ALuint getId() const { return mId; }
73 virtual void play(Buffer *buffer) final;
74 virtual void play(SharedPtr<Decoder> decoder, ALuint updatelen, ALuint queuesize) final;
75 virtual void stop() final;
76 virtual void pause() final;
77 virtual void resume() final;
79 virtual bool isPlaying() const final;
80 virtual bool isPaused() const final;
82 virtual void setPriority(ALuint priority) final;
83 virtual ALuint getPriority() const final
84 { return mPriority; }
86 virtual void setOffset(uint64_t offset) final;
87 virtual uint64_t getOffset(uint64_t *latency=0) const final;
89 virtual void setLooping(bool looping) final;
90 virtual bool getLooping() const final
91 { return mLooping; }
93 virtual void setPitch(ALfloat pitch) final;
94 virtual ALfloat getPitch() const final
95 { return mPitch; }
97 virtual void setGain(ALfloat gain) final;
98 virtual ALfloat getGain() const final { return mGain; }
100 virtual void setGainRange(ALfloat mingain, ALfloat maxgain) final;
101 virtual ALfloat getMinGain() const final { return mMinGain; }
102 virtual ALfloat getMaxGain() const final { return mMaxGain; }
104 virtual void setDistanceRange(ALfloat refdist, ALfloat maxdist) final;
105 virtual ALfloat getReferenceDistance() const final { return mRefDist; }
106 virtual ALfloat getMaxDistance() const final { return mMaxDist; }
108 virtual void setPosition(ALfloat x, ALfloat y, ALfloat z) final;
109 virtual void setPosition(const ALfloat *pos) final;
110 virtual Vector3 getPosition() const final { return mPosition; }
112 virtual void setVelocity(ALfloat x, ALfloat y, ALfloat z) final;
113 virtual void setVelocity(const ALfloat *vel) final;
114 virtual Vector3 getVelocity() const final { return mVelocity; }
116 virtual void setDirection(ALfloat x, ALfloat y, ALfloat z) final;
117 virtual void setDirection(const ALfloat *dir) final;
118 virtual Vector3 getDirection() const final { return mDirection; }
120 virtual void setOrientation(ALfloat x1, ALfloat y1, ALfloat z1, ALfloat x2, ALfloat y2, ALfloat z2) final;
121 virtual void setOrientation(const ALfloat *at, const ALfloat *up) final;
122 virtual void setOrientation(const ALfloat *ori) final;
124 virtual void setConeAngles(ALfloat inner, ALfloat outer) final;
125 virtual ALfloat getInnerConeAngle() const final { return mConeInnerAngle; }
126 virtual ALfloat getOuterConeAngle() const final { return mConeOuterAngle; }
128 virtual void setOuterConeGain(ALfloat gain) final;
129 virtual ALfloat getOuterConeGain() const final
130 { return mConeOuterGain; }
132 virtual void setRolloffFactor(ALfloat factor) final;
133 virtual ALfloat getRolloffFactor() const final
134 { return mRolloffFactor; }
136 virtual void setDopplerFactor(ALfloat factor) final;
137 virtual ALfloat getDopplerFactor() const final
138 { return mDopplerFactor; }
140 virtual void setRelative(bool relative) final;
141 virtual bool getRelative() const final
142 { return mRelative; }
144 virtual void setDirectFilter(const FilterParams &filter) final;
145 virtual void setSendFilter(ALuint send, const FilterParams &filter) final;
146 virtual void setAuxiliarySend(AuxiliaryEffectSlot *slot, ALuint send) final;
147 virtual void setAuxiliarySendFilter(AuxiliaryEffectSlot *slot, ALuint send, const FilterParams &filter) final;
149 virtual void update() final;
151 virtual void release() final;
154 } // namespace alure
156 #endif /* SOURCE_H */