Fullscreen with Xinerama or TwinView

I’m using two monitors with Xinerama. I was trying to enable fullscreen in Panda, but got a segmentation fault. This is the back trace from gdb:

[Thread debugging using libthread_db enabled]
Xlib:  extension "RANDR" missing on display ":0.0".
Known pipe types:
  glxGraphicsPipe
(all display modules loaded.)
[New Thread 0x7fffd9ef5700 (LWP 8171)]

Program received signal SIGSEGV, Segmentation fault.
0x00007fffe6d4bcc2 in ?? () from /usr/lib/libXrandr.so.2
(gdb) bt
#0  0x00007fffe6d4bcc2 in ?? () from /usr/lib/libXrandr.so.2
#1  0x00007fffe6d4bdf8 in XRRGetScreenInfo () from /usr/lib/libXrandr.so.2
#2  0x00007fffdea69563 in x11GraphicsWindow::set_properties_now(WindowProperties&) () from /usr/lib/panda3d/libpandagl.so
#3  0x00007ffff429dc10 in GraphicsWindow::process_events() () from /usr/lib64/panda3d/libpanda.so
#4  0x00007fffdea667ab in x11GraphicsWindow::process_events() () from /usr/lib/panda3d/libpandagl.so
#5  0x00007ffff4269651 in GraphicsEngine::process_events(ov_set<PointerTo<GraphicsOutput>, IndirectLess<GraphicsOutput> > const&, Thread*) () from /usr/lib64/panda3d/libpanda.so
#6  0x00007ffff42888e2 in GraphicsEngine::WindowRenderer::do_frame(GraphicsEngine*, Thread*) () from /usr/lib64/panda3d/libpanda.so
#7  0x00007ffff42895bb in GraphicsEngine::render_frame() () from /usr/lib64/panda3d/libpanda.so
#8  0x00007ffff42d19e5 in Dtool_GraphicsEngine_render_frame_611(_object*, _object*, _object*) () from /usr/lib64/panda3d/libpanda.so
#9  0x00000000004a51ae in PyEval_EvalFrameEx ()
#10 0x00000000004a6bd1 in PyEval_EvalCodeEx ()
#11 0x0000000000535b50 in ?? ()
#12 0x000000000041c9d7 in PyObject_Call ()
#13 0x000000000042570f in ?? ()
#14 0x000000000041c9d7 in PyObject_Call ()
#15 0x00007ffff431edad in Thread::call_python_func(_object*, _object*) () from /usr/lib64/panda3d/libpanda.so
#16 0x00007ffff4338532 in PythonTask::do_python_task() () from /usr/lib64/panda3d/libpanda.so
#17 0x00007ffff43387d0 in PythonTask::do_task() () from /usr/lib64/panda3d/libpanda.so
#18 0x00007ffff433a74c in AsyncTask::unlock_and_do_task() () from /usr/lib64/panda3d/libpanda.so
#19 0x00007ffff4343c30 in AsyncTaskChain::service_one_task(AsyncTaskChain::AsyncTaskChainThread*) () from /usr/lib64/panda3d/libpanda.so
#20 0x00007ffff43446f3 in AsyncTaskChain::do_poll() () from /usr/lib64/panda3d/libpanda.so
#21 0x00007ffff4344889 in AsyncTaskManager::poll() () from /usr/lib64/panda3d/libpanda.so
#22 0x00007ffff435816d in Dtool_AsyncTaskManager_poll_121(_object*, _object*, _object*) () from /usr/lib64/panda3d/libpanda.so
#23 0x00000000004a51ae in PyEval_EvalFrameEx ()
#24 0x00000000004a5ab0 in PyEval_EvalFrameEx ()
#25 0x00000000004a6bd1 in PyEval_EvalCodeEx ()
#26 0x00000000004a4d59 in PyEval_EvalFrameEx ()
#27 0x00000000004a5ab0 in PyEval_EvalFrameEx ()
#28 0x00000000004a6bd1 in PyEval_EvalCodeEx ()
#29 0x00000000004a6ca2 in PyEval_EvalCode ()
#30 0x00000000004c702e in PyRun_FileExFlags ()
#31 0x00000000004c7244 in PyRun_SimpleFileExFlags ()
#32 0x00000000004180c1 in Py_Main ()
#33 0x00007ffff69dad8e in __libc_start_main () from /lib/libc.so.6
#34 0x00000000004172c9 in _start ()

Just to clarify, I don’t want to have Panda span over two monitors. What I need is fullscreen on one screen, same as with movie players and such on xinerama.

Thanks

EDIT: I’ve switched to TwinView, but still can’t get fullscreen. See this post in this thread: panda3d.org/forums/viewtopic … 4558#84558

I don’t have any experience with Xinerama. Are you able to debug this in C++ to track it down further?

David

Can you check if you have Xrandr installed?

