#pragma once #include #include #include #include // Used for ComPtr - a smart pointer for COM objects // We can include the correct library files here // instead of in Visual Studio settings if we want #pragma comment(lib, "d3d11.lib") class DXCore { public: DXCore( HINSTANCE hInstance, // The application's handle const char* titleBarText, // Text for the window's title bar unsigned int windowWidth, // Width of the window's client area unsigned int windowHeight, // Height of the window's client area bool debugTitleBarStats); // Show extra stats (fps) in title bar? ~DXCore(); // Static requirements for OS-level message processing static DXCore* DXCoreInstance; static LRESULT CALLBACK WindowProc( HWND hWnd, // Window handle UINT uMsg, // Message WPARAM wParam, // Message's first parameter LPARAM lParam // Message's second parameter ); // Internal method for message handling LRESULT ProcessMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); // Initialization and game-loop related methods HRESULT InitWindow(); HRESULT InitDirectX(); HRESULT Run(); void Quit(); virtual void OnResize(); // Pure virtual methods for setup and game functionality virtual void Init() = 0; virtual void Update(float deltaTime, float totalTime) = 0; virtual void Draw(float deltaTime, float totalTime) = 0; // Helpers for determining the actual path to the executable static std::string GetExePath(); static std::wstring GetExePath_Wide(); static std::string GetFullPathTo(std::string relativeFilePath); static std::wstring GetFullPathTo_Wide(std::wstring relativeFilePath); protected: HINSTANCE hInstance; // The handle to the application HWND hWnd; // The handle to the window itself std::string titleBarText; // Custom text in window's title bar bool titleBarStats; // Show extra stats in title bar? // Size of the window's client area unsigned int width; unsigned int height; // Does our window currently have focus? // Helpful if we want to pause while not the active window bool hasFocus; // DirectX related objects and variables D3D_FEATURE_LEVEL dxFeatureLevel; Microsoft::WRL::ComPtr swapChain; Microsoft::WRL::ComPtr device; Microsoft::WRL::ComPtr context; Microsoft::WRL::ComPtr backBufferRTV; Microsoft::WRL::ComPtr depthStencilView; // Helper function for allocating a console window void CreateConsoleWindow(int bufferLines, int bufferColumns, int windowLines, int windowColumns); private: // Timing related data double perfCounterSeconds; float totalTime; float deltaTime; __int64 startTime; __int64 currentTime; __int64 previousTime; // FPS calculation int fpsFrameCount; float fpsTimeElapsed; void UpdateTimer(); // Updates the timer for this frame void UpdateTitleBarStats(); // Puts debug info in the title bar };