mBlendMode( BlendMode::AUTO ),
mDepthWriteMode( DepthWriteMode::AUTO ),
mDepthTestMode( DepthTestMode::AUTO ),
+ mRenderingBehavior( DevelRenderer::Rendering::IF_REQUIRED ),
mPremultipledAlphaEnabled( false ),
+ mDirty( false ),
mOpacity( 1.0f ),
mDepthIndex( 0 )
{
void Renderer::PrepareRender( BufferIndex updateBufferIndex )
{
+ SetDirty( false );
if( mRegenerateUniformMap == UNIFORM_MAP_READY )
{
mUniformMapChanged[updateBufferIndex] = false;
}
else
{
+ mDirty = true;
if( mRegenerateUniformMap == REGENERATE_UNIFORM_MAP)
{
CollectedUniformMap& localMap = mCollectedUniformMap[ updateBufferIndex ];
if( mResendFlag != 0 )
{
+ mDirty = true;
if( mResendFlag & RESEND_GEOMETRY )
{
typedef MessageValue1< Render::Renderer, Render::Geometry* > DerivedType;
void Renderer::SetDepthIndex( int depthIndex )
{
mDepthIndex = depthIndex;
+ mDirty = true;
}
void Renderer::SetFaceCullingMode( FaceCullingMode::Type faceCullingMode )
void Renderer::SetBlendMode( BlendMode::Type blendingMode )
{
mBlendMode = blendingMode;
+ mDirty = true;
}
BlendMode::Type Renderer::GetBlendMode() const
void Renderer::BakeOpacity( BufferIndex updateBufferIndex, float opacity )
{
+ mDirty = true;
mOpacity.Bake( updateBufferIndex, opacity );
}
return mOpacity[updateBufferIndex];
}
+void Renderer::SetRenderingBehavior( DevelRenderer::Rendering::Type renderingBehavior )
+{
+ mRenderingBehavior = renderingBehavior;
+ mDirty = true;
+}
+
+DevelRenderer::Rendering::Type Renderer::GetRenderingBehavior() const
+{
+ return mRenderingBehavior;
+}
+
//Called when SceneGraph::Renderer is added to update manager ( that happens when an "event-thread renderer" is created )
void Renderer::ConnectToSceneGraph( SceneController& sceneController, BufferIndex bufferIndex )
{
mRenderer = Render::Renderer::New( mRenderDataProvider, mGeometry, mBlendBitmask, GetBlendColor(), static_cast< FaceCullingMode::Type >( mFaceCullingMode ),
mPremultipledAlphaEnabled, mDepthWriteMode, mDepthTestMode, mDepthFunction, mStencilParameters );
-
OwnerPointer< Render::Renderer > transferOwnership( mRenderer );
mSceneController->GetRenderMessageDispatcher().AddRenderer( transferOwnership );
}
mRenderDataProvider->mTextures.clear();
mRenderDataProvider->mSamplers.clear();
}
+ mDirty = true;
}
}
}
}
+void Renderer::SetDirty( bool value )
+{
+ mDirty = value;
+ if( mShader )
+ {
+ mShader->SetPropertyDirty( value );
+ }
+}
+
+bool Renderer::IsDirty() const
+{
+ bool ret = false;
+
+ if( !mDirty )
+ {
+ if( mShader )
+ {
+ ret = mShader->IsPropertyDirty();
+ }
+
+ // check native image
+ if( !ret && mTextureSet )
+ {
+ uint32_t textureCount = mTextureSet->GetTextureCount();
+
+ if(textureCount > 0)
+ {
+ Dali::Internal::Render::Texture* texture;
+ for( uint32_t i = 0; i<textureCount; ++i )
+ {
+ texture = const_cast<Dali::Internal::SceneGraph::TextureSet *>(mTextureSet)->GetTexture(i);
+ if( texture && texture->IsNativeImage() )
+ {
+ ret = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ return ret | mDirty;
+}
+
} // namespace SceneGraph
} // namespace Internal
} // namespace Dali