With the use of ConstString we no need to heap allocate UniformPropertyMapping.
So just keep a Dali::Vector instead of OwnerContainer.
Change-Id: I2dff9828a121f7b6b245c306e0f689f5d2073021
{
const SceneGraph::PropertyOwner& sceneObject = GetSceneObject();
- OwnerPointer<SceneGraph::UniformPropertyMapping> map =
- new SceneGraph::UniformPropertyMapping(ConstString(uniformName), propertyPtr);
+ SceneGraph::UniformPropertyMapping map(ConstString(uniformName), propertyPtr);
// Message takes ownership of Uniform map (and will delete it after copy)
AddUniformMapMessage( const_cast<EventThreadServices&>(GetEventThreadServices()), sceneObject, map );
}
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#include <dali/public-api/common/dali-vector.h>
#include <dali/internal/common/buffer-index.h>
+#include <dali/internal/update/common/uniform-map.h>
+#include <dali/public-api/common/dali-vector.h>
namespace Dali
{
class UniformMap;
class UniformPropertyMapping;
-using CollectedUniformMap = Dali::Vector<const UniformPropertyMapping*>;
+using CollectedUniformMap = Dali::Vector<UniformPropertyMapping>;
/**
* This class maps uniform names to property value pointers.
uint32_t mapIndex = 0;
for(; mapIndex < uniformMap.Count() ; ++mapIndex )
{
- mUniformIndexMap[mapIndex].propertyValue = uniformMap[mapIndex]->propertyPtr;
- mUniformIndexMap[mapIndex].uniformIndex = program.RegisterUniform( uniformMap[mapIndex]->uniformName );
+ mUniformIndexMap[mapIndex].propertyValue = uniformMap[mapIndex].propertyPtr;
+ mUniformIndexMap[mapIndex].uniformIndex = program.RegisterUniform(uniformMap[mapIndex].uniformName);
}
for( uint32_t nodeMapIndex = 0; nodeMapIndex < uniformMapNode.Count() ; ++nodeMapIndex )
{
- uint32_t uniformIndex = program.RegisterUniform( uniformMapNode[nodeMapIndex]->uniformName );
+ uint32_t uniformIndex = program.RegisterUniform(uniformMapNode[nodeMapIndex].uniformName);
bool found(false);
for( uint32_t i = 0; i<uniformMap.Count(); ++i )
{
if( mUniformIndexMap[i].uniformIndex == uniformIndex )
{
- mUniformIndexMap[i].propertyValue = uniformMapNode[nodeMapIndex]->propertyPtr;
+ mUniformIndexMap[i].propertyValue = uniformMapNode[nodeMapIndex].propertyPtr;
found = true;
break;
}
if( !found )
{
- mUniformIndexMap[mapIndex].propertyValue = uniformMapNode[nodeMapIndex]->propertyPtr;
+ mUniformIndexMap[mapIndex].propertyValue = uniformMapNode[nodeMapIndex].propertyPtr;
mUniformIndexMap[mapIndex].uniformIndex = uniformIndex;
++mapIndex;
}
uint64_t hash = 0xc70f6907UL;
const SceneGraph::CollectedUniformMap& uniformMapNode = node->GetUniformMap( bufferIndex );
- for (const auto* uniformProperty : uniformMapNode)
+ for(const auto& uniformProperty : uniformMapNode)
{
- hash = uniformProperty->propertyPtr->Hash(bufferIndex, hash);
+ hash = uniformProperty.propertyPtr->Hash(bufferIndex, hash);
}
const SceneGraph::UniformMapDataProvider& uniformMapDataProvider = mRenderDataProvider->GetUniformMap();
const SceneGraph::CollectedUniformMap& uniformMap = uniformMapDataProvider.GetUniformMap( bufferIndex );
- for (const auto* uniformProperty : uniformMap)
+ for(const auto& uniformProperty : uniformMap)
{
- hash = uniformProperty->propertyPtr->Hash(bufferIndex, hash);
+ hash = uniformProperty.propertyPtr->Hash(bufferIndex, hash);
}
if (mUniformsHash != hash)
new (slot) LocalType( &owner, &PropertyOwner::RemoveConstraint, &constraint );
}
-inline void AddUniformMapMessage( EventThreadServices& eventThreadServices, const PropertyOwner& owner, OwnerPointer< UniformPropertyMapping >& map )
+inline void AddUniformMapMessage(EventThreadServices& eventThreadServices, const PropertyOwner& owner, UniformPropertyMapping map)
{
- using LocalType = MessageValue1<PropertyOwner, OwnerPointer<UniformPropertyMapping> >;
+ using LocalType = MessageValue1<PropertyOwner, UniformPropertyMapping>;
// Reserve some memory inside the message queue
uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) );
{
}
-void PropertyOwner::AddUniformMapping( OwnerPointer< UniformPropertyMapping >& map )
+void PropertyOwner::AddUniformMapping(const UniformPropertyMapping& map)
{
- mUniformMaps.Add( map.Release() );
+ mUniformMaps.Add(map);
}
void PropertyOwner::RemoveUniformMapping( const ConstString& uniformName )
/**
* @copydoc UniformMap::Add
*/
- virtual void AddUniformMapping( OwnerPointer< UniformPropertyMapping >& map );
+ virtual void AddUniformMapping(const UniformPropertyMapping& map);
/**
* @copydoc UniformMap::Remove
* limitations under the License.
*/
+#include <algorithm>
+
// CLASS HEADER
#include <dali/internal/update/common/uniform-map.h>
}
}
-void UniformMap::Add( UniformPropertyMapping* newMap )
+void UniformMap::Add(UniformPropertyMapping newMap)
{
- bool found = false;
+ auto iter = std::find_if(mUniformMaps.Begin(),
+ mUniformMaps.End(),
+ [&](auto& element) { return element.uniformName == newMap.uniformName; });
- for( UniformMapIter iter = mUniformMaps.Begin() ;
- iter != mUniformMaps.End() ;
- ++iter )
+ if(iter != mUniformMaps.End())
{
- UniformPropertyMapping* map = *iter;
- if( map->uniformName == newMap->uniformName )
- {
- found = true;
- // Mapping already exists - update it.
- map->propertyPtr = newMap->propertyPtr;
- break;
- }
+ // Mapping already exists - update it.
+ (*iter).propertyPtr = newMap.propertyPtr;
}
-
- if( found == false )
+ else
{
- // Take ownership of the new map
+ // add the new map.
mUniformMaps.PushBack(newMap);
}
void UniformMap::Remove( ConstString uniformName )
{
- bool found=false;
-
- for( UniformMapIter iter = mUniformMaps.Begin() ;
- iter != mUniformMaps.End() ;
- ++iter )
- {
- UniformPropertyMapping* map = *iter;
- if( map->uniformName == uniformName )
- {
- mUniformMaps.Erase( iter );
- found = true;
- break;
- }
- }
+ auto iter = std::find_if(mUniformMaps.Begin(),
+ mUniformMaps.End(),
+ [&](auto& element) { return element.uniformName == uniformName; });
- if( found )
+ if(iter != mUniformMaps.End())
{
+ mUniformMaps.Erase(iter);
MappingChanged();
}
}
-const PropertyInputImpl* UniformMap::Find( ConstString uniformName )
+const PropertyInputImpl* UniformMap::Find(ConstString uniformName)
{
- for( UniformMapIter iter = mUniformMaps.Begin() ;
- iter != mUniformMaps.End() ;
- ++iter )
- {
- UniformPropertyMapping* map = *iter;
- if( map->uniformName == uniformName )
- {
- return map->propertyPtr;
- }
- }
- return nullptr;
+ auto iter = std::find_if(mUniformMaps.Begin(),
+ mUniformMaps.End(),
+ [&](auto& element) { return element.uniformName == uniformName; });
+
+ return (iter != mUniformMaps.End()) ? (*iter).propertyPtr : nullptr;
}
UniformMap::SizeType UniformMap::Count() const
const UniformPropertyMapping& UniformMap::operator[]( UniformMap::SizeType index ) const
{
- return *mUniformMaps[index];
+ return mUniformMaps[index];
}
} // SceneGraph
/**
* Add a map to the mappings table.
*/
- void Add( UniformPropertyMapping* map );
+ void Add(UniformPropertyMapping map);
/**
* Remove a map from the mappings table
void MappingChanged();
private:
- using UniformMapContainer = OwnerContainer<UniformPropertyMapping*>;
+ using UniformMapContainer = Dali::Vector<UniformPropertyMapping>;
using UniformMapIter = UniformMapContainer::Iterator;
using Observers = Dali::Vector<Observer*>;
using ObserversIter = Observers::Iterator;
mIsRoot = isRoot;
}
-void Node::AddUniformMapping( OwnerPointer< UniformPropertyMapping >& map )
+void Node::AddUniformMapping(const UniformPropertyMapping& map)
{
PropertyOwner::AddUniformMapping( map );
mRegenerateUniformMap = 2;
for( UniformMap::SizeType i = 0, count=mUniformMaps.Count(); i<count; ++i )
{
- localMap.PushBack( &mUniformMaps[i] );
+ localMap.PushBack(mUniformMaps[i]);
}
}
else if( mRegenerateUniformMap == 1 )
/**
* @copydoc UniformMap::Add
*/
- void AddUniformMapping( OwnerPointer< UniformPropertyMapping >& map ) override;
+ void AddUniformMapping(const UniformPropertyMapping& map) override;
/**
* @copydoc UniformMap::Remove
for( CollectedUniformMap::Iterator iter = localMap.Begin() ; iter != localMap.End() ; ++iter )
{
- const UniformPropertyMapping* map = (*iter);
- if( map->uniformName == uniformMap[i].uniformName )
+ const UniformPropertyMapping& map = (*iter);
+ if(map.uniformName == uniformMap[i].uniformName)
{
found = true;
break;
}
if( !found )
{
- // it's a new mapping. Add raw ptr to temporary list
- newUniformMappings.PushBack( &uniformMap[i] );
+ newUniformMappings.PushBack(uniformMap[i]);
}
}
iter != end ;
++iter )
{
- const UniformPropertyMapping* map = (*iter);
+ const UniformPropertyMapping& map = (*iter);
localMap.PushBack( map );
}
}
if( mRegenerateUniformMap == REGENERATE_UNIFORM_MAP)
{
CollectedUniformMap& localMap = mCollectedUniformMap[ updateBufferIndex ];
- localMap.Resize(0);
+ localMap.Clear();
const UniformMap& rendererUniformMap = PropertyOwner::GetUniformMap();
+
+ auto size = rendererUniformMap.Count();
+
+ if(mShader)
+ {
+ size += mShader->GetUniformMap().Count();
+ }
+
+ localMap.Reserve(size);
+
AddMappings( localMap, rendererUniformMap );
if( mShader )