Reduced the number of explicit retain/release method calls on love objects. Less chance of bugs!

This commit is contained in:
Alex Szpakowski
2014-08-07 14:53:17 -03:00
parent a0fff798aa
commit d59c76a55f
38 changed files with 194 additions and 247 deletions
+8 -13
View File
@@ -98,7 +98,6 @@ Source::Source(Pool *pool, love::sound::Decoder *decoder)
, decoder(decoder)
, toLoop(0)
{
decoder->retain();
alGenBuffers(MAX_BUFFERS, streamBuffers);
float z[3] = {0, 0, 0};
@@ -132,13 +131,15 @@ Source::Source(const Source &s)
{
if (type == TYPE_STREAM)
{
if (s.decoder)
decoder = s.decoder->clone();
if (s.decoder.get())
{
love::sound::Decoder *dec = s.decoder->clone();
decoder.set(dec);
dec->release();
}
alGenBuffers(MAX_BUFFERS, streamBuffers);
}
else
staticBuffer->retain();
setFloatv(position, s.position);
setFloatv(velocity, s.velocity);
@@ -152,12 +153,6 @@ Source::~Source()
if (type == TYPE_STREAM)
alDeleteBuffers(MAX_BUFFERS, streamBuffers);
if (staticBuffer)
staticBuffer->release();
if (decoder)
decoder->release();
}
love::audio::Source *Source::clone()
@@ -269,7 +264,7 @@ bool Source::update()
offsetSamples += (curOffsetSamples - newOffsetSamples);
offsetSeconds += (curOffsetSecs - newOffsetSecs);
streamAtomic(buffer, decoder);
streamAtomic(buffer, decoder.get());
alSourceQueueBuffers(source, 1, &buffer);
}
return true;
@@ -510,7 +505,7 @@ bool Source::playAtomic()
for (unsigned int i = 0; i < MAX_BUFFERS; i++)
{
streamAtomic(streamBuffers[i], decoder);
streamAtomic(streamBuffers[i], decoder.get());
++usedBuffers;
if (decoder->isFinished())
break;
+2 -2
View File
@@ -148,7 +148,7 @@ private:
static const unsigned int MAX_BUFFERS = 32;
ALuint streamBuffers[MAX_BUFFERS];
StaticDataBuffer *staticBuffer;
Object::StrongRef<StaticDataBuffer> staticBuffer;
float pitch;
float volume;
@@ -182,7 +182,7 @@ private:
int channels;
love::sound::Decoder *decoder;
Object::StrongRef<love::sound::Decoder> decoder;
unsigned int toLoop;