/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
// INTERNAL INCLUDES
#include <dali/public-api/object/type-registry.h>
-#include <dali/internal/event/common/object-impl-helper.h> // Dali::Internal::ObjectHelper
+#include <dali/internal/event/common/stage-impl.h>
#include <dali/internal/update/manager/update-manager.h>
#include <dali/internal/update/rendering/scene-graph-texture-set.h>
return textureSet;
}
-void TextureSet::SetImage( size_t index, ImagePtr image )
+void TextureSet::SetTexture( uint32_t index, TexturePtr texture )
{
- if( !mNewTextures.empty() )
+ uint32_t textureCount = static_cast<uint32_t>( mTextures.size() );
+ if( index >= textureCount )
{
- DALI_LOG_ERROR( "Error: Cannot mix images and textures in the same TextureSet\n");
- return;
- }
+ mTextures.resize(index + 1);
- size_t textureCount( mImages.size() );
- if( index < textureCount )
- {
- if( mImages[index] && mOnStage )
+ bool samplerExist = true;
+ if( mSamplers.size() < index + 1 )
{
- mImages[index]->Disconnect();
+ mSamplers.resize( index + 1 );
+ samplerExist = false;
}
- }
- else
- {
- mImages.resize(index + 1);
- mSamplers.resize(index + 1);
- for( size_t i(textureCount); i<=index; ++i )
- {
- mImages[i] = NULL;
- mSamplers[i] = NULL;
- }
- }
- mImages[index] = image;
-
- if( image )
- {
- if( mOnStage )
+ for( uint32_t i(textureCount); i<=index; ++i )
{
- image->Connect();
- }
- SceneGraph::SetImageMessage( mEventThreadServices, *mSceneObject, index, image->GetResourceId() );
- }
- else
- {
- SceneGraph::SetImageMessage( mEventThreadServices, *mSceneObject, index, Integration::InvalidResourceId );
- }
-}
-
-void TextureSet::SetTexture( size_t index, NewTexturePtr texture )
-{
- if( !mImages.empty() )
- {
- DALI_LOG_ERROR( "Error: Cannot mix images and textures in the same texture set\n");
- return;
- }
+ mTextures[i] = NULL;
- size_t textureCount( mNewTextures.size() );
- if( index >= textureCount )
- {
- mNewTextures.resize(index + 1);
- mSamplers.resize(index + 1);
- for( size_t i(textureCount); i<=index; ++i )
- {
- mNewTextures[i] = NULL;
- mSamplers[i] = NULL;
+ if( !samplerExist )
+ {
+ mSamplers[i] = NULL;
+ }
}
}
- mNewTextures[index]= texture;
+ mTextures[index]= texture;
- Render::NewTexture* renderTexture(0);
+ Render::Texture* renderTexture(0);
if( texture )
{
renderTexture = texture->GetRenderObject();
SceneGraph::SetTextureMessage( mEventThreadServices, *mSceneObject, index, renderTexture );
}
-Image* TextureSet::GetImage( size_t index ) const
+Texture* TextureSet::GetTexture( uint32_t index ) const
{
- Image* result(0);
- if( index < mImages.size() )
+ Texture* result(0);
+ if( index < mTextures.size() )
{
- result = mImages[index].Get();
- }
- else
- {
- DALI_LOG_ERROR( "Error: Invalid index to TextureSet::GetImage\n");
- }
-
- return result;
-}
-
-NewTexture* TextureSet::GetTexture( size_t index ) const
-{
- NewTexture* result(0);
- if( index < mNewTextures.size() )
- {
- result = mNewTextures[index].Get();
+ result = mTextures[index].Get();
}
else
{
return result;
}
-void TextureSet::SetSampler( size_t index, SamplerPtr sampler )
+void TextureSet::SetSampler( uint32_t index, SamplerPtr sampler )
{
- size_t samplerCount( mSamplers.size() );
+ uint32_t samplerCount = static_cast<uint32_t>( mSamplers.size() );
if( samplerCount < index + 1 )
{
mSamplers.resize( index + 1 );
- mNewTextures.resize( index + 1 );
- mImages.resize( index + 1 );
- for( size_t i(samplerCount); i<=index; ++i )
+ for( uint32_t i = samplerCount; i<=index; ++i )
{
- mImages[i] = NULL;
mSamplers[i] = NULL;
- mNewTextures[i] = NULL;
}
}
SceneGraph::SetSamplerMessage( mEventThreadServices, *mSceneObject, index, renderSampler );
}
-Sampler* TextureSet::GetSampler( size_t index ) const
+Sampler* TextureSet::GetSampler( uint32_t index ) const
{
Sampler* result(0);
if( index < mSamplers.size() )
return result;
}
-size_t TextureSet::GetTextureCount() const
+uint32_t TextureSet::GetTextureCount() const
{
- return mSamplers.size();
+ return static_cast<uint32_t>( mTextures.size() );
}
const SceneGraph::TextureSet* TextureSet::GetTextureSetSceneObject() const
return mSceneObject;
}
-bool TextureSet::OnStage() const
-{
- return mOnStage;
-}
-
-void TextureSet::Connect()
-{
- mOnStage = true;
-
- for( size_t i(0); i<mImages.size(); ++i )
- {
- if( mImages[i] )
- {
- mImages[i]->Connect();
- SceneGraph::SetImageMessage( mEventThreadServices, *mSceneObject, i, mImages[i]->GetResourceId() );
- }
- else
- {
- SceneGraph::SetImageMessage( mEventThreadServices, *mSceneObject, i, Integration::InvalidResourceId );
- }
- }
-}
-
-void TextureSet::Disconnect()
-{
- for( size_t i(0); i<mImages.size(); ++i )
- {
- if( mImages[i] )
- {
- mImages[i]->Disconnect();
- }
- }
-
- mOnStage = false;
-}
-
TextureSet::TextureSet()
:mEventThreadServices( *Stage::GetCurrent() ),
- mSceneObject( NULL ),
- mOnStage( false )
+ mSceneObject( NULL )
{
}
SceneGraph::UpdateManager& updateManager = mEventThreadServices.GetUpdateManager();
mSceneObject = SceneGraph::TextureSet::New();
- AddTextureSetMessage( updateManager, *mSceneObject );
+ OwnerPointer< SceneGraph::TextureSet > transferOwnership( mSceneObject );
+ AddTextureSetMessage( updateManager, transferOwnership );
}
TextureSet::~TextureSet()