Merge pull request #1955 from RadWolfie/fix-dsound-namespace
Fix Xbox DSound Namespace
This commit is contained in:
commit
fa6387a545
|
@ -117,6 +117,7 @@ file (GLOB CXBXR_HEADER_EMU
|
||||||
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/glextensions.h"
|
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/glextensions.h"
|
||||||
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/gloffscreen.h"
|
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/gloffscreen.h"
|
||||||
"${CXBXR_ROOT_DIR}/src/common/XADPCM.h"
|
"${CXBXR_ROOT_DIR}/src/common/XADPCM.h"
|
||||||
|
"${CXBXR_ROOT_DIR}/src/common/xbox/Logging.hpp"
|
||||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/Direct3D9.h"
|
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/Direct3D9.h"
|
||||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/VertexShader.h"
|
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/VertexShader.h"
|
||||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/VertexShaderSource.h"
|
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/VertexShaderSource.h"
|
||||||
|
@ -260,6 +261,7 @@ file (GLOB CXBXR_SOURCE_EMU
|
||||||
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/glextensions.cpp"
|
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/glextensions.cpp"
|
||||||
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/gloffscreen_common.cpp"
|
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/gloffscreen_common.cpp"
|
||||||
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/gloffscreen_wgl.cpp"
|
"${CXBXR_ROOT_DIR}/src/common/util/gloffscreen/gloffscreen_wgl.cpp"
|
||||||
|
"${CXBXR_ROOT_DIR}/src/common/xbox/Logging.cpp"
|
||||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp"
|
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/Direct3D9.cpp"
|
||||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/RenderStates.cpp"
|
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/RenderStates.cpp"
|
||||||
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/TextureStates.cpp"
|
"${CXBXR_ROOT_DIR}/src/core/hle/D3D8/Direct3D9/TextureStates.cpp"
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
// This is an open source non-commercial project. Dear PVS-Studio, please check it.
|
||||||
|
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||||
|
// ******************************************************************
|
||||||
|
// *
|
||||||
|
// * This file is part of the Cxbx project.
|
||||||
|
// *
|
||||||
|
// * Cxbx and Cxbe are free software; you can redistribute them
|
||||||
|
// * and/or modify them under the terms of the GNU General Public
|
||||||
|
// * License as published by the Free Software Foundation; either
|
||||||
|
// * version 2 of the license, or (at your option) any later version.
|
||||||
|
// *
|
||||||
|
// * This program is distributed in the hope that it will be useful,
|
||||||
|
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// * GNU General Public License for more details.
|
||||||
|
// *
|
||||||
|
// * You should have recieved a copy of the GNU General Public License
|
||||||
|
// * along with this program; see the file COPYING.
|
||||||
|
// * If not, write to the Free Software Foundation, Inc.,
|
||||||
|
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||||
|
// *
|
||||||
|
// * (c) 2020 RadWolfie
|
||||||
|
// *
|
||||||
|
// * All rights reserved
|
||||||
|
// *
|
||||||
|
// ******************************************************************
|
||||||
|
|
||||||
|
#include "common/Logging.h"
|
||||||
|
#include "Logging.hpp"
|
||||||
|
|
||||||
|
namespace xbox {
|
||||||
|
|
||||||
|
LOGRENDER(D3DVECTOR)
|
||||||
|
{
|
||||||
|
return os
|
||||||
|
LOGRENDER_MEMBER(x)
|
||||||
|
LOGRENDER_MEMBER(y)
|
||||||
|
LOGRENDER_MEMBER(z)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
// ******************************************************************
|
||||||
|
// *
|
||||||
|
// * This file is part of the Cxbx project.
|
||||||
|
// *
|
||||||
|
// * Cxbx and Cxbe are free software; you can redistribute them
|
||||||
|
// * and/or modify them under the terms of the GNU General Public
|
||||||
|
// * License as published by the Free Software Foundation; either
|
||||||
|
// * version 2 of the license, or (at your option) any later version.
|
||||||
|
// *
|
||||||
|
// * This program is distributed in the hope that it will be useful,
|
||||||
|
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// * GNU General Public License for more details.
|
||||||
|
// *
|
||||||
|
// * You should have recieved a copy of the GNU General Public License
|
||||||
|
// * along with this program; see the file COPYING.
|
||||||
|
// * If not, write to the Free Software Foundation, Inc.,
|
||||||
|
// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
|
||||||
|
// *
|
||||||
|
// * (c) 2020 RadWolfie
|
||||||
|
// *
|
||||||
|
// * All rights reserved
|
||||||
|
// *
|
||||||
|
// ******************************************************************
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "common/xbox_types.h"
|
||||||
|
#include "common/Logging.h"
|
||||||
|
|
||||||
|
namespace xbox {
|
||||||
|
|
||||||
|
LOGRENDER_HEADER(D3DVECTOR)
|
||||||
|
|
||||||
|
}
|
|
@ -70,6 +70,10 @@ namespace xbox
|
||||||
typedef unsigned __int64 QUAD; // 8 byte aligned 8 byte long
|
typedef unsigned __int64 QUAD; // 8 byte aligned 8 byte long
|
||||||
typedef int BOOL;
|
typedef int BOOL;
|
||||||
typedef LONG HRESULT;
|
typedef LONG HRESULT;
|
||||||
|
typedef float FLOAT;
|
||||||
|
// TODO: Remove __stdcall once lib86cpu is implemented.
|
||||||
|
#define XBOXAPI __stdcall
|
||||||
|
#define XCALLBACK XBOXAPI
|
||||||
|
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
|
@ -107,4 +111,21 @@ namespace xbox
|
||||||
typedef WCHAR *LPWSTR, *PWSTR;
|
typedef WCHAR *LPWSTR, *PWSTR;
|
||||||
|
|
||||||
typedef /*_Null_terminated_*/ const WCHAR *LPCWSTR, *PCWSTR;
|
typedef /*_Null_terminated_*/ const WCHAR *LPCWSTR, *PCWSTR;
|
||||||
|
|
||||||
|
// ******************************************************************
|
||||||
|
// Misc
|
||||||
|
// ******************************************************************
|
||||||
|
typedef struct _XD3DVECTOR {
|
||||||
|
FLOAT x;
|
||||||
|
FLOAT y;
|
||||||
|
FLOAT z;
|
||||||
|
} D3DVECTOR;
|
||||||
|
|
||||||
|
template<typename A, typename B>
|
||||||
|
inline void CopyD3DVector(A& a, const B& b)
|
||||||
|
{
|
||||||
|
a.x = b.x;
|
||||||
|
a.y = b.y;
|
||||||
|
a.z = b.z;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1201,7 +1201,7 @@ HRESULT WINAPI xbox::EMUPATCH(IDirectSoundBuffer_SetMixBins)
|
||||||
LOG_FUNC_END;
|
LOG_FUNC_END;
|
||||||
|
|
||||||
EmuDirectSoundBuffer* pThis = pHybridThis->emuDSBuffer;
|
EmuDirectSoundBuffer* pThis = pHybridThis->emuDSBuffer;
|
||||||
hRet = HybridDirectSoundBuffer_SetMixBins(pThis->Xb_VoiceProperties, pMixBins, pThis->EmuBufferDesc.lpwfxFormat, pThis->EmuBufferDesc);
|
hRet = HybridDirectSoundBuffer_SetMixBins(pThis->Xb_VoiceProperties, pMixBins, pThis->EmuBufferDesc);
|
||||||
}
|
}
|
||||||
|
|
||||||
return hRet;
|
return hRet;
|
||||||
|
|
|
@ -133,7 +133,7 @@ static inline void InitVoiceProperties(xbox::X_DSVOICEPROPS& Xb_VoiceProperties)
|
||||||
|
|
||||||
static inline void GenerateMixBinDefault(
|
static inline void GenerateMixBinDefault(
|
||||||
xbox::X_DSVOICEPROPS &Xb_VoiceProperties,
|
xbox::X_DSVOICEPROPS &Xb_VoiceProperties,
|
||||||
LPCWAVEFORMATEX lpwfxFormat,
|
::LPCWAVEFORMATEX lpwfxFormat,
|
||||||
xbox::X_LPDSMIXBINS mixbins_output,
|
xbox::X_LPDSMIXBINS mixbins_output,
|
||||||
bool is3D)
|
bool is3D)
|
||||||
{
|
{
|
||||||
|
@ -247,7 +247,7 @@ static inline void GenerateMixBinDefault(
|
||||||
|
|
||||||
static inline void GeneratePCMFormat(
|
static inline void GeneratePCMFormat(
|
||||||
DSBUFFERDESC &DSBufferDesc,
|
DSBUFFERDESC &DSBufferDesc,
|
||||||
LPCWAVEFORMATEX Xb_lpwfxFormat,
|
xbox::LPCWAVEFORMATEX Xb_lpwfxFormat,
|
||||||
DWORD &Xb_flags,
|
DWORD &Xb_flags,
|
||||||
DWORD &dwEmuFlags,
|
DWORD &dwEmuFlags,
|
||||||
DWORD X_BufferSizeRequest,
|
DWORD X_BufferSizeRequest,
|
||||||
|
@ -259,8 +259,6 @@ static inline void GeneratePCMFormat(
|
||||||
{
|
{
|
||||||
bool bIsSpecial = false;
|
bool bIsSpecial = false;
|
||||||
|
|
||||||
GenerateMixBinDefault(Xb_VoiceProperties, Xb_lpwfxFormat, mixbins_output, ((DSBufferDesc.dwFlags & DSBCAPS_CTRL3D) > 0));
|
|
||||||
|
|
||||||
// convert from Xbox to PC DSound
|
// convert from Xbox to PC DSound
|
||||||
{
|
{
|
||||||
DSBufferDesc.dwReserved = 0;
|
DSBufferDesc.dwReserved = 0;
|
||||||
|
@ -326,6 +324,8 @@ static inline void GeneratePCMFormat(
|
||||||
if (X_BufferCacheSize > 0) {
|
if (X_BufferCacheSize > 0) {
|
||||||
DSBufferDesc.dwBufferBytes = DSoundBufferGetPCMBufferSize(dwEmuFlags, X_BufferCacheSize);
|
DSBufferDesc.dwBufferBytes = DSoundBufferGetPCMBufferSize(dwEmuFlags, X_BufferCacheSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GenerateMixBinDefault(Xb_VoiceProperties, DSBufferDesc.lpwfxFormat, mixbins_output, ((DSBufferDesc.dwFlags& DSBCAPS_CTRL3D) > 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void DSoundGenericUnlock(
|
static inline void DSoundGenericUnlock(
|
||||||
|
@ -951,13 +951,13 @@ static inline HRESULT HybridDirectSound3DBuffer_SetAllParameters(
|
||||||
HRESULT hRet = DS_OK;
|
HRESULT hRet = DS_OK;
|
||||||
if (pDS3DBuffer != nullptr) {
|
if (pDS3DBuffer != nullptr) {
|
||||||
|
|
||||||
DS3DBUFFER pDS3DBufferParamsTemp;
|
::DS3DBUFFER pDS3DBufferParamsTemp;
|
||||||
pDS3DBufferParamsTemp.dwSize = sizeof(DS3DBUFFER);
|
pDS3DBufferParamsTemp.dwSize = sizeof(DS3DBUFFER);
|
||||||
pDS3DBufferParamsTemp.vPosition = pDS3DBufferParams->vPosition;
|
CopyD3DVector(pDS3DBufferParamsTemp.vPosition, pDS3DBufferParams->vPosition);
|
||||||
pDS3DBufferParamsTemp.vVelocity = pDS3DBufferParams->vVelocity;
|
CopyD3DVector(pDS3DBufferParamsTemp.vVelocity, pDS3DBufferParams->vVelocity);
|
||||||
pDS3DBufferParamsTemp.dwInsideConeAngle = pDS3DBufferParams->dwInsideConeAngle;
|
pDS3DBufferParamsTemp.dwInsideConeAngle = pDS3DBufferParams->dwInsideConeAngle;
|
||||||
pDS3DBufferParamsTemp.dwOutsideConeAngle = pDS3DBufferParams->dwOutsideConeAngle;
|
pDS3DBufferParamsTemp.dwOutsideConeAngle = pDS3DBufferParams->dwOutsideConeAngle;
|
||||||
pDS3DBufferParamsTemp.vConeOrientation = pDS3DBufferParams->vConeOrientation;
|
CopyD3DVector(pDS3DBufferParamsTemp.vConeOrientation, pDS3DBufferParams->vConeOrientation);
|
||||||
pDS3DBufferParamsTemp.lConeOutsideVolume = pDS3DBufferParams->lConeOutsideVolume;
|
pDS3DBufferParamsTemp.lConeOutsideVolume = pDS3DBufferParams->lConeOutsideVolume;
|
||||||
pDS3DBufferParamsTemp.flMinDistance = pDS3DBufferParams->flMinDistance;
|
pDS3DBufferParamsTemp.flMinDistance = pDS3DBufferParams->flMinDistance;
|
||||||
pDS3DBufferParamsTemp.flMaxDistance = pDS3DBufferParams->flMaxDistance;
|
pDS3DBufferParamsTemp.flMaxDistance = pDS3DBufferParams->flMaxDistance;
|
||||||
|
@ -1109,7 +1109,7 @@ static inline HRESULT HybridDirectSoundBuffer_SetFilter(
|
||||||
//IDirectSoundBuffer
|
//IDirectSoundBuffer
|
||||||
static inline HRESULT HybridDirectSoundBuffer_SetFormat(
|
static inline HRESULT HybridDirectSoundBuffer_SetFormat(
|
||||||
LPDIRECTSOUNDBUFFER8 &pDSBuffer,
|
LPDIRECTSOUNDBUFFER8 &pDSBuffer,
|
||||||
LPCWAVEFORMATEX Xb_pwfxFormat,
|
xbox::LPCWAVEFORMATEX Xb_pwfxFormat,
|
||||||
DWORD Xb_flags,
|
DWORD Xb_flags,
|
||||||
DSBUFFERDESC &BufferDesc,
|
DSBUFFERDESC &BufferDesc,
|
||||||
DWORD &dwEmuFlags,
|
DWORD &dwEmuFlags,
|
||||||
|
@ -1255,17 +1255,21 @@ static inline HRESULT HybridDirectSound3DBuffer_SetMinDistance(
|
||||||
|
|
||||||
RETURN_RESULT_CHECK(hRet);
|
RETURN_RESULT_CHECK(hRet);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
//TODO: PC DirectSound does not have SetMixBins method function.
|
|
||||||
//IDirectSoundStream
|
//IDirectSoundStream
|
||||||
//IDirectSoundBuffer
|
//IDirectSoundBuffer
|
||||||
static inline HRESULT HybridDirectSoundBuffer_SetMixBins(
|
static inline HRESULT HybridDirectSoundBuffer_SetMixBins(
|
||||||
LPDIRECTSOUNDBUFFER8 pDSBuffer,
|
xbox::X_DSVOICEPROPS& Xb_VoiceProperties,
|
||||||
PVOID pMixBins)
|
xbox::X_LPDSMIXBINS in_MixBins,
|
||||||
|
DSBUFFERDESC& BufferDesc
|
||||||
|
)
|
||||||
{
|
{
|
||||||
|
HRESULT ret = DS_OK;
|
||||||
|
|
||||||
return DS_OK;
|
GenerateMixBinDefault(Xb_VoiceProperties, BufferDesc.lpwfxFormat, in_MixBins, ((BufferDesc.dwFlags & DSBCAPS_CTRL3D) > 0));
|
||||||
}*/
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
//IDirectSoundStream x2
|
//IDirectSoundStream x2
|
||||||
//IDirectSoundBuffer x2
|
//IDirectSoundBuffer x2
|
||||||
|
@ -1522,17 +1526,3 @@ static inline HRESULT HybridDirectSoundBuffer_GetVoiceProperties(
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline HRESULT HybridDirectSoundBuffer_SetMixBins(
|
|
||||||
xbox::X_DSVOICEPROPS& Xb_VoiceProperties,
|
|
||||||
xbox::X_LPDSMIXBINS in_MixBins,
|
|
||||||
LPCWAVEFORMATEX pwfxFormat,
|
|
||||||
DSBUFFERDESC& BufferDesc
|
|
||||||
)
|
|
||||||
{
|
|
||||||
HRESULT ret = DS_OK;
|
|
||||||
|
|
||||||
GenerateMixBinDefault(Xb_VoiceProperties, pwfxFormat, in_MixBins, ((BufferDesc.dwFlags & DSBCAPS_CTRL3D) > 0));
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1125,7 +1125,7 @@ HRESULT WINAPI xbox::EMUPATCH(CDirectSoundStream_SetMixBins)
|
||||||
LOG_FUNC_ARG(pMixBins)
|
LOG_FUNC_ARG(pMixBins)
|
||||||
LOG_FUNC_END;
|
LOG_FUNC_END;
|
||||||
|
|
||||||
hRet = HybridDirectSoundBuffer_SetMixBins(pThis->Xb_VoiceProperties, pMixBins, pThis->EmuBufferDesc.lpwfxFormat, pThis->EmuBufferDesc);
|
hRet = HybridDirectSoundBuffer_SetMixBins(pThis->Xb_VoiceProperties, pMixBins, pThis->EmuBufferDesc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#include <dsound.h> // Temporary placeholder until XbDSoundTypes.h is cross-platform + filled in the blanks
|
#include <dsound.h> // Temporary placeholder until XbDSoundTypes.h is cross-platform + filled in the blanks
|
||||||
#include "Logging.h"
|
#include "Logging.h"
|
||||||
|
#include "common/xbox/Logging.hpp"
|
||||||
#include "XbDSoundLogging.hpp"
|
#include "XbDSoundLogging.hpp"
|
||||||
#include "common/Settings.hpp"
|
#include "common/Settings.hpp"
|
||||||
|
|
||||||
|
@ -303,6 +304,43 @@ LOGRENDER(DSLFODESC)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENUM2STR_START(WAVEFORMAT_TAG)
|
||||||
|
ENUM2STR_CASE(0)
|
||||||
|
ENUM2STR_CASE(WAVE_FORMAT_PCM)
|
||||||
|
ENUM2STR_CASE(WAVE_FORMAT_ADPCM)
|
||||||
|
ENUM2STR_CASE(WAVE_FORMAT_XBOX_ADPCM)
|
||||||
|
ENUM2STR_CASE(WAVE_FORMAT_EXTENSIBLE)
|
||||||
|
ENUM2STR_END_and_LOGRENDER(WAVEFORMAT_TAG)
|
||||||
|
|
||||||
|
#define WFC_MONO 1
|
||||||
|
#define WFC_STEREO 2
|
||||||
|
#define WFC_2POINT1 3
|
||||||
|
#define WFC_QUAD 4
|
||||||
|
#define WFC_5POINT0 5
|
||||||
|
#define WFC_5POINT1 6
|
||||||
|
|
||||||
|
ENUM2STR_START(WAVEFORMAT_CHANNEL)
|
||||||
|
ENUM2STR_CASE(WFC_MONO)
|
||||||
|
ENUM2STR_CASE(WFC_STEREO)
|
||||||
|
ENUM2STR_CASE(WFC_2POINT1)
|
||||||
|
ENUM2STR_CASE(WFC_QUAD)
|
||||||
|
ENUM2STR_CASE(WFC_5POINT0)
|
||||||
|
ENUM2STR_CASE(WFC_5POINT1)
|
||||||
|
ENUM2STR_END_and_LOGRENDER(WAVEFORMAT_CHANNEL)
|
||||||
|
|
||||||
|
LOGRENDER(WAVEFORMATEX)
|
||||||
|
{
|
||||||
|
return os
|
||||||
|
LOGRENDER_MEMBER_TYPE(WAVEFORMAT_TAG, wFormatTag)
|
||||||
|
LOGRENDER_MEMBER_TYPE(WAVEFORMAT_CHANNEL, nChannels)
|
||||||
|
LOGRENDER_MEMBER(nSamplesPerSec)
|
||||||
|
LOGRENDER_MEMBER(nAvgBytesPerSec)
|
||||||
|
LOGRENDER_MEMBER(nBlockAlign)
|
||||||
|
LOGRENDER_MEMBER(wBitsPerSample)
|
||||||
|
LOGRENDER_MEMBER(cbSize)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
LOGRENDER(XBOXADPCMWAVEFORMAT)
|
LOGRENDER(XBOXADPCMWAVEFORMAT)
|
||||||
{
|
{
|
||||||
return os
|
return os
|
||||||
|
|
|
@ -32,6 +32,8 @@ namespace xbox {
|
||||||
|
|
||||||
// TODO: Everything, only small portions had been implemented.
|
// TODO: Everything, only small portions had been implemented.
|
||||||
|
|
||||||
|
enum WAVEFORMAT_CHANNEL : int;
|
||||||
|
enum WAVEFORMAT_TAG : int;
|
||||||
// DSound flag/enum
|
// DSound flag/enum
|
||||||
enum DSMIXBIN_SPEAKER : int;
|
enum DSMIXBIN_SPEAKER : int;
|
||||||
enum DSSPEAKER_FLAG : int;
|
enum DSSPEAKER_FLAG : int;
|
||||||
|
@ -82,6 +84,7 @@ LOGRENDER_HEADER(X_DSI3DL2BUFFER)
|
||||||
LOGRENDER_HEADER(X_DSI3DL2OBSTRUCTION)
|
LOGRENDER_HEADER(X_DSI3DL2OBSTRUCTION)
|
||||||
LOGRENDER_HEADER(X_DSI3DL2OCCLUSION)
|
LOGRENDER_HEADER(X_DSI3DL2OCCLUSION)
|
||||||
LOGRENDER_HEADER(DSLFODESC)
|
LOGRENDER_HEADER(DSLFODESC)
|
||||||
|
LOGRENDER_HEADER(WAVEFORMATEX)
|
||||||
LOGRENDER_HEADER(XBOXADPCMWAVEFORMAT)
|
LOGRENDER_HEADER(XBOXADPCMWAVEFORMAT)
|
||||||
// DSound Buffer class usage
|
// DSound Buffer class usage
|
||||||
LOGRENDER_HEADER(X_DSBUFFERDESC)
|
LOGRENDER_HEADER(X_DSBUFFERDESC)
|
||||||
|
|
|
@ -30,12 +30,28 @@
|
||||||
|
|
||||||
namespace xbox {
|
namespace xbox {
|
||||||
|
|
||||||
#include <dsound.h> // TODO: FIXME after global namespace xbox issue is resolved.
|
|
||||||
// TODO: Port PC dsound.h to xbox edition here base on previous research.
|
|
||||||
// TODO: Also need to use fixed size to able support cross-platform without extra work.
|
// TODO: Also need to use fixed size to able support cross-platform without extra work.
|
||||||
// Such as uint32_t, uint16_t, etc.
|
// Such as uint32_t, uint16_t, etc.
|
||||||
|
|
||||||
|
typedef struct _XWAVEFORMATEX
|
||||||
|
{
|
||||||
|
uint16_t wFormatTag;
|
||||||
|
uint16_t nChannels;
|
||||||
|
uint32_t nSamplesPerSec;
|
||||||
|
uint32_t nAvgBytesPerSec;
|
||||||
|
uint16_t nBlockAlign;
|
||||||
|
uint16_t wBitsPerSample;
|
||||||
|
uint16_t cbSize;
|
||||||
|
} WAVEFORMATEX, *PWAVEFORMATEX, *LPWAVEFORMATEX;
|
||||||
|
|
||||||
|
typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define WAVE_FORMAT_ADPCM 0x0002
|
||||||
#define WAVE_FORMAT_XBOX_ADPCM 0x0069
|
#define WAVE_FORMAT_XBOX_ADPCM 0x0069
|
||||||
|
#define WAVE_FORMAT_EXTENSIBLE 0xFFFE
|
||||||
|
|
||||||
// Xbox SGE Memory layout
|
// Xbox SGE Memory layout
|
||||||
#define XTL_DS_SGE_COUNT_MAX 2047
|
#define XTL_DS_SGE_COUNT_MAX 2047
|
||||||
|
@ -162,7 +178,7 @@ struct X_DSENVOLOPEDESC
|
||||||
#define XTL_DSSCAPS_NOMERGE 0x20000000
|
#define XTL_DSSCAPS_NOMERGE 0x20000000
|
||||||
#define XTL_DSSCAPS_ACCURATENOTIFY 0x40000000
|
#define XTL_DSSCAPS_ACCURATENOTIFY 0x40000000
|
||||||
|
|
||||||
typedef VOID(CALLBACK *LPFNXMOCALLBACK)(LPVOID pStreamContext, LPVOID pPacketContext, DWORD dwStatus);
|
typedef VOID(XCALLBACK *LPFNXMOCALLBACK)(LPVOID pStreamContext, LPVOID pPacketContext, DWORD dwStatus);
|
||||||
|
|
||||||
// ******************************************************************
|
// ******************************************************************
|
||||||
// * X_DSSTREAMDESC
|
// * X_DSSTREAMDESC
|
||||||
|
|
|
@ -52,8 +52,8 @@ struct CUnknownGenericManager {
|
||||||
// all VMT (Virtual Method Table) are stored in local offset 0x00's pointer
|
// all VMT (Virtual Method Table) are stored in local offset 0x00's pointer
|
||||||
// TODO: Implement to use derived's override AddRef/Release. Also, each class has its own ref counter and is not shareable.
|
// TODO: Implement to use derived's override AddRef/Release. Also, each class has its own ref counter and is not shareable.
|
||||||
virtual ~CUnknownGenericManager() {}; // 0x00
|
virtual ~CUnknownGenericManager() {}; // 0x00
|
||||||
virtual uint32_t WINAPI AddRef() { return ref_count++; }; // 0x04
|
virtual uint32_t XBOXAPI AddRef() { return ref_count++; }; // 0x04
|
||||||
virtual uint32_t WINAPI Release() { return ref_count--; }; // 0x08
|
virtual uint32_t XBOXAPI Release() { return ref_count--; }; // 0x08
|
||||||
|
|
||||||
uint32_t ref_count; // 0x04
|
uint32_t ref_count; // 0x04
|
||||||
};
|
};
|
||||||
|
@ -64,14 +64,14 @@ struct CUnknownTemplate {
|
||||||
// construct vtable (or grab ptr to existing)
|
// construct vtable (or grab ptr to existing)
|
||||||
CUnknownTemplate();
|
CUnknownTemplate();
|
||||||
|
|
||||||
virtual ~CUnknownTemplate() {}; // 0x00
|
virtual ~CUnknownTemplate() {}; // 0x00
|
||||||
virtual void WINAPI pUnknown_04() { throw std::exception("pUnknown_04"); }; // 0x04
|
virtual void XBOXAPI pUnknown_04() { throw std::exception("pUnknown_04"); }; // 0x04
|
||||||
virtual void WINAPI pUnknown_08() { throw std::exception("pUnknown_08"); }; // 0x08
|
virtual void XBOXAPI pUnknown_08() { throw std::exception("pUnknown_08"); }; // 0x08
|
||||||
virtual void WINAPI pUnknown_0C() { throw std::exception("pUnknown_0C"); }; // 0x0C
|
virtual void XBOXAPI pUnknown_0C() { throw std::exception("pUnknown_0C"); }; // 0x0C
|
||||||
virtual void WINAPI pUnknown_10() { throw std::exception("pUnknown_10"); }; // 0x10
|
virtual void XBOXAPI pUnknown_10() { throw std::exception("pUnknown_10"); }; // 0x10
|
||||||
virtual void WINAPI pUnknown_14() { throw std::exception("pUnknown_14"); }; // 0x14
|
virtual void XBOXAPI pUnknown_14() { throw std::exception("pUnknown_14"); }; // 0x14
|
||||||
virtual void WINAPI pUnknown_18() { throw std::exception("pUnknown_18"); }; // 0x18
|
virtual void XBOXAPI pUnknown_18() { throw std::exception("pUnknown_18"); }; // 0x18
|
||||||
virtual void WINAPI pUnknown_1C() { throw std::exception("pUnknown_1C"); }; // 0x1C
|
virtual void XBOXAPI pUnknown_1C() { throw std::exception("pUnknown_1C"); }; // 0x1C
|
||||||
// If need to add more VMT (Virtual Method Table), add them above here.
|
// If need to add more VMT (Virtual Method Table), add them above here.
|
||||||
uint32_t ref_count; // 0x04
|
uint32_t ref_count; // 0x04
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue