diff --git a/3rdparty/directx-headers/include/directx/d3d10.h b/3rdparty/directx-headers/include/directx/d3d10.h index e69de29bb..6f70f09be 100644 --- a/3rdparty/directx-headers/include/directx/d3d10.h +++ b/3rdparty/directx-headers/include/directx/d3d10.h @@ -0,0 +1 @@ +#pragma once diff --git a/3rdparty/directx-headers/include/directx/d3d10_1.h b/3rdparty/directx-headers/include/directx/d3d10_1.h index e69de29bb..6f70f09be 100644 --- a/3rdparty/directx-headers/include/directx/d3d10_1.h +++ b/3rdparty/directx-headers/include/directx/d3d10_1.h @@ -0,0 +1 @@ +#pragma once diff --git a/3rdparty/directx-headers/include/directx/d3d10_1shader.h b/3rdparty/directx-headers/include/directx/d3d10_1shader.h index e69de29bb..6f70f09be 100644 --- a/3rdparty/directx-headers/include/directx/d3d10_1shader.h +++ b/3rdparty/directx-headers/include/directx/d3d10_1shader.h @@ -0,0 +1 @@ +#pragma once diff --git a/3rdparty/directx-headers/include/directx/d3d10effect.h b/3rdparty/directx-headers/include/directx/d3d10effect.h index e69de29bb..6f70f09be 100644 --- a/3rdparty/directx-headers/include/directx/d3d10effect.h +++ b/3rdparty/directx-headers/include/directx/d3d10effect.h @@ -0,0 +1 @@ +#pragma once diff --git a/3rdparty/directx-headers/include/directx/d3d10misc.h b/3rdparty/directx-headers/include/directx/d3d10misc.h index e69de29bb..6f70f09be 100644 --- a/3rdparty/directx-headers/include/directx/d3d10misc.h +++ b/3rdparty/directx-headers/include/directx/d3d10misc.h @@ -0,0 +1 @@ +#pragma once diff --git a/3rdparty/directx-headers/include/directx/d3d10sdklayers.h b/3rdparty/directx-headers/include/directx/d3d10sdklayers.h index e69de29bb..6f70f09be 100644 --- a/3rdparty/directx-headers/include/directx/d3d10sdklayers.h +++ b/3rdparty/directx-headers/include/directx/d3d10sdklayers.h @@ -0,0 +1 @@ +#pragma once diff --git a/3rdparty/directx-headers/include/directx/d3d10shader.h b/3rdparty/directx-headers/include/directx/d3d10shader.h index e69de29bb..6f70f09be 100644 --- a/3rdparty/directx-headers/include/directx/d3d10shader.h +++ b/3rdparty/directx-headers/include/directx/d3d10shader.h @@ -0,0 +1 @@ +#pragma once diff --git a/3rdparty/directx-headers/include/wsl/stubs/basetsd.h b/3rdparty/directx-headers/include/wsl/stubs/basetsd.h index 68a3b79d9..cefc1bd05 100644 --- a/3rdparty/directx-headers/include/wsl/stubs/basetsd.h +++ b/3rdparty/directx-headers/include/wsl/stubs/basetsd.h @@ -40,6 +40,7 @@ typedef uint16_t WORD; typedef void* PVOID; typedef char BOOLEAN; typedef uint64_t ULONGLONG; +typedef int16_t SHORT, *PSHORT; typedef uint16_t USHORT, *PUSHORT; typedef int64_t LONGLONG, *PLONGLONG; typedef int64_t LONG_PTR, *PLONG_PTR; diff --git a/3rdparty/directx-headers/include/wsl/stubs/objbase.h b/3rdparty/directx-headers/include/wsl/stubs/objbase.h new file mode 100644 index 000000000..6f70f09be --- /dev/null +++ b/3rdparty/directx-headers/include/wsl/stubs/objbase.h @@ -0,0 +1 @@ +#pragma once diff --git a/3rdparty/directx-headers/include/wsl/stubs/windows.h b/3rdparty/directx-headers/include/wsl/stubs/windows.h new file mode 100644 index 000000000..bcb228143 --- /dev/null +++ b/3rdparty/directx-headers/include/wsl/stubs/windows.h @@ -0,0 +1,18 @@ +#pragma once +#include "basetsd.h" + +typedef struct RGNDATAHEADER { + DWORD dwSize; + DWORD iType; + DWORD nCount; + DWORD nRgnSize; + RECT rcBound; +} RGNDATAHEADER; + +typedef struct RGNDATA { + RGNDATAHEADER rdh; + char Buffer[1]; +} RGNDATA; + +#define MAKE_HRESULT(sev,fac,code) \ + ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) ) diff --git a/src/config.h b/src/config.h index 09b90f983..a492f0006 100644 --- a/src/config.h +++ b/src/config.h @@ -39,6 +39,7 @@ # ifndef BGFX_CONFIG_RENDERER_DIRECT3D9 # define BGFX_CONFIG_RENDERER_DIRECT3D9 (0 \ + || BX_PLATFORM_LINUX \ || BX_PLATFORM_WINDOWS \ ? 1 : 0) # endif // BGFX_CONFIG_RENDERER_DIRECT3D9 diff --git a/src/renderer_d3d9.cpp b/src/renderer_d3d9.cpp index a24032974..b38e60aee 100644 --- a/src/renderer_d3d9.cpp +++ b/src/renderer_d3d9.cpp @@ -455,32 +455,37 @@ namespace bgfx { namespace d3d9 // Reference(s): // - https://web.archive.org/web/20190207230309/https://docs.microsoft.com/en-us/windows/desktop/direct3d9/d3dpresent-parameters bx::memSet(&m_params, 0, sizeof(m_params) ); - m_params.BackBufferWidth = _init.resolution.width; - m_params.BackBufferHeight = _init.resolution.height; - m_params.BackBufferFormat = adapterFormat; - m_params.BackBufferCount = bx::clamp(_init.resolution.numBackBuffers, 2, BGFX_CONFIG_MAX_BACK_BUFFERS); - m_params.MultiSampleType = D3DMULTISAMPLE_NONE; - m_params.MultiSampleQuality = 0; + m_params.BackBufferWidth = _init.resolution.width; + m_params.BackBufferHeight = _init.resolution.height; + m_params.BackBufferFormat = adapterFormat; + m_params.BackBufferCount = bx::clamp(_init.resolution.numBackBuffers, 2, BGFX_CONFIG_MAX_BACK_BUFFERS); + m_params.MultiSampleType = D3DMULTISAMPLE_NONE; + m_params.MultiSampleQuality = 0; m_params.EnableAutoDepthStencil = TRUE; m_params.AutoDepthStencilFormat = D3DFMT_D24S8; - m_params.Flags = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL; + m_params.Flags = D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL; m_params.FullScreen_RefreshRateInHz = 0; - m_params.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; - m_params.SwapEffect = D3DSWAPEFFECT_DISCARD; - m_params.hDeviceWindow = NULL; - m_params.Windowed = true; + m_params.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; + m_params.SwapEffect = D3DSWAPEFFECT_DISCARD; + m_params.hDeviceWindow = NULL; + m_params.Windowed = true; + m_params.BackBufferWidth = _init.resolution.width; + m_params.BackBufferHeight = _init.resolution.height; - RECT rect; - GetWindowRect( (HWND)g_platformData.nwh, &rect); - m_params.BackBufferWidth = rect.right-rect.left; - m_params.BackBufferHeight = rect.bottom-rect.top; + const char* d3d9DllName = +#if BX_PLATFORM_LINUX + "d3d9.so" +#else + "d3d9.dll" +#endif // BX_PLATFORM_LINUX + ; - m_d3d9Dll = bx::dlopen("d3d9.dll"); + m_d3d9Dll = bx::dlopen(d3d9DllName); if (NULL == m_d3d9Dll) { - BX_TRACE("Init error: Failed to load d3d9.dll."); + BX_TRACE("Init error: Failed to load %s.", d3d9DllName); goto error; } @@ -1231,6 +1236,7 @@ namespace bgfx { namespace d3d9 void requestScreenShot(FrameBufferHandle _handle, const char* _filePath) override { +#if BX_PLATFORM_WINDOWS IDirect3DSwapChain9* swapChain = isValid(_handle) ? m_frameBuffers[_handle.idx].m_swapChain : m_swapChain @@ -1294,6 +1300,10 @@ namespace bgfx { namespace d3d9 DX_CHECK(surface->UnlockRect() ); DX_RELEASE(surface, 0); +#else + BX_TRACE("Screenshot not supported!"); + BX_UNUSED(_handle, _filePath); +#endif // BX_PLATFORM_WINDOWS } void updateViewName(ViewId _id, const char* _name) override diff --git a/src/renderer_d3d9.h b/src/renderer_d3d9.h index 0e00e0a2b..1ae95bb8e 100644 --- a/src/renderer_d3d9.h +++ b/src/renderer_d3d9.h @@ -6,12 +6,11 @@ #ifndef BGFX_RENDERER_D3D9_H_HEADER_GUARD #define BGFX_RENDERER_D3D9_H_HEADER_GUARD -#define BGFX_CONFIG_RENDERER_DIRECT3D9EX BX_PLATFORM_WINDOWS +#define BGFX_CONFIG_RENDERER_DIRECT3D9EX (BX_PLATFORM_LINUX || BX_PLATFORM_WINDOWS) -#if BX_PLATFORM_WINDOWS -# include -# include -#endif // BX_PLATFORM_ +#include +#include +#include #ifndef D3DSTREAMSOURCE_INDEXEDDATA # define D3DSTREAMSOURCE_INDEXEDDATA (1<<30)