mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-30 15:52:09 +00:00
- consolidated the 3 identical versions of I_CheckResolution and I_ClosestResolution.
This commit is contained in:
parent
e9e1911fa5
commit
dc2a5b0cc9
6 changed files with 67 additions and 169 deletions
|
@ -13,8 +13,6 @@ DFrameBuffer *I_SetMode (int &width, int &height, DFrameBuffer *old);
|
||||||
// the original DOS version (if the Heretic/Hexen source is any indicator).
|
// the original DOS version (if the Heretic/Hexen source is any indicator).
|
||||||
void I_WaitVBL(int count);
|
void I_WaitVBL(int count);
|
||||||
|
|
||||||
bool I_CheckResolution (int width, int height, int bpp);
|
|
||||||
void I_ClosestResolution (int *width, int *height, int bits);
|
|
||||||
|
|
||||||
enum EDisplayType
|
enum EDisplayType
|
||||||
{
|
{
|
||||||
|
|
|
@ -758,67 +758,6 @@ DFrameBuffer* I_SetMode(int &width, int &height, DFrameBuffer* old)
|
||||||
return Video->CreateFrameBuffer(width, height, false, fullscreen, old);
|
return Video->CreateFrameBuffer(width, height, false, fullscreen, old);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool I_CheckResolution(const int width, const int height, const int bits)
|
|
||||||
{
|
|
||||||
int twidth, theight;
|
|
||||||
|
|
||||||
Video->StartModeIterator(bits, fullscreen);
|
|
||||||
|
|
||||||
while (Video->NextMode(&twidth, &theight, NULL))
|
|
||||||
{
|
|
||||||
if (width == twidth && height == theight)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void I_ClosestResolution(int *width, int *height, int bits)
|
|
||||||
{
|
|
||||||
int twidth, theight;
|
|
||||||
int cwidth = 0, cheight = 0;
|
|
||||||
int iteration;
|
|
||||||
uint32_t closest = uint32_t(-1);
|
|
||||||
|
|
||||||
for (iteration = 0; iteration < 2; ++iteration)
|
|
||||||
{
|
|
||||||
Video->StartModeIterator(bits, fullscreen);
|
|
||||||
|
|
||||||
while (Video->NextMode(&twidth, &theight, NULL))
|
|
||||||
{
|
|
||||||
if (twidth == *width && theight == *height)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iteration == 0 && (twidth < *width || theight < *height))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const uint32_t dist = (twidth - *width) * (twidth - *width)
|
|
||||||
+ (theight - *height) * (theight - *height);
|
|
||||||
|
|
||||||
if (dist < closest)
|
|
||||||
{
|
|
||||||
closest = dist;
|
|
||||||
cwidth = twidth;
|
|
||||||
cheight = theight;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (closest != uint32_t(-1))
|
|
||||||
{
|
|
||||||
*width = cwidth;
|
|
||||||
*height = cheight;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -123,56 +123,6 @@ DFrameBuffer *I_SetMode (int &width, int &height, DFrameBuffer *old)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool I_CheckResolution (int width, int height, int bits)
|
|
||||||
{
|
|
||||||
int twidth, theight;
|
|
||||||
|
|
||||||
Video->StartModeIterator (bits, screen ? screen->IsFullscreen() : fullscreen);
|
|
||||||
while (Video->NextMode (&twidth, &theight, NULL))
|
|
||||||
{
|
|
||||||
if (width == twidth && height == theight)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void I_ClosestResolution (int *width, int *height, int bits)
|
|
||||||
{
|
|
||||||
int twidth, theight;
|
|
||||||
int cwidth = 0, cheight = 0;
|
|
||||||
int iteration;
|
|
||||||
uint32_t closest = 4294967295u;
|
|
||||||
|
|
||||||
for (iteration = 0; iteration < 2; iteration++)
|
|
||||||
{
|
|
||||||
Video->StartModeIterator (bits, screen ? screen->IsFullscreen() : fullscreen);
|
|
||||||
while (Video->NextMode (&twidth, &theight, NULL))
|
|
||||||
{
|
|
||||||
if (twidth == *width && theight == *height)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (iteration == 0 && (twidth < *width || theight < *height))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
uint32_t dist = (twidth - *width) * (twidth - *width)
|
|
||||||
+ (theight - *height) * (theight - *height);
|
|
||||||
|
|
||||||
if (dist < closest)
|
|
||||||
{
|
|
||||||
closest = dist;
|
|
||||||
cwidth = twidth;
|
|
||||||
cheight = theight;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (closest != 4294967295u)
|
|
||||||
{
|
|
||||||
*width = cwidth;
|
|
||||||
*height = cheight;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// SetFPSLimit
|
// SetFPSLimit
|
||||||
|
|
|
@ -1114,6 +1114,66 @@ void V_CalcCleanFacs (int designwidth, int designheight, int realwidth, int real
|
||||||
if (_cx2 != NULL) *_cx2 = cx2;
|
if (_cx2 != NULL) *_cx2 = cx2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool V_CheckResolution(const int width, const int height, const int bits)
|
||||||
|
{
|
||||||
|
int twidth, theight;
|
||||||
|
|
||||||
|
Video->StartModeIterator(bits, fullscreen);
|
||||||
|
|
||||||
|
while (Video->NextMode(&twidth, &theight, NULL))
|
||||||
|
{
|
||||||
|
if (width == twidth && height == theight)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void V_ClosestResolution(int *width, int *height, int bits)
|
||||||
|
{
|
||||||
|
int twidth, theight;
|
||||||
|
int cwidth = 0, cheight = 0;
|
||||||
|
int iteration;
|
||||||
|
uint32_t closest = uint32_t(-1);
|
||||||
|
|
||||||
|
for (iteration = 0; iteration < 2; ++iteration)
|
||||||
|
{
|
||||||
|
Video->StartModeIterator(bits, fullscreen);
|
||||||
|
|
||||||
|
while (Video->NextMode(&twidth, &theight, NULL))
|
||||||
|
{
|
||||||
|
if (twidth == *width && theight == *height)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (iteration == 0 && (twidth < *width || theight < *height))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint32_t dist = (twidth - *width) * (twidth - *width)
|
||||||
|
+ (theight - *height) * (theight - *height);
|
||||||
|
|
||||||
|
if (dist < closest)
|
||||||
|
{
|
||||||
|
closest = dist;
|
||||||
|
cwidth = twidth;
|
||||||
|
cheight = theight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (closest != uint32_t(-1))
|
||||||
|
{
|
||||||
|
*width = cwidth;
|
||||||
|
*height = cheight;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool IVideo::SetResolution (int width, int height, int bits)
|
bool IVideo::SetResolution (int width, int height, int bits)
|
||||||
{
|
{
|
||||||
int oldwidth, oldheight;
|
int oldwidth, oldheight;
|
||||||
|
@ -1132,10 +1192,10 @@ bool IVideo::SetResolution (int width, int height, int bits)
|
||||||
oldbits = bits;
|
oldbits = bits;
|
||||||
}
|
}
|
||||||
|
|
||||||
I_ClosestResolution (&width, &height, bits);
|
V_ClosestResolution (&width, &height, bits);
|
||||||
if (!I_CheckResolution (width, height, bits))
|
if (!V_CheckResolution (width, height, bits))
|
||||||
{ // Try specified resolution
|
{ // Try specified resolution
|
||||||
if (!I_CheckResolution (oldwidth, oldheight, oldbits))
|
if (!V_CheckResolution (oldwidth, oldheight, oldbits))
|
||||||
{ // Try previous resolution (if any)
|
{ // Try previous resolution (if any)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1168,7 +1228,7 @@ CCMD (vid_setmode)
|
||||||
}
|
}
|
||||||
|
|
||||||
const bool goodmode = (width > 0 && height > 0)
|
const bool goodmode = (width > 0 && height > 0)
|
||||||
&& (!fullscreen || (Video != nullptr && I_CheckResolution(width, height, bits)));
|
&& (!fullscreen || (Video != nullptr && V_CheckResolution(width, height, bits)));
|
||||||
|
|
||||||
if (goodmode)
|
if (goodmode)
|
||||||
{
|
{
|
||||||
|
@ -1267,7 +1327,7 @@ void V_Init2()
|
||||||
}
|
}
|
||||||
|
|
||||||
I_InitGraphics();
|
I_InitGraphics();
|
||||||
I_ClosestResolution (&width, &height, 8);
|
V_ClosestResolution (&width, &height, 8);
|
||||||
|
|
||||||
if (!Video->SetResolution (width, height, 8))
|
if (!Video->SetResolution (width, height, 8))
|
||||||
I_FatalError ("Could not set resolution to %d x %d x %d", width, height, 8);
|
I_FatalError ("Could not set resolution to %d x %d x %d", width, height, 8);
|
||||||
|
|
|
@ -185,56 +185,6 @@ DFrameBuffer *I_SetMode (int &width, int &height, DFrameBuffer *old)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool I_CheckResolution (int width, int height, int bits)
|
|
||||||
{
|
|
||||||
int twidth, theight;
|
|
||||||
|
|
||||||
Video->StartModeIterator (bits, screen ? screen->IsFullscreen() : fullscreen);
|
|
||||||
while (Video->NextMode (&twidth, &theight, NULL))
|
|
||||||
{
|
|
||||||
if (width == twidth && height == theight)
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void I_ClosestResolution (int *width, int *height, int bits)
|
|
||||||
{
|
|
||||||
int twidth, theight;
|
|
||||||
int cwidth = 0, cheight = 0;
|
|
||||||
int iteration;
|
|
||||||
DWORD closest = 4294967295u;
|
|
||||||
|
|
||||||
for (iteration = 0; iteration < 2; iteration++)
|
|
||||||
{
|
|
||||||
Video->StartModeIterator (bits, screen ? screen->IsFullscreen() : fullscreen);
|
|
||||||
while (Video->NextMode (&twidth, &theight, NULL))
|
|
||||||
{
|
|
||||||
if (twidth == *width && theight == *height)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (iteration == 0 && (twidth < *width || theight < *height))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
DWORD dist = (twidth - *width) * (twidth - *width)
|
|
||||||
+ (theight - *height) * (theight - *height);
|
|
||||||
|
|
||||||
if (dist < closest)
|
|
||||||
{
|
|
||||||
closest = dist;
|
|
||||||
cwidth = twidth;
|
|
||||||
cheight = theight;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (closest != 4294967295u)
|
|
||||||
{
|
|
||||||
*width = cwidth;
|
|
||||||
*height = cheight;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void GetCenteredPos (int &winx, int &winy, int &winw, int &winh, int &scrwidth, int &scrheight)
|
static void GetCenteredPos (int &winx, int &winy, int &winw, int &winh, int &scrwidth, int &scrheight)
|
||||||
{
|
{
|
||||||
DEVMODE displaysettings;
|
DEVMODE displaysettings;
|
||||||
|
|
|
@ -453,6 +453,7 @@ bool Win32GLVideo::GoFullscreen(bool yes)
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
void V_ClosestResolution(int *width, int *height, int bits);
|
||||||
|
|
||||||
|
|
||||||
DFrameBuffer *Win32GLVideo::CreateFrameBuffer(int width, int height, bool bgra, bool fs, DFrameBuffer *old)
|
DFrameBuffer *Win32GLVideo::CreateFrameBuffer(int width, int height, bool bgra, bool fs, DFrameBuffer *old)
|
||||||
|
@ -461,7 +462,7 @@ DFrameBuffer *Win32GLVideo::CreateFrameBuffer(int width, int height, bool bgra,
|
||||||
|
|
||||||
if (fs)
|
if (fs)
|
||||||
{
|
{
|
||||||
I_ClosestResolution(&width, &height, 32);
|
V_ClosestResolution(&width, &height, 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_DisplayWidth = width;
|
m_DisplayWidth = width;
|
||||||
|
|
Loading…
Reference in a new issue