I know that using Xinerama disables Xrandr (Xrandr is the successor to Xinerama), but it’s not supposed to crash.

I think I do. I have x11-xserver-utils installed, which contains xrandr, and I have the xrandr command. Also, if I disable Xinerama everything works fine, it’s just not an option if I want to use two monitors.

Which driver is installed ?

Nvidia’s binary.

Did you try with twinview configuration?
There are some configurations using xinerama and nvidia proprietary driver.

I’ve tried TwinView, now that I’ve upgraded to Ubuntu 12.04. Now it’s different, but hard to say if better.

The game starts and runs, but I have no display. Just a quick flash of a black window. At the middle of two screens, indicating that even if it did work, it would’t be the right kind of full screen to me (in some cases it might be desirable, tho). I’m looking for the same thing that happens to a video played in Totem when fullscreen is enabled – namely fill one whole monitor.

But anyway, back to the problems. There are three cases:

  1. When I use WindowProperties to set fullscreen and resolution, I can see on the terminal that the game is running and receiving input. Even relative mouse mode works AFAICT. I can also see a Panda button on the gnome panel’s window list. However, there’s no visible output – I can see my desktop as usual, there’s not even a black screen.

Here’s what happens on the terminal:

:display:x11display(error): BadMatch (invalid parameter attributes)
  1. When I use loadPrcFileData to set fullscreen and resolution I get a bit more stuff on the terminal and everything crashes right away:
:display:x11display(error): Videocard has no supported display resolutions at specified res (1920 x 1080)
:display:x11display(error): Videocard has no supported display resolutions at specified res (1920 x 1080)
:display:x11display(error): BadMatch (invalid parameter attributes)
:display:x11display(error): BadMatch (invalid parameter attributes)
:ShowBase(warning): Unable to open 'onscreen' window.
Traceback (most recent call last):
  File "startGame.py", line 80, in <module>
    m = main()
  File "startGame.py", line 23, in __init__
    self.copperPanda.startShowBase(True, 120)
  File "/home/coppertop/Development/gamedev/copperLibs/pandaInit.py", line 11, in startShowBase
    ShowBase()
  File "/usr/share/panda3d/direct/showbase/ShowBase.py", line 244, in __init__
    self.openDefaultWindow(startDirect = False, props=props)
  File "/usr/share/panda3d/direct/showbase/ShowBase.py", line 884, in openDefaultWindow
    self.openMainWindow(*args, **kw)
  File "/usr/share/panda3d/direct/showbase/ShowBase.py", line 920, in openMainWindow
    self.openWindow(*args, **kw)
  File "/usr/share/panda3d/direct/showbase/ShowBase.py", line 675, in openWindow
    raise StandardError, 'Could not open window.'
StandardError: Could not open window.

When I use loadPrcFileData to set the resolution, and then enable fullscreen with WindowProperties I get a black fullscreen flash and then it crashes with the following:

Assertion failed: has_size() at line 142 of built/include/windowProperties.I
:display:x11display(error): Videocard has no supported display resolutions at specified res (1920 x 1032)
Traceback (most recent call last):
  File "/usr/share/panda3d/direct/showbase/ShowBase.py", line 1844, in __igLoop
    self.graphicsEngine.renderFrame()
AssertionError: has_size() at line 142 of built/include/windowProperties.I
:task(error): Exception occurred in PythonTask igLoop
Traceback (most recent call last):
  File "startGame.py", line 81, in <module>
    run()
  File "/usr/share/panda3d/direct/showbase/ShowBase.py", line 2910, in run
    self.taskMgr.run()
  File "/usr/share/panda3d/direct/task/Task.py", line 502, in run
    self.step()
  File "/usr/share/panda3d/direct/task/Task.py", line 460, in step
    self.mgr.poll()
  File "/usr/share/panda3d/direct/showbase/ShowBase.py", line 1844, in __igLoop
    self.graphicsEngine.renderFrame()
AssertionError: has_size() at line 142 of built/include/windowProperties.I

I use 1920x1080 resolution, as that’s native for the monitor. Tried setting it to the whole twinview, being 3200x1080, but that resulted in the same behavior and error message.

My current setup is:

Ubuntu 12.04
Gnome Fallback Session, no Compiz
Panda 1.8.0 (ubuntu 11.10 build)
GeForce GTX460
nvidia binary drivers
TwinView
Monitors: 1920x1080 and 1280x1024

I think the issue is that we’re calling into Xrandr functions when the extension is not enabled (since Xrandr supersedes the now-obsolete Xinerama, having Xinerama enabled disables Xrandr). This shouldn’t be a problem even when the Xrandr extensions isn’t enabled, but apparently, it’s causing a crash in your case.

Can you try and get a traceback on the BadMatch issue, by setting “x-error-abort” to “#t” in your Config.prc, and using a debugger?

I was able to reproduce this on my FreeBSD box. I’ve checked in a fix for 1.8.1.