952ae2ada5851d5861c2456454c8a9c3dd52f079
[platform/core/uifw/dali-core.git] / dali / internal / update / effects / scene-graph-material.cpp
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 // CLASS HEADER
18 #include "scene-graph-material.h"
19
20 // INTERNAL HEADERS
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>
24
25 namespace Dali
26 {
27 namespace Internal
28 {
29 namespace SceneGraph
30 {
31
32 Material::Material()
33 : mColor( Color::WHITE ),
34   mBlendColor( Color::WHITE ),
35   mFaceCullingMode(Dali::Material::NONE),
36   mShader(NULL)
37 {
38   // Observe own property-owner's uniform map
39   AddUniformMapObserver( *this );
40 }
41
42 Material::~Material()
43 {
44 }
45
46 void Material::SetShader( const Shader* shader )
47 {
48   mShader = shader;
49   // @todo inform NewRenderer about this shader
50   mConnectionObservers.ConnectionsChanged(*this);
51 }
52
53 Shader* Material::GetShader() const
54 {
55   // @todo - Fix this - move shader setup to the Renderer connect to stage...
56   return const_cast<Shader*>(mShader);
57 }
58
59 void Material::AddSampler( const Sampler* sampler )
60 {
61   const SamplerDataProvider* sdp = static_cast< const SamplerDataProvider*>( sampler );
62   mSamplers.PushBack( sdp );
63
64   mConnectionObservers.ConnectionsChanged(*this);
65 }
66
67 void Material::RemoveSampler( const Sampler* sampler )
68 {
69   const SamplerDataProvider* samplerDataProvider = sampler;
70   bool found = false;
71
72   RenderDataProvider::Samplers::Iterator iter = mSamplers.Begin();
73   for( ; iter != mSamplers.End(); ++iter )
74   {
75     if( *iter == samplerDataProvider )
76     {
77       found = true;
78       break;
79     }
80   }
81
82   if( found )
83   {
84     mSamplers.Erase(iter);
85     mConnectionObservers.ConnectionsChanged(*this);
86   }
87   else
88   {
89     DALI_ASSERT_DEBUG( 0 && "Sampler not found" );
90   }
91 }
92
93 const RenderDataProvider::Samplers& Material::GetSamplers() const
94 {
95   return mSamplers;
96 }
97
98 void Material::ConnectToSceneGraph( SceneController& sceneController, BufferIndex bufferIndex )
99 {
100 }
101
102 void Material::DisconnectFromSceneGraph( SceneController& sceneController, BufferIndex bufferIndex )
103 {
104 }
105
106 void Material::AddConnectionObserver( ConnectionObservers::Observer& observer )
107 {
108   mConnectionObservers.Add(observer);
109 }
110
111 void Material::RemoveConnectionObserver( ConnectionObservers::Observer& observer )
112 {
113   mConnectionObservers.Remove(observer);
114 }
115
116 void Material::UniformMappingsChanged( const UniformMap& mappings )
117 {
118   // Our uniform map, or that of one of the watched children has changed.
119   // Inform connected observers.
120   mConnectionObservers.ConnectedUniformMapChanged();
121 }
122
123 void Material::ResetDefaultProperties( BufferIndex updateBufferIndex )
124 {
125   mColor.ResetToBaseValue( updateBufferIndex );
126   mBlendColor.ResetToBaseValue( updateBufferIndex );
127   mFaceCullingMode.CopyPrevious( updateBufferIndex );
128 }
129
130 } // namespace SceneGraph
131 } // namespace Internal
132 } // namespace Dali