Hey @fwilleke80,
thank you for reaching out to us. Well, that depends. First, I assume that you actually defined INSTANCEOF(MyShaderData, ShaderData) in your MyShader
for the SUPER
attribute to actually compile/work. Secondly, that call should call GetDDescription()
of ShaderData
and not NodeData
, unless you did declare your MyShader
to be an instance of NodeData
in the macro (which IMHO should not compile in the first place). Lastly, to why this actually happens. I would have to try myself (once you confirmed that the other cases all do not apply), but there are basically three options:
(1) Your qualifier 'always' in the statement 'the following code always returns false' is imprecise. It is quite normal that scene elements do not have always access to their description, which is why one should implement GetDDescription
always like this (see SDK for examples):
Bool MyNode::GetDDescription(GeListNode* node, Description* description, DESCFLAGS_DESC& flags)
{
if (!description->LoadDescription(node->GetType()))
return false;
...
Later on in the life cycle of the node, one will be then able to load that description. Or in other words, it is quite normal that some GetDDescription
calls do fail. Can you confirm that this does indeed always happen in your case?
(2) ShaderData
has itself no base description. I.e., there is nothing to load and modify. Seems unlikely to me since there is Xbase
which should kick in when an implementing entity somehow manages to screw up its description.
(3) There is a bug in ShaderData
:)
Cheers,
Ferdinand
edit: Okay, I had a super-brief look, and from what I can see, ShaderData does indeed not seem to implement GetDDescription
in any form. Which would then mean that your calls do always end up here:

So, calling the base implementation of a shader for GetDDescription
seems kind of pointless. (no, bad Ferdinand, bad, very bad :P )