mirror of
https://github.com/jmarshall23/DoomRTX.git
synced 2026-08-12 08:11:10 +02:00
97 lines
2.3 KiB
C++
97 lines
2.3 KiB
C++
/*
|
|
===========================================================================
|
|
|
|
IceTech GPL Source Code
|
|
Copyright (C) 2026 Justin Marshall
|
|
|
|
===========================================================================
|
|
*/
|
|
#include "precompiled.h"
|
|
#pragma hdrstop
|
|
|
|
#include "../../sound/snd_local.h"
|
|
#include "win_local.h"
|
|
|
|
#include "../../openal/idal.cpp"
|
|
|
|
/*
|
|
===============
|
|
idAudioHardwareWIN32
|
|
|
|
OpenAL owns the Windows playback device. The sound system still asks for an
|
|
idAudioHardware object so shared mixer timing and speaker-count code can run.
|
|
===============
|
|
*/
|
|
class idAudioHardwareWIN32 : public idAudioHardware {
|
|
public:
|
|
idAudioHardwareWIN32() {
|
|
numSpeakers = idSoundSystemLocal::s_numberOfSpeakers.GetInteger();
|
|
if ( numSpeakers != 6 ) {
|
|
numSpeakers = 2;
|
|
}
|
|
}
|
|
|
|
virtual bool Initialize() { return true; }
|
|
virtual bool Lock( void **pDSLockedBuffer, ulong *dwDSLockedBufferSize ) {
|
|
*pDSLockedBuffer = NULL;
|
|
*dwDSLockedBufferSize = 0;
|
|
return false;
|
|
}
|
|
virtual bool Unlock( void *pDSLockedBuffer, dword dwDSLockedBufferSize ) { return false; }
|
|
virtual bool GetCurrentPosition( ulong *pdwCurrentWriteCursor ) {
|
|
*pdwCurrentWriteCursor = 0;
|
|
return false;
|
|
}
|
|
virtual bool Flush( void ) { return true; }
|
|
virtual void Write( bool flushing ) {}
|
|
virtual int GetNumberOfSpeakers( void ) { return numSpeakers; }
|
|
virtual int GetMixBufferSize( void ) { return MIXBUFFER_SAMPLES * numSpeakers * sizeof( short ); }
|
|
virtual short *GetMixBuffer( void ) { return NULL; }
|
|
|
|
private:
|
|
int numSpeakers;
|
|
};
|
|
|
|
idAudioHardware *idAudioHardware::Alloc() { return new idAudioHardwareWIN32; }
|
|
idAudioHardware::~idAudioHardware() {}
|
|
|
|
static HMODULE hOpenAL = NULL;
|
|
|
|
/*
|
|
===============
|
|
Sys_LoadOpenAL
|
|
===============
|
|
*/
|
|
bool Sys_LoadOpenAL( void ) {
|
|
const char *sym;
|
|
|
|
if ( hOpenAL ) {
|
|
return true;
|
|
}
|
|
|
|
hOpenAL = LoadLibraryA( idSoundSystemLocal::s_libOpenAL.GetString() );
|
|
if ( !hOpenAL ) {
|
|
common->Warning( "LoadLibrary %s failed.", idSoundSystemLocal::s_libOpenAL.GetString() );
|
|
return false;
|
|
}
|
|
if ( ( sym = InitializeIDAL( hOpenAL ) ) ) {
|
|
common->Warning( "GetProcAddress %s failed.", sym );
|
|
FreeLibrary( hOpenAL );
|
|
hOpenAL = NULL;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/*
|
|
===============
|
|
Sys_FreeOpenAL
|
|
===============
|
|
*/
|
|
void Sys_FreeOpenAL( void ) {
|
|
if ( hOpenAL ) {
|
|
FreeLibrary( hOpenAL );
|
|
hOpenAL = NULL;
|
|
}
|
|
}
|