[osg-users] How change the vertical sync?

2013-10-17 Thread Julio Jerez
Oh there is one more thing you need to first, you need create a new context
so that you can realize it,  otherwise  the function make current do not
take place

here is the final code

 

  viewer.setUpViewInWindow(x, y, width, height);

 

  //Get the traits of the current window

  osg::ref_ptr< osg::GraphicsContext::Traits > traits = new
osg::GraphicsContext::Traits(
*viewer.getCamera()->getGraphicsContext()->getTraits());

 

  // disable vertical sync

  traits->vsync = false;

 

  //Create a new graphics context with the modified traits

  osg::ref_ptr< osg::GraphicsContext > gc =
osg::GraphicsContext::createGraphicsContext( traits.get() );

  gc->realize();

  gc->makeCurrent();

 

  // set the vertical black off by default

  osgViewer::Viewer::Windows windows;

  viewer.getWindows(windows);

  for(osgViewer::Viewer::Windows::iterator itr = windows.begin(); itr !=
windows.end(); ++itr) {

//(*itr)->setSyncToVBlank( !(*itr)->getSyncToVBlank() );

(*itr)->setSyncToVBlank (false);

  }

 

 

you would think that a simple function on the viewer would do that kind of
thing without this kind of contorted code.

 

Julio

 

 

___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


[osg-users] How change the vertical sync?

2013-10-17 Thread Julio Jerez
No, I do not think that controlling  this at the driver level is the right
way to do that.

I digged a litle and I think I found a better way, in case any anyone wants
to know, here is how it can be done on initilaization

 

 

  //Get the traits of the current window

  osg::ref_ptr< osg::GraphicsContext::Traits > traits = new
osg::GraphicsContext::Traits(
*viewer.getCamera()->getGraphicsContext()->getTraits());

 

  // disable vertical sync

  traits->vsync = false;

 

  //Create a new graphics context with the modified traits

  osg::ref_ptr< osg::GraphicsContext > gc =
osg::GraphicsContext::createGraphicsContext( traits.get() );

 

  // set vertical blank off by default

  osgViewer::Viewer::Windows windows;

  gc->makeCurrent();

  viewer.getWindows(windows);

  for(osgViewer::Viewer::Windows::iterator itr = windows.begin(); itr !=
windows.end(); ++itr) {

//(*itr)->setSyncToVBlank( !(*itr)->getSyncToVBlank() );

(*itr)->setSyncToVBlank( traits->vsync );

  }

___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] How change the vertical sync?

2013-10-17 Thread PCJohn
Hi Julio,

this is the code I am using (you may need to reformat it, because email splits 
many lines into two). Call it once you have active context.
You may still need some includes like
#include 
#if defined(__WIN32__) || defined(_WIN32)
# [...]
#else
# include 
#endif
and so on.
John


   //
   // vsync could be controlled by following OpenGL extensions:
   //
   // Swap control approaches:
   // GLX_SGI_swap_control (1995) / WGL_EXT_swap_control (1999) / 
GLX_EXT_swap_control (2009)
   // GLX_EXT_swap_control_tear (2011) / WGL_EXT_swap_control_tear (2011)
   //
   // Synchronization approaches:
   // GLX_SGI_video_sync (1995) / GLX_OML_sync_control (2001) / 
WGL_OML_sync_control (2001)
   //
   // Swapping a group of drawables and windows:
   // GLX_SGIX_swap_group (1996) / GLX_SGIX_swap_barrier (1996) / 
GLX_NV_swap_group (2003) / WGL_NV_swap_group (2003)
   //

   const char* extensions = NULL;

