Почему мое окно VS SDL 2.0 в 2 раза больше, чем я указал? - PullRequest
0 голосов
/ 20 января 2020

У меня есть монитор 3840x2160, использующий Windows 10. Я просто создаю окно и средство визуализации. Когда я устанавливаю размер окна 200x200 и запускаю программу, окно появляется, и я могу отрисовать отлично. Но окно действительно имеет размер 400x400 пикселей, а точка (SDL_RenderDrawPoint ()) на самом деле имеет размер 2x2 пикселя. Также, когда я рисую точку на 10,10, она находится на позиции 20,20, отсчитываемой пикселями. Когда я устанавливаю разрешение Windows 10 в настройках на 1920x1080, окно имеет правильный размер, а точки имеют размер всего один пиксель и находятся в правильном положении. Я был бы очень благодарен, если бы кто-нибудь что-то знал об этой проблеме и как получить окно до идеального размера в пикселях с настройками 3840x2160. ;)

1 Ответ

0 голосов
/ 22 января 2020

Моя проблема в том, что мое окно не поддерживает DPI, поэтому windows растровое масштабирует его. Нормальным решением для этого было бы присвоить окну флаг SDL_WINDOW_ALLOW_HIGHDPI при его создании, но, к сожалению, пока нет поддержки windows осведомленности о DPI (или я просто ничего об этом не нашел), поэтому он этого не делает. Работа. Некоторые Poeple работают, чтобы получить windows DPI-монитор для каждого монитора (V2) для SDL2 на windows. В любом случае, я только что нашел странное решение для проблемы, которую я описал в приведенном выше вопросе: я могу просто использовать флаг SDL_WINDOW_FULLSCREEN (ширина и высота не важны), чтобы отобразить мое окно в полноэкранном режиме, игнорируя масштабный коэффициент, который использует windows , что в большинстве случаев делает мое окно непригодным из-за растяжения. Затем я закрываю окно, убираю флаг SDL_WINDOW_FULLSCREEN и снова запускаю программу. Теперь окно имеет реальный размер пикселя 1: 1, даже если у меня в настройках windows масштабный коэффициент 200%. Я знаю, что это нечистое и странное исправление, поэтому, если кто-нибудь знает, почему это работает или знает лучший способ, go впереди.

...