1 #ifndef DALI_INTERNAL_SCENE_GRAPH_UNIFORM_MAP_H
2 #define DALI_INTERNAL_SCENE_GRAPH_UNIFORM_MAP_H
5 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
20 #include <dali/devel-api/common/hash.h>
21 #include <dali/internal/common/owner-container.h>
29 class PropertyInputImpl;
35 * The uniform map is used to map a uniform name to a property value.
37 class UniformPropertyMapping
40 typedef unsigned long Hash;
45 UniformPropertyMapping( const std::string& theUniformName, const PropertyInputImpl* thePropertyPtr )
46 : propertyPtr( thePropertyPtr ),
47 uniformName( theUniformName ),
48 uniformNameHash( Dali::CalculateHash( theUniformName ) )
52 UniformPropertyMapping()
53 : propertyPtr( NULL ),
60 const PropertyInputImpl* propertyPtr;
61 std::string uniformName;
66 * The UniformMap class is used to map uniform names to property values. It is available
67 * in all of the classes responsible for rendering:
68 * Actor, Renderer, Geometry, PropertyBuffer, Material, Sampler, Shader.
70 * It can be observed for changes to the mapping table.
78 virtual void UniformMappingsChanged(const UniformMap& mappings) = 0;
92 * Add an observer that watches for changes in the mappings
94 void AddObserver( Observer& observer );
99 void RemoveObserver( Observer& observer );
102 * Add a map to the mappings table.
104 void Add( UniformPropertyMapping* map );
107 * Remove a map from the mappings table
109 void Remove( const std::string& uniformName );
112 * Find a property given the uniform name.
113 * @return The address of the property if it's in the map, or NULL otherwise.
115 const PropertyInputImpl* Find( const std::string& uniformName );
118 * Get the count of uniforms in the map
119 * @return The number of uniform mappings
121 unsigned int Count() const;
124 * @pre index must be in the range 0 :: Count()-1
125 * @param[in] index The index of the element to fetch
126 * @return reference to the element in the map
128 const UniformPropertyMapping& operator[]( unsigned int index ) const;
132 * Helper to call the observers when the mappings have changed
134 void MappingChanged();
137 typedef OwnerContainer< UniformPropertyMapping* > UniformMapContainer;
138 typedef UniformMapContainer::Iterator UniformMapIter;
139 typedef Dali::Vector< Observer* > Observers;
140 typedef Observers::Iterator ObserversIter;
142 UniformMapContainer mUniformMaps; // Owner container of uniform maps
144 Observers mObservers;
148 } // namespace SceneGraph
149 } // namespace Internal
152 #endif // DALI_INTERNAL_SCENE_GRAPH_UNIFORM_MAP_H