https://bugs.winehq.org/show_bug.cgi?id=16699
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download Status|UNCONFIRMED |NEW URL| |http://dl.trimble.com/sketc | |hup/gsu8/FW-3-0-16846-EN.ex | |e CC| |focht@gmx.net Summary|OpenGL anti-aliasing |OpenGL anti-aliasing |capabilities of nVidia gpu |capabilities of graphics |not exposed to Google |driver not exposed to |Sketchup 7 |Google Sketchup 7/8 | |(wglGetPixelFormatAttribivA | |RB doesn't allow | |WGL_SWAP_METHOD_ARB | |support) Ever confirmed|0 |1
--- Comment #23 from Anastasius Focht focht@gmx.net --- Hello folks,
sorry being a few years late to the party ... confirming.
In my case the standard dialog 'Window' -> 'System Preferences' -> 'OpenGL' shows:
--- snip --- Colors: True color, Precision: Medium, Shadows: Yes, AA: 0x #1 -> 1,ICD,DBL,RGBA,32 (8-8-8-0),24,8,64 (16-16-16-16)
Colors: True color, Precision: Medium, Shadows: No, AA: 0x #38 -> 1,ICD,DBL,RGBA,32 (8-8-8-0),24,8,64 (16-16-16-16) --- snip ---
Using trace log and a debugger I figured out the following ...
The app code looks for 'WGL_ARB_multisample' cap in extension string:
--- snip --- 0023:Call opengl32.wglGetProcAddress(00afc22c "wglGetExtensionsStringARB") ret=0071106e 0023:trace:wgl:wglGetProcAddress returning wglGetExtensionsStringARB -> 0x7e340de2 0023:Ret opengl32.wglGetProcAddress() retval=7e340de2 ret=0071106e 0023:Call opengl32.wglGetCurrentDC() ret=0071107a 0023:Ret opengl32.wglGetCurrentDC() retval=00010028 ret=0071107a 0023:Call gdi32.__wine_get_wgl_driver(00010028,0000000b) ret=7e33e669 0023:Ret gdi32.__wine_get_wgl_driver() retval=7d384fc0 ret=7e33e669 0023:trace:wgl:X11DRV_wglGetExtensionsStringARB () returning "WGL_ARB_create_context WGL_ARB_create_context_profile WGL_ARB_pixel_format_float WGL_ATI_pixel_format_float WGL_ARB_extensions_string WGL_ARB_make_current_read WGL_ARB_multisample WGL_ARB_pbuffer WGL_ARB_pixel_format WGL_ARB_render_texture WGL_NV_float_buffer WGL_NV_render_texture_rectangle WGL_EXT_extensions_string WGL_EXT_swap_control WGL_EXT_framebuffer_sRGB WGL_EXT_swap_control_tear WGL_NV_vertex_array_range WGL_WINE_pixel_format_passthrough" ... 0023:Call msvcr80.strstr(7d388a90 "WGL_ARB_create_context WGL_ARB_create_context_profile WGL_ARB_pixel_format_float WGL_ATI_pixel_format_float WGL_ARB_extensions_string WGL_ARB_make_current_read WGL_ARB_multisample WGL_ARB_pbuffer WGL_ARB_pixel_format WGL_ARB_render_texture WGL_NV_float_buffer WGL_NV_render_texture_rectangle WGL_EXT_e"...,00afc354 "WGL_ARB_multisample") ret=007110bd 0023:Ret msvcr80.strstr() retval=7d388b30 ret=007110bd --- snip ---
If supported it proceeds to check for 4x multisampling support (GLX_SAMPLES_ARB: 4). This succeeds in my case, I have NVIDIA blob:
--- snip --- 0023:Call gdi32.__wine_get_wgl_driver(0002004e,0000000b) ret=7e33e669 0023:Ret gdi32.__wine_get_wgl_driver() retval=7d384fc0 ret=7e33e669 0023:trace:wgl:X11DRV_wglChoosePixelFormatARB (0x2004e, 0x33ddc4, 0x33ddac, 1, 0x33dd9c, 0x33dda4): hackish 0023:fixme:wgl:X11DRV_wglChoosePixelFormatARB unused pfAttribFList 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[0] = 2001 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[1] = WGL_DRAW_TO_WINDOW_ARB: 1 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[2] = 2010 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[3] = WGL_SUPPORT_OPENGL_ARB: 1 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[4] = 2003 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[5] = WGL_ACCELERATION_ARB: 8231 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[6] = 2014 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[7] = GLX_BUFFER_SIZE: 24 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[8] = 201b 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[9] = GLX_ALPHA_SIZE: 8 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[10] = 2022 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[11] = GLX_DEPTH_SIZE: 16 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[12] = 2023 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[13] = GLX_STENCIL_SIZE: 8 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[14] = 2011 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[15] = GLX_DOUBLEBUFFER: 1 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[16] = 2041 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[17] = GLX_SAMPLE_BUFFERS_ARB: 1 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[18] = 2042 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[19] = GLX_SAMPLES_ARB: 4 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[20] = 2007 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[21] = WGL_SWAP_METHOD_ARB: 0x2028 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[?] = GLX_DRAWABLE_TYPE: 0x1 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[?] = GLX_RENDER_TYPE: 0xffffffff 0023:trace:wgl:ConvertAttribWGLtoGLX pAttr[?] = GLX_FLOAT_COMPONENTS_NV: 0xffffffff 0023:trace:wgl:X11DRV_wglChoosePixelFormatARB at 1/9 found FBCONFIG_ID 0x133 (59) --- snip ----
It then queries for 'WGL_SWAP_METHOD_ARB' attribute and specifically checks for 'WGL_SWAP_EXCHANGE_ARB' value upon return.
--- snip ---- 0023:Call gdi32.__wine_get_wgl_driver(0002004e,0000000b) ret=7e33e669 0023:Ret gdi32.__wine_get_wgl_driver() retval=7d384fc0 ret=7e33e669 0023:trace:wgl:X11DRV_wglGetPixelFormatAttribivARB (0x2004e, 59, 0, 1, 0x33ddb4, 0x33dda0) 0023:trace:wgl:get_pixel_format Returning fmt_id=0x133 for iPixelFormat=59 0023:trace:wgl:X11DRV_wglGetPixelFormatAttribivARB pAttr[0] = 2007 --- snip ----
This fails, debugger session:
--- snip ---
Wine-dbg>bt Backtrace: =>0 0x7d337d32 X11DRV_wglGetPixelFormatAttribivARB+0x757(hdc=0x10028, iPixelFormat=0x25, iLayerPlane=0, nAttributes=0x1, piAttributes=0x33f690, piValues=0x33f688) [/home/focht/projects/wine/wine.repo/src/dlls/winex11.drv/opengl.c:2744] in winex11 (0x0033f608) 1 0x7e340b25 wglGetPixelFormatAttribivARB+0x68(hdc=0x10028, format=0x25, layer=0, count=0x1, attribs=0x33f690, values=0x33f688) [/home/focht/projects/wine/wine.repo/src/dlls/opengl32/wgl.c:929] in opengl32 (0x0033f64c) 2 0x007239d3 in sketchup (+0x3239d2) (0x7e340abc)
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; --- snip ---
Source:
http://source.winehq.org/git/wine.git/blob/351fae120690a19530f0c399f0a8956aa...
http://source.winehq.org/git/wine.git/blob/351fae120690a19530f0c399f0a8956aa...
The same sequence is executed again for 2x multisample which also fails.
In the end it reports "swap copy unavailable" and keeps multisampling disabled for the pixel format.
I researched some tutorials how to check for proper multisampling support, for example here:
http://nehe.gamedev.net/tutorial/fullscreen_antialiasing/16008/
Nowhere was a connection between multisampling support and WGL_SWAP_METHOD_ARB made.
Anyway, hacking 'winex11.drv' to allow 'wglGetPixelFormatAttribivARB' to return 'WGL_SWAP_EXCHANGE_ARB' for the selected pixel formats helped.
The comment in Wine source indicates this is a weak area (TODO).
The 'OpenGL' dialog window now showed 3 pixel formats with 0x, 2x, 4x anti-aliasing.
When I selected 2x or 4x anti-aliasing in the dialog, everything became smoother so it really worked :)
$ sha1sum FW-3-0-16846-EN.exe 6c9a61fe12b21fe9a1d6b5ee1bb79f331a5fc36c FW-3-0-16846-EN.exe
$ du -sh FW-3-0-16846-EN.exe 35M FW-3-0-16846-EN.exe
$ wine --version wine-1.7.21-19-g8812193
Regards