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.
19 #include <dali/devel-api/rendering/material.h> // Dali::Material
22 #include <dali/internal/event/rendering/material-impl.h> // Dali::Internal::Material
23 #include <dali/internal/event/rendering/sampler-impl.h> // Dali::Internal::Sampler
24 #include <dali/internal/event/rendering/shader-impl.h> // Dali::Internal::Shader
29 Material Material::New( Shader shader )
31 Internal::MaterialPtr material = Internal::Material::New();
32 material->SetShader( GetImplementation(shader) );
34 return Material( material.Get() );
45 Material::Material( const Material& handle )
50 Material Material::DownCast( BaseHandle handle )
52 return Material( dynamic_cast<Dali::Internal::Material*>(handle.GetObjectPtr()));
55 Material& Material::operator=( const Material& handle )
57 BaseHandle::operator=( handle );
61 void Material::SetShader( Shader& shader )
63 DALI_ASSERT_ALWAYS( shader && "Shader handle is uninitialized" );
64 GetImplementation(*this).SetShader( GetImplementation( shader ) );
67 Shader Material::GetShader() const
69 Internal::Shader* shaderPtr( GetImplementation(*this).GetShader() );
70 return Dali::Shader( shaderPtr );
73 int Material::AddTexture( Image image, const std::string& uniformName, Sampler sampler)
78 Internal::ImagePtr imagePtr(&GetImplementation( image ));
79 Internal::SamplerPtr samplerPtr(0);
82 samplerPtr = &GetImplementation( sampler );
85 index = GetImplementation(*this).AddTexture( imagePtr, uniformName, samplerPtr );
89 DALI_LOG_ERROR("Error adding invalid texture %s to material", uniformName.c_str() );
94 void Material::RemoveTexture( size_t index )
96 GetImplementation(*this).RemoveTexture( index );
99 void Material::SetTextureImage( size_t index, Image image )
103 Internal::Image* imagePtr(0);
104 imagePtr = &GetImplementation( image );
105 GetImplementation(*this).SetTextureImage( index, imagePtr );
109 void Material::SetTextureSampler( size_t index, Sampler sampler )
111 Internal::Sampler* samplerPtr(0);
114 samplerPtr = &GetImplementation( sampler );
117 GetImplementation(*this).SetTextureSampler( index, samplerPtr );
120 Sampler Material::GetTextureSampler( size_t index ) const
122 Internal::Sampler* samplerPtr( GetImplementation(*this).GetTextureSampler( index ) );
123 return Dali::Sampler( samplerPtr );
126 void Material::SetTextureUniformName( size_t index, const std::string& uniformName )
128 GetImplementation(*this).SetTextureUniformName( index, uniformName );
131 int Material::GetTextureIndex( const std::string& uniformName ) const
133 return GetImplementation(*this).GetTextureIndex( uniformName );
136 Image Material::GetTexture( const std::string& uniformName ) const
138 Internal::Image* imagePtr( GetImplementation(*this).GetTexture( uniformName ) );
139 return Dali::Image( imagePtr );
142 Image Material::GetTexture( size_t index ) const
144 Internal::Image* imagePtr( GetImplementation(*this).GetTexture( index ) );
145 return Dali::Image( imagePtr );
148 std::size_t Material::GetNumberOfTextures() const
150 return GetImplementation(*this).GetNumberOfTextures();
154 Material::Material( Internal::Material* pointer )