[osg-users] issue about getting the material properties from the current state in rendering info

Trajce Nikolov NICK trajce.nikolov.nick at gmail.com
Tue Jun 23 09:42:18 PDT 2015


Hi,

I think you can get the current material like this : (didn't compiled but
maybe as a hint)

osg::State* state = renderInfo.getState();
osg::State::AttributeMap& attrMap = state->getAttributeMap();
osg::StateAttribute::TypeMemberPair typeMember =
std::make_pair<osg::StateAttribute::Type,int>(osg::StateAttribute::MATERIAL,0);
osg::State::AttributeStack stack = attrMap[typeMember];
osg::State::AttributeVec attributes = stack.attributeVec;

you iterate over attributes and dynamic_cast osg::StateAttribute to
osg::Material



On Tue, Jun 23, 2015 at 6:15 PM, Sebastian Messerschmidt <
sebastian.messerschmidt at gmx.de> wrote:

>
> Am 23.06.2015 18:05, schrieb Gianluca Natale:
>
>  Hi all,
>
> I’m using OSG 3.0.1.
>
> I have an issue when I try to retrieve the material properties from the
> rendering info, in my custom drawable.
>
>
>
> To be clearer:
>
> I have a custom drawable, for which I implemented a
>
>
>
> myDrawable::drawImplementation(osg::RenderInfo& osgRenderInfo).
>
>
>
> When I try to get the material properties inside that function, by
> following code:
>
>
>
> osg::StateSet  drwbStateSet;
>
> osg::State *state = osgRenderInfo.getState();
>
> state->captureCurrentState(drwbStateSet);
>
>
>
> the returned material properties is invalid.
>
> Specifically, I put a breakpoint in following function:
>
>
>
> StateSet::setAttribute(StateAttribute *attribute,
> StateAttribute::OverrideValue value)
>
>
>
> that is called inside captureCurrentState.
>
> When the attribute is an osg::Material, the _ptr is different from the one
> allocated when the material has been set, in the state set associated to a
> parent node of that drawable.
>
> Furthermore, _userDataContainer is 0x0000000000000000, so no valid
> osg::Material is returned in the captured state set.
>
> User data defaults to nullptr. So if you're not setting it up that is
> expected.
> As you don't explain why you are trying to inspect state during draw it is
> hard to guess what you are after.
> I simply guess that your state is set up somewhere further up in the
> stategraph (i.e. in one of the parents) and that state is set up lazy.
> Maybe Robert can give some insights here.
>
>
>
>
> Any idea of the possible cause of the issue? Where did I go wrong?
>
> BTW, all other attributes (polygon offset, polygon mode, etc…) are
> returned correctly.
>
> Are you sure you are setting up an osg::Material state attribute somewhere?
>
>
>
> Thanks,
>
> Gianluca Natale
>
>
>
>
>
>
> _______________________________________________
> osg-users mailing listosg-users at lists.openscenegraph.orghttp://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
>
> _______________________________________________
> 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/20150623/0397e7ea/attachment-0007.htm>


More information about the osg-users mailing list