Page MenuHome

Slowness when using interface in fullscreen mode
Closed, ResolvedPublic

Description

System Information

MacBook Pro memory 8 GB
OS X El Capitan (10.11.2)
Graphics : Intel Iris Graphics 6100

Blender Version

-2.76b (current)
-tested with an older version : 2.73a -> same issue

Short description of error

Example of scene : startup scene with a cube at the center
Everything is fine on OS X window mode. When switching to OS X fullscreen mode, navigation in 3d view becomes extremely slow. When changing view with trackpad or emulated numpad, display gets refreshed after several seconds.

Event Timeline

Dewi BORDAGE (Dewi) raised the priority of this task from to 90.
Dewi BORDAGE (Dewi) updated the task description. (Show Details)
Dewi BORDAGE (Dewi) edited a custom field.

Can somebody with a Mac confirm this?

Something new : I have not faced the issue when I used an external display. That is to say, with the same configuration as in the description and in OS X fullscreen mode on the external display, everything was fine.

Common guys, that's weak!

Brecht Van Lommel (brecht) lowered the priority of this task from 90 to 50.Jan 7 2016, 9:53 PM

I can confirm the issue, using the same Intel Iris Graphics 6100.

It's not so much slow as there is a lag where e.g. menus don't draw properly until you move the mouse. The only Window Draw Method that appears to work correctly is Full, which is more of a debugging mode. As if OpenGL swapping isn't work correctly somehow.

Brecht Van Lommel (brecht) changed the task status from Unknown Status to Resolved.Jan 7 2016, 11:53 PM

It's indeed related to swapping. It seems like a driver bug because I can't find a good explanation for why it would fail.

When drawing in fullscreen, graphics drivers often do an optimization where instead of copying (part of) the front buffer to the back buffer, they simply swap the pointers to the buffers to avoid doing a copy altogether. The default triple buffer drawing should work whether or not the driver does this optimization, but it seems to somehow fail here.

The workaround I found is to disable this code. I'm guessing this driver code path isn't tested as well and so might have a bug.

// Guarantees the back buffer contents to be valid after a call to NSOpenGLContext object's flushBuffer
// needed for 'Draw Overlap' drawing method
attribs.push_back(NSOpenGLPFABackingStore);

Removing this breaks overlap drawing, but triple buffer is the default on Mac and works fine as far as I know. We will eventually remove overlap drawing anyway, probably in Blender 2.8.