[vtk-developers] RE: [Paraview-developers] [LONG] Antialiasing with multisampling method

Wylie, Brian bnwylie at sandia.gov
Thu Sep 22 12:26:21 EDT 2005


This is an issue for Sandia as well, in fact our scripts set an environment variable __GL_FSAA_MODE=0 to work around this. The antialiasing creates 'seems' in the datasets where the compositing occurs.

  Brian Wylie - Org 9227
  Sandia National Laboratories
  MS 0822 - Building 880/A1-J
  (505)844-2238 FAX(505)845-0833                       
       ____                  _    __
      / __ \____  _________ | |  / (_)__ _      __ 
     / /_/ / __ `/ ___/ __ `/ | / / / _ \ | /| / /
    / ____/ /_/ / /  / /_/ /| |/ / /  __/ |/ |/ /
   /_/    \__,_/_/   \__,_/ |___/_/\___/|__/|__/                                                   
                                    Unleash the Beast
 

> -----Original Message-----
> From: 
> paraview-developers-bounces+bnwylie=sandia.gov at paraview.org 
> [mailto:paraview-developers-bounces+bnwylie=sandia.gov at paravie
> w.org] On Behalf Of Francois Bertel
> Sent: Thursday, September 22, 2005 10:00 AM
> To: vtkusers at vtk.org
> Cc: vtk-developers at vtk.org; paraview-developers at paraview.org; 
> paraview at paraview.org
> Subject: [Paraview-developers] [LONG] Antialiasing with 
> multisampling method
> 
> Hi everybody,
> 
> Folks who are using VTK or ParaView under Unix may have 
> noticed that antialiasing in on by default. I wrote "may", 
> because it actually depends on your graphic configuration 
> (graphic card and driver version).
> In my case, Linux gentoo x86, NVidia GeForce 6800, driver 1.0-7676.
> 
> The consequence of that is some regression tests fail. Even 
> if VTK/Rendering/Testing/Cxx/vtkRegressionTestImage tries to 
> handle this case, some test like DistributedData-image fails 
> because it uses compositing and relies on the values in the 
> color buffer.
> 
> In my case, a fast workaround is to run nvidia-settings, go 
> to "Antialiasing Settings" menu, check "Override Application 
> Setting for Antialiasing Settings" and set the value to 
> "Off". But it is just a workaround.
> 
> So, why antialiasing is on? The short answer is 
> multisampling. The long answer is following. If you want to 
> skip this explanation, there is a question at the end of this 
> message, which is actually the real purpose of this e-mail.
> 
> <long_answer>
> 
> With OpenGL, the usual way to deal with antialiasing for 
> points, lines and polygons is to call glDisable/Enable() 
> respectively with argument GL_POINT_SMOOTH, GL_LINE_SMOOTH or 
> GL_POLYGON_SMOOTH (OpenGL Spec 1.5, section
> 3.3 page 74, section 3.4 page 77, section 3.5 page 84).
> http://www.opengl.org/documentation/spec.html
> 
> In VTK, such calls appear in 
> VTK/Rendering/vtkOpenGLRenderWindow. They are controlled by 
> some ivars defined in the superclass 
> VTK/Rendering/vtkRenderWindow with respectively 
> Get/SetPointSmoothing(), Get/SetLineSmoothing(), 
> Get/SetPolygonSmoothing().
> 
> The other way is to use multisampling. It is part of core 
> OpenGL since OpenGL 1.3 and used to be ARB extension #5 
> (GL_ARB_multisample) that used to be non-ARB extension #25 
> (GL_SGIS_multisample).
> http://oss.sgi.com/projects/ogl-sample/registry/
> 
> As it is an expensive operation, it is not supported by all 
> OpenGL contexts.
> If you want to use it, you are supposed to obtain a 
> multisample-capable context using glX or WGL_ARB_multisample 
> extension (OpenGL spec 1.5, F.3 page 281).
> 
> In VTK, superclass VTK/Rendering/vtkOpenGLRenderWindow has a 
> MultiSamples ivar and a static ivar GlobalMaximumNumberOfMultiSamples.
> The default value of GlobalMaximumNumberOfMultiSamples is 8. 
> The default value for MultiSamples is 
> GlobalMaximumNumberOfMultiSamples.
> 
> The MultiSamples ivar is actually used in the concrete class 
> VTK/Rendering/vtkXOpenGLRenderWindow to query a 
> multisample-capable context.
> Here are the lines involved in function 
> vtkXOpenGLRenderWindowTryForVisual():
> 
>   if (multisamples)
>     {
> #ifdef GLX_SAMPLE_BUFFERS_SGIS
>     attributes[index++] = GLX_SAMPLE_BUFFERS_SGIS;
>     attributes[index++] = 1;
>     attributes[index++] = GLX_SAMPLES_SGIS;
>     attributes[index++] = multisamples;
> #endif
>     }
> 
> It means you will get a multisampling context if ALL the 
> following conditions
> exist:
> 1. You are using Unix (there is a call to glXChooseVisual()) 
> 2. You compile VTK on a platform that have a version of 
> glxext.h that defines macro GLX_SAMPLE_BUFFERS_SGIS 3. You 
> run VTK on a platform that supports some 
> multisampling-capable context.
> 
> Once you get a multisampling-capable context, 
> GL_SAMPLE_BUFFERS is equal to 1.
> At run time, the way to switch between multisampling or 
> singlesampling (it means no antialiasing) is to call 
> glEnable/Disable with GL_MULTISAMPLE.
> 
> Here is the trap. By default, GL_MULTISAMPLE is on. In 
> addition, if GL_SAMPLE_BUFFERS is equal to 1 and 
> GL_MULTISAMPLE is on, multisampling is used on points, lines 
> and polygons *regardless* the value of GL_POINT_SMOOTH, 
> GL_LINE_SMOOTH and GL_POLYGON_SMOOTH (OpenGL spec 1.5, 
> section 3.3.3 page 77, section 3.4.4 page 83, section 3.5.6 page 89 ).
> 
> So, now you know why.
> 
> </long_answer>
> 
> Here is my question. There are a couple of ways to make the 
> regression tests not to fail because of multisampling.
> 
> 1. Remove multisampling query: we will never get a 
> multisample context, but users may like to have antialiasing anyway.
> 2. Once we get a multisample context, call 
> glDisable(GL_MULTISAMPLE) and never use multisampling. We 
> potentially get a context with a special buffer that allocate 
> some video memory for nothing, when this memory could be 
> useful to load a lot of textures.
> 3. Set default value of GlobalMaximumNumberOfMultiSamples to 
> 0 instead of 8.
> 4. Set default value of MultiSamples to 0 instead of
>    GlobalMaximumNumberOfMultiSamples.
> 5. On each potentially failing test, call SetMultiSamples(0) 
> at the beginning, which requires access to the concrete type 
> of RenderWindow.
> 
> Solution 1 and 2 are really low level and limit application choice.
> 
> Solution 3 and 4 give more control to the application, but by 
> default there will be no antialiasing (no multisample-capable 
> context) and it has to be set by the application during the 
> initialization of the render window.
> 
> Solution 5 looks easy for VTK tests, less easy for ParaView tests.
> 
> Any opinion about thoses solution, or some alternate solution 
> is welcome.
> 
> --
> François Bertel, PhD  | Kitware Inc. Suite 204
> 1 (518) 371 3971 x113 | 28 Corporate Drive
>                       | Clifton Park NY 12065, USA 
> _______________________________________________
> Paraview-developers mailing list
> Paraview-developers at paraview.org
> http://public.kitware.com/mailman/listinfo/paraview-developers
> 
> 




More information about the vtk-developers mailing list