Я пытаюсь создать приложение для Windows с использованием библиотеки SDL2, которая должна отображать графику и анимацию в полноэкранном режиме на нескольких (2) мониторах.
Моя текущая ОС — Windows XP, и у меня одна графическая карта с двумя головками (1 разъем VGA и 1 разъем DVI).
Я написал несколько строк кода, чтобы проверить поведение приложения
int main(int argc, char **argv){
SDL_Window *window1, *window2;
SDL_Surface *mainsurface1, *mainsurface2;
SDL_Surface *image1, *image2;
// initialize SDL library
if ( SDL_Init( SDL_INIT_VIDEO|SDL_INIT_AUDIO|SDL_INIT_EVENTS ) != 0 ) {
printf( "SDL_Init Error! %s\n", SDL_GetError() );
return 1;
}
// create a window on 1st display and another window on 2nd display
window1 = SDL_CreateWindow( "Wnd1", SDL_WINDOWPOS_CENTERED_DISPLAY(0), SDL_WINDOWPOS_CENTERED_DISPLAY(0), 640, 480, SDL_WINDOW_FULLSCREEN );
window2 = SDL_CreateWindow( "Wnd2", SDL_WINDOWPOS_CENTERED_DISPLAY(1), SDL_WINDOWPOS_CENTERED_DISPLAY(1), 640, 480, SDL_WINDOW_FULLSCREEN );
// load test images
image1 = SDL_LoadBMP( "images\\background1.bmp" );
image2 = SDL_LoadBMP( "images\\background2.bmp" );
// get main surface of each window
mainsurface1 = SDL_GetWindowSurface( window1 );
mainsurface2 = SDL_GetWindowSurface( window2 );
// print an image on each window
SDL_BlitSurface( image1, 0, mainsurface1, 0 );
SDL_BlitSurface( image2, 0, mainsurface2, 0 );
// update windows
SDL_UpdateWindowSurface( window1 );
SDL_UpdateWindowSurface( window2 );
// stay for a while...
Sleep( 5000 );
// ...and exit
SDL_FreeSurface( image1 );
SDL_FreeSurface( image2 );
SDL_DestroyWindow( window1 );
SDL_DestroyWindow( window2 );
SDL_Quit();
return 0;
}
Этот код прекрасно работает без флага SDL_WINDOW_FULLSCREEN, но мне нужны окна в полноэкранном режиме.
Если установлен флаг SDL_WINDOW_FULLSCREEN, то видно только последнее окно, созданное с помощью SDL_CreateWindow, а в полноэкранном режиме другой монитор остается неизменным (по-прежнему показывая рабочий стол).
Если я установлю SDL_WINDOW_BORDERLESS | SDL_WINDOW_MAXIMIZED, это, похоже, будет работать, но мониторы сохраняют разрешение рабочего стола (в моем случае 1280×1024) вместо желаемого разрешения (640×480 или другое).
Я думаю, что проблема в том, как библиотека SDL справляется с DirectX Devices (создание и сброс).
Как правильно работать с несколькими мониторами в полноэкранном режиме, используя библиотеку SDL или SDL2?
Есть ли способ создать одно окно двойного размера (например, 2560 * 1024 или 1280 * 2048), используя функцию горизонтального / вертикального диапазона? (Я знаю, что это возможно с X11 на Linux)
Задача ещё не решена.