#ifndef DALI_TOOLKIT_GL_VIEW_H
#define DALI_TOOLKIT_GL_VIEW_H
/*
- * 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.
*
*/
+// EXTERNAL INCLUDES
+#include <dali/public-api/rendering/texture.h>
+
// INTERNAL INCLUDES
#include <dali-toolkit/public-api/controls/control.h>
class DALI_TOOLKIT_API GlView : public Dali::Toolkit::Control
{
public:
-
/**
* @brief Implementation backend mode
*
* pipeline. When Renderer is about to be drawn, the callback
* will be executed and the custom code "injected" into the pipeline.
* This allows rendering directly to the surface rather than offscreen.
+ *
+ * * @SINCE_2_1.18
*/
DIRECT_RENDERING = 0,
/**
+ * DIRECT_RENDERING_THREADED mode executes GL code on separate thread
+ * and then blits the result within DALi graphics commands stream.
+ * The mode is logically compatible with the EGL_IMAGE_OFFSCREEN_RENDERING.
+ *
+ * @SINCE_2_1.30
+ */
+ DIRECT_RENDERING_THREADED,
+
+ /**
* EGL_IMAGE_OFFSCREEN_RENDERING mode executes GL code in own thread
* and renders to the offscreen NativeImage (EGL) buffer. This backend
* will render in parallel but has higher memory footprint and may suffer
* performance issues due to using EGL image.
+ *
+ * @SINCE_2_1.18
*/
EGL_IMAGE_OFFSCREEN_RENDERING,
/**
* The default mode is set to EGL_IMAGE_OFFSCREEN_RENDERING for backwards
* compatibility.
+ *
+ * @SINCE_2_1.18
*/
DEFAULT = EGL_IMAGE_OFFSCREEN_RENDERING
};
*
* @SINCE_2_0.45
*/
- GlView(GlView&& rhs);
+ GlView(GlView&& rhs) noexcept;
/**
* @brief Assignment operator.
*
* @SINCE_2_0.45
*/
- GlView& operator=(GlView&& rhs);
+ GlView& operator=(GlView&& rhs) noexcept;
/**
* @brief Downcasts a handle to GlView handle.
*/
void RenderOnce();
+ /**
+ * @brief Binds DALi textures to the callback
+ *
+ * The textures that are bound to the callback will be passed upon
+ * callback execution providing native handles (like GL name) so they
+ * can be used alongside with custom GL code.
+ *
+ * Binding texture does not affect lifecycle and it's up to the client-side
+ * to make sure the resource is alive when used inside the callback.
+ *
+ * @param[in] textures List of DALi textures to be bound to the callback
+ *
+ * @note It only supported only in the GlView::BackendMode::DIRECT_RENDERING.
+ *
+ * @SINCE_2_2.2
+ */
+ void BindTextureResources(std::vector<Dali::Texture> textures);
+
public: // Not intended for application developers
/// @cond internal
/**