Hi,<div><br></div><div>I'm working on a node visitor that converts FFP state to shaders and am extending it so it can handle more than it used to. To avoid unnecessary state switches for things now handled by my shaders, I'm attempting to remove fixed-function-related state from the nodes which have had shaders set up.</div><div><br></div><div>With modes, this works well - I can just set them off and protected, and the glEnable/glDisable calls go away. However, it's proving difficult to achieve the same behaviour with StateAttributes. The obvious solution would be removing the attribute from the StateSet it's attached to, but it might be higher in the scenegraph so also affect nodes which aren't having shaders attached, so it's only really safe to modify the stateset the shader program gets attached to.</div><div><br></div><div>So far, the best thing I've got is default-constructing the particular StateAttribute I'm interested in and attaching that to the stateset. This means the default state is set when the draw call happens, but I can see a lot of apply calls (resulting in a lot of GL calls) toggling between this copy of the default attribute and the copy in the state's attribute stack (via applyGlobalDefaultAttribute). I don't think it's wildly different from the number of unnecessary GL calls I was getting before I tried this.</div><div><br></div><div>A solution that I think would work would be calling getGlobalDefaultAttribute on the State object as then the pointers would compare equal and the apply call would get skipped, but I don't have any clean way of getting the State instance to my visitor.</div><div><br></div><div>Ideally, there'd be some neat trick I've missed that lets me say "any subgraph of this node doesn't care about this attribute type, so set the default/leave whatever's there from the last draw call" that would work with the normal state composition mechanisms so I could override it from a parent stateset or make it protected so it couldn't be overridden by parent statesets. Maybe a custom StateAttribute could do that, but maybe someone on this mailing list knows something I don't already.</div><div><br></div><div>Cheers,</div><div><br></div><div>Chris</div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group.<br />
To unsubscribe from this group and stop receiving emails from it, send an email to <a href="mailto:osg-users+unsubscribe@googlegroups.com">osg-users+unsubscribe@googlegroups.com</a>.<br />
To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/osg-users/5132cc44-84f8-4395-bd54-b2e88d02f67en%40googlegroups.com?utm_medium=email&utm_source=footer">https://groups.google.com/d/msgid/osg-users/5132cc44-84f8-4395-bd54-b2e88d02f67en%40googlegroups.com</a>.<br />