2011-10-28 10 views
8

Uso de SDL 1.3 Quiero crear una pantalla completa falsa SDL_Window en Linux. Es fácil si solo tengo una pantalla. Acabo de obtener el modo de visualización actual y creé una ventana.Modo de pantalla completa falsa de SDL en configuración de monitor dual en 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); 

Pero cuando tengo dos pantallas, las cosas se complican. La ventana se extiende a través de múltiples monitores. SDL solo ve una pantalla virtual de doble tamaño.

he comprobado con este código

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; 
} 

salida:

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

Pero i tienen dos pantallas (1680x1050 y 1280x1024).

Cómo forzar a la ventana a permanecer en una sola pantalla (suponga que es la principal)?

+1

1 Interesante. Esto parece una elección del sistema operativo y no estoy seguro de que puedes hacer nada al respecto . – karlphillip

+1

¿Qué método particular está utilizando para multimonitor? Xinerama? Xrandr? Twinview de Nvidia? Define la pantalla por separado en su xorg.conf? – genpfault

+1

@genpfault: estoy usando fedora 15 en la configuración predeterminada (con gnome-shell). xrandr probablemente (todavía no soy un experto en Linux). Pero debería funcionar también en otras máquinas. – Frizi

Respuesta

2

src/video/x11/SDL_x11modes.c cheques algunas interesantes #define s:

SDL_VIDEO_DRIVER_X11_XINERAMA 
SDL_VIDEO_DRIVER_X11_XRANDR 
SDL_VIDEO_DRIVER_X11_XVIDMODE 

debes revisar include/SDL_config.h para ver cuál es el camino (s) de su copia está siguiendo. Reconstruir con X11MODES_DEBUG definido también puede ser productivo.

EDIT: Probado test/testvidinfo.c en mi sistema con X11MODES_DEBUG y consiguió esto:

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 

Se puede ver SDL ha preguntado Xinerama y conseguido mis dos monitores, pero no parece que comunicar al cliente en una manera útil.

Lamentablemente parece que necesita para enviar a la lista de correo o presentar un error :(

+0

¿Cómo obtuvieron esta información xinerama y xrandr? No tengo nada relacionado con ella en la fuente de prueba. – Frizi

+0

I descomentó el '#define X11MODES_DEBUG' en la parte superior de' src/video/x11/S DL_x11modes.c', reconstruyó/reinstaló SDL, y luego construyó/ejecutó 'test/testvidinfo.c' en el árbol de fuentes de SDL. Asegúrese de tener las bibliotecas de desarrollo para Xinerama y Xrand instaladas ('libxinerama-dev' y' libxrandr-dev' en Ubuntu, no sé sobre Fedora). – genpfault

Cuestiones relacionadas