Improve DSound 3D Interfaces
- Fixed HybridDirectSound3DBuffer_SetAllParameters - Add Info to 3D Interfaces
This commit is contained in:
parent
186530ee25
commit
02a76ffc8d
|
@ -539,7 +539,7 @@ HRESULT WINAPI XTL::EMUPATCH(IDirectSound_SetDopplerFactor)
|
|||
HRESULT WINAPI XTL::EMUPATCH(IDirectSound_SetI3DL2Listener)
|
||||
(
|
||||
LPDIRECTSOUND8 pThis,
|
||||
PVOID pDummy, // TODO: fill this out
|
||||
X_DSI3DL2LISTENER *pds3dl,
|
||||
DWORD dwApply)
|
||||
{
|
||||
FUNC_EXPORTS;
|
||||
|
@ -548,7 +548,7 @@ HRESULT WINAPI XTL::EMUPATCH(IDirectSound_SetI3DL2Listener)
|
|||
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(pThis)
|
||||
LOG_FUNC_ARG(pDummy)
|
||||
LOG_FUNC_ARG(pds3dl)
|
||||
LOG_FUNC_ARG(dwApply)
|
||||
LOG_FUNC_END;
|
||||
|
||||
|
@ -731,6 +731,7 @@ HRESULT WINAPI XTL::EMUPATCH(IDirectSound_SetVelocity)
|
|||
// ******************************************************************
|
||||
// * patch: IDirectSound_SetAllParameters
|
||||
// ******************************************************************
|
||||
// NOTE: No conversion requirement for XB to PC.
|
||||
HRESULT WINAPI XTL::EMUPATCH(IDirectSound_SetAllParameters)
|
||||
(
|
||||
LPDIRECTSOUND8 pThis,
|
||||
|
@ -1982,7 +1983,7 @@ HRESULT WINAPI XTL::EMUPATCH(CDirectSoundStream_SetConeOutsideVolume)
|
|||
HRESULT WINAPI XTL::EMUPATCH(CDirectSoundStream_SetAllParameters)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
LPCDS3DBUFFER pc3DBufferParameters,
|
||||
X_DS3DBUFFER* pc3DBufferParameters,
|
||||
DWORD dwApply)
|
||||
{
|
||||
FUNC_EXPORTS;
|
||||
|
@ -2131,25 +2132,13 @@ HRESULT WINAPI XTL::EMUPATCH(CDirectSoundStream_SetFrequency)
|
|||
// ******************************************************************
|
||||
HRESULT WINAPI XTL::EMUPATCH(IDirectSoundStream_SetI3DL2Source)
|
||||
(
|
||||
PVOID pThis,
|
||||
PVOID pds3db,
|
||||
DWORD dwApply)
|
||||
X_CDirectSoundStream* pThis,
|
||||
X_DSI3DL2BUFFER* pds3db,
|
||||
DWORD dwApply)
|
||||
{
|
||||
FUNC_EXPORTS;
|
||||
|
||||
enterCriticalSection;
|
||||
|
||||
LOG_FUNC_BEGIN
|
||||
LOG_FUNC_ARG(pThis)
|
||||
LOG_FUNC_ARG(pds3db)
|
||||
LOG_FUNC_ARG(dwApply)
|
||||
LOG_FUNC_END;
|
||||
|
||||
LOG_UNIMPLEMENTED_DSOUND();
|
||||
|
||||
leaveCriticalSection;
|
||||
|
||||
return S_OK;
|
||||
return XTL::EMUPATCH(CDirectSoundStream_SetI3DL2Source)(pThis, pds3db, dwApply);
|
||||
}
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -2433,7 +2422,7 @@ HRESULT WINAPI XTL::EMUPATCH(IDirectSoundBuffer_SetDopplerFactor)
|
|||
HRESULT WINAPI XTL::EMUPATCH(IDirectSoundBuffer_SetI3DL2Source)
|
||||
(
|
||||
X_CDirectSoundBuffer* pThis,
|
||||
LPCDSI3DL2BUFFER pds3db,
|
||||
X_DSI3DL2BUFFER* pds3db,
|
||||
DWORD dwApply)
|
||||
{
|
||||
FUNC_EXPORTS;
|
||||
|
@ -2446,6 +2435,7 @@ HRESULT WINAPI XTL::EMUPATCH(IDirectSoundBuffer_SetI3DL2Source)
|
|||
LOG_FUNC_ARG(dwApply)
|
||||
LOG_FUNC_END;
|
||||
|
||||
// NOTE: SetI3DL2Source is using DSFXI3DL2Reverb structure, aka different interface.
|
||||
LOG_UNIMPLEMENTED_DSOUND();
|
||||
|
||||
leaveCriticalSection;
|
||||
|
@ -3158,7 +3148,7 @@ HRESULT WINAPI XTL::EMUPATCH(CDirectSoundStream_SetMixBinVolumes_8)
|
|||
HRESULT WINAPI XTL::EMUPATCH(CDirectSoundStream_SetI3DL2Source)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
PVOID pds3db,
|
||||
X_DSI3DL2BUFFER* pds3db,
|
||||
DWORD dwApply)
|
||||
{
|
||||
FUNC_EXPORTS;
|
||||
|
@ -3171,6 +3161,7 @@ HRESULT WINAPI XTL::EMUPATCH(CDirectSoundStream_SetI3DL2Source)
|
|||
LOG_FUNC_ARG(dwApply)
|
||||
LOG_FUNC_END;
|
||||
|
||||
// NOTE: SetI3DL2Source is using DSFXI3DL2Reverb structure, aka different interface.
|
||||
LOG_UNIMPLEMENTED_DSOUND();
|
||||
|
||||
leaveCriticalSection;
|
||||
|
@ -3184,7 +3175,7 @@ HRESULT WINAPI XTL::EMUPATCH(CDirectSoundStream_SetI3DL2Source)
|
|||
HRESULT WINAPI XTL::EMUPATCH(IDirectSoundBuffer_SetAllParameters)
|
||||
(
|
||||
X_CDirectSoundBuffer* pThis,
|
||||
LPCDS3DBUFFER pc3DBufferParameters,
|
||||
X_DS3DBUFFER* pc3DBufferParameters,
|
||||
DWORD dwApply)
|
||||
{
|
||||
FUNC_EXPORTS;
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#undef FIELD_OFFSET // prevent macro redefinition warnings
|
||||
|
||||
#include <dsound.h>
|
||||
#include <d3dx8math.h>
|
||||
#include "CxbxKrnl.h"
|
||||
#include "Emu.h"
|
||||
|
||||
|
@ -217,7 +218,56 @@ struct X_DSCAPS
|
|||
#define X_DSSPEAKER_ENABLE_AC3 0x00010000
|
||||
#define X_DSSPEAKER_ENABLE_DTS 0x00020000
|
||||
|
||||
struct X_DS3DBUFFER {
|
||||
DWORD dwSize;
|
||||
D3DXVECTOR3 vPosition;
|
||||
D3DXVECTOR3 vVelocity;
|
||||
DWORD dwInsideConeAngle;
|
||||
DWORD dwOutsideConeAngle;
|
||||
D3DXVECTOR3 vConeOrientation;
|
||||
LONG lConeOutsideVolume;
|
||||
FLOAT flMinDistance;
|
||||
FLOAT flMaxDistance;
|
||||
DWORD dwMode;
|
||||
FLOAT flDistanceFactor;
|
||||
FLOAT flRolloffFactor;
|
||||
FLOAT flDopplerFactor;
|
||||
};
|
||||
|
||||
struct X_DSI3DL2LISTENER {
|
||||
LONG lRoom;
|
||||
LONG lRoomHF;
|
||||
FLOAT flRoomRolloffFactor;
|
||||
FLOAT flDecayTime;
|
||||
FLOAT flDecayHFRatio;
|
||||
LONG lReflections;
|
||||
FLOAT flReflectionsDelay;
|
||||
LONG lReverb;
|
||||
FLOAT flReverbDelay;
|
||||
FLOAT flDiffusion;
|
||||
FLOAT flDensity;
|
||||
FLOAT flHFReference;
|
||||
};
|
||||
|
||||
struct X_DSI3DL2OBSTRUCTION {
|
||||
LONG lHFLevel;
|
||||
FLOAT flLFRatio;
|
||||
};
|
||||
|
||||
struct X_DSI3DL2OCCLUSION {
|
||||
LONG lHFLevel;
|
||||
FLOAT flLFRatio;
|
||||
};
|
||||
|
||||
struct X_DSI3DL2BUFFER {
|
||||
LONG lDirect;
|
||||
LONG lDirectHF;
|
||||
LONG lRoom;
|
||||
LONG lRoomHF;
|
||||
FLOAT flRoomRolloffFactor;
|
||||
X_DSI3DL2OBSTRUCTION Obstruction;
|
||||
X_DSI3DL2OCCLUSION Occlusion;
|
||||
};
|
||||
|
||||
typedef struct IDirectSoundStream IDirectSoundStream;
|
||||
typedef IDirectSoundStream *LPDIRECTSOUNDSTREAM;
|
||||
|
@ -566,7 +616,7 @@ HRESULT WINAPI EMUPATCH(IDirectSound_SetDopplerFactor)
|
|||
HRESULT WINAPI EMUPATCH(IDirectSound_SetI3DL2Listener)
|
||||
(
|
||||
LPDIRECTSOUND8 pThis,
|
||||
PVOID pDummy, // TODO: fill this out
|
||||
X_DSI3DL2LISTENER *pds3dl,
|
||||
DWORD dwApply
|
||||
);
|
||||
|
||||
|
@ -966,7 +1016,7 @@ HRESULT WINAPI EMUPATCH(CDirectSoundStream_SetHeadroom)
|
|||
HRESULT WINAPI EMUPATCH(CDirectSoundStream_SetAllParameters)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
LPCDS3DBUFFER pc3DBufferParameters,
|
||||
X_DS3DBUFFER* pc3DBufferParameters,
|
||||
DWORD dwApply
|
||||
);
|
||||
|
||||
|
@ -1061,9 +1111,9 @@ HRESULT WINAPI EMUPATCH(CDirectSoundStream_SetFrequency)
|
|||
// ******************************************************************
|
||||
HRESULT WINAPI EMUPATCH(IDirectSoundStream_SetI3DL2Source)
|
||||
(
|
||||
PVOID pThis,
|
||||
PVOID pds3db,
|
||||
DWORD dwApply
|
||||
X_CDirectSoundStream* pThis,
|
||||
X_DSI3DL2BUFFER* pds3db,
|
||||
DWORD dwApply
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -1192,15 +1242,13 @@ HRESULT WINAPI EMUPATCH(IDirectSoundBuffer_SetDopplerFactor)
|
|||
DWORD dwApply
|
||||
);
|
||||
|
||||
typedef void* LPCDSI3DL2BUFFER;
|
||||
|
||||
// ******************************************************************
|
||||
// * patch: IDirectSoundBuffer_SetI3DL2Source
|
||||
// ******************************************************************
|
||||
HRESULT WINAPI EMUPATCH(IDirectSoundBuffer_SetI3DL2Source)
|
||||
(
|
||||
X_CDirectSoundBuffer* pThis,
|
||||
LPCDSI3DL2BUFFER pds3db,
|
||||
X_DSI3DL2BUFFER* pds3db,
|
||||
DWORD dwApply
|
||||
);
|
||||
// +s
|
||||
|
@ -1445,8 +1493,8 @@ HRESULT WINAPI EMUPATCH(CDirectSoundStream_SetMixBinVolumes_8)
|
|||
HRESULT WINAPI EMUPATCH(CDirectSoundStream_SetI3DL2Source)
|
||||
(
|
||||
X_CDirectSoundStream* pThis,
|
||||
PVOID pds3db,
|
||||
DWORD dwApply
|
||||
X_DSI3DL2BUFFER* pds3db,
|
||||
DWORD dwApply
|
||||
);
|
||||
|
||||
// ******************************************************************
|
||||
|
@ -1455,7 +1503,7 @@ HRESULT WINAPI EMUPATCH(CDirectSoundStream_SetI3DL2Source)
|
|||
HRESULT WINAPI EMUPATCH(IDirectSoundBuffer_SetAllParameters)
|
||||
(
|
||||
X_CDirectSoundBuffer* pThis,
|
||||
LPCDS3DBUFFER pc3DBufferParameters,
|
||||
X_DS3DBUFFER* pc3DBufferParameters,
|
||||
DWORD dwApply
|
||||
);
|
||||
|
||||
|
|
|
@ -759,14 +759,42 @@ inline HRESULT HybridDirectSoundBuffer_Restore(
|
|||
//IDirectSoundBuffer
|
||||
inline HRESULT HybridDirectSound3DBuffer_SetAllParameters(
|
||||
LPDIRECTSOUND3DBUFFER8 pDS3DBuffer,
|
||||
LPCDS3DBUFFER pDS3DBufferParams,
|
||||
XTL::X_DS3DBUFFER* pDS3DBufferParams,
|
||||
DWORD dwApply)
|
||||
{
|
||||
enterCriticalSection;
|
||||
|
||||
HRESULT hRet = DS_OK;
|
||||
if (pDS3DBuffer != nullptr) {
|
||||
hRet = pDS3DBuffer->SetAllParameters(pDS3DBufferParams, dwApply);
|
||||
|
||||
DS3DBUFFER pDS3DBufferParamsTemp;
|
||||
pDS3DBufferParamsTemp.dwSize = sizeof(DS3DBUFFER);
|
||||
pDS3DBufferParamsTemp.vPosition = pDS3DBufferParams->vPosition;
|
||||
pDS3DBufferParamsTemp.vVelocity = pDS3DBufferParams->vVelocity;
|
||||
pDS3DBufferParamsTemp.dwInsideConeAngle = pDS3DBufferParams->dwInsideConeAngle;
|
||||
pDS3DBufferParamsTemp.dwOutsideConeAngle = pDS3DBufferParams->dwOutsideConeAngle;
|
||||
pDS3DBufferParamsTemp.vConeOrientation = pDS3DBufferParams->vConeOrientation;
|
||||
pDS3DBufferParamsTemp.lConeOutsideVolume = pDS3DBufferParams->lConeOutsideVolume;
|
||||
pDS3DBufferParamsTemp.flMinDistance = pDS3DBufferParams->flMinDistance;
|
||||
pDS3DBufferParamsTemp.flMaxDistance = pDS3DBufferParams->flMaxDistance;
|
||||
pDS3DBufferParamsTemp.dwMode = pDS3DBufferParams->dwMode;
|
||||
|
||||
hRet = pDS3DBuffer->SetAllParameters(&pDS3DBufferParamsTemp, dwApply);
|
||||
if (hRet != DS_OK) {
|
||||
RETURN_RESULT_CHECK(hRet);
|
||||
}
|
||||
|
||||
hRet = g_pDSoundPrimary3DListener8->SetDistanceFactor(pDS3DBufferParams->flDistanceFactor, dwApply);
|
||||
if (hRet != DS_OK) {
|
||||
RETURN_RESULT_CHECK(hRet);
|
||||
}
|
||||
|
||||
hRet = g_pDSoundPrimary3DListener8->SetRolloffFactor(pDS3DBufferParams->flRolloffFactor, dwApply);
|
||||
if (hRet != DS_OK) {
|
||||
RETURN_RESULT_CHECK(hRet);
|
||||
}
|
||||
|
||||
hRet = g_pDSoundPrimary3DListener8->SetDopplerFactor(pDS3DBufferParams->flDopplerFactor, dwApply);
|
||||
}
|
||||
|
||||
leaveCriticalSection;
|
||||
|
|
Loading…
Reference in New Issue