58 lines
1,023 B
C++
58 lines
1,023 B
C++
|
|
#include <Spectre/Display/DisplayMode.h>
|
|
#include <Platform/PlatformMisc.h>
|
|
#include <algorithm>
|
|
|
|
namespace sp {
|
|
|
|
struct DisplayModeCmp
|
|
{
|
|
inline bool operator() (const DisplayMode& a, const DisplayMode& b)
|
|
{
|
|
if (a.bpp == b.bpp) {
|
|
if (a.width == b.width) {
|
|
return a.height > b.height;
|
|
}
|
|
return a.width > b.width;
|
|
}
|
|
return a.bpp > b.bpp;
|
|
}
|
|
};
|
|
|
|
DisplayMode::DisplayMode() :
|
|
width (0),
|
|
height (0),
|
|
bpp (0)
|
|
{
|
|
}
|
|
|
|
DisplayMode::DisplayMode(unsigned int width, unsigned int height, unsigned int bpp) :
|
|
width (width),
|
|
height (height),
|
|
bpp (bpp)
|
|
{
|
|
}
|
|
|
|
std::vector<DisplayMode> DisplayMode::getFullscreenModes()
|
|
{
|
|
static std::vector<DisplayMode> modes;
|
|
|
|
if (modes.size() < 1) {
|
|
|
|
PlatformMisc::GetDisplayModes(modes);
|
|
|
|
// Sort.
|
|
std::sort(modes.begin(), modes.end(), DisplayModeCmp());
|
|
|
|
// remove duplicates
|
|
modes.erase(std::unique(modes.begin(), modes.end()), modes.end());
|
|
}
|
|
return modes;
|
|
}
|
|
|
|
DisplayMode DisplayMode::getDesktopMode()
|
|
{
|
|
return PlatformMisc::GetDesktopMode();
|
|
}
|
|
|
|
} // namespace sp
|