diff --git a/framework/graphics/adapter.hpp b/framework/graphics/adapter.hpp index 3c449c4..996502c 100644 --- a/framework/graphics/adapter.hpp +++ b/framework/graphics/adapter.hpp @@ -9,47 +9,17 @@ namespace xna { class IGraphicsAdapter { public: - virtual ~IGraphicsAdapter() { - } - - static PGraphicsAdapter DefaultAdapter() { - if (_adaptersList.empty()) - return nullptr; - - if (_defaultAdapterIndex >= _adaptersList.size()) - return nullptr; - - return _adaptersList[_defaultAdapterIndex]; - } - - static constexpr void DefaultAdapter(size_t index) { - _defaultAdapterIndex = index; - } - - static constexpr std::vector Adapters() { - return _adaptersList; - } + virtual ~IGraphicsAdapter() {} virtual String Description() const = 0; virtual Uint DeviceId() const = 0; virtual String DeviceName() const = 0; - - constexpr bool IsDefaultAdapter() const { - return _index == _defaultAdapterIndex; - } - + virtual bool IsDefaultAdapter() const = 0; virtual intptr_t MonitorHandle() const = 0; virtual Uint Revision() const = 0; virtual Uint SubSystemId() const = 0; virtual Uint VendorId() const = 0; - virtual PDisplayModeCollection SupportedDisplayModes() const = 0; - - protected: - Uint _index{ 0 }; - inline static size_t _defaultAdapterIndex = 0; - static std::vector getAllAdapters(); - inline static std::vector _adaptersList = getAllAdapters(); }; } diff --git a/framework/platform/adapter-dx.cpp b/framework/platform/adapter-dx.cpp index 0a8c09d..7b9e836 100644 --- a/framework/platform/adapter-dx.cpp +++ b/framework/platform/adapter-dx.cpp @@ -3,6 +3,16 @@ namespace xna { + PGraphicsAdapter GraphicsAdapter::DefaultAdapter() { + if (_adaptersList.empty()) + return nullptr; + + if (_defaultAdapterIndex >= _adaptersList.size()) + return nullptr; + + return _adaptersList[_defaultAdapterIndex]; + } + String GraphicsAdapter::Description() const { DXGI_ADAPTER_DESC1 desc; _adapter->GetDesc1(&desc); @@ -112,7 +122,7 @@ namespace xna { return New(); } - std::vector IGraphicsAdapter::getAllAdapters() { + std::vector GraphicsAdapter::getAllAdapters() { IDXGIFactory1* pFactory = nullptr; if FAILED(CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)&pFactory)) { diff --git a/framework/platform/adapter-dx.hpp b/framework/platform/adapter-dx.hpp index fa18145..4e7be49 100644 --- a/framework/platform/adapter-dx.hpp +++ b/framework/platform/adapter-dx.hpp @@ -24,11 +24,28 @@ namespace xna { virtual Uint Revision() const override; virtual Uint SubSystemId() const override; virtual Uint VendorId() const override; - virtual PDisplayModeCollection SupportedDisplayModes() const override; + virtual PDisplayModeCollection SupportedDisplayModes() const override; + virtual constexpr bool IsDefaultAdapter() const { return _index == _defaultAdapterIndex; } + + static PGraphicsAdapter DefaultAdapter(); + + static constexpr void DefaultAdapter(size_t index) { + _defaultAdapterIndex = index; + } + + static constexpr std::vector Adapters() { + return _adaptersList; + } public: IDXGIAdapter1* _adapter{ nullptr }; - }; + + private: + Uint _index{ 0 }; + inline static size_t _defaultAdapterIndex = 0; + static std::vector getAllAdapters(); + inline static std::vector _adaptersList = getAllAdapters(); + }; struct SurfaceFormatMapper { static constexpr DXGI_FORMAT ParseToDXGI(SurfaceFormat format)