2#if defined(ENABLE_DX11) || defined(ENABLE_DX12)
31 std::shared_ptr<Ship::FileDrop> fileDrop =
nullptr,
32 std::shared_ptr<Ship::ConsoleVariable> consoleVariable =
nullptr,
33 std::shared_ptr<Fast::Fast3dGui> fast3dGui =
nullptr);
38 void Init(
const char* gameName,
const char* apiName,
bool startFullScreen, uint32_t width, uint32_t height,
39 int32_t posX, int32_t posY)
override;
42 void (*onnAllKeysUp)())
override;
43 void SetMouseCallbacks(
bool (*onMouseButtonDown)(
int btn),
bool (*onnMouseButtonUp)(
int btn))
override;
55 void GetDimensions(uint32_t* width, uint32_t* height, int32_t* posX, int32_t* posY)
override;
56 void SetDimensions(uint32_t width, uint32_t height, int32_t posX, int32_t posY)
override;
79 void CreateSwapChain(IUnknown* mDevice, std::function<
void()>&& before_destroy_fn);
84 void OnKeyup(WPARAM wParam, LPARAM lParam);
112 void ApplyMaxFrameLatency(
bool first);
113 void ToggleBorderlessWindowFullScreen(
bool enable,
bool callCallback);
119 HRESULT(__stdcall* CreateDXGIFactory1)(REFIID riid,
void** factory);
120 HRESULT(__stdcall* CreateDXGIFactory2)(UINT flags, REFIID iid,
void** factory);
122 bool mLastMaximizedState;
125 Microsoft::WRL::ComPtr<IDXGIFactory2> mFactory;
126 Microsoft::WRL::ComPtr<IDXGISwapChain1> swap_chain;
127 HANDLE mWaitableObject;
128 Microsoft::WRL::ComPtr<IUnknown> mSwapChainDevice;
129 std::function<void()> mBeforeDestroySwapChainFn;
130 uint64_t mFrameTimeStamp;
131 std::map<UINT, DXGI_FRAME_STATISTICS> mFrameStats;
132 std::set<std::pair<UINT, UINT>> mPendingFrameStats;
135 uint32_t mMaxFrameLatency;
136 uint32_t mAppliedMaxFrameLatency;
138 bool mTearingSupport;
139 bool mMousePressed[5];
140 LARGE_INTEGER mPreviousPresentTime;
142 RAWINPUTDEVICE mRawInputDevice[1];
143 POINT mPrevMouseCursorPos;
145 std::shared_ptr<Ship::Config> mConfig;
150#ifdef DECLARE_GFX_DXGI_FUNCTIONS
Direct3D 11 implementation of the Fast3D rendering backend.
Definition gfx_direct3d_common.h:105
DXGI/Win32 window backend used by the Fast3D renderer on Windows.
Definition gfx_dxgi.h:27
double GetTime() override
void CreateFactoryAndDevice(bool debug, int d3d_version, class GfxRenderingAPIDX11 *self, bool(*createFunc)(class GfxRenderingAPIDX11 *self, bool SoftwareRenderer))
Creates the DXGI factory/device and invokes the renderer-side creation callback.
bool IsMouseCaptured() override
bool mIsMouseCaptured
Definition gfx_dxgi.h:100
double mDetectedHz
Definition gfx_dxgi.h:95
void SetMousePos(int32_t posX, int32_t posY) override
float mMouseWheel[2]
Definition gfx_dxgi.h:99
std::tuple< HMONITOR, RECT, BOOL > mMonitor
Definition gfx_dxgi.h:91
void CreateSwapChain(IUnknown *mDevice, std::function< void()> &&before_destroy_fn)
Creates/recreates the swap chain and runs a pre-destroy callback when replacing it.
void SetMouseCallbacks(bool(*onMouseButtonDown)(int btn), bool(*onnMouseButtonUp)(int btn)) override
void SetDimensions(uint32_t width, uint32_t height, int32_t posX, int32_t posY) override
bool mHasMousePosition
Definition gfx_dxgi.h:103
uint32_t current_width
Definition gfx_dxgi.h:92
void SetFullscreenChangedCallback(void(*onnFullscreenChanged)(bool is_now_fullscreen)) override
void GetActiveWindowRefreshRate(uint32_t *refreshRate) override
void SetMouseCapture(bool capture) override
double mDisplayPeriod
Definition gfx_dxgi.h:96
Ship::WindowRect GetPrimaryMonitorRect() override
HWND GetWindowHandle()
Returns the native Win32 window handle.
void SetMaxFrameLatency(int latency) override
int32_t mPosX
Definition gfx_dxgi.h:94
void OnMouseButtonDown(int btn)
void SetFullscreen(bool fullscreen) override
void(* mOnAllKeysUp)(void)
Definition gfx_dxgi.h:97
void GetDimensions(uint32_t *width, uint32_t *height, int32_t *posX, int32_t *posY) override
bool GetMouseState(uint32_t btn) override
void SwapBuffersEnd() override
IDXGISwapChain1 * GetSwapChain()
Returns the active DXGI swap chain.
void HandleEvents() override
std::shared_ptr< Fast::Fast3dGui > mFast3dGui
Definition gfx_dxgi.h:108
void UpdateMousePrevPos()
void GetMousePos(int32_t *x, int32_t *y) override
void ApplyMouseCaptureClip()
~GfxWindowBackendDXGI() override
void OnMouseButtonUp(int btn)
bool IsRunning() override
bool IsFullscreen() override
void GetMouseDelta(int32_t *x, int32_t *y) override
bool mInFocus
Definition gfx_dxgi.h:102
void OnKeyup(WPARAM wParam, LPARAM lParam)
void Init(const char *gameName, const char *apiName, bool startFullScreen, uint32_t width, uint32_t height, int32_t posX, int32_t posY) override
void OnKeydown(WPARAM wParam, LPARAM lParam)
void HandleRawInputBuffered()
bool CanDisableVsync() override
bool IsFrameReady() override
int32_t mPosY
Definition gfx_dxgi.h:94
void SetCursorVisibility(bool visability) override
std::shared_ptr< Ship::FileDrop > mFileDrop
Definition gfx_dxgi.h:106
std::shared_ptr< Ship::ConsoleVariable > mConsoleVariable
Definition gfx_dxgi.h:107
void SetTargetFps(int fps) override
POINT mRawMouseDeltaBuf
Definition gfx_dxgi.h:98
void GetMouseWheel(float *x, float *y) override
const char * GetKeyName(int scancode) override
GfxWindowBackendDXGI(std::shared_ptr< Ship::Config > config=nullptr, std::shared_ptr< Ship::FileDrop > fileDrop=nullptr, std::shared_ptr< Ship::ConsoleVariable > consoleVariable=nullptr, std::shared_ptr< Fast::Fast3dGui > fast3dGui=nullptr)
Constructs the backend with optional shared engine dependencies.
bool mIsMouseHovered
Definition gfx_dxgi.h:101
std::vector< std::tuple< HMONITOR, RECT, BOOL > > monitor_list
Definition gfx_dxgi.h:93
void SetKeyboardCallbacks(bool(*onKeyDown)(int scancode), bool(*onKeyUp)(int scancode), void(*onnAllKeysUp)()) override
uint32_t current_height
Definition gfx_dxgi.h:92
void SwapBuffersBegin() override
Definition gfx_window_manager_api.h:7
void ThrowIfFailed(HRESULT res)
Throws an exception when an HRESULT indicates failure.
Definition gfx_direct3d_common.h:19
Core namespace for the libultraship engine framework.
Definition gfx_direct3d_common.h:14
Screen-space rectangle in integer pixels.
Definition Window.h:38