{
namespace
{
-const std::string JOINT_MATRIX{"jointMatrix"};
+const char* JOINT_MATRIX{"jointMatrix"};
const std::map<Property::Type, Constraint (*)(Actor&, Property::Index)> sConstraintFactory = {
{Property::Type::BOOLEAN,
}
#endif //DEBUG_JOINTS
-class ActorCreatorVisitor : public NodeDefinition::IConstVisitor
+class ActorCreatorVisitor : public NodeDefinition::IVisitor
{
public:
ActorCreatorVisitor(NodeDefinition::CreateParams& params)
{
}
- void Start(const NodeDefinition& n)
+ void Start(NodeDefinition& n)
{
mCreationContext.mXforms.modelStack.Push(n.GetLocalSpace());
mActorStack.push_back(a);
}
- void Finish(const NodeDefinition& n)
+ void Finish(NodeDefinition& n)
{
mActorStack.pop_back();
mCreationContext.mXforms.modelStack.Pop();
{
// Register bone transform on shader.
char propertyNameBuffer[32];
- snprintf(propertyNameBuffer, sizeof(propertyNameBuffer), "%s[%d]", Skinning::BONE_UNIFORM_NAME.c_str(), boneIdx);
+ snprintf(propertyNameBuffer, sizeof(propertyNameBuffer), "%s[%d]", Skinning::BONE_UNIFORM_NAME, boneIdx);
DALI_ASSERT_DEBUG(shader.GetPropertyIndex(propertyNameBuffer) == Property::INVALID_INDEX);
auto propBoneXform = shader.RegisterProperty(propertyNameBuffer, Matrix{false});
NodeDefinition* SceneDefinition::GetNode(Index iNode)
{
- return mNodes[iNode].get();
+ if(iNode != Scene3D::Loader::INVALID_INDEX && iNode < mNodes.size())
+ {
+ return mNodes[iNode].get();
+ }
+ return nullptr;
}
void SceneDefinition::Visit(Index iNode, const Customization::Choices& choices, NodeDefinition::IVisitor& v)
void Start(const NodeDefinition& n)
{
- if(n.mRenderable)
+ for(auto& renderable : n.mRenderables)
{
- n.mRenderable->RegisterResources(counter);
+ renderable->RegisterResources(counter);
}
}
Visit(iNode, choices, refCounterVisitor);
}
-Actor SceneDefinition::CreateNodes(Index iNode, const Customization::Choices& choices, NodeDefinition::CreateParams& params) const
+Actor SceneDefinition::CreateNodes(Index iNode, const Customization::Choices& choices, NodeDefinition::CreateParams& params)
{
ActorCreatorVisitor actorCreatorVisitor(params);
NodeDefinition* SceneDefinition::AddNode(std::unique_ptr<NodeDefinition>&& nodeDef)
{
- if(FindNode(nodeDef->mName))
- {
- return nullptr;
- }
-
// add next index (to which we're about to push) as a child to the designated parent, if any.
if(nodeDef->mParentIdx != INVALID_INDEX)
{
}
// 3, For each root, register joint matrices and constraints
- for(auto r : rootsJoints)
+ for(const auto& r : rootsJoints)
{
auto node = GetNode(r.first);
auto rootJoint = root.FindChildByName(node->mName);
constraint.AddSource(Source(rootJoint, Actor::Property::POSITION));
constraint.Apply();
- for(auto j : r.second)
+ for(const auto j : r.second)
{
node = GetNode(j);
auto joint = rootJoint.FindChildByName(node->mName);
std::map<Index, std::map<Index, std::vector<Index*>>> skinningShaderUsers;
for(auto& node : mNodes)
{
- if(node->mRenderable)
+ for(auto& renderable : node->mRenderables)
{
ResourceReflector reflector;
- node->mRenderable->ReflectResources(reflector);
+ renderable->ReflectResources(reflector);
if(reflector.iMesh)
{
SortAndDeduplicateSkinningRequests(requests);
- for(auto& i : requests)
+ for(auto& request : requests)
{
- auto& skeleton = resources.mSkeletons[i.mSkeletonIdx];
+ auto& skeleton = resources.mSkeletons[request.mSkeletonIdx];
if(skeleton.mJoints.empty())
{
- LOGD(("Skeleton %d has no joints.", i.mSkeletonIdx));
+ LOGD(("Skeleton %d has no joints.", request.mSkeletonIdx));
continue;
}
Index boneIdx = 0;
- for(auto& j : skeleton.mJoints)
+ for(auto& joint : skeleton.mJoints)
{
- auto node = GetNode(j.mNodeIdx);
+ auto node = GetNode(joint.mNodeIdx);
Actor actor = rootActor.FindChildByName(node->mName);
- ConfigureBoneMatrix(j.mInverseBindMatrix, actor, i.mShader, boneIdx);
+ ConfigureBoneMatrix(joint.mInverseBindMatrix, actor, request.mShader, boneIdx);
}
}
}
std::map<Index, std::map<std::string, std::vector<Index*>>> blendShapeShaderUsers;
for(auto& node : mNodes)
{
- if(node->mRenderable)
+ for(auto& renderable : node->mRenderables)
{
ResourceReflector reflector;
- node->mRenderable->ReflectResources(reflector);
+ renderable->ReflectResources(reflector);
if(reflector.iMesh)
{