X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fsource.cpp;h=df3063ce50e909c156b5d2322745d7d40f4eb6d5;hb=2964e0cbc2fd4d6b838cc5f0598db1318fb4c529;hp=e8f33c0d8be5e1014d9082879f5032ca81a12d77;hpb=8e69eba7dc53233c169152bdf654f032fcd0629f;p=libs%2Fal.git diff --git a/source/source.cpp b/source/source.cpp index e8f33c0..df3063c 100644 --- a/source/source.cpp +++ b/source/source.cpp @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of libmspal -Copyright © 2008 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - #include "buffer.h" #include "source.h" @@ -23,71 +16,90 @@ Source::~Source() alDeleteSources(1, &id); } -void Source::attribute(ALenum attr, int v) -{ - alSourcei(id, attr, v); -} - -void Source::attribute(ALenum attr, float v) +SourceState Source::get_state() const { - alSourcef(id, attr, v); + int state = INITIAL; + alGetSourcei(id, AL_SOURCE_STATE, &state); + return static_cast(state); } -void Source::attribute(ALenum attr, float v0, float v1, float v2) +void Source::set_position(float x, float y, float z) { - alSource3f(id, attr, v0, v1, v2); + alSource3f(id, AL_POSITION, x, y, z); } -void Source::attribute(ALenum attr, const float *v) +void Source::set_velocity(float x, float y, float z) { - alSourcefv(id, attr, v); + alSource3f(id, AL_VELOCITY, x, y, z); } -void Source::get_attr(ALenum attr, int *v) const +void Source::set_looping(bool l) { - alGetSourcei(id, attr, v); + alSourcei(id, AL_LOOPING, l); } -void Source::get_attr(ALenum attr, float *v) const +void Source::set_gain(float g) { - alGetSourcef(id, attr, v); + alSourcef(id, AL_GAIN, g); } -SourceState Source::get_state() const +void Source::set_rolloff_factor(float f) { - int state; - get_attr(AL_SOURCE_STATE, &state); - return static_cast(state); + alSourcef(id, AL_ROLLOFF_FACTOR, f); } -void Source::set_position(float x, float y, float z) +void Source::set_buffer(const Buffer &buffer) { - attribute(AL_POSITION, x, y, z); + alSourcei(id, AL_BUFFER, buffer.get_id()); } -void Source::set_looping(bool l) +void Source::queue_buffers(const vector &buffers) { - attribute(AL_LOOPING, l); + vector ids; + ids.reserve(buffers.size()); + for(vector::const_iterator i=buffers.begin(); i!=buffers.end(); ++i) + ids.push_back((*i)->get_id()); + alSourceQueueBuffers(id, ids.size(), &ids.front()); } -void Source::set_buffer(const Buffer &buffer) +void Source::queue_buffer(const Buffer &buffer) { - attribute(AL_BUFFER, static_cast(buffer.get_id())); + uint bid = buffer.get_id(); + alSourceQueueBuffers(id, 1, &bid); } -void Source::queue_buffers(const vector &buffers) +void Source::unqueue_buffers(const vector &buffers) { vector ids; ids.reserve(buffers.size()); for(vector::const_iterator i=buffers.begin(); i!=buffers.end(); ++i) ids.push_back((*i)->get_id()); - alSourceQueueBuffers(id, ids.size(), &ids.front()); + alSourceUnqueueBuffers(id, ids.size(), &ids.front()); } -void Source::queue_buffer(const Buffer &buffer) +void Source::unqueue_buffer(const Buffer &buffer) { - uint bid=buffer.get_id(); - alSourceQueueBuffers(id, 1, &bid); + uint bid = buffer.get_id(); + alSourceUnqueueBuffers(id, 1, &bid); +} + +void Source::clear_buffers() +{ + alSourcei(id, AL_BUFFER, AL_NONE); +} + +unsigned Source::get_buffers_queued() const +{ + int n = 0; + alGetSourceiv(id, AL_BUFFERS_QUEUED, &n); + return n; +} + +unsigned Source::get_buffers_processed() const +{ + int n = 0; + alGetSourceiv(id, AL_BUFFERS_PROCESSED, &n); + return n; } void Source::play()