[osg-users] Intercepting Windows messages
Anders Backman
andersb at cs.umu.se
Thu Nov 12 06:54:08 PST 2015
That is certainly an important call yes.
I guess my problem is that these two calls are not interchangeable:
#if 1
osg::ref_ptr<osg::GraphicsContext> gc =
osg::GraphicsContext::createGraphicsContext(traits.get());
#else
osg::ref_ptr<osgViewer::GraphicsWindowWin32> window = new
osgViewer::GraphicsWindowWin32(traits);
gc = window.get();
#endif
createGraphicsContext() will do a few more things which the creation of a
osgViewer::GraphicsWindowWin32 does not. The question is really, is it
possible to even consider this?
Is there a mechanism for creating a custom GraphicsWindowWin32 or is this
path doomed to fail.
/Anders
On Thu, Nov 12, 2015 at 3:31 PM, Trajce Nikolov NICK <
trajce.nikolov.nick at gmail.com> wrote:
> 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
>
> _______________________________________________
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20151112/f67dc286/attachment-0003.htm>
More information about the osg-users
mailing list