[osg-users] how to get the handle of opengl texture that corresponds to a OSG::Texture

Robert Osfield robert.osfield at gmail.com
Thu Sep 10 00:22:10 PDT 2015


Hi Qingjie,

This is no longer about the OSG, it's about C++.  Your mistake is straight
forward C++ issue of not matching the base classes parameters when
overidding a method:  The Camera::DrawCallback base class is:


        /** Draw callback for custom operations.*/
        struct OSG_EXPORT DrawCallback : virtual public Object
        {
            DrawCallback() {}

            DrawCallback(const DrawCallback&,const CopyOp&) {}

            META_Object(osg, DrawCallback);

            /** Functor method called by rendering thread. Users will
typically override this method to carry tasks such as screen capture.*/
            virtual void operator () (osg::RenderInfo& renderInfo) const;

            /** Functor method, provided for backwards compatibility,
called by operator() (osg::RenderInfo& renderInfo) method.*/
            virtual void operator () (const osg::Camera& /*camera*/) const
{}
        };

Please look carefully at your own code to see your mistake.

Robert.



On 10 September 2015 at 04:42, Qingjie Zhang <305479421 at qq.com> wrote:

> Hi Robert,
> To get the handle of opengl texture, I attached a DrawCallback to the main
> camera, doing like these codes:
> struct MyCameraPostDrawCallback : public osg::Camera::DrawCallback
> {
>         virtual void operator()(const osg::RenderInfo &renderInfo)
>         {
>                 int contextID = renderInfo.getContextID();
>                 GLuint frontTexHandle =
> m_frontTex->getTextureObject(contextID)->id();
>                 GLuint backTexHandle =
> m_backTex->getTextureObject(contextID)->id();
>         }
> };
> camera->setPostDrawCallback(new MyCameraPostDrawCallback);
>
> But the function operator() int the callback does not run, I tried
> setPostDrawCallback() and setFinalDrawCallback(), they were the same.
> I was thinking that the DrawCallback would run every frame...
> Can you tell me when the callback runs?
> And, to get the handle,  is it right to attach DrawCallback to camera? If
> not, can you tell me the detailed method to get the handle?
>
> Thank you,
>
> Qingjie.
>
>
> robertosfield wrote:
> > Hi Qingjie,
> > On 9 September 2015 at 09:27, Qingjie Zhang < ()> wrote:
> >
> > > Do you mean the DrawCallback in the Camera class, which contains
> > > virtual void operator () (osg::RenderInfo& renderInfo) ? And here I
> can use the RenderInfo right?
> > >
> >
> >
> > Yes.  You can attach draw callbacks to Drawables, StateAtttribute and
> Camera's.
> >
> >
> >
> >
> > >
> > > As I know, the following code can get a contextID:
> > > camera->getGraphicsContext()->getState()->getContextID();
> > > Is this contextID same as the upper one?
> > >
> >
> >
> > If you only need the contexID then getting it from the graphics context
> is perfectly fine.  What route to take depends on when you need to do your
> queries.
> >
> >
> > I would add that the TextureObject for each context is only created by
> the draw thread for each context, so the TextureObject won't exist right
> away when you create your osg::Texture and assign them to the scene graph.
> >
> >
> >
> > Robert.
> >
> >
> >
> >  ------------------
> > Post generated by Mail2Forum
>
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=65083#65083
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20150910/eb366e92/attachment-0003.htm>


More information about the osg-users mailing list