Getaspectratio: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
Updated to support vid_aspect cvar, and uses accurate values for #defines |
m Optimize away all the FixedMul and FixedDiv. Not sure where the double abs came from (CheckRatio doesn't do it), but can't be bothered to test enough to remove them. |
||
| (3 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
{{DISPLAYTITLE:getaspectratio}} |
{{DISPLAYTITLE:getaspectratio}} |
||
Returns the aspect ratio of the user's resolution by using nearly the same method ZDoom uses internally. Requires the [[abs]] function. |
Returns the aspect ratio of the user's resolution by using nearly the same method ZDoom uses internally. Requires the [[abs]] function. |
||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
#define ASPECT_17_10 1.7 |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
{ |
|||
| ⚫ | |||
| ⚫ | |||
{ |
|||
| ⚫ | |||
| ⚫ | |||
return ASPECT_4_3; |
case 3: return ASPECT_4_3; |
||
| ⚫ | |||
| ⚫ | |||
case 5: return ASPECT_17_10; |
|||
} |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
{ |
|||
} |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
{ |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
} |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
{ |
|||
} |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
{ |
|||
| ⚫ | |||
| ⚫ | |||
} |
|||
} |
|||
| ⚫ | |||
if(abs((abs(height * ASPECT_17_10)>>16) - width) < 10) |
|||
{ |
|||
{ |
|||
| ⚫ | |||
return ASPECT_17_10; |
|||
} |
|||
} |
|||
| ⚫ | |||
| ⚫ | |||
}</pre> |
|||
{ |
|||
| ⚫ | |||
| ⚫ | |||
| ⚫ | |||
} |
|||
| ⚫ | |||
{ |
|||
return ASPECT_5_4; |
|||
} |
|||
| ⚫ | |||
| ⚫ | |||
[[category:Sample ACS functions]] |
|||
Latest revision as of 07:11, 7 December 2015
Returns the aspect ratio of the user's resolution by using nearly the same method ZDoom uses internally. Requires the abs function.
#define ASPECT_4_3 (4.0 / 3)
#define ASPECT_5_4 1.25
#define ASPECT_16_9 (16.0 / 9)
#define ASPECT_16_10 1.6
#define ASPECT_17_10 1.7
function int getaspectratio(void)
{
int width = GetCVar("vid_defwidth");
int height = GetCVar("vid_defheight");
int nowidescreen = GetCVar("vid_nowidescreen");
int tft = GetCVar("vid_tft");
int aspect = GetCVar("vid_aspect");
switch(aspect)
{
case 1: return ASPECT_16_9;
case 2: return ASPECT_16_10;
case 3: return ASPECT_4_3;
case 4: return ASPECT_5_4;
case 5: return ASPECT_17_10;
}
if(nowidescreen)
{
if(!tft)
return ASPECT_4_3;
if(height * ASPECT_5_4 == width<<16)
return ASPECT_5_4;
else
return ASPECT_4_3;
}
if(abs((abs(height * ASPECT_16_9)>>16) - width) < 10)
{
return ASPECT_16_9;
}
if(abs((abs(height * ASPECT_17_10)>>16) - width) < 10)
{
return ASPECT_17_10;
}
if(abs((abs(height * ASPECT_16_10)>>16) - width) < 60)
{
if((width == 320 && height == 200) || (width == 640 && height == 400))
return ASPECT_4_3;
return ASPECT_16_10;
}
if((height * ASPECT_5_4)>>16 == width && tft)
{
return ASPECT_5_4;
}
return ASPECT_4_3;
}