constexpr int32_t INVALID_INDEX = -1;
constexpr uint32_t MAXIMUM_SIZE_SHADOW_MAP = 2048;
-constexpr int32_t SCENE_ORDER_INDEX = 100;
+constexpr int32_t SCENE_ORDER_INDEX = 100;
constexpr int32_t SHADOW_ORDER_INDEX = 99;
static constexpr std::string_view SKYBOX_INTENSITY_STRING = "uIntensity";
mSkybox(),
mSkyboxOrientation(Quaternion()),
mSkyboxIntensity(1.0f),
+ mLightObservers(),
mShaderManager(new Scene3D::Loader::ShaderManager())
{
}
{
item->NotifyImageBasedLightTexture(mDiffuseTexture, mSpecularTexture, mIblScaleFactor, mSpecularMipmapLevels);
item->NotifyShadowMapTexture(mShadowTexture);
- mItems.push_back(item);
+ mLightObservers.PushBack(item);
}
}
{
if(item)
{
- for(uint32_t i = 0; i < mItems.size(); ++i)
+ auto iter = mLightObservers.Find(item);
+ if(iter != mLightObservers.End())
{
- if(mItems[i] == item)
- {
- mItems.erase(mItems.begin() + i);
- break;
- }
+ mLightObservers.Erase(iter);
}
}
}
void SceneView::SetImageBasedLightScaleFactor(float scaleFactor)
{
mIblScaleFactor = scaleFactor;
- for(auto&& item : mItems)
+ for(auto&& item : mLightObservers)
{
if(item)
{
mShadowLight.Reset();
mShadowTexture.Reset();
- for(auto&& item : mItems)
+ for(auto&& item : mLightObservers)
{
if(item)
{
break;
}
- if(mShadowMapRenderTask)
+ if(mSceneHolder && mShadowMapRenderTask)
{
- RenderTaskList taskList = Integration::SceneHolder::Get(Self()).GetRenderTaskList();
+ RenderTaskList taskList = mSceneHolder.GetRenderTaskList();
taskList.RemoveTask(mShadowMapRenderTask);
mShadowMapRenderTask.Reset();
}
return mCropToMask;
}
+Dali::RenderTask SceneView::GetRenderTask()
+{
+ return mRenderTask;
+}
+
void SceneView::SetProperty(BaseObject* object, Property::Index index, const Property::Value& value)
{
Scene3D::SceneView sceneView = Scene3D::SceneView::DownCast(Dali::BaseHandle(object));
if(mSceneHolder)
{
RenderTaskList taskList = mSceneHolder.GetRenderTaskList();
- mRenderTask = taskList.CreateTask();
+ mRenderTask = taskList.CreateTask();
mRenderTask.SetSourceActor(mRootLayer);
mRenderTask.SetExclusive(true);
mRenderTask.SetInputEnabled(true);
void SceneView::OnSceneDisconnection()
{
- mItems.clear();
+ mLightObservers.Clear();
Window window = mWindow.GetHandle();
if(window)
void SceneView::NotifyImageBasedLightTextureChange()
{
- for(auto&& item : mItems)
+ for(auto&& item : mLightObservers)
{
if(item)
{
void SceneView::UpdateShadowMapBuffer(uint32_t shadowMapSize)
{
- if(!mShadowLight)
+ if(!mShadowLight || !mSceneHolder)
{
return;
}
if(!mShadowMapRenderTask)
{
- RenderTaskList taskList = Integration::SceneHolder::Get(Self()).GetRenderTaskList();
+ RenderTaskList taskList = mSceneHolder.GetRenderTaskList();
mShadowMapRenderTask = taskList.CreateTask();
mShadowMapRenderTask.SetSourceActor(mRootLayer);
mShadowMapRenderTask.SetExclusive(true);
DevelFrameBuffer::AttachDepthTexture(mShadowFrameBuffer, mShadowTexture);
mShadowMapRenderTask.SetFrameBuffer(mShadowFrameBuffer);
- for(auto&& item : mItems)
+ for(auto&& item : mLightObservers)
{
if(item)
{