https://bugs.winehq.org/show_bug.cgi?id=16699
--- Comment #24 from Ken Thomases ken@codeweavers.com --- Hi Anastasius,
I'm a bit confused by your analysis...
(In reply to Anastasius Focht from comment #23)
It then queries for 'WGL_SWAP_METHOD_ARB' attribute and specifically checks for 'WGL_SWAP_EXCHANGE_ARB' value upon return.
Meaning it wants WGL_SWAP_EXCHANGE_ARB, right? You later say:
Anyway, hacking 'winex11.drv' to allow 'wglGetPixelFormatAttribivARB' to return 'WGL_SWAP_EXCHANGE_ARB' for the selected pixel formats helped.
Which seems to indicate that. However:
Wine-dbg>n 2620 switch (curWGLAttr) { Wine-dbg>n 2744 piValues[i] = WGL_SWAP_EXCHANGE_ARB;
...
Wine-dbg>n 2812 if (0 != curGLXAttr && iPixelFormat != 0) { Wine-dbg>n 2818 piValues[i] = GL_FALSE;
This last statement is the "else" for the "if" shown just before it. It should only happen when 0 == curGLXAttr || iPixelFormat == 0. But neither of those should be the case, at least not in the same call that hit the earlier piValues[i] = WGL_SWAP_EXCHANGE_ARB statement.
Are you sure the function did not report WGL_SWAP_EXCHANGE_ARB out as the swap method?
In the end it reports "swap copy unavailable" and keeps multisampling disabled for the pixel format.
This suggests the program doesn't want WGL_SWAP_EXCHANGE_ARB, it wants WGL_SWAP_COPY_ARB. It looks to me like winex11.drv claims to support the former but not the latter.