[osg-users] Viewport screen resolution not scaling properly in OSX retina

OpenSceneGraph Users osg-users at lists.openscenegraph.org
Wed Mar 11 07:15:37 PDT 2020


Hello,

The viewport dpi is different from the window dpi on OSX. Is there a way to 
fix the viewport dimensions, preferably by autodetecting the size of the 
frame buffer, so that the viewport size matches the window size? 

There must be a way to detect the frame buffer size in OSG, but I cannot 
find it.

The particular issue occurs with the FLTK sample program when compiled on 
my macbook.

//https://github.com/openscenegraph/OpenSceneGraph/blob/master/examples/osgviewerFLTK/osgviewerFLTK.cpp

On OSX, the viewport fills the bottom left  quarter of the window. I have 
read the scale factor to apply to the viewport is 2x the window size, but 
the resulting dimensions of the rescaled viewport are not exactly right. is 
there a way to access the framebuffer to get its dimensions?

On windows, I understand this issue could be fixed with a call to

///    ::SetProcessDPIAware();  //.. .alternately: SetProcessDpiAwareness()

but there seems to be no equivalent on for OSX.

I was unsuccessful accessing the function glfwGetFramebufferSize defined in 
<GLFW/glfw3.h> 

I have also tried to modify the sample code AdapterWidget() with the 
following commented lines to access the frame buffer size from OSG, with no 
luck. 

            AdapterWidget(x,y,w,h,label),xpixscale(1.0),ypixscale(1.0)
            {
                getCamera()->setViewport(new 
osg::Viewport(0,0,xpixscale*w,ypixscale*h));
                getCamera()->setProjectionMatrixAsPerspective(30.0f, 
static_cast<double>(w)/static_cast<double>(h), 1.0f, 10000.0f);
                getCamera()->setGraphicsContext(getGraphicsWindow());
                getCamera()->setDrawBuffer(GL_BACK);
                getCamera()->setReadBuffer(GL_BACK);
            
                setThreadingModel(osgViewer::Viewer::SingleThreaded);
 //           unsigned int swidth, sheight;
 //                  osgViewer::GraphicsWindow * _gw = getGraphicsWindow();
 //                  osg::GraphicsContext * gc = (osg::GraphicsContext*) 
_gw;
 //                  osg::GraphicsContext::WindowingSystemInterface * wsi = 
gc->getWindowingSystemInterface();
 //                  //yields wsi->Name == "Cocoa" but no other useful 
information
 //                  osg::DisplaySettings *ds = 
gc->getWindowingSystemInterface()->getDisplaySettings();  // This is NULL
 //                  sheight = ds->getScreenHeight();
 //                  swidth =  ds->getScreenWidth();
 //                  std::cout << sheight << " " << swidth << std::endl;
            }

There must be a solution to detecting the frame buffer size in OSG so the 
viewport size can be scaled to the window size. but I cannot find it. Does 
anyone have a solution?

Thanks

-- 
You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to osg-users+unsubscribe at googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/osg-users/b92b3183-f1f0-4238-901e-37e73da3978e%40googlegroups.com.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20200311/da87af86/attachment.html>


More information about the osg-users mailing list