X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=dali%2Finternal%2Fupdate%2Frendering%2Fscene-graph-renderer.cpp;h=9e982a812de5d9272df815f08dd7a9091e296741;hb=9d8818db1ee5ad9497cb7698be2a4752f6ecf50e;hp=dd765b836fba0e4cb1030d72ae647e19520f5343;hpb=54b75aaa551d5b39fe4a361516737def605cd2d0;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 dd765b8..9e982a8 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) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -115,7 +116,8 @@ enum Flags RESEND_STENCIL_OPERATION_ON_Z_PASS = 1 << 17, RESEND_WRITE_TO_COLOR_BUFFER = 1 << 18, RESEND_SHADER = 1 << 19, - RESEND_DRAW_COMMANDS = 1 << 20 + RESEND_DRAW_COMMANDS = 1 << 20, + RESEND_SET_RENDER_CALLBACK = 1 << 21 }; } // Anonymous namespace @@ -131,7 +133,6 @@ Renderer::Renderer() mTextureSet(nullptr), mGeometry(nullptr), mShader(nullptr), - mRenderDataProvider(nullptr), mBlendColor(nullptr), mStencilParameters(RenderMode::AUTO, StencilFunction::ALWAYS, 0xFF, 0x00, 0xFF, StencilOperation::KEEP, StencilOperation::KEEP, StencilOperation::KEEP), mIndexedDrawFirstElement(0u), @@ -160,7 +161,6 @@ Renderer::~Renderer() { if(mTextureSet) { - mTextureSet->RemoveObserver(this); mTextureSet = nullptr; } if(mShader) @@ -368,6 +368,13 @@ bool Renderer::PrepareRender(BufferIndex updateBufferIndex) new(slot) DerivedType(mRenderer, &Render::Renderer::SetShaderChanged, true); } + if(mResendFlag & RESEND_SET_RENDER_CALLBACK) + { + using DerivedType = MessageValue1; + uint32_t* slot = mSceneController->GetRenderQueue().ReserveMessageSlot(updateBufferIndex, sizeof(DerivedType)); + new(slot) DerivedType(mRenderer, &Render::Renderer::SetRenderCallback, mRenderCallback); + } + mResendFlag = 0; } @@ -378,16 +385,18 @@ void Renderer::SetTextures(TextureSet* textureSet) { DALI_ASSERT_DEBUG(textureSet != NULL && "Texture set pointer is NULL"); - if(mTextureSet) - { - mTextureSet->RemoveObserver(this); - } - - mTextureSet = textureSet; - mTextureSet->AddObserver(this); + mTextureSet = textureSet; mRegenerateUniformMap = REGENERATE_UNIFORM_MAP; +} - UpdateTextureSet(); +const Vector* Renderer::GetTextures() const +{ + return mTextureSet ? &(mTextureSet->GetTextures()) : nullptr; +} + +const Vector* Renderer::GetSamplers() const +{ + return mTextureSet ? &(mTextureSet->GetSamplers()) : nullptr; } void Renderer::SetShader(Shader* shader) @@ -403,11 +412,6 @@ void Renderer::SetShader(Shader* shader) mShader->AddConnectionObserver(*this); mRegenerateUniformMap = REGENERATE_UNIFORM_MAP; mResendFlag |= RESEND_GEOMETRY | RESEND_SHADER; - - if(mRenderDataProvider) - { - mRenderDataProvider->mShader = mShader; - } } void Renderer::SetGeometry(Render::Geometry* geometry) @@ -605,6 +609,12 @@ void Renderer::SetStencilOperationOnZPass(StencilOperation::Type stencilOperatio mResendFlag |= RESEND_STENCIL_OPERATION_ON_Z_PASS; } +void Renderer::SetRenderCallback(RenderCallback* callback) +{ + mRenderCallback = callback; + mResendFlag |= RESEND_SET_RENDER_CALLBACK; +} + const Render::Renderer::StencilParameters& Renderer::GetStencilParameters() const { return mStencilParameters; @@ -636,10 +646,7 @@ void Renderer::ConnectToSceneGraph(SceneController& sceneController, BufferIndex mRegenerateUniformMap = REGENERATE_UNIFORM_MAP; mSceneController = &sceneController; - mRenderDataProvider = new RenderDataProvider(mOpacity); - mRenderDataProvider->mUniformMapDataProvider = this; - - mRenderer = Render::Renderer::New(mRenderDataProvider, mGeometry, mBlendBitmask, GetBlendColor(), static_cast(mFaceCullingMode), mPremultipledAlphaEnabled, mDepthWriteMode, mDepthTestMode, mDepthFunction, mStencilParameters); + mRenderer = Render::Renderer::New(this, mGeometry, mBlendBitmask, GetBlendColor(), static_cast(mFaceCullingMode), mPremultipledAlphaEnabled, mDepthWriteMode, mDepthTestMode, mDepthFunction, mStencilParameters); OwnerPointer transferOwnership(mRenderer); mSceneController->GetRenderMessageDispatcher().AddRenderer(transferOwnership); @@ -654,31 +661,7 @@ void Renderer::DisconnectFromSceneGraph(SceneController& sceneController, Buffer mSceneController->GetRenderMessageDispatcher().RemoveRenderer(*mRenderer); mRenderer = nullptr; } - mSceneController = nullptr; - mRenderDataProvider = nullptr; -} - -void Renderer::UpdateTextureSet() -{ - if(mRenderDataProvider) - { - if(mTextureSet) - { - uint32_t textureCount = mTextureSet->GetTextureCount(); - mRenderDataProvider->mTextures.resize(textureCount); - mRenderDataProvider->mSamplers.resize(textureCount); - for(uint32_t i = 0; i < textureCount; ++i) - { - mRenderDataProvider->mTextures[i] = mTextureSet->GetTexture(i); - mRenderDataProvider->mSamplers[i] = mTextureSet->GetTextureSampler(i); - } - } - else - { - mRenderDataProvider->mTextures.clear(); - mRenderDataProvider->mSamplers.clear(); - } - } + mSceneController = nullptr; } Render::Renderer& Renderer::GetRenderer() @@ -702,6 +685,11 @@ Renderer::OpacityType Renderer::GetOpacityType(BufferIndex updateBufferIndex, co switch(mBlendMode) { + case BlendMode::ON_WITHOUT_CULL: // If the renderer should always be use blending and never want to be transparent by alpha. + { + opacityType = Renderer::TRANSLUCENT; + break; + } case BlendMode::ON: // If the renderer should always be use blending { float alpha = node.GetWorldColor(updateBufferIndex).a * mOpacity[updateBufferIndex]; @@ -753,22 +741,6 @@ Renderer::OpacityType Renderer::GetOpacityType(BufferIndex updateBufferIndex, co return opacityType; } -void Renderer::TextureSetChanged() -{ - mRegenerateUniformMap = REGENERATE_UNIFORM_MAP; - - UpdateTextureSet(); -} - -void Renderer::TextureSetDeleted() -{ - mTextureSet = nullptr; - - mRegenerateUniformMap = REGENERATE_UNIFORM_MAP; - - UpdateTextureSet(); -} - void Renderer::ConnectionsChanged(PropertyOwner& object) { // One of our child objects has changed it's connections. Ensure the uniform