2 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include "scene-graph-material.h"
21 #include <dali/public-api/shader-effects/material.h>
22 #include <dali/internal/render/data-providers/sampler-data-provider.h>
23 #include <dali/internal/update/effects/scene-graph-sampler.h>
33 : mColor( Color::WHITE ),
34 mBlendColor( Color::WHITE ),
35 mFaceCullingMode(Dali::Material::NONE),
38 // Observe own property-owner's uniform map
39 AddUniformMapObserver( *this );
46 void Material::SetShader( const Shader* shader )
49 // Inform NewRenderer about this shader: (Will force a re-load of the
50 // shader from the data providers)
51 mConnectionObservers.ConnectionsChanged(*this);
54 Shader* Material::GetShader() const
56 // @todo - Fix this - move shader setup to the Renderer connect to stage...
57 return const_cast<Shader*>(mShader);
60 void Material::AddSampler( const Sampler* sampler )
62 const SamplerDataProvider* sdp = static_cast< const SamplerDataProvider*>( sampler );
63 mSamplers.PushBack( sdp );
65 Sampler* mutableSampler = const_cast<Sampler*>(sampler);
66 mutableSampler->AddConnectionObserver( *this );
67 mutableSampler->AddUniformMapObserver( *this );
69 mConnectionObservers.ConnectionsChanged(*this);
72 void Material::RemoveSampler( const Sampler* sampler )
74 const SamplerDataProvider* samplerDataProvider = sampler;
77 RenderDataProvider::Samplers::Iterator iter = mSamplers.Begin();
78 for( ; iter != mSamplers.End(); ++iter )
80 if( *iter == samplerDataProvider )
89 Sampler* mutableSampler = const_cast<Sampler*>(sampler);
90 mutableSampler->RemoveConnectionObserver( *this );
91 mutableSampler->RemoveUniformMapObserver( *this );
92 mSamplers.Erase(iter);
93 mConnectionObservers.ConnectionsChanged(*this);
97 DALI_ASSERT_DEBUG( 0 && "Sampler not found" );
101 const RenderDataProvider::Samplers& Material::GetSamplers() const
106 void Material::ConnectToSceneGraph( SceneController& sceneController, BufferIndex bufferIndex )
110 void Material::DisconnectFromSceneGraph( SceneController& sceneController, BufferIndex bufferIndex )
114 void Material::AddConnectionObserver( ConnectionObservers::Observer& observer )
116 mConnectionObservers.Add(observer);
119 void Material::RemoveConnectionObserver( ConnectionObservers::Observer& observer )
121 mConnectionObservers.Remove(observer);
124 void Material::UniformMappingsChanged( const UniformMap& mappings )
126 // Our uniform map, or that of one of the watched children has changed.
127 // Inform connected observers.
128 mConnectionObservers.ConnectedUniformMapChanged();
131 void Material::ConnectionsChanged( PropertyOwner& owner )
133 mConnectionObservers.ConnectionsChanged(*this);
136 void Material::ConnectedUniformMapChanged( )
138 mConnectionObservers.ConnectedUniformMapChanged();
141 void Material::ResetDefaultProperties( BufferIndex updateBufferIndex )
143 mColor.ResetToBaseValue( updateBufferIndex );
144 mBlendColor.ResetToBaseValue( updateBufferIndex );
145 mFaceCullingMode.CopyPrevious( updateBufferIndex );
148 } // namespace SceneGraph
149 } // namespace Internal