diff --git a/framework/platform/adapter-dx.cpp b/framework/platform/adapter-dx.cpp index 59c3267..e588fcb 100644 --- a/framework/platform/adapter-dx.cpp +++ b/framework/platform/adapter-dx.cpp @@ -176,42 +176,43 @@ namespace xna { pOutput->GetDisplayModeList(format, 0, &numModes, buffer.data() + totalModes); totalModes += numModes; - } - - pOutput->Release(); - - auto collection = uNew(); - DisplayMode currentDisplayMode{}; - std::vector displayList; - PDisplayMode pDisplay = nullptr; - size_t displayCount = 0; - - for (size_t i = 0; i < totalModes; ++i) { - auto& modedesc = buffer[i]; - - DisplayModeDescription description; - description._refreshRate = modedesc.RefreshRate; - description._scaling = static_cast(modedesc.Scaling); - description._scanlineOrdering = static_cast(modedesc.ScanlineOrdering); - - if (pDisplay && pDisplay->_width == modedesc.Width && pDisplay->_height == modedesc.Height && pDisplay->_format == GraphicsAdapter::ToSurface(modedesc.Format)) { - pDisplay->_descriptions.push_back(description); - } - else { - pDisplay = New(); - pDisplay->_width = modedesc.Width; - pDisplay->_height = modedesc.Height; - pDisplay->_format = GraphicsAdapter::ToSurface(modedesc.Format); - pDisplay->_descriptions.push_back(description); - displayList.push_back(pDisplay); - } - } - - collection->_displayModes = displayList; - - return std::move(collection); + } } - return nullptr; + if (!pOutput) + return nullptr; + + pOutput->Release(); + pOutput = nullptr; + + auto collection = uNew(); + DisplayMode currentDisplayMode; + std::vector displayList; + PDisplayMode pDisplay = nullptr; + + for (size_t i = 0; i < totalModes; ++i) { + auto& modedesc = buffer[i]; + + DisplayModeDescription description; + description._refreshRate = modedesc.RefreshRate; + description._scaling = static_cast(modedesc.Scaling); + description._scanlineOrdering = static_cast(modedesc.ScanlineOrdering); + + if (pDisplay && pDisplay->_width == modedesc.Width && pDisplay->_height == modedesc.Height && pDisplay->_format == GraphicsAdapter::ToSurface(modedesc.Format)) { + pDisplay->_descriptions.push_back(description); + } + else { + pDisplay = New(); + pDisplay->_width = modedesc.Width; + pDisplay->_height = modedesc.Height; + pDisplay->_format = GraphicsAdapter::ToSurface(modedesc.Format); + pDisplay->_descriptions.push_back(description); + displayList.push_back(pDisplay); + } + } + + collection->_displayModes = displayList; + + return std::move(collection); } } \ No newline at end of file