safe_ptr<diagnostics::graph> graph_;\r
timer perf_timer_;\r
\r
+ size_t square_width_;\r
+ size_t square_height_;\r
+\r
executor executor_;\r
public:\r
implementation(unsigned int screen_index, stretch stretch, bool windowed) \r
format_desc_ = format_desc;\r
parent_printer_ = parent_printer;\r
\r
+ square_width_ = format_desc_.width;\r
+ square_height_ = format_desc_.height;\r
+ \r
+ if(format_desc_.format == core::video_format::pal)\r
+ {\r
+ square_width_ = 768;\r
+ square_height_ = 576;\r
+ }\r
+ else if(format_desc_.format == core::video_format::ntsc)\r
+ {\r
+ square_width_ = 720;\r
+ square_height_ = 547;\r
+ }\r
+\r
screen_width_ = format_desc.width;\r
screen_height_ = format_desc.height;\r
#ifdef _WIN32\r
if(!EnumDisplaySettings(displayDevices[screen_index_].DeviceName, ENUM_CURRENT_SETTINGS, &devmode))\r
BOOST_THROW_EXCEPTION(invalid_operation() << arg_name_info("screen_index") << msg_info(narrow(print()) + " EnumDisplaySettings"));\r
\r
- screen_width_ = windowed_ ? format_desc_.width : devmode.dmPelsWidth;\r
- screen_height_ = windowed_ ? format_desc_.height : devmode.dmPelsHeight;\r
+ screen_width_ = windowed_ ? square_width_ : devmode.dmPelsWidth;\r
+ screen_height_ = windowed_ ? square_height_ : devmode.dmPelsHeight;\r
#else\r
if(!windowed)\r
BOOST_THROW_EXCEPTION(not_supported() << msg_info(narrow(print() + " doesn't support non-Win32 fullscreen"));\r
\r
std::pair<float, float> None()\r
{\r
- float width = static_cast<float>(format_desc_.width)/static_cast<float>(screen_width_);\r
- float height = static_cast<float>(format_desc_.height)/static_cast<float>(screen_height_);\r
+ float width = static_cast<float>(square_width_)/static_cast<float>(screen_width_);\r
+ float height = static_cast<float>(square_height_)/static_cast<float>(screen_height_);\r
\r
return std::make_pair(width, height);\r
}\r
\r
std::pair<float, float> Uniform()\r
{\r
- float aspect = static_cast<float>(format_desc_.width)/static_cast<float>(format_desc_.height);\r
+ float aspect = static_cast<float>(square_width_)/static_cast<float>(square_height_);\r
float width = std::min(1.0f, static_cast<float>(screen_height_)*aspect/static_cast<float>(screen_width_));\r
float height = static_cast<float>(screen_width_*width)/static_cast<float>(screen_height_*aspect);\r
\r
\r
std::pair<float, float> UniformToFill()\r
{\r
- float wr = static_cast<float>(format_desc_.width)/static_cast<float>(screen_width_);\r
- float hr = static_cast<float>(format_desc_.height)/static_cast<float>(screen_height_);\r
+ float wr = static_cast<float>(square_width_)/static_cast<float>(screen_width_);\r
+ float hr = static_cast<float>(square_height_)/static_cast<float>(screen_height_);\r
float r_inv = 1.0f/std::min(wr, hr);\r
\r
float width = wr*r_inv;\r