X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=examples%2Fray-marching%2Fray-marching-example.cpp;h=ed481e6b0ac1daf1f56a9ca5c95950ce3156069b;hb=1b19fd140ff139b5854a1a62447faf31b175d8f6;hp=4a924a6b1cc12c8677f5de5e4e5ede26631e3b01;hpb=da6debb7e20de8f1e01f652a7a175f8d8cf65fed;p=platform%2Fcore%2Fuifw%2Fdali-demo.git diff --git a/examples/ray-marching/ray-marching-example.cpp b/examples/ray-marching/ray-marching-example.cpp index 4a924a6..ed481e6 100644 --- a/examples/ray-marching/ray-marching-example.cpp +++ b/examples/ray-marching/ray-marching-example.cpp @@ -1,5 +1,5 @@ /* - * 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. @@ -17,18 +17,20 @@ #include #include -#include "shared/view.h" -#include "shared/utility.h" +#include +#include #include +#include "shared/utility.h" +#include "shared/view.h" using namespace Dali; -using Dali::Toolkit::TextLabel; using Dali::Toolkit::Control; +using Dali::Toolkit::TextLabel; using Dali::Toolkit::ToolBar; -const char* BACKGROUND_IMAGE( "" ); -const char* TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" ); -const char* APPLICATION_TITLE( "Ray Marching" ); +const char* BACKGROUND_IMAGE(""); +const char* TOOLBAR_IMAGE(DEMO_IMAGE_DIR "top-bar.png"); +const char* APPLICATION_TITLE("Ray Marching"); const char* SHADER_NAME("raymarch_sphere_shaded"); /** @@ -37,24 +39,35 @@ const char* SHADER_NAME("raymarch_sphere_shaded"); * @param output * @return */ -bool LoadShaderCode( const char* path, const char* filename, std::vector& output ) +bool LoadShaderCode(const char* path, const char* filename, std::vector& output) { - std::string fullpath( path ); + std::string fullpath(path); fullpath += filename; - FILE* f = fopen( fullpath.c_str(), "rb" ); - if( !f ) + + Dali::FileStream fileStream(fullpath, Dali::FileStream::READ | Dali::FileStream::BINARY); + FILE* file = fileStream.GetFile(); + if(!file) { return false; } - fseek( f, 0, SEEK_END ); - size_t size = ftell( f ); - fseek( f, 0, SEEK_SET ); - output.resize( size + 1 ); - std::fill( output.begin(), output.end(), 0 ); - ssize_t result = fread( output.data(), size, 1, f ); - fclose( f ); - - return ( result >= 0 ); + + bool retValue = false; + if(!fseek(file, 0, SEEK_END)) + { + long int size = ftell(file); + + if((size != -1L) && + (!fseek(file, 0, SEEK_SET))) + { + output.resize(size + 1); + std::fill(output.begin(), output.end(), 0); + ssize_t result = fread(output.data(), size, 1, file); + + retValue = (result >= 0); + } + } + + return retValue; } /** @@ -62,16 +75,20 @@ bool LoadShaderCode( const char* path, const char* filename, std::vector& * @param shaderName * @return */ -Shader LoadShaders( const std::string& shaderName ) +Shader LoadShaders(const std::string& shaderName) { std::vector bufV, bufF; - std::string shaderVSH( shaderName ); - std::string shaderFSH( shaderName ); + std::string shaderVSH(shaderName); + std::string shaderFSH(shaderName); shaderVSH += ".vsh"; shaderFSH += ".fsh"; - LoadShaderCode( DEMO_SHADER_DIR, shaderVSH.c_str(), bufV ); - LoadShaderCode( DEMO_SHADER_DIR, shaderFSH.c_str(), bufF ); - Shader shader = Shader::New( bufV.data(), bufF.data() ); + + Shader shader; + if(LoadShaderCode(DEMO_SHADER_DIR, shaderVSH.c_str(), bufV) && + LoadShaderCode(DEMO_SHADER_DIR, shaderFSH.c_str(), bufF)) + { + shader = Shader::New(bufV.data(), bufF.data()); + } return shader; } @@ -80,12 +97,11 @@ Shader LoadShaders( const std::string& shaderName ) class RayMarchingExample : public ConnectionTracker { public: - - RayMarchingExample( Application& application ) - : mApplication( application ) + RayMarchingExample(Application& application) + : mApplication(application) { // Connect to the Application's Init signal - mApplication.InitSignal().Connect( this, &RayMarchingExample::Create ); + mApplication.InitSignal().Connect(this, &RayMarchingExample::Create); } ~RayMarchingExample() @@ -94,36 +110,32 @@ public: } // The Init signal is received once (only) during the Application lifetime - void Create( Application& application ) + void Create(Application& application) { - // Get a handle to the stage - Stage stage = Stage::GetCurrent(); - - stage.GetRootLayer().TouchSignal().Connect( this, &RayMarchingExample::OnTouch ); + // Get a handle to the window + Window window = application.GetWindow(); - stage.KeyEventSignal().Connect(this, &RayMarchingExample::OnKeyEvent); + window.GetRootLayer().TouchedSignal().Connect(this, &RayMarchingExample::OnTouch); - stage.SetBackgroundColor( Color::YELLOW ); + window.KeyEventSignal().Connect(this, &RayMarchingExample::OnKeyEvent); - // Hide the indicator bar - application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE ); + window.SetBackgroundColor(Color::YELLOW); // Creates a default view with a default tool bar. - // The view is added to the stage. - mContentLayer = DemoHelper::CreateView( application, - mView, - mToolBar, - BACKGROUND_IMAGE, - TOOLBAR_IMAGE, - APPLICATION_TITLE ); + // The view is added to the window. + mContentLayer = DemoHelper::CreateView(application, + mView, + mToolBar, + BACKGROUND_IMAGE, + TOOLBAR_IMAGE, + APPLICATION_TITLE); // Add an extra space on the right to center the title text. - mToolBar.AddControl( Actor::New(), DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HorizontalRight ); + mToolBar.AddControl(Actor::New(), DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HORIZONTAL_RIGHT); AddContentLayer(); - } - bool OnTouch( Actor actor, const TouchData& touch ) + bool OnTouch(Actor actor, const TouchEvent& touch) { // quit the application mApplication.Quit(); @@ -135,9 +147,9 @@ public: */ 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) ) + if(IsKey(event, Dali::DALI_KEY_ESCAPE) || IsKey(event, Dali::DALI_KEY_BACK)) { mApplication.Quit(); } @@ -150,38 +162,37 @@ public: Renderer CreateQuadRenderer() { // Create shader & geometry needed by Renderer - Shader shader = LoadShaders( SHADER_NAME ); + Shader shader = LoadShaders(SHADER_NAME); Property::Map vertexFormat; vertexFormat["aPosition"] = Property::VECTOR2; - PropertyBuffer vertexBuffer = PropertyBuffer::New( vertexFormat ); + VertexBuffer vertexBuffer = VertexBuffer::New(vertexFormat); - const float P( 0.5f ); + const float P(0.5f); const Vector2 vertices[] = { - Vector2( -P, -P ), - Vector2( +P, -P ), - Vector2( -P, +P ), - Vector2( +P, +P ) - }; + Vector2(-P, -P), + Vector2(+P, -P), + Vector2(-P, +P), + Vector2(+P, +P)}; - vertexBuffer.SetData( vertices, 4 ); + vertexBuffer.SetData(vertices, 4); // Instantiate quad geometry Geometry geometry = Geometry::New(); - geometry.AddVertexBuffer( vertexBuffer ); - geometry.SetType( Geometry::TRIANGLE_STRIP ); + geometry.AddVertexBuffer(vertexBuffer); + geometry.SetType(Geometry::TRIANGLE_STRIP); // Create renderer - Renderer renderer = Renderer::New( geometry, shader ); + Renderer renderer = Renderer::New(geometry, shader); - renderer.RegisterProperty("uRadius", 0.0f ); - renderer.RegisterProperty("uAdjuster", -4.0f ); + renderer.RegisterProperty("uRadius", 0.0f); + renderer.RegisterProperty("uAdjuster", -4.0f); // Animate the sphere radius uniform and a generic uAdjust uniform currently used to move the light around Animation animation = Animation::New(8.0f); - animation.AnimateTo( Property(renderer,"uRadius"), 1.2f, AlphaFunction::BOUNCE); - animation.AnimateTo( Property(renderer,"uAdjuster"), 4.0f, AlphaFunction::BOUNCE); - animation.SetLooping( true ); + animation.AnimateTo(Property(renderer, "uRadius"), 1.2f, AlphaFunction::BOUNCE); + animation.AnimateTo(Property(renderer, "uAdjuster"), 4.0f, AlphaFunction::BOUNCE); + animation.SetLooping(true); animation.Play(); return renderer; @@ -189,42 +200,32 @@ public: void AddContentLayer() { - Stage stage = Stage::GetCurrent(); + Window window = mApplication.GetWindow(); - //Create all the renderers + //Create all the renderers Renderer renderer = CreateQuadRenderer(); Actor actor = Actor::New(); - actor.AddRenderer( renderer ); + actor.AddRenderer(renderer); - actor.SetAnchorPoint( Dali::AnchorPoint::CENTER ); - actor.SetParentOrigin( Dali::ParentOrigin::CENTER ); - actor.SetResizePolicy( Dali::ResizePolicy::FILL_TO_PARENT, Dali::Dimension::ALL_DIMENSIONS ); + actor.SetProperty(Actor::Property::ANCHOR_POINT, Dali::AnchorPoint::CENTER); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, Dali::ParentOrigin::CENTER); + actor.SetResizePolicy(Dali::ResizePolicy::FILL_TO_PARENT, Dali::Dimension::ALL_DIMENSIONS); - mContentLayer.Add( actor ); + mContentLayer.Add(actor); } private: - Application& mApplication; - Control mView; - Layer mContentLayer; - ToolBar mToolBar; + Application& mApplication; + Control mView; + Layer mContentLayer; + ToolBar mToolBar; }; -void RunTest( Application& application ) +int DALI_EXPORT_API main(int argc, char** argv) { - RayMarchingExample test( application ); - + Application application = Application::New(&argc, &argv); + RayMarchingExample test(application); application.MainLoop(); -} - -// Entry point for Linux & Tizen applications -// -int DALI_EXPORT_API main( int argc, char **argv ) -{ - Application application = Application::New( &argc, &argv ); - - RunTest( application ); - return 0; }