Front buffer rendering is used to improve latency or real-time interactivity.
Change-Id: I53d300db7bb589042b0137854f424696d127cd8a
return GetImplementation(window).GetFullScreen();
}
+void SetFrontBufferRendering(Window window, bool enable)
+{
+ GetImplementation(window).SetFrontBufferRendering(enable);
+}
+
+bool GetFrontBufferRendering(Window window)
+{
+ return GetImplementation(window).GetFrontBufferRendering();
+}
+
InterceptKeyEventSignalType& InterceptKeyEventSignal(Window window)
{
return GetImplementation(window).InterceptKeyEventSignal();
DALI_ADAPTOR_API bool GetFullScreen(Window window);
/**
+ * @brief Enables or disables front buffer rendering.
+ *
+ * @param[in] window The window instance.
+ * @param[in] enable true to enable front buffer rendering, false to disable.
+ */
+DALI_ADAPTOR_API void SetFrontBufferRendering(Window window, bool enable);
+
+/**
+ * @brief Gets whether front buffer rendering is enabled.
+ *
+ * @param[in] window The window instance.
+ * @return Whether front buffer rendering has been enabled or not.
+ */
+DALI_ADAPTOR_API bool GetFrontBufferRendering(Window window);
+
+/**
* @brief The user would connect to this signal to intercept a KeyEvent at window.
*
* Intercepts KeyEvents in the window before dispatching KeyEvents to the control.
mMainWindow(),
mMainWindowMode(windowData.GetTransparency() ? WINDOW_MODE::TRANSPARENT : WINDOW_MODE::OPAQUE),
mMainWindowName(),
+ mIsMainWindowFrontBufferRendering(windowData.GetFrontBufferRendering()),
mStylesheet(stylesheet),
mWindowPositionSize(windowData.GetPositionSize()),
mLaunchpadState(Launchpad::NONE),
mWindowPositionSize = positionSize;
}
+void Application::StoreFrontBufferRendering(bool enable)
+{
+ mIsMainWindowFrontBufferRendering = enable;
+}
+
void Application::ChangePreInitializedWindowInfo()
{
// Set window name
mWindowPositionSize.height = screenHeight;
mMainWindow.SetSize(Dali::Window::WindowSize(mWindowPositionSize.width, mWindowPositionSize.height));
}
+
+ // Set front buffer rendering
+ Dali::DevelWindow::SetFrontBufferRendering(mMainWindow, mIsMainWindowFrontBufferRendering);
}
void Application::CreateWindow()
WindowData windowData;
windowData.SetTransparency(mMainWindowMode);
windowData.SetWindowType(mDefaultWindowType);
+ windowData.SetFrontBufferRendering(mIsMainWindowFrontBufferRendering);
DALI_LOG_RELEASE_INFO("Create Default Window");
}
else
{
- // The position, size and the window name of the pre-initialized application will be updated in ChangePreInitializedWindowInfo()
- // when the real application is launched.
+ // The position, size, window name, and frontbuffering of the pre-initialized application
+ // will be updated in ChangePreInitializedWindowInfo() when the real application is launched.
windowData.SetPositionSize(mWindowPositionSize);
window = Internal::Adaptor::Window::New("", "", windowData);
}
void StoreWindowPositionSize(PositionSize positionSize);
/**
+ * Stores the front buffer rendering status of the window.
+ */
+ void StoreFrontBufferRendering(bool enable);
+
+ /**
* @copydoc Dali::DevelApplication::GetRenderThreadId()
*/
int32_t GetRenderThreadId() const;
// The Main Window is that window created by the Application during initial startup
// (previously this was the only window)
- Dali::Window mMainWindow; ///< Main Window instance
- Dali::Application::WINDOW_MODE mMainWindowMode; ///< Window mode of the main window
- std::string mMainWindowName; ///< Name of the main window as obtained from environment options
+ Dali::Window mMainWindow; ///< Main Window instance
+ Dali::Application::WINDOW_MODE mMainWindowMode; ///< Window mode of the main window
+ std::string mMainWindowName; ///< Name of the main window as obtained from environment options
+ bool mIsMainWindowFrontBufferRendering; ///< Whether front buffer rendering of the main window is enabled
std::string mStylesheet;
PositionSize mWindowPositionSize;
return false;
}
+void WindowBaseAndroid::SetFrontBufferRendering(bool enable)
+{
+}
+
+bool WindowBaseAndroid::GetFrontBufferRendering()
+{
+ return false;
+}
+
+void WindowBaseAndroid::SetEglWindowFrontBufferMode(bool enable)
+{
+}
+
} // namespace Adaptor
} // namespace Internal
*/
bool GetFullScreen() override;
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetFrontBufferRendering()
+ */
+ void SetFrontBufferRendering(bool enable) override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::GetFrontBufferRendering()
+ */
+ bool GetFrontBufferRendering() override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetEglWindowFrontBufferMode()
+ */
+ void SetEglWindowFrontBufferMode(bool enable) override;
+
private:
/**
* Second stage initialization
*/
virtual bool GetFullScreen() = 0;
+ /**
+ * @brief Enables or disables front buffer rendering.
+ * @param[in] enable true to enable front buffer rendering, false to disable.
+ */
+ virtual void SetFrontBufferRendering(bool enable) = 0;
+
+ /**
+ * @brief Enables or disables front buffer rendering.
+ * @return Returns whether front buffer rendering has been enabled or not.
+ */
+ virtual bool GetFrontBufferRendering() = 0;
+
+ /**
+ * @brief Sets front buffer rendering to the egl window.
+ * @param[in] enable True to enable front buffer rendering mode, False to otherwise.
+ */
+ virtual void SetEglWindowFrontBufferMode(bool enable) = 0;
+
// Signals
/**
return mWindowBase->GetFullScreen();
}
+void Window::SetFrontBufferRendering(bool enable)
+{
+ mWindowBase->SetFrontBufferRendering(enable);
+ mWindowSurface->SetFrontBufferRendering(enable);
+}
+
+bool Window::GetFrontBufferRendering()
+{
+ return mWindowBase->GetFrontBufferRendering();
+}
+
} // namespace Adaptor
} // namespace Internal
*/
bool GetFullScreen();
+ /**
+ * @copydoc Dali::DevelWindow::SetFrontBufferRendering()
+ */
+ void SetFrontBufferRendering(bool enable);
+
+ /**
+ * @copydoc Dali::DevelWindow::GetFrontBufferRendering()
+ */
+ bool GetFrontBufferRendering();
+
private:
/**
* @brief Enumeration for orietation mode.
mOwnSurface(false),
mIsImeWindowSurface(false),
mNeedWindowRotationAcknowledgement(false),
- mIsWindowOrientationChanging(false)
+ mIsWindowOrientationChanging(false),
+ mIsFrontBufferRendering(false),
+ mIsFrontBufferRenderingChanged(false)
{
DALI_LOG_INFO(gWindowRenderSurfaceLogFilter, Debug::Verbose, "Creating Window\n");
Initialize(surface);
SetFullSwapNextFrame();
}
+ // When mIsFrontBufferRendering is not equal to mWindowBase's
+ if(mIsFrontBufferRenderingChanged)
+ {
+ mIsFrontBufferRenderingChanged = false;
+ mWindowBase->SetEglWindowFrontBufferMode(mIsFrontBufferRendering);
+ SetFullSwapNextFrame();
+ }
+
SetBufferDamagedRects(damagedRects, clippingRect);
if(scene)
}
}
+void WindowRenderSurface::SetFrontBufferRendering(bool enable)
+{
+ if(mIsFrontBufferRendering != enable)
+ {
+ mIsFrontBufferRendering = enable;
+ mIsFrontBufferRenderingChanged = !mIsFrontBufferRenderingChanged;
+ }
+}
+
} // namespace Adaptor
} // namespace Internal
*/
RotationFinishedSignalType& RotationFinishedSignal();
+ /**
+ * @brief Sets front buffer rendering flag
+ *
+ * @param[in] enable The flag for front buffer rendering
+ */
+ void SetFrontBufferRendering(bool enable);
+
public: // from Dali::RenderSurfaceInterface
/**
* @copydoc Dali::RenderSurfaceInterface::GetPositionSize()
bool mIsImeWindowSurface;
bool mNeedWindowRotationAcknowledgement;
bool mIsWindowOrientationChanging;
+ bool mIsFrontBufferRendering;
+ bool mIsFrontBufferRenderingChanged;
}; // class WindowRenderSurface
*/
bool GetFullScreen() override;
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetFrontBufferRendering()
+ */
+ void SetFrontBufferRendering(bool enable) override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::GetFrontBufferRendering()
+ */
+ bool GetFrontBufferRendering() override;
+
+ /**
+ * @brief Sets front buffer rendering to the egl window.
+ * @param[in] enable True to enable front buffer rendering mode, False to otherwise.
+ */
+ void SetEglWindowFrontBufferMode(bool enable) override;
+
private:
// Undefined
WindowBaseCocoa(const WindowBaseCocoa&) = delete;
return false;
}
+void WindowBaseCocoa::SetFrontBufferRendering(bool enable)
+{
+}
+
+bool WindowBaseCocoa::GetFrontBufferRendering()
+{
+ return false;
+}
+
+void WindowBaseCocoa::SetEglWindowFrontBufferMode(bool enable)
+{
+}
+
} // namespace Dali::Internal::Adaptor
@implementation CocoaView
{
}
+void WindowBaseEcoreWl::SetFrontBufferRendering(bool enable)
+{
+}
+
+bool WindowBaseEcoreWl::GetFrontBufferRendering()
+{
+ return false;
+}
+
+void WindowBaseEcoreWl::SetEglWindowFrontBufferMode(bool enable)
+{
+}
+
} // namespace Adaptor
} // namespace Internal
*/
bool GetFullScreen() override;
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetFrontBufferRendering()
+ */
+ void SetFrontBufferRendering(bool enable) override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::GetFrontBufferRendering()
+ */
+ bool GetFrontBufferRendering() override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetEglWindowFrontBufferMode()
+ */
+ void SetEglWindowFrontBufferMode(bool enable) override;
+
private:
/**
* Second stage initialization
mVisible(true),
mOwnSurface(false),
mBrightnessChangeDone(true),
+ mIsFrontBufferRendering(false),
mIsIMEWindowInitialized(false)
{
Initialize(positionSize, surface, isTransparent);
return ecore_wl2_window_fullscreen_get(mEcoreWindow);
}
+void WindowBaseEcoreWl2::SetFrontBufferRendering(bool enable)
+{
+ mIsFrontBufferRendering = enable;
+}
+
+bool WindowBaseEcoreWl2::GetFrontBufferRendering()
+{
+ return mIsFrontBufferRendering;
+}
+
+void WindowBaseEcoreWl2::SetEglWindowFrontBufferMode(bool enable)
+{
+ wl_egl_window_tizen_set_frontbuffer_mode(mEglWindow, enable);
+}
+
} // namespace Adaptor
} // namespace Internal
*/
bool GetFullScreen() override;
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetFrontBufferRendering()
+ */
+ void SetFrontBufferRendering(bool enable) override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::GetFrontBufferRendering()
+ */
+ bool GetFrontBufferRendering() override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetEglWindowFrontBufferMode()
+ */
+ void SetEglWindowFrontBufferMode(bool enable) override;
+
private:
/**
* Second stage initialization
bool mVisible : 1;
bool mOwnSurface;
bool mBrightnessChangeDone;
+ bool mIsFrontBufferRendering;
bool mIsIMEWindowInitialized;
};
return false;
}
+void WindowBaseEcoreX::SetFrontBufferRendering(bool enable)
+{
+}
+
+bool WindowBaseEcoreX::GetFrontBufferRendering()
+{
+ return false;
+}
+
+void WindowBaseEcoreX::SetEglWindowFrontBufferMode(bool enable)
+{
+}
+
} // namespace Adaptor
} // namespace Internal
*/
bool GetFullScreen() override;
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetFrontBufferRendering()
+ */
+ void SetFrontBufferRendering(bool enable) override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::GetFrontBufferRendering()
+ */
+ bool GetFrontBufferRendering() override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetEglWindowFrontBufferMode()
+ */
+ void SetEglWindowFrontBufferMode(bool enable) override;
+
private:
/**
* Second stage initialization
return false;
}
+void WindowBaseWin::SetFrontBufferRendering(bool enable)
+{
+}
+
+bool WindowBaseWin::GetFrontBufferRendering()
+{
+ return false;
+}
+
+void WindowBaseWin::SetEglWindowFrontBufferMode(bool enable)
+{
+}
+
} // namespace Adaptor
} // namespace Internal
*/
bool GetFullScreen() override;
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetFrontBufferRendering()
+ */
+ void SetFrontBufferRendering(bool enable) override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::GetFrontBufferRendering()
+ */
+ bool GetFrontBufferRendering() override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetEglWindowFrontBufferMode()
+ */
+ void SetEglWindowFrontBufferMode(bool enable) override;
+
private:
/**
* Second stage initialization
return false;
}
+void WindowBaseX::SetFrontBufferRendering(bool enable)
+{
+}
+
+bool WindowBaseX::GetFrontBufferRendering()
+{
+ return false;
+}
+
+void WindowBaseX::SetEglWindowFrontBufferMode(bool enable)
+{
+}
+
} // namespace Adaptor
} // namespace Internal
*/
bool GetFullScreen() override;
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetFrontBufferRendering()
+ */
+ void SetFrontBufferRendering(bool enable) override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::GetFrontBufferRendering()
+ */
+ bool GetFrontBufferRendering() override;
+
+ /**
+ * @copydoc Dali::Internal::Adaptor::WindowBase::SetEglWindowFrontBufferMode()
+ */
+ void SetEglWindowFrontBufferMode(bool enable) override;
+
private:
/**
* Second stage initialization
// Store only the value before adaptor is created
internal->StoreWindowPositionSize(windowData.GetPositionSize());
+
+ // Set front buffer rendering
+ internal->StoreFrontBufferRendering(windowData.GetFrontBufferRendering());
}
else
{