X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Frendering%2Fscene-graph-renderer.cpp;h=f2ecb414a75b6de66a817d2a57680cd9d48fe4d4;hb=1c3a73918ec7054bac9caa5bdf3eebcecc54fd7a;hp=fcea2ef89ef6cdad6a9c738e8514a97b1d408d4c;hpb=4ddf05092ceb348716c080afcab90b093ced9e73;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/rendering/scene-graph-renderer.cpp b/dali/internal/update/rendering/scene-graph-renderer.cpp index fcea2ef..f2ecb41 100644 --- a/dali/internal/update/rendering/scene-graph-renderer.cpp +++ b/dali/internal/update/rendering/scene-graph-renderer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 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. @@ -108,7 +108,6 @@ enum Flags RESEND_STENCIL_OPERATION_ON_Z_FAIL = 1 << 17, RESEND_STENCIL_OPERATION_ON_Z_PASS = 1 << 18, RESEND_WRITE_TO_COLOR_BUFFER = 1 << 19, - RESEND_BATCHING_MODE = 1 << 20, }; } // Anonymous namespace @@ -143,10 +142,7 @@ Renderer::Renderer() mBlendMode( BlendMode::AUTO ), mDepthWriteMode( DepthWriteMode::AUTO ), mDepthTestMode( DepthTestMode::AUTO ), - mResourcesReady( false ), - mFinishedResourceAcquisition( false ), mPremultipledAlphaEnabled( false ), - mBatchingEnabled( false ), mDepthIndex( 0 ) { mUniformMapChanged[0] = false; @@ -178,21 +174,12 @@ void Renderer::operator delete( void* ptr ) void Renderer::PrepareRender( BufferIndex updateBufferIndex ) { - mResourcesReady = false; - mFinishedResourceAcquisition = false; - - // Can only be considered ready when all the scene graph objects are connected to the renderer - if( mGeometry && mShader ) + if( mRegenerateUniformMap == UNIFORM_MAP_READY ) { - mResourcesReady = true; - mFinishedResourceAcquisition = true; + mUniformMapChanged[updateBufferIndex] = false; } - - if( mRegenerateUniformMap > UNIFORM_MAP_READY ) + else { - DALI_ASSERT_DEBUG( mGeometry != NULL && "No geometry available in PrepareRender()" ); - DALI_ASSERT_DEBUG( mShader != NULL && "No shader available in PrepareRender()" ); - if( mRegenerateUniformMap == REGENERATE_UNIFORM_MAP) { CollectedUniformMap& localMap = mCollectedUniformMap[ updateBufferIndex ]; @@ -229,7 +216,7 @@ void Renderer::PrepareRender( BufferIndex updateBufferIndex ) { if( mResendFlag & RESEND_DATA_PROVIDER ) { - RenderDataProvider* dataProvider = NewRenderDataProvider(); + OwnerPointer dataProvider = NewRenderDataProvider(); typedef MessageValue1< Render::Renderer, OwnerPointer > DerivedType; unsigned int* slot = mSceneController->GetRenderQueue().ReserveMessageSlot( updateBufferIndex, sizeof( DerivedType ) ); @@ -240,7 +227,6 @@ void Renderer::PrepareRender( BufferIndex updateBufferIndex ) { typedef MessageValue1< Render::Renderer, Render::Geometry* > DerivedType; unsigned int* slot = mSceneController->GetRenderQueue().ReserveMessageSlot( updateBufferIndex, sizeof( DerivedType ) ); - new (slot) DerivedType( mRenderer, &Render::Renderer::SetGeometry, mGeometry ); } @@ -260,9 +246,9 @@ void Renderer::PrepareRender( BufferIndex updateBufferIndex ) if( mResendFlag & RESEND_BLEND_COLOR ) { - typedef MessageValue1< Render::Renderer, const Vector4* > DerivedType; + typedef MessageValue1< Render::Renderer, Vector4 > DerivedType; unsigned int* slot = mSceneController->GetRenderQueue().ReserveMessageSlot( updateBufferIndex, sizeof( DerivedType ) ); - new (slot) DerivedType( mRenderer, &Render::Renderer::SetBlendColor, mBlendColor ); + new (slot) DerivedType( mRenderer, &Render::Renderer::SetBlendColor, GetBlendColor() ); } if( mResendFlag & RESEND_PREMULTIPLIED_ALPHA ) @@ -363,13 +349,6 @@ void Renderer::PrepareRender( BufferIndex updateBufferIndex ) new (slot) DerivedType( mRenderer, &Render::Renderer::SetStencilOperationOnZPass, mStencilParameters.stencilOperationOnZPass ); } - if( mResendFlag & RESEND_BATCHING_MODE ) - { - typedef MessageValue1< Render::Renderer, bool > DerivedType; - unsigned int* slot = mSceneController->GetRenderQueue().ReserveMessageSlot( updateBufferIndex, sizeof( DerivedType ) ); - new (slot) DerivedType( mRenderer, &Render::Renderer::SetBatchingEnabled, mBatchingEnabled ); - } - mResendFlag = 0; } } @@ -442,13 +421,20 @@ void Renderer::SetBlendingOptions( unsigned int options ) void Renderer::SetBlendColor( const Vector4& blendColor ) { - if( !mBlendColor ) + if( blendColor == Color::TRANSPARENT ) { - mBlendColor = new Vector4( blendColor ); + mBlendColor = NULL; } else { - *mBlendColor = blendColor; + if( !mBlendColor ) + { + mBlendColor = new Vector4( blendColor ); + } + else + { + *mBlendColor = blendColor; + } } mResendFlag |= RESEND_BLEND_COLOR; @@ -538,12 +524,6 @@ void Renderer::SetStencilOperationOnZPass( StencilOperation::Type stencilOperati mResendFlag |= RESEND_STENCIL_OPERATION_ON_Z_PASS; } -void Renderer::SetBatchingEnabled( bool batchingEnabled ) -{ - mBatchingEnabled = batchingEnabled; - mResendFlag |= RESEND_BATCHING_MODE; -} - //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 ) { @@ -551,10 +531,11 @@ void Renderer::ConnectToSceneGraph( SceneController& sceneController, BufferInde mSceneController = &sceneController; RenderDataProvider* dataProvider = NewRenderDataProvider(); - mRenderer = Render::Renderer::New( dataProvider, mGeometry, mBlendBitmask, mBlendColor, static_cast< FaceCullingMode::Type >( mFaceCullingMode ), + mRenderer = Render::Renderer::New( dataProvider, mGeometry, mBlendBitmask, GetBlendColor(), static_cast< FaceCullingMode::Type >( mFaceCullingMode ), mPremultipledAlphaEnabled, mDepthWriteMode, mDepthTestMode, mDepthFunction, mStencilParameters ); - mSceneController->GetRenderMessageDispatcher().AddRenderer( *mRenderer ); + OwnerPointer< Render::Renderer > transferOwnership( mRenderer ); + mSceneController->GetRenderMessageDispatcher().AddRenderer( transferOwnership ); } //Called just before destroying the scene-graph renderer ( when the "event-thread renderer" is no longer referenced ) @@ -578,12 +559,12 @@ RenderDataProvider* Renderer::NewRenderDataProvider() if( mTextureSet ) { - size_t textureCount = mTextureSet->GetNewTextureCount(); - dataProvider->mNewTextures.resize( textureCount ); + size_t textureCount = mTextureSet->GetTextureCount(); + dataProvider->mTextures.resize( textureCount ); dataProvider->mSamplers.resize( textureCount ); for( unsigned int i(0); imNewTextures[i] = mTextureSet->GetNewTexture(i); + dataProvider->mTextures[i] = mTextureSet->GetTexture(i); dataProvider->mSamplers[i] = mTextureSet->GetTextureSampler(i); } } @@ -591,6 +572,15 @@ RenderDataProvider* Renderer::NewRenderDataProvider() return dataProvider; } +const Vector4& Renderer::GetBlendColor() const +{ + if( mBlendColor ) + { + return *mBlendColor; + } + return Color::TRANSPARENT; +} + Render::Renderer& Renderer::GetRenderer() { return *mRenderer; @@ -601,12 +591,6 @@ const CollectedUniformMap& Renderer::GetUniformMap( BufferIndex bufferIndex ) co return mCollectedUniformMap[bufferIndex]; } -void Renderer::GetReadyAndComplete( bool& ready, bool& complete ) const -{ - ready = mResourcesReady; - complete = mFinishedResourceAcquisition; -} - Renderer::Opacity Renderer::GetOpacity( BufferIndex updateBufferIndex, const Node& node ) const { Renderer::Opacity opacity = Renderer::OPAQUE; @@ -655,6 +639,12 @@ void Renderer::TextureSetChanged() mResendFlag |= RESEND_DATA_PROVIDER; } +void Renderer::TextureSetDeleted() +{ + mTextureSet = NULL; + + mResendFlag |= RESEND_DATA_PROVIDER; +} void Renderer::ConnectionsChanged( PropertyOwner& object ) { // One of our child objects has changed it's connections. Ensure the uniform @@ -678,11 +668,7 @@ void Renderer::UniformMappingsChanged( const UniformMap& mappings ) void Renderer::ObservedObjectDestroyed(PropertyOwner& owner) { - if( reinterpret_cast(mTextureSet) == &owner ) - { - mTextureSet = NULL; - } - else if( reinterpret_cast(mShader) == &owner ) + if( reinterpret_cast(mShader) == &owner ) { mShader = NULL; }