You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
4.7 KiB
163 lines
4.7 KiB
//======== (C) Copyright 1996-2002 Valve, L.L.C. All rights reserved. ======== |
|
// |
|
// The copyright to the contents herein is the property of Valve, L.L.C. |
|
// The contents may be used and/or copied only with the written permission of |
|
// Valve, L.L.C., or in accordance with the terms and conditions stipulated in |
|
// the agreement/contract under which the contents have been supplied. |
|
// |
|
// Purpose: |
|
// |
|
// $Workfile: $ |
|
// $Date: $ |
|
// |
|
//----------------------------------------------------------------------------- |
|
// $Log: $ |
|
// |
|
// $NoKeywords: $ |
|
//============================================================================= |
|
|
|
#include <windows.h> |
|
#include <dsound.h> |
|
#include <mmsystem.h> |
|
#include "r_studioint.h" |
|
|
|
extern engine_studio_api_t IEngineStudio; |
|
|
|
#define RENDERTYPE_UNDEFINED 0 |
|
#define RENDERTYPE_SOFTWARE 1 |
|
#define RENDERTYPE_HARDWARE 2 |
|
|
|
#define ENGINE_LAUNCHER_API_VERSION 1 |
|
|
|
LPDIRECTSOUND lpDS = NULL; |
|
LPDIRECTSOUNDBUFFER lpDSBuf = NULL; |
|
LPHWAVEOUT lpHW = NULL; |
|
|
|
static HMODULE hEngine = 0; |
|
|
|
typedef struct engine_api_s |
|
{ |
|
int version; |
|
int rendertype; |
|
int size; |
|
|
|
// Functions |
|
void ( *unused1 ) ( void ); |
|
void ( *unused2 ) ( void ); |
|
void ( *unused3 ) ( void ); |
|
void ( *unused4 ) ( void ); |
|
void ( *unused5 ) ( void ); |
|
void ( *unused6 ) ( void ); |
|
void ( *unused7 ) ( void ); |
|
void ( *unused8 ) ( void ); |
|
void ( *unused9 ) ( void ); |
|
void ( *unused10 ) ( void ); |
|
void ( *unused11 ) ( void ); |
|
void ( *unused12 ) ( void ); |
|
void ( *unused13 ) ( void ); |
|
void ( *unused14 ) ( void ); |
|
void ( *unused15 ) ( void ); |
|
void ( *unused16 ) ( void ); |
|
void ( *unused17 ) ( void ); |
|
void ( *unused18 ) ( void ); |
|
void ( *unused19 ) ( void ); |
|
void ( *unused20 ) ( void ); |
|
void ( *unused21 ) ( void ); |
|
void ( *unused22 ) ( void ); |
|
void ( *unused23 ) ( void ); |
|
void ( *unused24 ) ( void ); |
|
void ( *unused25 ) ( void ); |
|
void ( *unused26 ) ( void ); |
|
void ( *unused27 ) ( void ); |
|
void ( *unused28 ) ( void ); |
|
void ( *unused29 ) ( void ); |
|
void ( *unused30 ) ( void ); |
|
void ( *unused31 ) ( void ); |
|
void ( *unused32 ) ( void ); |
|
void ( *unused33 ) ( void ); |
|
void ( *unused34 ) ( void ); |
|
|
|
void ( *S_GetDSPointer ) ( struct IDirectSound **lpDS, struct IDirectSoundBuffer **lpDSBuf ); |
|
void *( *S_GetWAVPointer ) ( void ); |
|
|
|
void ( *unused35 ) ( void ); |
|
void ( *unused36 ) ( void ); |
|
void ( *unused37 ) ( void ); |
|
void ( *unused38 ) ( void ); |
|
void ( *unused39 ) ( void ); |
|
void ( *unused40 ) ( void ); |
|
void ( *unused41 ) ( void ); |
|
void ( *unused42 ) ( void ); |
|
void ( *unused43 ) ( void ); |
|
void ( *unused44 ) ( void ); |
|
void ( *unused45 ) ( void ); |
|
void ( *unused46 ) ( void ); |
|
void ( *unused47 ) ( void ); |
|
void ( *unused48 ) ( void ); |
|
void ( *unused49 ) ( void ); |
|
void ( *unused50 ) ( void ); |
|
void ( *unused51 ) ( void ); |
|
void ( *unused52 ) ( void ); |
|
void ( *unused53 ) ( void ); |
|
void ( *unused54 ) ( void ); |
|
void ( *unused55 ) ( void ); |
|
} engine_api_t; |
|
|
|
static engine_api_t engineapi; |
|
|
|
typedef int (*engine_api_func)( int version, int size, struct engine_api_s *api ); |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Get launcher/engine interface from engine module |
|
// Input : hMod - |
|
// Output : int |
|
//----------------------------------------------------------------------------- |
|
int Eng_LoadFunctions( HMODULE hMod ) |
|
{ |
|
engine_api_func pfnEngineAPI; |
|
|
|
pfnEngineAPI = ( engine_api_func )GetProcAddress( hMod, "Sys_EngineAPI" ); |
|
if( !pfnEngineAPI ) |
|
return 0; |
|
|
|
if( !(*pfnEngineAPI)( ENGINE_LAUNCHER_API_VERSION, sizeof( engine_api_t ), &engineapi ) ) |
|
return 0; |
|
|
|
// All is okay |
|
return 1; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Load proper engine .dll and get pointer to either DSound and primary buffer or HWAVEOUT ( NT 4.0, e.g. ) |
|
//----------------------------------------------------------------------------- |
|
void LoadSoundAPIs( void ) |
|
{ |
|
hEngine = ::LoadLibrary( IEngineStudio.IsHardware() ? "hw.dll" : "sw.dll" ); |
|
if( hEngine ) |
|
{ |
|
if( Eng_LoadFunctions( hEngine ) ) |
|
{ |
|
if( engineapi.S_GetDSPointer && engineapi.S_GetWAVPointer ) |
|
{ |
|
engineapi.S_GetDSPointer(&lpDS, &lpDSBuf); |
|
lpHW = (HWAVEOUT FAR *)engineapi.S_GetWAVPointer(); |
|
} |
|
} |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Close engine library, release sound pointers |
|
//----------------------------------------------------------------------------- |
|
void ShutdownSoundAPIs( void ) |
|
{ |
|
if( hEngine ) |
|
{ |
|
FreeLibrary( hEngine ); |
|
hEngine = 0; |
|
} |
|
|
|
lpDS = 0; |
|
lpDSBuf = 0; |
|
lpHW = 0; |
|
}
|
|
|