2011-10-28 16 views
8

Utilizzando SDL 1.3 voglio creare falsi SDL_Window fullscreen sotto linux. È facile se ho un solo display. Ho appena ottenuto la modalità di visualizzazione corrente e ho creato una finestra.SDL modalità a schermo intero falso sulla configurazione a doppio monitor sotto linux

SDL_GetDesktopDisplayMode(0, &mode); 

SDL_Window *win = SDL_CreateWindow("my window", 
    0,0,mode.w, mode.h, 
    SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS); 

Ma quando ho due schermi, le cose si complicano. La finestra si estende su più monitor. SDL vede solo un display virtuale di dimensioni doppie.

ho provato con questo codice

int num = SDL_GetNumVideoDisplays(); 
for(int i=0; i < num; i++) 
{ 
    SDL_Rect displayRect; 
    SDL_GetDisplayBounds(i, &displayRect); 
    std::cout 
     << "display " << i << ": x,y,w,h(" 
     << displayRect.x << ", " 
     << displayRect.y << ", " 
     << displayRect.w << ", " 
     << displayRect.h << ")" 
     << std::endl; 
} 

uscita:

display 0: x,y,w,h(0, 0, 2960, 1050) 

Ma ho due schermi (1680x1050 e 1280x1024).

come forzare la finestra di rimanere su una sola (assumere principale) Display?

+1

+1 interessante. Questo mi sembra una scelta del sistema operativo e io non sono sicuro che si può fare nulla al riguardo . – karlphillip

+1

Quale metodo particolare stai usando per multimonitor Xinerama Xrandr Nvidia TwinView defs schermo separato nel vostro xorg.conf – genpfault

+1

@genpfault:????.? sto usando Fedora 15 le impostazioni di default (con gnome-shell) è. xrandr probabilmente (io non sono un esperto di Linux ancora). Ma dovrebbe funzionare su altre macchine pure. – Frizi

risposta

2

src/video/x11/SDL_x11modes.c controlli alcune interessanti #define s:

SDL_VIDEO_DRIVER_X11_XINERAMA 
SDL_VIDEO_DRIVER_X11_XRANDR 
SDL_VIDEO_DRIVER_X11_XVIDMODE 

Si potrebbe verificare include/SDL_config.h per vedere quale percorso (s) la vostra copia sta seguendo. Anche la ricostruzione con X11MODES_DEBUG definita può essere produttiva.

EDIT: Ho provato test/testvidinfo.c sul mio sistema con X11MODES_DEBUG e ottenuto questo:

Built-in video drivers: x11, dummy 
Video driver: x11 
Number of displays: 1 
Display 0: 2646x1024 at 0,0 
    Current mode: [email protected], 32 bits-per-pixel 
     Red Mask = 0x00ff0000 
     Green Mask = 0x0000ff00 
     Blue Mask = 0x000000ff 
X11 detected Xinerama: 
xinerama 0: 1366x768+0+0 
xinerama 1: 1280x1024+1366+0 
XRANDR: XRRQueryVersion: V1.3 
XRANDR: mode = 0[0], w = 1366, h = 768, rate = 60 
XRANDR: mode = 1[0], w = 1360, h = 768, rate = 60 
XRANDR: mode = 2[0], w = 1024, h = 768, rate = 60 
XRANDR: mode = 3[0], w = 800, h = 600, rate = 60 
XRANDR: mode = 3[1], w = 800, h = 600, rate = 56 
XRANDR: mode = 4[0], w = 640, h = 480, rate = 60 
Xinerama is enabled 
XRandR is enabled 
    Fullscreen video modes: 
    Mode 0: [email protected], 32 bits-per-pixel 
     Red Mask = 0x00ff0000 
     Green Mask = 0x0000ff00 
     Blue Mask = 0x000000ff 
    Mode 1: [email protected], 32 bits-per-pixel 
     Red Mask = 0x00ff0000 
     Green Mask = 0x0000ff00 
     Blue Mask = 0x000000ff 
    Mode 2: [email protected], 32 bits-per-pixel 
     Red Mask = 0x00ff0000 
     Green Mask = 0x0000ff00 
     Blue Mask = 0x000000ff 
    Mode 3: [email protected], 32 bits-per-pixel 
     Red Mask = 0x00ff0000 
     Green Mask = 0x0000ff00 
     Blue Mask = 0x000000ff 
    Mode 4: [email protected], 32 bits-per-pixel 
     Red Mask = 0x00ff0000 
     Green Mask = 0x0000ff00 
     Blue Mask = 0x000000ff 
    Mode 5: [email protected], 32 bits-per-pixel 
     Red Mask = 0x00ff0000 
     Green Mask = 0x0000ff00 
     Blue Mask = 0x000000ff 
    Mode 6: [email protected], 32 bits-per-pixel 
     Red Mask = 0x00ff0000 
     Green Mask = 0x0000ff00 
     Blue Mask = 0x000000ff 
    Mode 7: [email protected], 32 bits-per-pixel 
     Red Mask = 0x00ff0000 
     Green Mask = 0x0000ff00 
     Blue Mask = 0x000000ff 
Current resolution: 2646x1024 

Si può vedere SDL ha interrogato Xinerama e ottenuto entrambi i miei monitor, ma non sembra per comunicare che al client in un modo utile.

Purtroppo sembra che tu abbia bisogno di inviare alla mailing list o un bug :(

+0

come hai preso questa xinerama e xrandr informazioni? non ho tutto ciò che riguarda all'interno della fonte di prova. – Frizi

+0

I non commentato '#define X11MODES_DEBUG' nella parte superiore di' src/video/x11/S DL_x11modes.c', SDL ricostruito/reinstallato, quindi costruito/eseguito 'test/testvidinfo.c' nell'albero dei sorgenti SDL. Assicurarsi di avere le librerie di sviluppo per Xinerama e Xrandr e installato ('libXinerama-dev' e' libxrandr-dev' su Ubuntu, dunno su Fedora). – genpfault

Problemi correlati