Мне интересно, какой лучший способ обнаружить высокий дисплей DPI. В настоящее время я пытаюсь использовать SDL_GetDisplayDPI (int, *float, *float, *float)
, однако это только возвратило ошибки на двух разных компьютерах, с которыми я тестировался (MacBook Pro с ОС OS X 10.11.5 и iMac, работающий с MacOS 10.12 Beta (16A238m)). Для справки, мой код ниже.SDL Detect High DPI/Retina Display
float diagDPI = -1;
float horiDPI = -1;
float vertDPI = -1;
int dpiReturn = SDL_GetDisplayDPI (0, &diagDPI, &horiDPI, &vertDPI);
std::cout << "GetDisplayDPI() returned " << dpiReturn << std::endl;
if (dpiReturn != 0)
{
std::cout << "Error: " << SDL_GetError() << std::endl;
}
std::cout << "DDPI: " << diagDPI << std::endl << "HDPI: " << horiDPI << std::endl << "VDPI: " << vertDPI << std::endl;
К сожалению, это только дает мне что-то вроде этого:
/* Output */
GetDisplayDPI() returned -1
Error:
DDPI: -1
HDPI: -1
VDPI: -1
Not Retina
Я также попытался сравнения вытяжке размер OpenGL с СВД размер окна, но SDL_GetWindowSize (SDL_Window, *int, *int)
возвращается 0s, тоже. Этот код ниже, а затем выход.
int gl_w;
int gl_h;
SDL_GL_GetDrawableSize (window, &gl_w, &gl_h);
std::cout << "GL_W: " << gl_w << std::endl << "GL_H: " << gl_h << std::endl;
int sdl_w;
int sdl_h;
SDL_GetWindowSize (window, &sdl_w, &sdl_h);
std::cout << "SDL_W: " << sdl_w << std::endl << "SDL_H: " << sdl_h << std::endl;
/* Output */
GL_W: 1280
GL_H: 720
SDL_W: 0
SDL_H: 0
Вполне возможно, что я делаю что-то здесь не так, или что делает эти вызовы в неправильном месте, но я думаю, что более вероятно, что я на ложном пути полностью. Есть подсказка, чтобы запретить холсты с высоким разрешением, так что, возможно, где-то есть простой bool или что-то, что мне не хватает. Я, конечно, просмотрел вики и проверил Google, но я не могу найти никакой помощи для этого. Любые предложения или отзывы приветствуются!
Благодарим вас за внимание!
Ваш код работает для меня (после того, как я добавил соответствующий код инициализации). Можете ли вы опубликовать минимальный, полный (компилируемый) пример, который воспроизводит ошибку? – Galik
Спасибо, что проверили это, @Galik! Я рад предоставить ссылку на мой проект, однако я использую инструментарий стороннего GUI, поэтому может быть немного запутанным. Он должен строить и запускаться без проблем, хотя, если у вас установлены SDL2, SDL2_Image и SDL2_TTF. Проект можно найти здесь: https://github.com/2CatStudios/LightYear/tree/retina-support/Project/Universal/LightYear Соответствующий код находится в RenderingManager.cpp по строке 14 https://github.com/2CatStudios /LightYear/blob/retina-support/Project/Universal/LightYear/src/RenderingManager.cpp –
@Galik Какая ОС вы используете? Полагаю, возможно, что это проблема с реализацией Cocoa функции 'SDL_GetDisplayDPI'. –