[osg-users] Intercepting Windows messages

Trajce Nikolov NICK trajce.nikolov.nick at gmail.com
Thu Nov 12 06:31:53 PST 2015


Did you tried something like:

osgViewer::Viewer viewer;
viewer.getCamera()->setGraphicContext(gc);

?

On Thu, Nov 12, 2015 at 2:52 PM, Anders Backman <andersb at cs.umu.se> wrote:

> I notice that there is a major difference between osgViewer::Viewer and
> osgViewer::CompositeViewer:
>
> The following code:
>
> osgViewer::CompositeViewer viewer;
>
>  osg::ref_ptr<osg::GraphicsContext::Traits> traits = new
> osg::GraphicsContext::Traits;
>     traits->x = 100;
>     traits->y = 100;
>     traits->width = 1000;
>     traits->height = 800;
>     traits->windowDecoration = true;
>     traits->doubleBuffer = true;
>     traits->sharedContext = 0;
>
>     osg::ref_ptr<osg::GraphicsContext> gc =
> osg::GraphicsContext::createGraphicsContext(traits.get());
>
>    osgViewer::View* view = new osgViewer::View;
>     view->setName("View one");
>     viewer.addView(view);
>
>     view->setSceneData(scene.get());
>     view->getCamera()->setViewport(new osg::Viewport(0, 0, traits->width /
> 2, traits->height / 2));
>     view->getCamera()->setGraphicsContext(gc.get());
>
>     viewer.realize(); // Context already created. No call to
> GraphicsWIndowWIn32::GraphicsWIndowWin32 will be called
>
>
>
> If I replace osgViewerCompositeViewer with a osgViewer::Viewer and remove
> the creation of View, I get:
>
>     viewer.realize(); // A new context is created. A new call to
> GraphicsWIndowWIn32::GraphicsWIndowWin32 will be called
>
>
> So it seems that osgViewer::Viewer does not respect? the previously
> created GraphicsCOntext?
>
> /Anders
>
>
>
> On Thu, Nov 12, 2015 at 2:24 PM, Anders Backman <andersb at cs.umu.se> wrote:
>
>> That is quite explicit. I was thinking about some method for intercepting
>> events.
>> I tried fiddling with creating a custom GraphicsWindowWin32 class, but it
>> turns out that this is explicitly created internally in:
>>
>> osg::GraphicsContext* Win32WindowingSystem::createGraphicsContext(
>> osg::GraphicsContext::Traits* traits )
>> {
>> ...
>>         osg::ref_ptr<osgViewer::GraphicsWindowWin32> window = new
>> GraphicsWindowWin32(traits);
>>
>> }
>>
>> So this does not seem to be the way to catch windows messages.
>> My idea was that I could register my instance of the GraphicsWindowWin32
>> to implement the virtual method:
>>
>> LRESULT GraphicsWindowWin32::handleNativeWindowingEvent( HWND hwnd, UINT
>> uMsg, WPARAM wParam, LPARAM lParam )
>>
>>
>> Where I could catch all windows events.
>>
>>
>> Turns out that I do not have enough understanding when and where context
>> etc is created.
>>
>> It seems that a GraphicsWindowWIn32 is first created at the call to:
>>
>>     osg::ref_ptr<osg::GraphicsContext> gc =
>> osg::GraphicsContext::createGraphicsContext(traits.get());
>>
>>
>> And then at the call to:
>>
>> viewer->realize();
>>
>> will also result in a call
>> to GraphicsContext::createGraphicsContext(Traits* traits), which in turn
>> will create yet another GraphicsWindowWin32.
>>
>> So there lies my problem, my call to viewer->realize() will override my
>> first call to GraphicsContext::createGraphicsContext(traits.get());
>>
>>
>> Not sure how to get around this though. Ideas?
>>
>> /Anders
>>
>>
>> On Wed, Nov 11, 2015 at 5:05 PM, Trajce Nikolov NICK <
>> trajce.nikolov.nick at gmail.com> wrote:
>>
>>> Hi Anders,
>>>
>>> here is what I do for this on Windows
>>>
>>>     while (!viewer->done())
>>>     {
>>>
>>> #if defined(_WIN32)
>>>         MSG msg;
>>>         if (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
>>>         {
>>>             ::GetMessage(&msg, NULL, 0, 0);
>>>
>>>             if (wins.size())
>>>             {
>>>                 osgViewer::GraphicsHandleWin32 *hdl =
>>> dynamic_cast<osgViewer::GraphicsHandleWin32*>(wins.at(0));
>>>                 if(hdl)
>>>                 {
>>>                     WNDPROC fWndProc =
>>> (WNDPROC)::GetWindowLongPtr(hdl->getHWND(), GWLP_WNDPROC);
>>>                     if (fWndProc && hdl->getHWND())
>>> {
>>> ::CallWindowProc(fWndProc,hdl->getHWND(),msg.message, msg.wParam,
>>> msg.lParam);
>>> }
>>>                 }
>>>             }
>>>         }
>>> #endif
>>>
>>> On Wed, Nov 11, 2015 at 4:21 PM, Anders Backman <andersb at cs.umu.se>
>>> wrote:
>>>
>>>> Hi.
>>>>
>>>> Trying the 3DConnexion SpaceNavigator with OSG. However I would like to
>>>> stay away from VRPN and such dependencies...
>>>>
>>>> I was wondering how to best intercept Windows messages from the
>>>> GraphicsWindowWin32 class.
>>>>
>>>> This class has a virtual method handleNativeWindowingEvent which I
>>>> would like to override to catch custom messages from my device.
>>>>
>>>> Would it be possible to implement a derived class and have that
>>>> instantiated instead of the standard osgViewer::GraphicsWindowWin32 one?
>>>>
>>>> Or is there a different method to listen to the  messages:
>>>>
>>>> ( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
>>>>
>>>> Thanks,
>>>> Anders
>>>>
>>>>
>>>>
>>>> --
>>>> __________________________________________
>>>> Anders Backman, HPC2N
>>>> 90187 Umeå University, Sweden
>>>> anders at cs.umu.se http://www.hpc2n.umu.se
>>>> Cell: +46-70-392 64 67
>>>>
>>>> _______________________________________________
>>>> osg-users mailing list
>>>> osg-users at lists.openscenegraph.org
>>>>
>>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>>
>>>>
>>>
>>>
>>> --
>>> trajce nikolov nick
>>>
>>> _______________________________________________
>>> osg-users mailing list
>>> osg-users at lists.openscenegraph.org
>>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>>
>>>
>>
>>
>> --
>> __________________________________________
>> Anders Backman, HPC2N
>> 90187 Umeå University, Sweden
>> anders at cs.umu.se http://www.hpc2n.umu.se
>> Cell: +46-70-392 64 67
>>
>
>
>
> --
> __________________________________________
> Anders Backman, HPC2N
> 90187 Umeå University, Sweden
> anders at cs.umu.se http://www.hpc2n.umu.se
> Cell: +46-70-392 64 67
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>


-- 
trajce nikolov nick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20151112/01c91d56/attachment-0003.htm>


More information about the osg-users mailing list