migrate to DirectX 9Ex from DirectX 9

This commit is contained in:
mq1n
2025-09-19 16:12:33 +03:00
parent df346e156b
commit fb7e53b909
24 changed files with 100 additions and 88 deletions

View File

@@ -155,7 +155,7 @@ void CBlockTexture::InvalidateRect(const RECT & c_rsrcRect)
bool CBlockTexture::Create(CGraphicDib * pDIB, const RECT & c_rRect, DWORD dwWidth, DWORD dwHeight)
{
if (FAILED(ms_lpd3dDevice->CreateTexture(dwWidth, dwHeight, 0, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_lpd3dTexture, nullptr)))
if (FAILED(ms_lpd3dDevice->CreateTexture(dwWidth, dwHeight, 0, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &m_lpd3dTexture, nullptr)))
{
Tracef("Failed to create block texture %u, %u\n", dwWidth, dwHeight);
return false;

View File

@@ -22,8 +22,8 @@ void D3DXVECTOR3ToPixelPosition(const D3DXVECTOR3& c_rv3Src, D3DXVECTOR3* pv3Dst
HWND CGraphicBase::ms_hWnd;
HDC CGraphicBase::ms_hDC;
LPDIRECT3D9 CGraphicBase::ms_lpd3d = NULL;
LPDIRECT3DDEVICE9 CGraphicBase::ms_lpd3dDevice = NULL;
LPDIRECT3D9EX CGraphicBase::ms_lpd3d = NULL;
LPDIRECT3DDEVICE9EX CGraphicBase::ms_lpd3dDevice = NULL;
ID3DXMatrixStack * CGraphicBase::ms_lpd3dMatStack = NULL;
D3DPRESENT_PARAMETERS CGraphicBase::ms_d3dPresentParameter;
D3DVIEWPORT9 CGraphicBase::ms_Viewport;

View File

@@ -241,8 +241,8 @@ class CGraphicBase
static HWND ms_hWnd;
static HDC ms_hDC;
static LPDIRECT3D9 ms_lpd3d;
static LPDIRECT3DDEVICE9 ms_lpd3dDevice;
static LPDIRECT3D9EX ms_lpd3d;
static LPDIRECT3DDEVICE9EX ms_lpd3dDevice;
static ID3DXMatrixStack* ms_lpd3dMatStack;
static D3DVIEWPORT9 ms_Viewport;

View File

@@ -77,7 +77,7 @@ void CGraphicDevice::EnableWebBrowserMode(const RECT& c_rcWebPage)
rkD3DPP.BackBufferCount = 1;
rkD3DPP.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
IDirect3DDevice9& rkD3DDev=*ms_lpd3dDevice;
IDirect3DDevice9Ex& rkD3DDev=*ms_lpd3dDevice;
HRESULT hr=rkD3DDev.Reset(&rkD3DPP);
if (FAILED(hr))
return;
@@ -96,7 +96,7 @@ void CGraphicDevice::DisableWebBrowserMode()
rkD3DPP=g_kD3DPP;
IDirect3DDevice9& rkD3DDev=*ms_lpd3dDevice;
IDirect3DDevice9Ex& rkD3DDev=*ms_lpd3dDevice;
HRESULT hr=rkD3DDev.Reset(&rkD3DPP);
if (FAILED(hr))
return;
@@ -117,7 +117,7 @@ bool CGraphicDevice::ResizeBackBuffer(UINT uWidth, UINT uHeight)
rkD3DPP.BackBufferWidth=uWidth;
rkD3DPP.BackBufferHeight=uHeight;
IDirect3DDevice9& rkD3DDev=*ms_lpd3dDevice;
IDirect3DDevice9Ex& rkD3DDev=*ms_lpd3dDevice;
HRESULT hr=rkD3DDev.Reset(&rkD3DPP);
if (FAILED(hr))
@@ -310,7 +310,7 @@ int CGraphicDevice::Create(HWND hWnd, int iHres, int iVres, bool Windowed, int /
ms_hWnd = hWnd;
ms_hDC = GetDC(hWnd);
ms_lpd3d = Direct3DCreate9(D3D_SDK_VERSION);
Direct3DCreate9Ex(D3D_SDK_VERSION, &ms_lpd3d);
if (!ms_lpd3d)
return CREATE_NO_DIRECTX;
@@ -411,12 +411,24 @@ RETRY:
ms_d3dPresentParameter.MultiSampleQuality = 0;
}
if (FAILED(ms_hLastResult = ms_lpd3d->CreateDevice(
D3DDISPLAYMODEEX displayModeEx;
ZeroMemory(&displayModeEx, sizeof(displayModeEx));
displayModeEx.Size = sizeof(D3DDISPLAYMODEEX);
displayModeEx.Width = iHres;
displayModeEx.Height = iVres;
displayModeEx.RefreshRate = iReflashRate;
displayModeEx.Format = d3dDisplayMode.Format;
displayModeEx.ScanLineOrdering = D3DSCANLINEORDERING_PROGRESSIVE;
D3DDISPLAYMODEEX* pDisplayMode = Windowed ? NULL : &displayModeEx;
if (FAILED(ms_hLastResult = ms_lpd3d->CreateDeviceEx(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
hWnd,
ms_dwD3DBehavior,
&ms_d3dPresentParameter,
pDisplayMode,
&ms_lpd3dDevice)))
{
switch (ms_hLastResult)
@@ -598,7 +610,7 @@ bool CGraphicDevice::__CreatePDTVertexBufferList()
sizeof(TPDTVertex)*PDT_VERTEX_NUM,
D3DUSAGE_DYNAMIC|D3DUSAGE_WRITEONLY,
D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1,
D3DPOOL_SYSTEMMEM,
D3DPOOL_DEFAULT,
&ms_alpd3dPDTVB[i], nullptr)
))
return false;
@@ -626,19 +638,20 @@ bool CGraphicDevice::__CreateDefaultIndexBuffer(UINT eDefIB, UINT uIdxCount, con
{
assert(ms_alpd3dDefIB[eDefIB]==NULL);
if (FAILED(
ms_lpd3dDevice->CreateIndexBuffer(
sizeof(WORD)*uIdxCount,
D3DUSAGE_WRITEONLY,
D3DFMT_INDEX16,
D3DPOOL_MANAGED,
&ms_alpd3dDefIB[eDefIB], nullptr)
)) return false;
auto hr = ms_lpd3dDevice->CreateIndexBuffer(
sizeof(WORD)*uIdxCount,
D3DUSAGE_WRITEONLY,
D3DFMT_INDEX16,
D3DPOOL_DEFAULT,
&ms_alpd3dDefIB[eDefIB], nullptr
);
if (FAILED(hr))
return false;
WORD* dstIndices;
if (FAILED(
ms_alpd3dDefIB[eDefIB]->Lock(0, 0, (void**)&dstIndices, 0)
)) return false;
hr = ms_alpd3dDefIB[eDefIB]->Lock(0, 0, (void**)&dstIndices, 0);
if (FAILED(hr))
return false;
memcpy(dstIndices, c_awIndices, sizeof(WORD)*uIdxCount);

View File

@@ -48,7 +48,7 @@ bool CGraphicImageTexture::CreateDeviceObjects()
if (m_stFileName.empty())
{
// 폰트 텍스쳐
if (FAILED(ms_lpd3dDevice->CreateTexture(m_width, m_height, 1, 0, m_d3dFmt, D3DPOOL_MANAGED, &m_lpd3dTexture, nullptr)))
if (FAILED(ms_lpd3dDevice->CreateTexture(m_width, m_height, 1, D3DUSAGE_DYNAMIC, m_d3dFmt, D3DPOOL_DEFAULT, &m_lpd3dTexture, nullptr)))
return false;
}
else
@@ -96,7 +96,7 @@ void CGraphicImageTexture::CreateFromTexturePointer(const CGraphicTexture* c_pSr
bool CGraphicImageTexture::CreateFromDDSTexture(UINT bufSize, const void* c_pvBuf)
{
if (FAILED(DirectX::CreateDDSTextureFromMemoryEx(ms_lpd3dDevice, reinterpret_cast<const uint8_t*>(c_pvBuf), bufSize, 0, D3DPOOL_MANAGED, false, &m_lpd3dTexture)))
if (FAILED(DirectX::CreateDDSTextureFromMemoryEx(ms_lpd3dDevice, reinterpret_cast<const uint8_t*>(c_pvBuf), bufSize, 0, D3DPOOL_DEFAULT, false, &m_lpd3dTexture)))
return false;
D3DSURFACE_DESC desc;
@@ -113,7 +113,7 @@ bool CGraphicImageTexture::CreateFromSTB(UINT bufSize, const void* c_pvBuf)
unsigned char* data = stbi_load_from_memory((stbi_uc*)c_pvBuf, bufSize, &width, &height, &channels, 4); // force RGBA
if (data) {
LPDIRECT3DTEXTURE9 texture;
if (SUCCEEDED(ms_lpd3dDevice->CreateTexture(width, height, 1, 0, channels == 4 ? D3DFMT_A8R8G8B8 : D3DFMT_X8R8G8B8, D3DPOOL_MANAGED, &texture, nullptr))) {
if (SUCCEEDED(ms_lpd3dDevice->CreateTexture(width, height, 1, 0, channels == 4 ? D3DFMT_A8R8G8B8 : D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &texture, nullptr))) {
D3DLOCKED_RECT rect;
if (SUCCEEDED(texture->LockRect(0, &rect, nullptr, 0))) {
uint8_t* dstData = (uint8_t*)rect.pBits;
@@ -153,7 +153,7 @@ bool CGraphicImageTexture::CreateFromMemoryFile(UINT bufSize, const void * c_pvB
D3DXIMAGE_INFO imageInfo;
if (FAILED(D3DXCreateTextureFromFileInMemoryEx(ms_lpd3dDevice, c_pvBuf, bufSize
, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT, 0, d3dFmt, D3DPOOL_MANAGED
, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT, 0, d3dFmt, D3DPOOL_DEFAULT
, dwFilter, dwFilter, 0xffff00ff, &imageInfo, NULL, &m_lpd3dTexture))) {
TraceError("CreateFromMemoryFile: Cannot create texture");
return false;
@@ -188,7 +188,7 @@ bool CGraphicImageTexture::CreateFromMemoryFile(UINT bufSize, const void * c_pvB
if (SUCCEEDED(D3DXCreateTexture(ms_lpd3dDevice
, imageInfo.Width >> uTexBias, imageInfo.Height >> uTexBias
, imageInfo.MipLevels, 0, format, D3DPOOL_MANAGED, &pkTexDst))) {
, imageInfo.MipLevels, 0, format, D3DPOOL_DEFAULT, &pkTexDst))) {
m_lpd3dTexture = pkTexDst;
for (int i = 0; i < imageInfo.MipLevels; ++i) {

View File

@@ -106,7 +106,7 @@ bool CGraphicIndexBuffer::CreateDeviceObjects()
m_dwBufferSize,
D3DUSAGE_WRITEONLY,
m_d3dFmt,
D3DPOOL_MANAGED,
D3DPOOL_DEFAULT,
&m_lpd3dIdxBuf,
NULL)
))

View File

@@ -630,7 +630,7 @@ BOOL CScreen::IsLostDevice()
if (!ms_lpd3dDevice)
return TRUE;
IDirect3DDevice9 & rkD3DDev = *ms_lpd3dDevice;
IDirect3DDevice9Ex & rkD3DDev = *ms_lpd3dDevice;
HRESULT hrTestCooperativeLevel = rkD3DDev.TestCooperativeLevel();
if (FAILED(hrTestCooperativeLevel))
return TRUE;
@@ -643,8 +643,8 @@ BOOL CScreen::RestoreDevice()
if (!ms_lpd3dDevice)
return FALSE;
IDirect3D9& rkD3D = *ms_lpd3d;
IDirect3DDevice9& rkD3DDev = *ms_lpd3dDevice;
IDirect3D9Ex& rkD3D = *ms_lpd3d;
IDirect3DDevice9Ex& rkD3DDev = *ms_lpd3dDevice;
D3DPRESENT_PARAMETERS& rkD3DPP = ms_d3dPresentParameter;
HRESULT hrTestCooperativeLevel = rkD3DDev.TestCooperativeLevel();

View File

@@ -3,8 +3,8 @@
bool CStaticVertexBuffer::Create(int vtxCount, DWORD fvf, bool /*isManaged*/)
{
// 무조건 MANAGED 모드
return CGraphicVertexBuffer::Create(vtxCount, fvf, D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED);
// DirectX 9Ex: Use DEFAULT pool instead of MANAGED
return CGraphicVertexBuffer::Create(vtxCount, fvf, D3DUSAGE_WRITEONLY, D3DPOOL_DEFAULT);
}
CStaticVertexBuffer::CStaticVertexBuffer()

View File

@@ -2,6 +2,7 @@
#include "NetStream.h"
//#include "eterCrypt.h"
#include <iomanip>
#include <sstream>
#ifndef _IMPROVED_PACKET_ENCRYPTION_
#include "EterBase/tea.h"

View File

@@ -51,7 +51,7 @@ void CStateManager::EndScene()
m_bScene = false;
}
CStateManager::CStateManager(LPDIRECT3DDEVICE9 lpDevice) : m_lpD3DDev(NULL)
CStateManager::CStateManager(LPDIRECT3DDEVICE9EX lpDevice) : m_lpD3DDev(NULL)
{
m_bScene = false;
m_dwBestMinFilter = D3DTEXF_ANISOTROPIC;
@@ -77,7 +77,7 @@ CStateManager::~CStateManager()
}
}
void CStateManager::SetDevice(LPDIRECT3DDEVICE9 lpDevice)
void CStateManager::SetDevice(LPDIRECT3DDEVICE9EX lpDevice)
{
StateManager_Assert(lpDevice);
lpDevice->AddRef();
@@ -441,7 +441,7 @@ void CStateManager::StateManager_Apply()
m_CurrentState = m_CurrentState_Copy;
}
LPDIRECT3DDEVICE9 CStateManager::GetDevice()
LPDIRECT3DDEVICE9EX CStateManager::GetDevice()
{
return m_lpD3DDev;
}

View File

@@ -226,7 +226,7 @@ public:
class CStateManager : public CSingleton<CStateManager>
{
public:
CStateManager(LPDIRECT3DDEVICE9 lpDevice);
CStateManager(LPDIRECT3DDEVICE9EX lpDevice);
virtual ~CStateManager();
void SetDefaultState();
@@ -333,7 +333,7 @@ public:
void StateManager_Capture();
void StateManager_Apply();
LPDIRECT3DDEVICE9 GetDevice();
LPDIRECT3DDEVICE9EX GetDevice();
#ifdef _DEBUG
void ResetDrawCallCounter();
@@ -341,7 +341,7 @@ public:
#endif
private:
void SetDevice(LPDIRECT3DDEVICE9 lpDevice);
void SetDevice(LPDIRECT3DDEVICE9EX lpDevice);
private:
@@ -352,7 +352,7 @@ private:
bool m_bScene;
DWORD m_dwBestMinFilter;
DWORD m_dwBestMagFilter;
LPDIRECT3DDEVICE9 m_lpD3DDev;
LPDIRECT3DDEVICE9EX m_lpD3DDev;
std::vector<DWORD> m_RenderStateStack[STATEMANAGER_MAX_RENDERSTATES];
std::vector<DWORD> m_SamplerStateStack[STATEMANAGER_MAX_STAGES][STATEMANAGER_MAX_TEXTURESTATES];