Skip to content

Commit

Permalink
Consolidate resource deletion in the audio renderer as well
Browse files Browse the repository at this point in the history
  • Loading branch information
ultraq committed Feb 15, 2024
1 parent 720e2de commit 821f088
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,18 +50,9 @@ interface AudioRenderer extends EventTarget {
Source createSource()

/**
* Delete multiple buffers at once.
*
* @param buffers
*/
void deleteBuffers(Buffer... buffers)

/**
* Delete a source.
*
* @param source
* Delete an audio resource.
*/
void deleteSource(Source source)
void delete(AudioResource resource)

/**
* Update details about the listener.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,7 @@ class AudioSystem extends EngineSystem implements AudioRequests {

if (deletionRequests) {
deletionRequests.drain().each { deletionRequest ->
switch (deletionRequest) {
case Source -> renderer.deleteSource(deletionRequest)
case Buffer -> renderer.deleteBuffers(deletionRequest)
default -> throw new IllegalArgumentException("Cannot delete resource of type ${deletionRequest}")
}
renderer.delete(deletionRequest)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package nz.net.ultraq.redhorizon.engine.audio.openal

import nz.net.ultraq.redhorizon.engine.audio.AudioConfiguration
import nz.net.ultraq.redhorizon.engine.audio.AudioRenderer
import nz.net.ultraq.redhorizon.engine.audio.AudioResource
import nz.net.ultraq.redhorizon.engine.audio.Buffer
import nz.net.ultraq.redhorizon.engine.audio.BufferCreatedEvent
import nz.net.ultraq.redhorizon.engine.audio.BufferDeletedEvent
Expand Down Expand Up @@ -91,21 +92,16 @@ class OpenALRenderer implements AudioRenderer {
}

@Override
void deleteBuffers(Buffer... buffers) {
void delete(AudioResource resource) {

buffers.each { buffer ->
buffer.close()
trigger(new BufferDeletedEvent(buffer))
resource.close()
switch (resource) {
case Buffer -> trigger(new BufferDeletedEvent(resource))
case Source -> trigger(new SourceDeletedEvent(resource))
default -> throw new IllegalArgumentException("Cannot delete resource of type ${resource}")
}
}

@Override
void deleteSource(Source source) {

source.close()
trigger(new SourceDeletedEvent(source))
}

/**
* Emit some information about the OpenAL rendering device.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,9 @@ class Sound extends Node<Sound> implements AudioElement, Playable, Temporal {
if (buffersProcessed) {
var processedBuffers = streamedBuffers.drain(buffersProcessed)
source.unqueueBuffers(*processedBuffers)
renderer.deleteBuffers(*processedBuffers)
processedBuffers.each { processedBuffer ->
renderer.delete(processedBuffer)
}
}
}
}
Expand Down

0 comments on commit 821f088

Please sign in to comment.