]> git.tdb.fi Git - libs/al.git/blobdiff - source/source.cpp
Add Streamer class
[libs/al.git] / source / source.cpp
index e8f33c0d8be5e1014d9082879f5032ca81a12d77..3619b1d61205c9128d0ffb87d7e66909acf738f2 100644 (file)
@@ -43,12 +43,12 @@ void Source::attribute(ALenum attr, const float *v)
        alSourcefv(id, attr, v);
 }
 
-void Source::get_attr(ALenum attr, int *v) const
+void Source::get_attribute(ALenum attr, int *v) const
 {
        alGetSourcei(id, attr, v);
 }
 
-void Source::get_attr(ALenum attr, float *v) const
+void Source::get_attribute(ALenum attr, float *v) const
 {
        alGetSourcef(id, attr, v);
 }
@@ -56,10 +56,24 @@ void Source::get_attr(ALenum attr, float *v) const
 SourceState Source::get_state() const
 {
        int state;
-       get_attr(AL_SOURCE_STATE, &state);
+       get_attribute(AL_SOURCE_STATE, &state);
        return static_cast<SourceState>(state);
 }
 
+unsigned Source::get_buffers_queued() const
+{
+       int n;
+       get_attribute(AL_BUFFERS_QUEUED, &n);
+       return n;
+}
+
+unsigned Source::get_buffers_processed() const
+{
+       int n;
+       get_attribute(AL_BUFFERS_PROCESSED, &n);
+       return n;
+}
+
 void Source::set_position(float x, float y, float z)
 {
        attribute(AL_POSITION, x, y, z);
@@ -90,6 +104,26 @@ void Source::queue_buffer(const Buffer &buffer)
        alSourceQueueBuffers(id, 1, &bid);
 }
 
+void Source::unqueue_buffers(const vector<const Buffer *> &buffers)
+{
+       vector<uint> ids;
+       ids.reserve(buffers.size());
+       for(vector<const Buffer *>::const_iterator i=buffers.begin(); i!=buffers.end(); ++i)
+               ids.push_back((*i)->get_id());
+       alSourceUnqueueBuffers(id, ids.size(), &ids.front());
+}
+
+void Source::unqueue_buffer(const Buffer &buffer)
+{
+       uint bid=buffer.get_id();
+       alSourceUnqueueBuffers(id, 1, &bid);
+}
+
+void Source::clear_buffers()
+{
+       attribute(AL_BUFFER, AL_NONE);
+}
+
 void Source::play()
 {
        alSourcePlay(id);