<div dir="ltr">Hi Gianluca,<div><br></div><div>Have you tried using "getLastAppliedAttribute" on the osg::State object?</div><div><br></div><div>const osg::Material* mat = dynamic_cast<const osg::Material*>(state.getLastAppliedAttribute(osg::StateAttribute::MATERIAL));<br></div><div>if(mat)</div><div>{</div><div>    // do something with material</div><div>}</div><div><br></div><div>I've used this method to access attributes from the current state and it has worked for me.</div><div><br></div><div>Cheers,</div><div>Farshid</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 23, 2015 at 9:49 AM, Gianluca Natale <span dir="ltr"><<a href="mailto:natale@europe.altair.com" target="_blank">natale@europe.altair.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div bgcolor="white" lang="IT" link="#0563C1" vlink="#954F72">
<div>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">Thanks Sebastian,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">I’m simply trying to get the alpha value of the diffuse component of the material properties, because I have to pass it to an underlying<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">graphic library that I use for rendering that custom drawable.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">BTW, I further investigated.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">In the following function:<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:windowtext">State::captureCurrentState(StateSet& stateset)<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">The _attributeMap actually contains as MATERIAL attribute exactly the pointer to the osg::Material property that I created.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">But in the attribute stack it appears as the ‘last_applied_attribute’, and ‘changed’ is set to true.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">For all other attributes the pointers stored in ‘last_applied_attribute’ are correct as well, but ‘changed’ is set to false.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">Also, in that AttributeStack the member attributeVec contains just one element, that is not the correct one (it points to a different osg::Material).<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">While for all the other attributes, which have ‘changed’ set to false, last_applied_attribute coincides with the first element in attributeVec.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">I don’t know anything of that code, but I don’t understand why osg::Material appears to be changed while other attributes not.<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">Or should I use a different API to get the current osg::Material?<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">Thanks,<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d">Gianluca Natale<u></u><u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color:#1f497d"><u></u> <u></u></span></p>
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="color:windowtext">From:</span></b><span lang="EN-US" style="color:windowtext"> osg-users [mailto:<a href="mailto:osg-users-bounces@lists.openscenegraph.org" target="_blank">osg-users-bounces@lists.openscenegraph.org</a>]
<b>On Behalf Of </b>Sebastian Messerschmidt<br>
<b>Sent:</b> martedì 23 giugno 2015 18:15<br>
<b>To:</b> OpenSceneGraph Users; Osg Users<br>
<b>Subject:</b> Re: [osg-users] issue about getting the material properties from the current state in rendering info<u></u><u></u></span></p>
</div>
</div><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt"><u></u> <u></u></span></p>
<div>
<p class="MsoNormal">Am 23.06.2015 18:05, schrieb Gianluca Natale:<u></u><u></u></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal"><span lang="EN-US">Hi all,</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">I’m using OSG 3.0.1.</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">I have an issue when I try to retrieve the material properties from the rendering info, in my custom drawable.</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">To be clearer:</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US">I have a custom drawable, for which I implemented a</span><u></u><u></u></p>
<p class="MsoNormal"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">myDrawable::drawImplementation(osg::RenderInfo& osgRenderInfo).</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">When I try to get the material properties inside that function, by following code:</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">osg::StateSet  drwbStateSet;</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">osg::State *state = osgRenderInfo.getState();</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">state->captureCurrentState(drwbStateSet);</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">the returned material properties is invalid.</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">Specifically, I put a breakpoint in following function:</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none">StateSet::setAttribute(StateAttribute *attribute, StateAttribute::OverrideValue value)<u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"> <u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">that is called inside captureCurrentState.</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">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.</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">Furthermore, _userDataContainer is 0x0000000000000000, so no valid osg::Material is returned in the captured state set.</span><u></u><u></u></p>
</blockquote>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif">User data defaults to nullptr. So if you're not setting it up that is expected.<br>
As you don't explain why you are trying to inspect state during draw it is hard to guess what you are after.<br>
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.
<br>
Maybe Robert can give some insights here. <br>
<br>
<br>
<br>
<u></u><u></u></span></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">Any idea of the possible cause of the issue? Where did I go wrong?</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">BTW, all other attributes (polygon offset, polygon mode, etc…) are returned correctly.</span><u></u><u></u></p>
</blockquote>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif">Are you sure you are setting up an osg::Material state attribute somewhere?<br>
<br>
<u></u><u></u></span></p>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">Thanks,</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US">Gianluca Natale</span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-autospace:none"><span lang="EN-US"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif"><br>
<br>
<br>
<u></u><u></u></span></p>
<pre>_______________________________________________<u></u><u></u></pre>
<pre>osg-users mailing list<u></u><u></u></pre>
<pre><a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><u></u><u></u></pre>
<pre><a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><u></u><u></u></pre>
</blockquote>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman",serif"><u></u> <u></u></span></p>
</div></div></div>
</div>

<br>_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
<br></blockquote></div><br></div>