[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