strange behaviour on second monitor, 6800go 81.84 winXP/SP2

Hi all,

i have an application, that has
two windows, one for editing, one
for output.

both windows share a context.

when i open both windows on the
main monitor, everything is ok.

when i move the out window to the second window,
there is no update.

when i move the main win to 2nd mon,
the app hangs for a few seconds, then
the main window has no (textured)
icons. the out window updates again.

when i move the main window back again,
the app halts for a few seconds
(showing a black screen), then
everything works again.

i even experienced that when the out window
was located at the border of the screens,
the portion on the main window was updated,
while the portion on the 2nd screen was not.

am i doing sth wrong?
is this normal behaviour?
does the driver ‘rebuild’ the context when
the screen changes?

best regards,
hendrik

am i doing sth wrong?
is this normal behaviour?

Windows does not support hardware accelerated OpenGL on multiple monitors, only on the primary monitor. See section 5.110 and section 7.030 . So, you can render to the secondary monitor, just not hardware accelerated. Getting a device context for the secondary screen may be tricky, though.

That is not accurate. As you might have seen in the FAQ (which is multiple years old, BTW) there are different levels of support among implementations.
You need to check your display control panel if there are different modes offered for multi-monitor acceleration.
Yours sounded like single display hardware acceleration only.

For NVIDIA chips search in these release notes http://download.nvidia.com/Windows/81.95/81.95_ForceWare_Display_Property_User_Guide.pdf
for “Hardware Acceleration” and “Multi-Display” (chapter 7).

ahh ok now i got the acceleration working. but now i face the next problem:

hMonitor = MonitorFromRect(&rc, MONITOR_DEFAULTTONEAREST);

mi.cbSize = sizeof( mi );
::GetMonitorInfo( hMonitor, &mi );
rc = mi.rcMonitor;

reports the whole screen as one monitor.
(which seems quite logical to me)
but i want to send my output to one monitor
only - the user must be able to interact.

is there a way to retrieve the monitor
sizes even in span-mode?

hendrik

Never tried. There is EnumDisplayDevices but that’s probaly abstracted in spanning mode like you experienced.
Have you tried dual-view modes with the multi-display OpenGL settings? Then the monitors are handled independently and you should be able to query them.
The release notes mention that dual-view is slower than spanning, but more flexible.

to my surprize,

EnumDisplayDevices reported 4
devices:

while(
		EnumDisplayDevices(
		  NULL,                // device name
		  ++mon,                   // display device
		  &db, // device information
		  NULL                    // reserved
		)
	)
{
	if(true)
	{
		DEVMODE d;
		EnumDisplaySettings
		(
			db.DeviceName,
			ENUM_CURRENT_SETTINGS,
			&d
		);
		log("width: %i", d.dmPelsWidth);

	}
	else
	{
		log("mon %s - not part of desktop", db.DeviceName);
	}
}

they are named:

mon \.\DISPLAY1
mon \.\DISPLAY2
mon \.\DISPLAYV1
mon \.\DISPLAYV2

and they all report a width of:
width: 2880
width: 2880
width: 2880
width: 2880

and only the first one reported is part
of the desktop. hm.