#if defined(__WIN32__) || defined(_WIN32)

   typedef const char* WINAPI WGLGETEXTENSIONSSTRINGARB( HDC );
   WGLGETEXTENSIONSSTRINGARB* wglGetExtensionsStringARB;
   osg::setGLExtensionFuncPtr( wglGetExtensionsStringARB, 
"wglGetExtensionsStringARB" );

   typedef const char* WINAPI WGLGETEXTENSIONSSTRINGEXT();
   WGLGETEXTENSIONSSTRINGEXT* wglGetExtensionsStringEXT;
   osg::setGLExtensionFuncPtr( wglGetExtensionsStringEXT, 
"wglGetExtensionsStringEXT" );

   if( wglGetExtensionsStringARB )
   {
   HDC dc = wglGetCurrentDC();
   extensions = wglGetExtensionsStringARB( dc );
   }
   else if( wglGetExtensionsStringEXT )
   {
   extensions = wglGetExtensionsStringEXT();
   }

#else
   // get current display
   // (glXGetCurrentDisplay() is supported since GLX 1.2)
   Display *d = glXGetCurrentDisplay();

   // (glXGetCurrentContext() is supported maybe since beginning? (1.0?),
   //  at least it is supported in GLX 1.2)
   GLXContext c = glXGetCurrentContext();

   // get current screen
   // (glXQueryContext() is available since GLX 1.3)
   int screen;
   if( c == NULL || glXQueryContext( d, c, GLX_SCREEN, &screen ) != Success )
   {
  OSG_WARN << "GLX: failed to get screen number." << endl;
  screen = DefaultScreen( d );
   }

   // get glx extension string
   // (glXQueryExtensionsString is available since GLX 1.1)
   extensions = glXQueryExtensionsString( d, screen );

#endif

   if( extensions )
   {
#if defined(__WIN32__) || defined(_WIN32)
  if( osg::isExtensionInExtensionString( "WGL_EXT_swap_control", 
extensions ) )
  {
 typedef BOOL WINAPI WGLSWAPINTERVALEXTPROC(int interval);
 WGLSWAPINTERVALEXTPROC* wglSwapIntervalEXT = 
(WGLSWAPINTERVALEXTPROC*)osg::getGLExtensionFuncPtr( "wglSwapIntervalEXT", 
extensions );
 bool adaptiveSwapSupported = osg::isExtensionInExtensionString( 
"WGL_EXT_swap_control_tear", extensions );
#else
  bool sgiSwapControl = osg::isExtensionInExtensionString( 
"GLX_SGI_swap_control", extensions );
  bool extSwapControl = osg::isExtensionInExtensionString( 
"GLX_EXT_swap_control", extensions );
  if( sgiSwapControl || extSwapControl )
  {
 typedef int (*PFNGLXSWAPINTERVALSGIPROC) (int interval);
 typedef void (*PFNGLXSWAPINTERVALEXTPROC) (Display *dpy, GLXDrawable 
drawable, int interval);
 PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI = sgiSwapControl ?
   (PFNGLXSWAPINTERVALSGIPROC)osg::getGLExtensionFuncPtr( 
"glXSwapIntervalSGI", extensions ) : NULL;
 PFNGLXSWAPINTERVALEXTPROC glXSwapIntervalEXT = extSwapControl ?
   (PFNGLXSWAPINTERVALEXTPROC)osg::getGLExtensionFuncPtr( 
"glXSwapIntervalEXT", extensions ) : NULL;
 bool adaptiveSwapSupported = osg::isExtensionInExtensionString( 
"GLX_EXT_swap_control_tear", extensions );
#endif

 int value = _vsync ? ( adaptiveSwapSupported ? -1 : 1 ) : 0;
 OSG_NOTICE << "OSGWiget: Setting vertical synchronization " << ( 
value != 0 ? "ON" : "OFF" )
<< " (swap interval set to " << value << ")." << endl;

#if defined(__WIN32__) || defined(_WIN32)
 if( wglSwapIntervalEXT )
wglSwapIntervalEXT( value );
#else
 // try glXSwapIntervalEXT in the first place as it supports
 // adaptive swap ([WGL|GLX]_EXT_swap_control_tear) and zero value for 
disabling v-sync
 if( glXSwapIntervalEXT )
glXSwapIntervalEXT( d, glXGetCurrentDrawable(), value );
 else
 if( glXSwapIntervalSGI )
 {
// glXSwapIntervalSGI does not support value 0 according to 
documentation,
// only values >=1, but it seems to work for disabling v-sync 
anyway
if( glXSwapIntervalSGI( value ) )
   OSG_WARN << "glXSwapIntervalSGI() failed." << endl;
 }
#endif
  }
   }



On Tuesday 15 of October 2013 20:55:03 Eric Sokolowsky wrote:
> If you have an Nvidia card, you can set the environment variable
> __GL_SYNC_TO_VBLANK=1 or =0 to enable or disable vertical syncing, but this
> must be done b

Re: [osg-users] How change the vertical sync?

2013-10-15 Thread Eric Sokolowsky
If you have an Nvidia card, you can set the environment variable
__GL_SYNC_TO_VBLANK=1 or =0 to enable or disable vertical syncing, but this
must be done before the graphics context is initialized. I'm not sure how
to do it for ATI or Intel chips. A google search turned up this tip for ATI
cards: http://www.stolk.org/debian/vblank-fglrx.html (I haven't tried it
though).


