/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 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/dali.h>
-#include <dali/devel-api/images/native-image-interface-extension.h>
-#include <dali/public-api/rendering/renderer.h>
-#include <dali/public-api/rendering/frame-buffer.h>
#include <dali-toolkit/dali-toolkit.h>
#include <cstring>
namespace
{
+const float BUTTON_HEIGHT = 100.0f;
+const float BUTTON_COUNT = 5.0f;
+
+const std::string JPG_FILENAME = DEMO_IMAGE_DIR "gallery-medium-4.jpg";
+const std::string CAPTURE_FILENAME = "/tmp/native-image-capture.png";
+
/**
* @brief Creates a shader used to render a native image
- * @param[in] nativeImageInterface The native image interface
+ * @param[in] nativeImage The native image
* @return A shader to render the native image
*/
-Shader CreateShader( NativeImageInterface& nativeImageInterface )
+Shader CreateShader( NativeImageInterface& nativeImage )
{
static const char* DEFAULT_SAMPLER_TYPENAME = "sampler2D";
}\n
);
- NativeImageInterface::Extension* extension( nativeImageInterface.GetExtension() );
- if( extension )
- {
- std::string fragmentShader;
- //Get custom fragment shader prefix
- const char* fragmentPreFix = extension->GetCustomFragmentPreFix();
- if( fragmentPreFix )
- {
- fragmentShader = fragmentPreFix;
- fragmentShader += FRAGMENT_SHADER_TEXTURE;
- }
- else
- {
- fragmentShader = FRAGMENT_SHADER_TEXTURE;
- }
-
- //Get custom sampler type name
- const char* customSamplerTypename = extension->GetCustomSamplerTypename();
- if( customSamplerTypename )
- {
- fragmentShader.replace( fragmentShader.find( DEFAULT_SAMPLER_TYPENAME ), strlen(DEFAULT_SAMPLER_TYPENAME), customSamplerTypename );
- }
+ std::string fragmentShader;
- return Shader::New( VERTEX_SHADER_TEXTURE, fragmentShader );
+ //Get custom fragment shader prefix
+ const char* fragmentPrefix = nativeImage.GetCustomFragmentPrefix();
+ if( fragmentPrefix )
+ {
+ fragmentShader = fragmentPrefix;
+ fragmentShader += FRAGMENT_SHADER_TEXTURE;
}
else
{
- return Shader::New( VERTEX_SHADER_TEXTURE, FRAGMENT_SHADER_TEXTURE );
+ fragmentShader = FRAGMENT_SHADER_TEXTURE;
}
-}
-/**
- * @brief Creates an actor to render a native image
- * @param[in] texture The texture creates from a native image
- * @param[in] nativeImageInterface The native image interface used to create the texture
- * @return An actor that renders the texture
- */
-Actor CreateNativeActor( Texture texture, NativeImageInterface& nativeImageInterface )
-{
- Actor actor = Actor::New();
- Geometry geometry = DemoHelper::CreateTexturedQuad();
- Shader shader = CreateShader(nativeImageInterface);
- Renderer renderer = Renderer::New( geometry, shader );
- TextureSet textureSet = TextureSet::New();
- textureSet.SetTexture( 0u, texture );
- renderer.SetTextures( textureSet );
-
- actor.AddRenderer( renderer );
- actor.SetSize( texture.GetWidth(), texture.GetHeight() );
- return actor;
+ //Get custom sampler type name
+ const char* customSamplerTypename = nativeImage.GetCustomSamplerTypename();
+ if( customSamplerTypename )
+ {
+ fragmentShader.replace( fragmentShader.find( DEFAULT_SAMPLER_TYPENAME ), strlen(DEFAULT_SAMPLER_TYPENAME), customSamplerTypename );
+ }
+
+ return Shader::New( VERTEX_SHADER_TEXTURE, fragmentShader );
}
-const std::string JPG_FILENAME = DEMO_IMAGE_DIR "gallery-medium-4.jpg";
}
// This example shows how to create and use a NativeImageSource as the target of the render task.
public:
NativeImageSourceController( Application& application )
- : mApplication( application )
+ : mApplication( application ),
+ mRefreshAlways( true )
{
// Connect to the Application's Init signal
mApplication.InitSignal().Connect( this, &NativeImageSourceController::Create );
// The Init signal is received once (only) during the Application lifetime
void Create( Application& application )
{
- // Get a handle to the stage
- Stage stage = Stage::GetCurrent();
- stage.SetBackgroundColor( Color::WHITE );
+ // Get a handle to the window
+ Window window = application.GetWindow();
+ window.SetBackgroundColor( Color::WHITE );
+
+ window.KeyEventSignal().Connect(this, &NativeImageSourceController::OnKeyEvent);
+
+ CreateButtonArea();
- // Hide the indicator bar
- application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE );
+ CreateContentAreas();
+ }
- stage.KeyEventSignal().Connect(this, &NativeImageSourceController::OnKeyEvent);
+ void CreateButtonArea()
+ {
+ Window window = mApplication.GetWindow();
+ Vector2 windowSize = window.GetSize();
+
+ mButtonArea = Layer::New();
+ mButtonArea.SetProperty( Actor::Property::SIZE, Vector2( windowSize.x, BUTTON_HEIGHT ) );
+ mButtonArea.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER );
+ mButtonArea.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER );
+ window.Add( mButtonArea );
+
+ mButtonShow = PushButton::New();
+ mButtonShow.SetProperty( Button::Property::TOGGLABLE, true );
+ mButtonShow.SetProperty( Toolkit::Button::Property::LABEL, "SHOW" );
+ mButtonShow.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
+ mButtonShow.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
+ mButtonShow.SetProperty( Actor::Property::SIZE, Vector2( windowSize.x / BUTTON_COUNT, BUTTON_HEIGHT ) );
+ mButtonShow.ClickedSignal().Connect( this, &NativeImageSourceController::OnButtonSelected );
+ mButtonArea.Add( mButtonShow );
mButtonRefreshAlways = PushButton::New();
mButtonRefreshAlways.SetProperty( Button::Property::TOGGLABLE, true );
- mButtonRefreshAlways.SetProperty( Button::Property::SELECTED, true );
- mButtonRefreshAlways.SetProperty( Toolkit::Button::Property::LABEL, "Refresh ALWAYS" );
- mButtonRefreshAlways.SetParentOrigin( ParentOrigin::TOP_LEFT );
- mButtonRefreshAlways.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+ mButtonRefreshAlways.SetProperty( Toolkit::Button::Property::LABEL, "ALWAYS" );
+ mButtonRefreshAlways.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
+ mButtonRefreshAlways.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
+ mButtonRefreshAlways.SetProperty( Actor::Property::SIZE, Vector2( windowSize.x / BUTTON_COUNT, BUTTON_HEIGHT ) );
+ mButtonRefreshAlways.SetProperty( Actor::Property::POSITION, Vector2( (windowSize.x / BUTTON_COUNT)*1.0f, 0.0f ));
mButtonRefreshAlways.StateChangedSignal().Connect( this, &NativeImageSourceController::OnButtonSelected );
- stage.Add( mButtonRefreshAlways );
+ mButtonArea.Add( mButtonRefreshAlways );
mButtonRefreshOnce = PushButton::New();
- mButtonRefreshOnce.SetProperty( Toolkit::Button::Property::LABEL, "Refresh ONCE" );
- mButtonRefreshOnce.SetParentOrigin( ParentOrigin::TOP_RIGHT );
- mButtonRefreshOnce.SetAnchorPoint( AnchorPoint::TOP_RIGHT );
+ mButtonRefreshOnce.SetProperty( Toolkit::Button::Property::LABEL, "ONCE" );
+ mButtonRefreshOnce.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
+ mButtonRefreshOnce.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
+ mButtonRefreshOnce.SetProperty( Actor::Property::SIZE, Vector2( windowSize.x / BUTTON_COUNT, BUTTON_HEIGHT ) );
+ mButtonRefreshOnce.SetProperty( Actor::Property::POSITION, Vector2( (windowSize.x / BUTTON_COUNT)*2.0f, 0.0f ));
mButtonRefreshOnce.ClickedSignal().Connect( this, &NativeImageSourceController::OnButtonSelected );
- stage.Add( mButtonRefreshOnce);
-
- CreateScene();
+ mButtonArea.Add( mButtonRefreshOnce );
+
+ mButtonCapture = PushButton::New();
+ mButtonCapture.SetProperty( Toolkit::Button::Property::LABEL, "CAPTURE" );
+ mButtonCapture.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
+ mButtonCapture.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
+ mButtonCapture.SetProperty( Actor::Property::SIZE, Vector2( windowSize.x / BUTTON_COUNT, BUTTON_HEIGHT ) );
+ mButtonCapture.SetProperty( Actor::Property::POSITION, Vector2( (windowSize.x / BUTTON_COUNT)*3.0f, 0.0f ));
+ mButtonCapture.ClickedSignal().Connect( this, &NativeImageSourceController::OnButtonSelected );
+ mButtonArea.Add( mButtonCapture );
+
+ mButtonReset = PushButton::New();
+ mButtonReset.SetProperty( Toolkit::Button::Property::LABEL, "RESET" );
+ mButtonReset.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
+ mButtonReset.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
+ mButtonReset.SetProperty( Actor::Property::SIZE, Vector2( windowSize.x / BUTTON_COUNT, BUTTON_HEIGHT ) );
+ mButtonReset.SetProperty( Actor::Property::POSITION, Vector2( (windowSize.x / BUTTON_COUNT)*4.0f, 0.0f ));
+ mButtonReset.ClickedSignal().Connect( this, &NativeImageSourceController::OnButtonSelected );
+ mButtonArea.Add( mButtonReset );
}
- bool CreateScene()
+ void CreateContentAreas()
{
- Stage stage = Stage::GetCurrent();
- Vector2 stageSize = stage.GetSize();
+ Window window = mApplication.GetWindow();
+ Vector2 windowSize = window.GetSize();
- float buttonHeight = 100.f;
- mButtonRefreshAlways.SetSize( stageSize.x / 2.f, buttonHeight );
- mButtonRefreshOnce.SetSize( stageSize.x / 2.f, buttonHeight );
+ float contentHeight( (windowSize.y - BUTTON_HEIGHT)/2.0f );
- Vector2 imageSize( stageSize.x, (stageSize.y-buttonHeight)/2.f );
+ mTopContentArea = Actor::New();
+ mTopContentArea.SetProperty( Actor::Property::SIZE, Vector2( windowSize.x, contentHeight ) );
+ mTopContentArea.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER );
+ mTopContentArea.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_CENTER );
+ mTopContentArea.SetProperty( Actor::Property::POSITION_Y, BUTTON_HEIGHT );
+ window.Add( mTopContentArea );
- // Create the native image source
- NativeImageSourcePtr nativeImageSourcePtr = NativeImageSource::New( imageSize.width, imageSize.height, NativeImageSource::COLOR_DEPTH_DEFAULT );
+ mBottomContentArea = Actor::New();
+ mBottomContentArea.SetProperty( Actor::Property::SIZE, Vector2( windowSize.x, contentHeight ) );
+ mBottomContentArea.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_CENTER );
+ mBottomContentArea.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER );
+ window.Add( mBottomContentArea );
- // Create a image view as source actor to be renderer to the native image source
- Actor sourceActor = ImageView::New(JPG_FILENAME);
- sourceActor.SetParentOrigin( ParentOrigin::CENTER);
- sourceActor.SetAnchorPoint( AnchorPoint::CENTER );
- sourceActor.SetY( - (imageSize.height-buttonHeight)/2.f );
- stage.Add( sourceActor );
+ mSourceActor = ImageView::New(JPG_FILENAME);
+ mSourceActor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+ mSourceActor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
+ mTopContentArea.Add( mSourceActor );
Animation animation = Animation::New(2.f);
Degree relativeRotationDegrees(90.0f);
Radian relativeRotationRadians(relativeRotationDegrees);
- animation.AnimateTo( Property( sourceActor, Actor::Property::ORIENTATION ), Quaternion( relativeRotationRadians, Vector3::ZAXIS ), AlphaFunction::LINEAR, TimePeriod(0.f, 0.5f));
- animation.AnimateBy( Property( sourceActor, Actor::Property::ORIENTATION ), Quaternion( relativeRotationRadians, Vector3::ZAXIS ), AlphaFunction::LINEAR, TimePeriod(0.5f, 0.5f));
- animation.AnimateBy( Property( sourceActor, Actor::Property::ORIENTATION ), Quaternion( relativeRotationRadians, Vector3::ZAXIS ), AlphaFunction::LINEAR, TimePeriod(1.f, 0.5f));
- animation.AnimateBy( Property( sourceActor, Actor::Property::ORIENTATION ), Quaternion( relativeRotationRadians, Vector3::ZAXIS ), AlphaFunction::LINEAR, TimePeriod(1.5f, 0.5f));
+ animation.AnimateTo( Property( mSourceActor, Actor::Property::ORIENTATION ), Quaternion( relativeRotationRadians, Vector3::ZAXIS ), AlphaFunction::LINEAR, TimePeriod(0.f, 0.5f));
+ animation.AnimateBy( Property( mSourceActor, Actor::Property::ORIENTATION ), Quaternion( relativeRotationRadians, Vector3::ZAXIS ), AlphaFunction::LINEAR, TimePeriod(0.5f, 0.5f));
+ animation.AnimateBy( Property( mSourceActor, Actor::Property::ORIENTATION ), Quaternion( relativeRotationRadians, Vector3::ZAXIS ), AlphaFunction::LINEAR, TimePeriod(1.f, 0.5f));
+ animation.AnimateBy( Property( mSourceActor, Actor::Property::ORIENTATION ), Quaternion( relativeRotationRadians, Vector3::ZAXIS ), AlphaFunction::LINEAR, TimePeriod(1.5f, 0.5f));
animation.SetLooping(true);
animation.Play();
- // create a offscreen renderer task to render content into the native image source
- Texture nativeTexture = Texture::New( *nativeImageSourcePtr );
- // Create a FrameBuffer object with no default attachments.
- FrameBuffer targetBuffer = FrameBuffer::New( nativeTexture.GetWidth(), nativeTexture.GetHeight(), FrameBuffer::Attachment::NONE );
- // Add a color attachment to the FrameBuffer object.
- targetBuffer.AttachColorTexture( nativeTexture );
-
- CameraActor cameraActor = CameraActor::New(imageSize);
- cameraActor.SetParentOrigin(ParentOrigin::TOP_CENTER);
- cameraActor.SetParentOrigin( AnchorPoint::TOP_CENTER );
- cameraActor.SetY( buttonHeight + imageSize.height/2.f );
- stage.Add(cameraActor);
-
- RenderTaskList taskList = stage.GetRenderTaskList();
- mOffscreenRenderTask = taskList.CreateTask();
- mOffscreenRenderTask.SetSourceActor( sourceActor );
- mOffscreenRenderTask.SetClearColor( Color::WHITE );
- mOffscreenRenderTask.SetClearEnabled(true);
- mOffscreenRenderTask.SetCameraActor(cameraActor);
- mOffscreenRenderTask.GetCameraActor().SetInvertYAxis(true);
- mOffscreenRenderTask.SetFrameBuffer( targetBuffer );
- mOffscreenRenderTask.SetRefreshRate( RenderTask::REFRESH_ALWAYS );
-
- // Display the native image on the screen
- Actor nativeImageActor = CreateNativeActor( nativeTexture, *nativeImageSourcePtr );
- nativeImageActor.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
- nativeImageActor.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
- stage.Add( nativeImageActor );
-
- TextLabel textLabel1 = TextLabel::New( "Resource Image" );
- textLabel1.SetParentOrigin( ParentOrigin::TOP_CENTER );
- textLabel1.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
- nativeImageActor.Add( textLabel1 );
+ TextLabel textLabel1 = TextLabel::New( "Image" );
+ textLabel1.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_CENTER );
+ textLabel1.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER );
+ mTopContentArea.Add( textLabel1 );
- TextLabel textLabel2 = TextLabel::New( "Native Image" );
- textLabel2.SetParentOrigin( ParentOrigin::BOTTOM_CENTER );
- textLabel2.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
- nativeImageActor.Add( textLabel2 );
+ // Wait until button press before creating mOffscreenRenderTask
- return false;
+ TextLabel textLabel2 = TextLabel::New( "Native Image" );
+ textLabel2.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_CENTER );
+ textLabel2.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER );
+ mBottomContentArea.Add( textLabel2 );
}
- bool OnButtonSelected( Toolkit::Button button )
+ void SetupNativeImage()
{
- bool isSelected = mButtonRefreshAlways.GetProperty( Toolkit::Button::Property::SELECTED ).Get<bool>();
+ if( ! mOffscreenRenderTask )
+ {
+ Window window = mApplication.GetWindow();
+ Vector2 windowSize = window.GetSize();
+
+ float contentHeight( (windowSize.y - BUTTON_HEIGHT)/2.0f );
+ Vector2 imageSize( windowSize.x, contentHeight );
+
+ mNativeImageSourcePtr = NativeImageSource::New( imageSize.width, imageSize.height, NativeImageSource::COLOR_DEPTH_DEFAULT );
+ mNativeTexture = Texture::New( *mNativeImageSourcePtr );
+
+ mFrameBuffer = FrameBuffer::New( mNativeTexture.GetWidth(), mNativeTexture.GetHeight(), FrameBuffer::Attachment::NONE );
+ mFrameBuffer.AttachColorTexture( mNativeTexture );
+
+ mCameraActor = CameraActor::New( imageSize );
+ mCameraActor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
+ mCameraActor.SetProperty( Actor::Property::PARENT_ORIGIN, AnchorPoint::CENTER );
+ mTopContentArea.Add( mCameraActor );
+
+ RenderTaskList taskList = window.GetRenderTaskList();
+ mOffscreenRenderTask = taskList.CreateTask();
+ mOffscreenRenderTask.SetSourceActor( mSourceActor );
+ mOffscreenRenderTask.SetClearColor( Color::WHITE );
+ mOffscreenRenderTask.SetClearEnabled( true );
+ mOffscreenRenderTask.SetCameraActor( mCameraActor );
+ mOffscreenRenderTask.GetCameraActor().SetInvertYAxis( true );
+ mOffscreenRenderTask.SetFrameBuffer( mFrameBuffer );
+ }
- Toolkit::PushButton pushButton = Toolkit::PushButton::DownCast( button );
- if( pushButton == mButtonRefreshAlways )
+ if( mRefreshAlways )
{
- if( isSelected )
- {
- mOffscreenRenderTask.SetRefreshRate( RenderTask::REFRESH_ALWAYS );
- }
- else
+ mOffscreenRenderTask.SetRefreshRate( RenderTask::REFRESH_ALWAYS );
+ }
+ else
+ {
+ mOffscreenRenderTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
+ }
+ }
+
+ void SetupDisplayActor( bool show )
+ {
+ if( show )
+ {
+ if( ! mDisplayActor )
{
- mOffscreenRenderTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
+ // Make sure we have something to display
+ SetupNativeImage();
+
+ mDisplayActor = Actor::New();
+ mDisplayActor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
+ mDisplayActor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
+
+ Geometry geometry = DemoHelper::CreateTexturedQuad();
+
+ Shader shader = CreateShader( *mNativeImageSourcePtr );
+
+ Renderer renderer = Renderer::New( geometry, shader );
+
+ TextureSet textureSet = TextureSet::New();
+ textureSet.SetTexture( 0u, mNativeTexture );
+ renderer.SetTextures( textureSet );
+
+ mDisplayActor.AddRenderer( renderer );
+ mDisplayActor.SetProperty( Actor::Property::SIZE, Vector2( mNativeTexture.GetWidth(), mNativeTexture.GetHeight() ) );
+
+ mBottomContentArea.Add( mDisplayActor );
}
}
+ else
+ {
+ UnparentAndReset( mDisplayActor );
+ }
+ }
+
+ void Capture()
+ {
+ mRefreshAlways = false;
+ SetupNativeImage();
+
+ mOffscreenRenderTask.FinishedSignal().Connect( this, &NativeImageSourceController::DoCapture );
+ }
+
+ void DoCapture(RenderTask& task)
+ {
+ task.FinishedSignal().Disconnect( this, &NativeImageSourceController::DoCapture );
+
+ mNativeImageSourcePtr->EncodeToFile( CAPTURE_FILENAME );
+ }
+
+ void Reset()
+ {
+ SetupDisplayActor( false );
+
+ Window window = mApplication.GetWindow();
+ RenderTaskList taskList = window.GetRenderTaskList();
+ taskList.RemoveTask( mOffscreenRenderTask );
+ mOffscreenRenderTask.Reset();
+ mCameraActor.Reset();
+
+ mFrameBuffer.Reset();
+ mNativeTexture.Reset();
+ mNativeImageSourcePtr.Reset();
+ }
+
+ bool OnButtonSelected( Toolkit::Button button )
+ {
+ Toolkit::PushButton pushButton = Toolkit::PushButton::DownCast( button );
+
+ if( pushButton == mButtonShow )
+ {
+ bool isSelected = mButtonShow.GetProperty( Toolkit::Button::Property::SELECTED ).Get<bool>();
+
+ SetupDisplayActor( isSelected );
+ }
+ else if( pushButton == mButtonRefreshAlways )
+ {
+ bool isSelected = mButtonRefreshAlways.GetProperty( Toolkit::Button::Property::SELECTED ).Get<bool>();
+
+ mRefreshAlways = isSelected;
+ SetupNativeImage();
+ }
else if( pushButton == mButtonRefreshOnce )
{
+ bool isSelected = mButtonRefreshAlways.GetProperty( Toolkit::Button::Property::SELECTED ).Get<bool>();
+
if( isSelected )
{
mButtonRefreshAlways.SetProperty( Button::Property::SELECTED, false );
}
- mOffscreenRenderTask.SetRefreshRate( RenderTask::REFRESH_ONCE );
+
+ mRefreshAlways = false;
+ SetupNativeImage();
+ }
+ else if( pushButton == mButtonCapture )
+ {
+ Capture();
+ }
+ else if( pushButton == mButtonReset )
+ {
+ Reset();
}
return true;
void OnKeyEvent(const KeyEvent& event)
{
- if(event.state == KeyEvent::Down)
+ if(event.GetState() == KeyEvent::Down)
{
if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) )
{
}
private:
+
Application& mApplication;
- RenderTask mOffscreenRenderTask;
+
+ Layer mButtonArea;
+ Actor mTopContentArea;
+ Actor mBottomContentArea;
+
+ PushButton mButtonShow;
PushButton mButtonRefreshAlways;
PushButton mButtonRefreshOnce;
+ PushButton mButtonCapture;
+ PushButton mButtonReset;
-};
+ Actor mSourceActor;
-void RunTest( Application& application )
-{
- NativeImageSourceController test( application );
+ NativeImageSourcePtr mNativeImageSourcePtr;
+ Texture mNativeTexture;
+ FrameBuffer mFrameBuffer;
- application.MainLoop();
-}
+ RenderTask mOffscreenRenderTask;
+ CameraActor mCameraActor;
+
+ Actor mDisplayActor;
+
+ bool mRefreshAlways;
+};
-// Entry point for Linux & Tizen applications
-//
int DALI_EXPORT_API main( int argc, char **argv )
{
Application application = Application::New( &argc, &argv );
-
- RunTest( application );
-
+ NativeImageSourceController test( application );
+ application.MainLoop();
return 0;
}