/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 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.
END_TEST;
}
+int UtcDaliGlViewDirectRenderingDirectResize(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliGlViewDirectRenderingResize");
+ GlView view = Toolkit::GlView::New(GlView::BackendMode::UNSAFE_DIRECT_RENDERING, GlView::ColorFormat::RGB888);
+
+ application.GetScene().Add(view);
+ view.SetGraphicsConfig(true, true, 0, GlView::GraphicsApiVersion::GLES_VERSION_2_0);
+ view.RegisterGlCallbacks(Dali::MakeCallback(DirectRenderingCode::glInit), Dali::MakeCallback(DirectRenderingCode::glRenderFrame), Dali::MakeCallback(DirectRenderingCode::glTerminate));
+ view.SetResizeCallback(Dali::MakeCallback(DirectRenderingCode::resizeCB));
+ view.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+ view.SetProperty(Actor::Property::SIZE, Vector2(360.0f, 360.0f));
+
+ application.SendNotification();
+ application.Render();
+
+ //To GlViewRenderThread can recognize Resize signal the main thread have to sleep.
+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK(true);
+ END_TEST;
+}
+
int UtcDaliGlViewDirectRenderingTerminateCallback(void)
{
ToolkitTestApplication application;
/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 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.
mStencil(false),
mMSAA(0)
{
- mRenderCallback = RenderCallback::New(this, &DrawableView::OnRenderCallback);
-
// Create NativeRenderer
Dali::Internal::NativeRendererCreateInfo createInfo;
createInfo.maxOffscreenBuffers = 2u;
createInfo.threadEnabled = (backendMode == GlView::BackendMode::DIRECT_RENDERING_THREADED);
+ createInfo.directExecution = (backendMode == GlView::BackendMode::UNSAFE_DIRECT_RENDERING);
createInfo.presentationMode = Dali::Internal::NativeRendererCreateInfo::PresentationMode::FIFO;
- mNativeRenderer = std::make_unique<Dali::Internal::DrawableViewNativeRenderer>(createInfo);
+
+ mRenderCallback = RenderCallback::New(this, &DrawableView::OnRenderCallback, createInfo.directExecution ? RenderCallback::ExecutionMode::UNSAFE : RenderCallback::ExecutionMode::ISOLATED);
+
+ mNativeRenderer = std::make_unique<Dali::Internal::DrawableViewNativeRenderer>(createInfo);
}
DrawableView::~DrawableView() = default;
#define DALI_PROJECT_DRAWABLE_VIEW_NATIVE_RENDERER_H
/*
-* Copyright (c) 2021 Samsung Electronics Co., Ltd.
+* Copyright (c) 2024 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.
};
bool threadEnabled { false };
+ bool directExecution { false };
+
uint32_t maxOffscreenBuffers { 3u };
PresentationMode presentationMode {PresentationMode::FIFO};
};
/*
- * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 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.
{
case BackendMode::DIRECT_RENDERING:
case BackendMode::DIRECT_RENDERING_THREADED:
+ case BackendMode::UNSAFE_DIRECT_RENDERING:
{
return Internal::DrawableView::New(backendMode);
}
#ifndef DALI_TOOLKIT_GL_VIEW_H
#define DALI_TOOLKIT_GL_VIEW_H
/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 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.
{
/**
* DIRECT_RENDERING mode executes GL code within DALi graphics
- * pipeline. When Renderer is about to be drawn, the callback
+ * pipeline but creates isolated context hence it doesn't alter any
+ * DALi rendering state. 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
+ * @SINCE_2_3.12
*/
DIRECT_RENDERING = 0,
EGL_IMAGE_OFFSCREEN_RENDERING,
/**
+ * UNSAFE_DIRECT_RENDERING mode executes GL code within DALi graphics
+ * pipeline WITHOUT isolating the GL context so should be used with caution!
+ * The custom rendering code is executed within current window context and
+ * may alter the GL state. This mode is considered unsafe and should be used
+ * only when drawing on main GL context is necessary!
+ *
+ * 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_3.12
+ */
+ UNSAFE_DIRECT_RENDERING,
+
+ /**
* The default mode is set to EGL_IMAGE_OFFSCREEN_RENDERING for backwards
* compatibility.
*