On Tue, Oct 15, 2013 at 11:08 AM, Julio Jerez  wrote:

> In my app I wrote this class function
>
> ** **
>
> void InitWindowsSystem (osgViewer::Viewer& viewer, const char* const title,
> int x, int y, int width, int height)
>
> {
>
>   viewer.setUpViewInWindow(x, y, width, height);
>
> ** **
>
>   //Get the traits of the current window
>
>   osg::ref_ptr< osg::GraphicsContext::Traits > traits = new osg::
> GraphicsContext::Traits( *viewer.getCamera()->getGraphicsContext()->
> getTraits());
>
> ** **
>
>   //Set the title
>
>   traits->windowName = title;
>
> ** **
>
>   // disable vertical sync
>
>   traits->vsync = false;
>
> ** **
>
>   //Create a new graphics context with the modified traits
>
>   osg::ref_ptr< osg::GraphicsContext > gc = osg::GraphicsContext::
> createGraphicsContext( traits.get() );
>
> ** **
>
> //test to see if vsync has changed, but vsyn is alway true
>
> osg::ref_ptr< osg::GraphicsContext::Traits > traits1 = new osg::
> GraphicsContext::Traits( *viewer.getCamera()->getGraphicsContext()->
> getTraits());
>
> ** **
>
> ** **
>
> I have searched on forum for a way to do this but no one seem to have a
> clear way.
>
> can someone tell me how to do this, pleases?
>
> ** **
>
> Julio 
>
> ** **
>
> ** **
>
> ** **
>
> ___
> osg-users mailing list
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


[osg-users] How change the vertical sync?

2013-10-15 Thread Julio Jerez
In my app I wrote this class function

 

void InitWindowsSystem (osgViewer::Viewer& viewer, const char* const title,
int x, int y, int width, int height)

{

  viewer.setUpViewInWindow(x, y, width, height);

 

  //Get the traits of the current window

  osg::ref_ptr< osg::GraphicsContext::Traits > traits = new
osg::GraphicsContext::Traits(
*viewer.getCamera()->getGraphicsContext()->getTraits());

 

  //Set the title

  traits->windowName = title;

 

  // disable vertical sync

  traits->vsync = false;

 

  //Create a new graphics context with the modified traits

  osg::ref_ptr< osg::GraphicsContext > gc =
osg::GraphicsContext::createGraphicsContext( traits.get() );

 

//test to see if vsync has changed, but vsyn is alway true

osg::ref_ptr< osg::GraphicsContext::Traits > traits1 = new
osg::GraphicsContext::Traits(
*viewer.getCamera()->getGraphicsContext()->getTraits());

 

 

I have searched on forum for a way to do this but no one seem to have a
clear way.

can someone tell me how to do this, pleases?

 

Julio 

 

 

 

___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org