X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-scene3d%2Finternal%2Fcontrols%2Fscene-view%2Fscene-view-impl.cpp;h=f4d549823e21efb642883ba293c763590381e969;hb=6b3a4233336af0f8b1949246ddc45bc3f8219e4f;hp=1457e19f49d1efa2fe1dbed5516988a1c96ea720;hpb=df49f571f53f8d79b7f10fcbcf4c9ad194009249;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp b/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp index 1457e19..f4d5498 100644 --- a/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp +++ b/dali-scene3d/internal/controls/scene-view/scene-view-impl.cpp @@ -25,9 +25,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -60,9 +62,11 @@ DALI_TYPE_REGISTRATION_END() Property::Index RENDERING_BUFFER = Dali::Toolkit::Control::CONTROL_PROPERTY_END_INDEX + 1; constexpr int32_t DEFAULT_ORIENTATION = 0; +constexpr uint8_t DEFAULT_FRAME_BUFFER_MULTI_SAMPLING_LEVEL = 4u; + static constexpr std::string_view SKYBOX_INTENSITY_STRING = "uIntensity"; -Dali::Actor CreateSkybox(const std::string& skyboxUrl) +Dali::Actor CreateSkybox(const std::string& skyboxUrl, Scene3D::SceneView::SkyboxType skyboxType) { struct Vertex { @@ -118,7 +122,6 @@ Dali::Actor CreateSkybox(const std::string& skyboxUrl) {Vector3(-1.0f, -1.0f, 1.0f)}, {Vector3(1.0f, -1.0f, 1.0f)}}; - Dali::Shader shaderSkybox = Shader::New(SHADER_SKYBOX_SHADER_VERT.data(), SHADER_SKYBOX_SHADER_FRAG.data()); Dali::VertexBuffer vertexBuffer = Dali::VertexBuffer::New(Property::Map().Add("aPosition", Property::VECTOR3)); vertexBuffer.SetData(skyboxVertices, sizeof(skyboxVertices) / sizeof(Vertex)); @@ -126,11 +129,29 @@ Dali::Actor CreateSkybox(const std::string& skyboxUrl) skyboxGeometry.AddVertexBuffer(vertexBuffer); skyboxGeometry.SetType(Geometry::TRIANGLES); - Dali::Texture skyboxTexture = Dali::Scene3D::Loader::LoadCubeMap(skyboxUrl); + Dali::Texture skyboxTexture; + Dali::Shader shaderSkybox; + Dali::Renderer skyboxRenderer; + + if(skyboxType == Scene3D::SceneView::SkyboxType::CUBEMAP) + { + skyboxTexture = Dali::Scene3D::Loader::LoadCubeMap(skyboxUrl); + shaderSkybox = Shader::New(SHADER_SKYBOX_SHADER_VERT.data(), SHADER_SKYBOX_SHADER_FRAG.data()); + } + else // Scene3D::SceneView::SkyboxType::EQUIRECTANGULAR + { + // Load image from file + PixelData pixels = Dali::Toolkit::SyncImageLoader::Load(skyboxUrl); + + skyboxTexture = Texture::New(TextureType::TEXTURE_2D, pixels.GetPixelFormat(), pixels.GetWidth(), pixels.GetHeight()); + skyboxTexture.Upload(pixels, 0, 0, 0, 0, pixels.GetWidth(), pixels.GetHeight()); + shaderSkybox = Shader::New(SHADER_SKYBOX_SHADER_VERT.data(), SHADER_SKYBOX_EQUIRECTANGULAR_SHADER_FRAG.data()); + } + Dali::TextureSet skyboxTextures = TextureSet::New(); skyboxTextures.SetTexture(0, skyboxTexture); - Dali::Renderer skyboxRenderer = Renderer::New(skyboxGeometry, shaderSkybox); + skyboxRenderer = Renderer::New(skyboxGeometry, shaderSkybox); skyboxRenderer.SetTextures(skyboxTextures); skyboxRenderer.SetProperty(Renderer::Property::DEPTH_INDEX, 2.0f); // Enables the depth test. @@ -255,7 +276,7 @@ void SceneView::SelectCamera(const std::string& name) UpdateCamera(GetCamera(name)); } -void SceneView::RegisterSceneItem(Scene3D::Internal::ImageBasedLightObserver *item) +void SceneView::RegisterSceneItem(Scene3D::Internal::ImageBasedLightObserver* item) { if(item) { @@ -264,7 +285,7 @@ void SceneView::RegisterSceneItem(Scene3D::Internal::ImageBasedLightObserver *it } } -void SceneView::UnregisterSceneItem(Scene3D::Internal::ImageBasedLightObserver *item) +void SceneView::UnregisterSceneItem(Scene3D::Internal::ImageBasedLightObserver* item) { if(item) { @@ -335,7 +356,7 @@ bool SceneView::IsUsingFramebuffer() const return mUseFrameBuffer; } -void SceneView::SetSkybox(const std::string& skyboxUrl) +void SceneView::SetSkybox(const std::string& skyboxUrl, Scene3D::SceneView::SkyboxType skyboxType) { mSkyboxResourceReady = false; if(mSkybox) @@ -343,7 +364,7 @@ void SceneView::SetSkybox(const std::string& skyboxUrl) mSkybox.Unparent(); mSkybox.Reset(); } - mSkybox = CreateSkybox(skyboxUrl); + mSkybox = CreateSkybox(skyboxUrl, skyboxType); SetSkyboxIntensity(mSkyboxIntensity); SetSkyboxOrientation(mSkyboxOrientation); if(mRootLayer) @@ -430,7 +451,7 @@ void SceneView::OnSceneDisconnection() if(mRenderTask) { taskList.RemoveTask(mRenderTask); - mRenderTarget.Reset(); + mFrameBuffer.Reset(); } } mWindow.Reset(); @@ -538,10 +559,11 @@ void SceneView::UpdateRenderTask() mRenderTask.SetViewport(Dali::Viewport(Vector4::ZERO)); // create offscreen buffer of new size to render our child actors to - mTexture = Dali::Texture::New(TextureType::TEXTURE_2D, Pixel::RGBA8888, unsigned(size.width), unsigned(size.height)); - mRenderTarget = FrameBuffer::New(size.width, size.height, FrameBuffer::Attachment::DEPTH_STENCIL); - mRenderTarget.AttachColorTexture(mTexture); - Dali::Toolkit::ImageUrl imageUrl = Dali::Toolkit::Image::GenerateUrl(mRenderTarget, 0u); + mTexture = Dali::Texture::New(TextureType::TEXTURE_2D, Pixel::RGBA8888, unsigned(size.width), unsigned(size.height)); + mFrameBuffer = FrameBuffer::New(size.width, size.height, FrameBuffer::Attachment::DEPTH_STENCIL); + mFrameBuffer.AttachColorTexture(mTexture); + DevelFrameBuffer::SetMultiSamplingLevel(mFrameBuffer, DEFAULT_FRAME_BUFFER_MULTI_SAMPLING_LEVEL); + Dali::Toolkit::ImageUrl imageUrl = Dali::Toolkit::Image::GenerateUrl(mFrameBuffer, 0u); Property::Map imagePropertyMap; imagePropertyMap.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE); @@ -552,7 +574,7 @@ void SceneView::UpdateRenderTask() Toolkit::DevelControl::RegisterVisual(*this, RENDERING_BUFFER, mVisual); - mRenderTask.SetFrameBuffer(mRenderTarget); + mRenderTask.SetFrameBuffer(mFrameBuffer); mRenderTask.SetClearEnabled(true); mRenderTask.SetClearColor(Color::TRANSPARENT); } @@ -569,7 +591,7 @@ void SceneView::UpdateRenderTask() Toolkit::DevelControl::UnregisterVisual(*this, RENDERING_BUFFER); mVisual.Reset(); - mRenderTarget.Reset(); + mFrameBuffer.Reset(); mTexture.Reset(); } }