Я пишу программу, которая отображает анимацию, зависящую от размера экрана. Для того, чтобы получить эту работу с несколькими мониторами, у меня есть массив display_data объектов:Несколько дисплеев в SDL2
struct window_data
{
SDL_Rect bounds;
SDL_Window *window;
};
и инициализировать их для каждого дисплея:
int numdisplays = SDL_GetNumVideoDisplays();
std::vector<window_data> screens(numdisplays);
for(int i = 0 ; i < numdisplays ; ++i)
{
SDL_GetDisplayBounds(i, &(screens[ i ].bounds));
screens[ i ].window
= SDL_CreateWindow("Display", screens[ i ].bounds.x,
screens[ i ].bounds.y, screens[ i ].bounds.w,
screens[ i ].bounds.h, SDL_WINDOW_FULLSCREEN);
}
Это прекрасно работает до тех пор, как мой курсор мыши на главном дисплее, но если я запустил программу с помощью курсора на вторичном дисплее, он отобразит оба окна на вторичном дисплее, в результате появится только второе окно. Это поведение, по-видимому, зависит только от местоположения курсора, а не от окна терминала, из которого я запускаю программу.
Я проверил, что одни и те же номера и границы отображаются независимо от местоположения курсора, поэтому меня озадачивает изменение в поведении программы. Является ли это предполагаемым поведением SDL2 или ошибкой? В любом случае, может ли кто-нибудь предложить обходное решение?
EDIT: зависимость от мыши отображается на Debian с помощью XFCE. Я тоже пробовал это на Windows, и он выводит оба окна на второй монитор, независимо от положения мыши.
Как насчет первого запуска первого окна и ждать, пока используется кликать затем начать второй. – this
Просто для двойной проверки, 'SDL_GetNumVideoDisplays()' действительно возвращает '2' на вашем двухъядерном Linux-поле? [Назад в день] (http://stackoverflow.com/questions/7927974/sdl-fake-fullscreen-mode-on-dual-monitor-setup-under-linux) возникли некоторые проблемы с API-интерфейсом с несколькими мониторами. – genpfault
yep. количество отображений: 2 окно # 0: x = 0 y = 0 w = 1280 h = 1024 окно # 1: x = 0 y = 1024 w = 1280 h = 800 – trm