2011-10-28 21 views
8

SDL 1.3 kullanımı Linux altında sahte tam ekran SDL_Window oluşturmak istiyorum. Tek bir ekranım varsa bu çok kolay. Sadece mevcut ekran modunu aldım ve bir pencere oluşturdum.SDL sahte tam ekran modu linux altında çift monitörde kurulum

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

Ancak iki ekranım olduğunda, işler karmaşıklaşır. Pencere birden çok monitörde yayılır. SDL sadece bir, çift boyutlu sanal ekran görür.

ben bu kod ile test

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

çıkışı:

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

Ama iki ekranı (1680x1050 ve 1280x1024) var.

Pencerenin yalnızca bir tanesi (ana ekran) üzerinde kalması nasıl zorlanır?

+1

1 İlginç. Bu işletim sisteminin bir seçim gibi görünüyor ve ben bu konuda bir şey yapabilir emin değilim – karlphillip

+1

Multimonitor için hangi özel yöntemi kullanıyorsunuz? Xinerama? Xrandr? Nvidia twinview? Xorg.conf dosyanızdaki ayrı ekran hataları? – genpfault

+1

@ genpfault: Varsayılan ayarlarda fedora 15 kullanıyorum (gnome-shell ile). xrandr muhtemelen (henüz bir linux uzmanı değilim), ama diğer makinelerde de çalışmalı – Frizi

cevap

2

src/video/x11/SDL_x11modes.c denetler bazı ilginç #define s: Sen (ler) kopya takip hangi yolu görmek için include/SDL_config.h kontrol edebilirsiniz

SDL_VIDEO_DRIVER_X11_XINERAMA 
SDL_VIDEO_DRIVER_X11_XRANDR 
SDL_VIDEO_DRIVER_X11_XVIDMODE 

. X11MODES_DEBUG ile tanımlanan yeniden oluşturma da verimli olabilir.

DÜZENLEME: X11MODES_DEBUG ile sistemimde test/testvidinfo.c denendi ve var bu:

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 

Sen SDL Xinerama sorgulanan ve benim monitörlerin her ikisi kazanılmış ancak müşteriye onu geri iletişim kurmak için görünmüyor etti görebilirsiniz yararlı bir yol. Posta listesine göndermek veya bir hatayı :(dosyası gerekiyor gibi

Ne yazık görünüyor

+0

Bu xinerama ve xrandr bilgisini nasıl aldınız? Test kaynağında bununla ilgili hiçbir şey yok. – Frizi

+0

I 'src/video/x11/S'nin en üstünde #define X11MODES_DEBUG' uncommented DL_x11modes.c', SDL'yi yeniden oluşturdu/yeniden yükledi ve SDL kaynak ağacında "test/testvidinfo.c" yi çalıştı/çalıştırdı. Xinerama ve Xrandr için geliştirme kütüphanelerine sahip olduğunuzdan emin olun ('libxinerama-dev' ve Ubuntu'da libxrandr-dev', Fedora hakkında konuşmayın). – genpfault