diff --git a/DDrawCompat/D3dDdi/Adapter.cpp b/DDrawCompat/D3dDdi/Adapter.cpp index 194f98f4..ee57baff 100644 --- a/DDrawCompat/D3dDdi/Adapter.cpp +++ b/DDrawCompat/D3dDdi/Adapter.cpp @@ -281,16 +281,17 @@ namespace D3dDdi case D3DDDICAPS_GETFORMATDATA: { - if (Config::palettizedTextures.get()) + UINT count = pData->DataSize / sizeof(FORMATOP); + auto formatOp = static_cast(pData->pData); + for (UINT i = 0; i < count; ++i) { - UINT count = pData->DataSize / sizeof(FORMATOP); - auto formatOp = static_cast(pData->pData); - for (UINT i = 0; i < count; ++i) + if (D3DDDIFMT_P8 == formatOp[i].Format && Config::palettizedTextures.get()) + { + formatOp[i].Operations |= FORMATOP_TEXTURE | FORMATOP_CUBETEXTURE; + } + if (formatOp[i].Format > 0xFF) { - if (D3DDDIFMT_P8 == formatOp[i].Format) - { - formatOp[i].Operations |= FORMATOP_TEXTURE | FORMATOP_CUBETEXTURE; - } + formatOp[i].Operations &= ~(FORMATOP_TEXTURE | FORMATOP_CUBETEXTURE | FORMATOP_VOLUMETEXTURE); } } break; diff --git a/DDrawCompat/Direct3d/Direct3d.cpp b/DDrawCompat/Direct3d/Direct3d.cpp index 001578d6..89b003ca 100644 --- a/DDrawCompat/Direct3d/Direct3d.cpp +++ b/DDrawCompat/Direct3d/Direct3d.cpp @@ -46,16 +46,22 @@ namespace return result; } + template HRESULT STDMETHODCALLTYPE createVertexBuffer( - IDirect3D7* This, + TDirect3d* This, LPD3DVERTEXBUFFERDESC lpVBDesc, - LPDIRECT3DVERTEXBUFFER7* lplpD3DVertexBuffer, - DWORD dwFlags) + TDirect3dVertexBuffer* lplpD3DVertexBuffer, + DWORD dwFlags, + Params... params) { - HRESULT result = getOrigVtable(This).CreateVertexBuffer(This, lpVBDesc, lplpD3DVertexBuffer, dwFlags); - if (SUCCEEDED(result)) + lpVBDesc->dwCaps |= D3DVBCAPS_SYSTEMMEMORY; + HRESULT result = getOrigVtable(This).CreateVertexBuffer(This, lpVBDesc, lplpD3DVertexBuffer, dwFlags, params...); + if constexpr (std::is_same_v) { - Direct3d::Direct3dVertexBuffer::hookVtable(*(*lplpD3DVertexBuffer)->lpVtbl); + if (SUCCEEDED(result)) + { + Direct3d::Direct3dVertexBuffer::hookVtable(*(*lplpD3DVertexBuffer)->lpVtbl); + } } return result; } @@ -68,7 +74,7 @@ namespace vtable.CreateDevice = &createDevice; } - if constexpr (std::is_same_v) + if constexpr (std::is_same_v || std::is_same_v) { vtable.CreateVertexBuffer = &createVertexBuffer; }