I hope this works

This commit is contained in:
Cary Sandvig 2000-11-30 23:47:51 +00:00
parent fab7e6fde3
commit b7f596a410
13 changed files with 97 additions and 28 deletions

View File

@ -270,17 +270,23 @@ AudioTraits::PlayerClass* LinuxSample::get_player(void) const {
return LinuxSamplePlayer::get_instance();
}
// REFCOUNT
/*
AudioTraits::DeleteSoundFunc* LinuxSample::get_destroy(void) const {
return LinuxSample::destroy;
}
*/
AudioTraits::DeletePlayingFunc* LinuxSample::get_delstate(void) const {
return LinuxSamplePlaying::destroy;
}
// REFCOUNT
/*
void LinuxSample::destroy(AudioTraits::SoundClass* sound) {
delete sound;
}
*/
LinuxSample* LinuxSample::load_raw(byte* data, unsigned long size) {
LinuxSample* ret = new LinuxSample(data, size);
@ -302,17 +308,23 @@ AudioTraits::PlayerClass* LinuxMusic::get_player(void) const {
return LinuxMusicPlayer::get_instance();
}
// REFCOUNT
/*
AudioTraits::DeleteSoundFunc* LinuxMusic::get_destroy(void) const {
return LinuxMusic::destroy;
}
*/
AudioTraits::DeletePlayingFunc* LinuxMusic::get_delstate(void) const {
return LinuxMusicPlaying::destroy;
}
// REFCOUNT
/*
void LinuxMusic::destroy(AudioTraits::SoundClass* music) {
delete music;
}
*/
LinuxSamplePlaying::~LinuxSamplePlaying(void) {
}

View File

@ -70,9 +70,10 @@ public:
virtual float length(void) const;
virtual AudioTraits::PlayingClass* get_state(void) const;
virtual AudioTraits::PlayerClass* get_player(void) const;
virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// REFCOUNT
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// static void destroy(AudioTraits::SoundClass*);
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
static void destroy(AudioTraits::SoundClass*);
public:
// used by the loader
static LinuxSample* load_raw(byte*, unsigned long);
@ -89,9 +90,10 @@ public:
virtual float length(void) const;
virtual AudioTraits::PlayingClass* get_state(void) const;
virtual AudioTraits::PlayerClass* get_player(void) const;
virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// REFCOUNT
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// static void destroy(AudioTraits::SoundClass*);
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
static void destroy(AudioTraits::SoundClass*);
};
class EXPCL_PANDA LinuxSamplePlaying : public AudioTraits::PlayingClass {

View File

@ -145,9 +145,12 @@ AudioTraits::PlayerClass* MikModSample::get_player(void) const {
return MikModSamplePlayer::get_instance();
}
// REFCOUNT
/*
AudioTraits::DeleteSoundFunc* MikModSample::get_destroy(void) const {
return MikModSample::destroy;
}
*/
AudioTraits::DeletePlayingFunc* MikModSample::get_delstate(void) const {
return MikModSamplePlaying::destroy;
@ -164,9 +167,12 @@ MikModSample* MikModSample::load_wav(Filename filename) {
return new MikModSample(sample);
}
// REFCOUNT
/*
void MikModSample::destroy(AudioTraits::SoundClass* sample) {
delete sample;
}
*/
SAMPLE* MikModSample::get_sample(void) {
return _sample;
@ -194,17 +200,23 @@ AudioTraits::PlayerClass* MikModMusic::get_player(void) const {
return MikModFmsynthPlayer::get_instance();
}
// REFCOUNT
/*
AudioTraits::DeleteSoundFunc* MikModMusic::get_destroy(void) const {
return MikModMusic::destroy;
}
*/
AudioTraits::DeletePlayingFunc* MikModMusic::get_delstate(void) const {
return MikModMusicPlaying::destroy;
}
// REFCOUNT
/*
void MikModMusic::destroy(AudioTraits::SoundClass* music) {
delete music;
}
*/
MikModMidi::MikModMidi(void) {
}
@ -229,17 +241,23 @@ AudioTraits::PlayerClass* MikModMidi::get_player(void) const {
return MikModMidiPlayer::get_instance();
}
// REFCOUNT
/*
AudioTraits::DeleteSoundFunc* MikModMidi::get_destroy(void) const {
return MikModMidi::destroy;
}
*/
AudioTraits::DeletePlayingFunc* MikModMidi::get_delstate(void) const {
return MikModMidiPlaying::destroy;
}
// REFCOUNT
/*
void MikModMidi::destroy(AudioTraits::SoundClass* music) {
delete music;
}
*/
MikModSamplePlaying::MikModSamplePlaying(AudioTraits::SoundClass* s)
: AudioTraits::PlayingClass(s) {

View File

@ -27,12 +27,14 @@ public:
virtual float length(void) const;
virtual AudioTraits::PlayingClass* get_state(void) const;
virtual AudioTraits::PlayerClass* get_player(void) const;
virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// REFCOUNT
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
public:
// used by the readers
static MikModSample* load_wav(Filename);
static void destroy(AudioTraits::SoundClass*);
// REFCOUNT
// static void destroy(AudioTraits::SoundClass*);
// used by the players
virtual SAMPLE* get_sample(void);
virtual int get_freq(void);
@ -48,9 +50,10 @@ public:
virtual float length(void) const;
virtual AudioTraits::PlayingClass* get_state(void) const;
virtual AudioTraits::PlayerClass* get_player(void) const;
virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// REFCOUNT
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// static void destroy(AudioTraits::SoundClass*);
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
static void destroy(AudioTraits::SoundClass*);
};
class EXPCL_PANDA MikModMidi : public AudioTraits::SoundClass {
@ -62,9 +65,10 @@ public:
virtual float length(void) const;
virtual AudioTraits::PlayingClass* get_state(void) const;
virtual AudioTraits::PlayerClass* get_player(void) const;
virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// REFCOUNT
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// static void destroy(AudioTraits::SoundClass*);
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
static void destroy(AudioTraits::SoundClass*);
public:
// used by the readers
static MikModMidi* load_midi(Filename);

View File

@ -41,17 +41,23 @@ AudioTraits::PlayerClass* NullSound::get_player(void) const {
return new NullPlayer();
}
// REFCOUNT
/*
AudioTraits::DeleteSoundFunc* NullSound::get_destroy(void) const {
return NullSound::destroy;
}
*/
AudioTraits::DeletePlayingFunc* NullSound::get_delstate(void) const {
return NullPlaying::destroy;
}
// REFCOUNT
/*
void NullSound::destroy(AudioTraits::SoundClass* sound) {
delete sound;
}
*/
NullPlaying::~NullPlaying(void) {
}

View File

@ -21,9 +21,10 @@ public:
virtual float length(void) const;
virtual AudioTraits::PlayingClass* get_state(void) const;
virtual AudioTraits::PlayerClass* get_player(void) const;
virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// REFCOUNT
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// static void destroy(AudioTraits::SoundClass*);
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
static void destroy(AudioTraits::SoundClass*);
};
class EXPCL_PANDA NullPlaying : public AudioTraits::PlayingClass {

View File

@ -67,7 +67,7 @@ AudioSound* AudioPool::ns_load_sound(Filename filename) {
si = _sounds.find(filename);
if (si != _sounds.end()) {
// this sound was previously loaded
AudioTraits::SoundClass* sc = (*si).second;
PT(AudioTraits::SoundClass) sc = (*si).second;
if (audio_cat->is_debug())
audio_cat->debug() << "sound is already loaded (0x" << (void*)sc
<< ")" << endl;
@ -91,7 +91,7 @@ AudioSound* AudioPool::ns_load_sound(Filename filename) {
<< "'" << endl;
return (AudioSound*)0L;
}
AudioTraits::SoundClass* sound = (*((*sli).second))(filename);
PT(AudioTraits::SoundClass) sound = (*((*sli).second))(filename);
if (sound == (AudioTraits::SoundClass*)0L) {
audio_cat->error() << "could not load '" << filename << "'" << endl;
return (AudioSound*)0L;
@ -116,8 +116,10 @@ void AudioPool::ns_release_sound(AudioSound* sound) {
SoundMap::iterator si;
si = _sounds.find(filename);
if (si != _sounds.end() && (*si).second == sound->get_sound()) {
AudioTraits::SoundClass* sc = (*si).second;
(*(sc->get_destroy()))(sc);
// REFCOUNT
// don't do this with refcounting
// AudioTraits::SoundClass* sc = (*si).second;
// (*(sc->get_destroy()))(sc);
_sounds.erase(si);
}
}
@ -129,8 +131,10 @@ void AudioPool::ns_release_sound(AudioSound* sound) {
////////////////////////////////////////////////////////////////////
void AudioPool::ns_release_all_sounds(void) {
for (SoundMap::iterator i=_sounds.begin(); i!=_sounds.end(); ++i) {
AudioTraits::SoundClass* sc = (*i).second;
(*(sc->get_destroy()))(sc);
// REFCOUNT
// don't do this with refcounting
// AudioTraits::SoundClass* sc = (*i).second;
// (*(sc->get_destroy()))(sc);
}
_sounds.clear();
}

View File

@ -26,7 +26,7 @@ private:
static AudioPool* get_ptr(void);
static AudioPool *_global_ptr;
typedef map<string, AudioTraits::SoundClass* > SoundMap;
typedef map<string, PT(AudioTraits::SoundClass) > SoundMap;
SoundMap _sounds;
public:
typedef AudioTraits::SoundClass* SoundLoadFunc(Filename);

View File

@ -10,8 +10,10 @@
/*
#include "typedReferenceCount.h"
*/
#include "typeHandle.h"
#include "namable.h"
#include <typeHandle.h>
#include <namable.h>
#include <pointerTo.h>
class AudioPool;
class AudioManager;
@ -21,7 +23,7 @@ class EXPCL_PANDA AudioSound : public TypedReferenceCount, public Namable {
*/
class EXPCL_PANDA AudioSound : public TypedObject, public Namable {
private:
AudioTraits::SoundClass *_sound;
PT(AudioTraits::SoundClass) _sound;
AudioTraits::PlayingClass *_state;
AudioTraits::PlayerClass *_player;
AudioTraits::DeletePlayingFunc *_delstate;

View File

@ -24,11 +24,14 @@ AudioTraits::PlayerClass* AudioTraits::SoundClass::get_player(void) const {
return (AudioTraits::PlayerClass*)0L;
}
// REFCOUNT
/*
AudioTraits::DeleteSoundFunc*
AudioTraits::SoundClass::get_destroy(void) const {
audio_cat->error() << "In abstract SoundClass::get_destroy!" << endl;
return (AudioTraits::DeleteSoundFunc*)0L;
}
*/
AudioTraits::DeletePlayingFunc*
AudioTraits::SoundClass::get_delstate(void) const {

View File

@ -7,6 +7,7 @@
#define __AUDIO_TRAIT_H__
#include <pandabase.h>
#include <referenceCount.h>
class EXPCL_PANDA AudioTraits {
public:
@ -17,7 +18,7 @@ public:
typedef void DeleteSoundFunc(SoundClass*);
typedef void DeletePlayingFunc(PlayingClass*);
class EXPCL_PANDA SoundClass {
class EXPCL_PANDA SoundClass : public ReferenceCount {
public:
SoundClass(void) {}
virtual ~SoundClass(void);
@ -25,7 +26,8 @@ public:
virtual float length(void) const = 0;
virtual PlayingClass* get_state(void) const = 0;
virtual PlayerClass* get_player(void) const = 0;
virtual DeleteSoundFunc* get_destroy(void) const = 0;
// REFCOUNT
// virtual DeleteSoundFunc* get_destroy(void) const = 0;
virtual DeletePlayingFunc* get_delstate(void) const = 0;
};
class EXPCL_PANDA PlayingClass {

View File

@ -204,12 +204,15 @@ AudioTraits::PlayerClass* WinSample::get_player(void) const {
return ret;
}
// REFCOUNT
/*
AudioTraits::DeleteSoundFunc* WinSample::get_destroy(void) const {
if (audio_cat->is_debug())
audio_cat->debug() << "winsample get_destroy returning 0x"
<< (void*)(WinSample::destroy) << endl;
return WinSample::destroy;
}
*/
AudioTraits::DeletePlayingFunc* WinSample::get_delstate(void) const {
if (audio_cat->is_debug())
@ -418,12 +421,15 @@ WinSample* WinSample::load_raw(unsigned char* data, unsigned long size) {
return ret;
}
// REFCOUNT
/*
void WinSample::destroy(AudioTraits::SoundClass* sample) {
if (audio_cat->is_debug())
audio_cat->debug() << "winsample destroy deleting 0x" << (void*)sample
<< endl;
delete sample;
}
*/
WinMusic::~WinMusic(void) {
// AudioManager::stop(this);
@ -554,12 +560,15 @@ AudioTraits::PlayerClass* WinMusic::get_player(void) const {
return ret;
}
// REFCOUNT
/*
AudioTraits::DeleteSoundFunc* WinMusic::get_destroy(void) const {
if (audio_cat->is_debug())
audio_cat->debug() << "winmusic get_destroy returning 0x"
<< (void*)(WinMusic::destroy) << endl;
return WinMusic::destroy;
}
*/
AudioTraits::DeletePlayingFunc* WinMusic::get_delstate(void) const {
if (audio_cat->is_debug())
@ -568,11 +577,14 @@ AudioTraits::DeletePlayingFunc* WinMusic::get_delstate(void) const {
return WinMusicPlaying::destroy;
}
// REFCOUNT
/*
void WinMusic::destroy(AudioTraits::SoundClass* music) {
if (audio_cat->is_debug())
audio_cat->debug() << "winmusic destroy got 0x" << (void*)music << endl;
delete music;
}
*/
WinMusic* WinMusic::load_midi(Filename filename) {
if (audio_cat->is_debug())

View File

@ -30,12 +30,14 @@ public:
virtual float length(void) const;
virtual AudioTraits::PlayingClass* get_state(void) const;
virtual AudioTraits::PlayerClass* get_player(void) const;
virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// REFCOUNT
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
public:
static WinSample* load_wav(Filename);
static WinSample* load_raw(unsigned char*, unsigned long);
static void destroy(AudioTraits::SoundClass*);
// REFCOUNT
// static void destroy(AudioTraits::SoundClass*);
};
class EXPCL_PANDA WinMusic : public AudioTraits::SoundClass {
@ -55,9 +57,10 @@ public:
virtual float length(void) const;
virtual AudioTraits::PlayingClass* get_state(void) const;
virtual AudioTraits::PlayerClass* get_player(void) const;
virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// REFCOUNT
// virtual AudioTraits::DeleteSoundFunc* get_destroy(void) const;
// static void destroy(AudioTraits::SoundClass*);
virtual AudioTraits::DeletePlayingFunc* get_delstate(void) const;
static void destroy(AudioTraits::SoundClass*);
// these are used by the loaders
static WinMusic* load_midi(Filename);
// these are used by the players