[Tizen] Add codes for Dali Windows Backend 51/179151/8 accepted/tizen/unified/20180521.003532 accepted/tizen/unified/20180521.094854 submit/tizen/20180518.060536 submit/tizen/20180521.023026
authoradun <xiaohui.fang@samsung.com>
Fri, 9 Mar 2018 02:12:52 +0000 (10:12 +0800)
committerJoogab Yun <joogab.yun@samsung.com>
Fri, 18 May 2018 05:11:52 +0000 (14:11 +0900)
Change-Id: Id2b35b615d6243028253163638265de62f4edc7e

39 files changed:
CMakeLists.txt [new file with mode: 0755]
dali/devel-api/images/distance-field.cpp
dali/devel-api/threading/conditional-wait.h
dali/devel-api/threading/mutex.h
dali/integration-api/debug.h
dali/integration-api/lockless-buffer.cpp
dali/integration-api/lockless-buffer.h
dali/internal/common/image-attributes.cpp
dali/internal/event/actors/actor-impl.h
dali/internal/event/rendering/renderer-impl.h
dali/internal/file.list
dali/internal/render/common/render-tracker-debug.h
dali/internal/render/common/render-tracker.cpp
dali/internal/render/common/render-tracker.h
dali/internal/render/data-providers/render-data-provider.h
dali/internal/render/gl-resources/gl-call-debug.h
dali/internal/render/renderers/render-renderer.h
dali/internal/render/renderers/render-texture.h
dali/internal/render/shaders/program.cpp
dali/internal/update/common/scene-graph-buffers.cpp
dali/internal/update/common/scene-graph-buffers.h
dali/internal/update/nodes/node.cpp
dali/internal/update/nodes/node.h
dali/internal/update/nodes/scene-graph-layer.cpp
dali/internal/update/nodes/scene-graph-layer.h
dali/internal/update/render-tasks/scene-graph-render-task-debug.h
dali/internal/update/rendering/scene-graph-renderer.h
dali/public-api/animation/alpha-function.h
dali/public-api/common/dali-common.h
dali/public-api/math/matrix.h
dali/public-api/math/matrix3.h
dali/public-api/math/random.h
dali/public-api/object/property-array.h
dali/public-api/object/property-map.h
dali/public-api/object/property-value.h
dali/public-api/object/ref-object.cpp
dali/public-api/object/ref-object.h
dali/public-api/signals/base-signal.h
dali/public-api/signals/callback.h

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..45c3c81
--- /dev/null
@@ -0,0 +1,183 @@
+cmake_minimum_required(VERSION 3.11)\r
+\r
+if (WIN32)\r
+\r
+PROJECT (dali-core)\r
+\r
+add_subdirectory(dali/devel-api)\r
+add_subdirectory(dali/integration-api)\r
+#add_subdirectory(dali/internal)\r
+add_subdirectory(dali/public-api)\r
+\r
+SET(INTERNAL_DIR ${dali_SOURCE_DIR}/dali-core/dali/internal)\r
+\r
+SET(SOURCES ${SOURCES}\r
+  ${dali_SOURCE_DIR}/dali-core/dali/integration-api/trace.cpp\r
+  ${INTERNAL_DIR}/common/blending-options.cpp\r
+  ${INTERNAL_DIR}/common/core-impl.cpp\r
+  ${INTERNAL_DIR}/common/internal-constants.cpp\r
+  ${INTERNAL_DIR}/common/math.cpp\r
+  ${INTERNAL_DIR}/common/message-buffer.cpp\r
+  ${INTERNAL_DIR}/common/mutex-trace.cpp\r
+  ${INTERNAL_DIR}/common/image-sampler.cpp\r
+  ${INTERNAL_DIR}/common/image-attributes.cpp\r
+  ${INTERNAL_DIR}/common/fixed-size-memory-pool.cpp\r
+\r
+  ${INTERNAL_DIR}/event/actors/actor-impl.cpp\r
+  ${INTERNAL_DIR}/event/actors/custom-actor-internal.cpp\r
+  ${INTERNAL_DIR}/event/actors/layer-impl.cpp\r
+  ${INTERNAL_DIR}/event/actors/layer-list.cpp\r
+  ${INTERNAL_DIR}/event/actors/camera-actor-impl.cpp\r
+  ${INTERNAL_DIR}/event/animation/animation-impl.cpp\r
+  ${INTERNAL_DIR}/event/animation/animation-playlist.cpp\r
+  ${INTERNAL_DIR}/event/animation/constrainer.cpp\r
+  ${INTERNAL_DIR}/event/animation/constraint-base.cpp\r
+  ${INTERNAL_DIR}/event/animation/key-frames-impl.cpp\r
+  ${INTERNAL_DIR}/event/animation/linear-constrainer-impl.cpp\r
+  ${INTERNAL_DIR}/event/animation/path-impl.cpp\r
+  ${INTERNAL_DIR}/event/animation/path-constrainer-impl.cpp\r
+  ${INTERNAL_DIR}/event/common/event-thread-services.cpp\r
+  ${INTERNAL_DIR}/event/common/notification-manager.cpp\r
+  ${INTERNAL_DIR}/event/common/object-impl.cpp\r
+  ${INTERNAL_DIR}/event/common/object-registry-impl.cpp\r
+  ${INTERNAL_DIR}/event/common/projection.cpp\r
+  ${INTERNAL_DIR}/event/common/property-buffer-impl.cpp\r
+  ${INTERNAL_DIR}/event/common/property-conditions-impl.cpp\r
+  ${INTERNAL_DIR}/event/common/property-metadata.cpp\r
+  ${INTERNAL_DIR}/event/common/property-notification-impl.cpp\r
+  ${INTERNAL_DIR}/event/common/property-notification-manager.cpp\r
+  ${INTERNAL_DIR}/event/common/property-helper.cpp\r
+  ${INTERNAL_DIR}/event/common/stage-impl.cpp\r
+  ${INTERNAL_DIR}/event/common/system-overlay-impl.cpp\r
+  ${INTERNAL_DIR}/event/common/thread-local-storage.cpp\r
+  ${INTERNAL_DIR}/event/common/type-info-impl.cpp\r
+  ${INTERNAL_DIR}/event/common/type-registry-impl.cpp\r
+  ${INTERNAL_DIR}/event/effects/shader-factory.cpp\r
+  ${INTERNAL_DIR}/event/events/actor-gesture-data.cpp\r
+  ${INTERNAL_DIR}/event/events/actor-observer.cpp\r
+  ${INTERNAL_DIR}/event/events/event-processor.cpp\r
+  ${INTERNAL_DIR}/event/events/key-event-impl.cpp\r
+  ${INTERNAL_DIR}/event/events/key-event-processor.cpp\r
+  ${INTERNAL_DIR}/event/events/gesture-detector-impl.cpp\r
+  ${INTERNAL_DIR}/event/events/gesture-event-processor.cpp\r
+  ${INTERNAL_DIR}/event/events/gesture-processor.cpp\r
+  ${INTERNAL_DIR}/event/events/hit-test-algorithm-impl.cpp\r
+  ${INTERNAL_DIR}/event/events/hover-event-processor.cpp\r
+  ${INTERNAL_DIR}/event/events/long-press-gesture-detector-impl.cpp\r
+  ${INTERNAL_DIR}/event/events/long-press-gesture-processor.cpp\r
+  ${INTERNAL_DIR}/event/events/wheel-event-processor.cpp\r
+  ${INTERNAL_DIR}/event/events/multi-point-event-util.cpp\r
+  ${INTERNAL_DIR}/event/events/pan-gesture-detector-impl.cpp\r
+  ${INTERNAL_DIR}/event/events/pan-gesture-processor.cpp\r
+  ${INTERNAL_DIR}/event/events/pinch-gesture-detector-impl.cpp\r
+  ${INTERNAL_DIR}/event/events/pinch-gesture-processor.cpp\r
+  ${INTERNAL_DIR}/event/events/tap-gesture-detector-impl.cpp\r
+  ${INTERNAL_DIR}/event/events/tap-gesture-processor.cpp\r
+  ${INTERNAL_DIR}/event/events/touch-data-impl.cpp\r
+  ${INTERNAL_DIR}/event/events/touch-event-processor.cpp\r
+  ${INTERNAL_DIR}/event/images/bitmap-packed-pixel.cpp\r
+  ${INTERNAL_DIR}/event/images/bitmap-compressed.cpp\r
+  ${INTERNAL_DIR}/event/images/image-impl.cpp\r
+  ${INTERNAL_DIR}/event/images/buffer-image-impl.cpp\r
+  ${INTERNAL_DIR}/event/images/frame-buffer-image-impl.cpp\r
+  ${INTERNAL_DIR}/event/images/encoded-buffer-image-impl.cpp\r
+  ${INTERNAL_DIR}/event/images/nine-patch-image-impl.cpp\r
+  ${INTERNAL_DIR}/event/images/resource-image-impl.cpp\r
+  ${INTERNAL_DIR}/event/images/native-image-impl.cpp\r
+  ${INTERNAL_DIR}/event/images/pixel-data-impl.cpp\r
+  ${INTERNAL_DIR}/event/object/custom-object-internal.cpp\r
+  ${INTERNAL_DIR}/event/render-tasks/render-task-impl.cpp\r
+  ${INTERNAL_DIR}/event/render-tasks/render-task-list-impl.cpp\r
+  ${INTERNAL_DIR}/event/rendering/frame-buffer-impl.cpp\r
+  ${INTERNAL_DIR}/event/rendering/geometry-impl.cpp\r
+  ${INTERNAL_DIR}/event/rendering/texture-impl.cpp\r
+  ${INTERNAL_DIR}/event/rendering/texture-set-impl.cpp\r
+  ${INTERNAL_DIR}/event/rendering/renderer-impl.cpp\r
+  ${INTERNAL_DIR}/event/rendering/sampler-impl.cpp\r
+  ${INTERNAL_DIR}/event/rendering/shader-impl.cpp\r
+  ${INTERNAL_DIR}/event/size-negotiation/memory-pool-relayout-container.cpp\r
+  ${INTERNAL_DIR}/event/size-negotiation/relayout-controller-impl.cpp\r
+\r
+  ${INTERNAL_DIR}/render/common/render-algorithms.cpp\r
+  ${INTERNAL_DIR}/render/common/render-debug.cpp\r
+  ${INTERNAL_DIR}/render/common/render-instruction.cpp\r
+  ${INTERNAL_DIR}/render/common/render-instruction-container.cpp\r
+  ${INTERNAL_DIR}/render/common/render-item.cpp\r
+  ${INTERNAL_DIR}/render/common/render-tracker.cpp\r
+  ${INTERNAL_DIR}/render/common/render-manager.cpp\r
+  ${INTERNAL_DIR}/render/data-providers/render-data-provider.cpp\r
+  ${INTERNAL_DIR}/render/gl-resources/context.cpp\r
+  ${INTERNAL_DIR}/render/gl-resources/frame-buffer-state-cache.cpp\r
+  ${INTERNAL_DIR}/render/gl-resources/gl-call-debug.cpp\r
+  ${INTERNAL_DIR}/render/gl-resources/gpu-buffer.cpp\r
+  ${INTERNAL_DIR}/render/queue/render-queue.cpp\r
+  ${INTERNAL_DIR}/render/renderers/render-frame-buffer.cpp\r
+  ${INTERNAL_DIR}/render/renderers/render-geometry.cpp\r
+  ${INTERNAL_DIR}/render/renderers/render-property-buffer.cpp\r
+  ${INTERNAL_DIR}/render/renderers/render-renderer.cpp\r
+  ${INTERNAL_DIR}/render/renderers/render-texture.cpp\r
+  ${INTERNAL_DIR}/render/shaders/program.cpp\r
+  ${INTERNAL_DIR}/render/shaders/program-controller.cpp\r
+  ${INTERNAL_DIR}/render/shaders/scene-graph-shader.cpp\r
+\r
+  ${INTERNAL_DIR}/update/animation/scene-graph-animation.cpp\r
+  ${INTERNAL_DIR}/update/animation/scene-graph-constraint-base.cpp\r
+  ${INTERNAL_DIR}/update/common/discard-queue.cpp\r
+  ${INTERNAL_DIR}/update/common/property-base.cpp\r
+  ${INTERNAL_DIR}/update/common/property-owner-messages.cpp\r
+  ${INTERNAL_DIR}/update/common/property-condition-functions.cpp\r
+  ${INTERNAL_DIR}/update/common/property-condition-step-functions.cpp\r
+  ${INTERNAL_DIR}/update/common/property-condition-variable-step-functions.cpp\r
+  ${INTERNAL_DIR}/update/common/property-owner.cpp\r
+  ${INTERNAL_DIR}/update/common/scene-graph-buffers.cpp\r
+  ${INTERNAL_DIR}/update/common/scene-graph-connection-change-propagator.cpp\r
+  ${INTERNAL_DIR}/update/common/scene-graph-property-notification.cpp\r
+  ${INTERNAL_DIR}/update/common/uniform-map.cpp\r
+  ${INTERNAL_DIR}/update/controllers/render-message-dispatcher.cpp\r
+  ${INTERNAL_DIR}/update/controllers/scene-controller-impl.cpp\r
+  ${INTERNAL_DIR}/update/gestures/pan-gesture-profiling.cpp\r
+  ${INTERNAL_DIR}/update/gestures/scene-graph-pan-gesture.cpp\r
+  ${INTERNAL_DIR}/update/queue/update-message-queue.cpp\r
+  ${INTERNAL_DIR}/update/manager/render-instruction-processor.cpp\r
+  ${INTERNAL_DIR}/update/manager/render-task-processor.cpp\r
+  ${INTERNAL_DIR}/update/manager/transform-manager.cpp\r
+  ${INTERNAL_DIR}/update/manager/update-algorithms.cpp\r
+  ${INTERNAL_DIR}/update/manager/update-manager.cpp\r
+  ${INTERNAL_DIR}/update/manager/update-manager-debug.cpp\r
+  ${INTERNAL_DIR}/update/render-tasks/scene-graph-camera.cpp\r
+  ${INTERNAL_DIR}/update/nodes/node.cpp\r
+  ${INTERNAL_DIR}/update/nodes/node-messages.cpp\r
+  ${INTERNAL_DIR}/update/nodes/scene-graph-layer.cpp\r
+  ${INTERNAL_DIR}/update/render-tasks/scene-graph-render-task.cpp\r
+  ${INTERNAL_DIR}/update/render-tasks/scene-graph-render-task-list.cpp\r
+  ${INTERNAL_DIR}/update/rendering/scene-graph-texture-set.cpp\r
+  ${INTERNAL_DIR}/update/rendering/scene-graph-renderer.cpp\r
+  )\r
+\r
+link_directories(\r
+${dali_SOURCE_DIR}/dali-adaptor/dali-windows-backend/ExLib\r
+)\r
+\r
+ADD_DEFINITIONS(\r
+/vmg\r
+/NODEFAULTLIB:"libcmt.lib"\r
+/FI"${dali_SOURCE_DIR}/dali-adaptor/dali-windows-backend/ExInclude/PreprocessorDefinitions.h"\r
+/DBUILDING_DALI_CORE\r
+/MP\r
+)\r
+#head file path  \r
+INCLUDE_DIRECTORIES(  \r
+./\r
+${dali_SOURCE_DIR}/dali-adaptor/dali-windows-backend/ExInclude\r
+)\r
+\r
+set(LIBRARY_OUTPUT_PATH ${dali_SOURCE_DIR}/bin)\r
+\r
+ADD_LIBRARY(dali-core SHARED ${SOURCES})\r
+\r
+target_link_libraries(dali-core WindowsPlatform.lib)\r
+\r
+endif()\r
+\r
+#add link library  \r
+#TARGET_LINK_LIBRARIES(${FS_BUILD_BINARY_PREFIX}sqrt ${LIBRARIES})
\ No newline at end of file
index 6e4346d..63a5150 100644 (file)
@@ -84,8 +84,9 @@ const float MAX_DISTANCE( 1e20 );
  */
 void DistanceTransform( float *source, float* dest, unsigned int length )
 {
-  int parabolas[length];    // Locations of parabolas in lower envelope
-  float edge[length + 1];   // Locations of boundaries between parabolas
+  std::vector<int> parabolas(length);    // Locations of parabolas in lower envelope
+  std::vector<float> edge(length + 1);   // Locations of boundaries between parabolas
+
   int rightmost(0);         // Index of rightmost parabola in lower envelope
 
   parabolas[0] = 0;
index 24a0874..79de016 100644 (file)
@@ -35,7 +35,7 @@ public:
    * @brief Allows client code to synchronize updates to its own state with the
    * internal state of a ConditionalWait object.
    */
-  class ScopedLock
+  class DALI_CORE_API ScopedLock
   {
   public:
     /**
index 26dfe11..2173edc 100644 (file)
@@ -57,7 +57,7 @@ public:
    * Note! this class *does not* prevent a deadlock in the case when same thread is
    * locking the same mutex twice.
    */
-  class ScopedLock
+  class DALI_CORE_API ScopedLock
   {
   public:
 
index 0bb89d1..de2f768 100644 (file)
@@ -109,44 +109,44 @@ DALI_CORE_API void UninstallLogFunction();
 /**
  * Provides unfiltered logging for global error level messages
  */
-#define DALI_LOG_ERROR(format, args...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugError,   "%s " format, __PRETTY_FUNCTION__, ## args)
+#define DALI_LOG_ERROR(format, ...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugError,   "%s " format, __FUNCTION__, ## __VA_ARGS__)
 
-#define DALI_LOG_ERROR_NOFN(format, args...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugError, format, ## args)
+#define DALI_LOG_ERROR_NOFN(format, ...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugError, format, ## __VA_ARGS__)
 
-#define DALI_LOG_WARNING_NOFN(format, args...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugWarning, format, ## args)
+#define DALI_LOG_WARNING_NOFN(format, ...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugWarning, format, ## __VA_ARGS__)
 
 /**
  * Provides unfiltered logging for fps monitor
  */
-#define DALI_LOG_FPS(format, args...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, format, ## args)
+#define DALI_LOG_FPS(format, ...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, format, ## __VA_ARGS__)
 
 /**
  * Provides unfiltered logging for update status
  */
-#define DALI_LOG_UPDATE_STATUS(format, args...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, format, ## args)
+#define DALI_LOG_UPDATE_STATUS(format, ...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, format, ## __VA_ARGS__)
 
 /**
  * Provides unfiltered logging for render information
  */
-#define DALI_LOG_RENDER_INFO(format, args...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, format, ## args)
+#define DALI_LOG_RENDER_INFO(format, ...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, format, ## __VA_ARGS__)
 
 /**
  * Provides unfiltered logging for release
  */
-#define DALI_LOG_RELEASE_INFO(format, args...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, format, ## args)
+#define DALI_LOG_RELEASE_INFO(format, args, ...)     Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugInfo, format, ## __VA_ARGS__)
 
 #ifdef DEBUG_ENABLED
 
 /**
  * Provides unfiltered logging for global warning level messages
  */
-#define DALI_LOG_WARNING(format, args...)   Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugWarning, "%s " format, __PRETTY_FUNCTION__, ## args)
+#define DALI_LOG_WARNING(format, ...)   Dali::Integration::Log::LogMessage(Dali::Integration::Log::DebugWarning, "%s " format, __PRETTY_FUNCTION__, ## __VA_ARGS__)
 
 
 #else // DEBUG_ENABLED
 
 // Don't warn on release build
-#define DALI_LOG_WARNING(format, args...)
+#define DALI_LOG_WARNING(format, ...)
 
 #endif
 
@@ -309,12 +309,12 @@ public:
 
 #ifdef DEBUG_ENABLED
 
-#define DALI_LOG_INFO(filter, level, format, args...)                        \
-  if(filter && filter->IsEnabledFor(level)) { filter->Log(level, format,  ## args); }
+#define DALI_LOG_INFO(filter, level, format, ...)                        \
+  if(filter && filter->IsEnabledFor(level)) { filter->Log(level, format,  ## __VA_ARGS__); }
 
 #else // DEBUG_ENABLED
 
-#define DALI_LOG_INFO(filter, level, format, args...)
+#define DALI_LOG_INFO(filter, level, format, ...)
 
 #endif // DEBUG_ENABLED
 
@@ -342,8 +342,8 @@ public:
 };
 
 
-#define DALI_LOG_TRACE_METHOD_FMT(filter, format, args...)                 \
-  Dali::Integration::Log::TraceObj debugTraceObj(filter, "%s: " format, __PRETTY_FUNCTION__, ## args)
+#define DALI_LOG_TRACE_METHOD_FMT(filter, format, ...)                 \
+  Dali::Integration::Log::TraceObj debugTraceObj(filter, "%s: " format, __PRETTY_FUNCTION__, ## __VA_ARGS__)
 
 #define DALI_LOG_TRACE_METHOD(filter)                                      \
   Dali::Integration::Log::TraceObj debugTraceObj(filter, __PRETTY_FUNCTION__)
@@ -351,7 +351,7 @@ public:
 
 #else // DEBUG_ENABLED
 
-#define DALI_LOG_TRACE_METHOD_FMT(filter, format, args...)
+#define DALI_LOG_TRACE_METHOD_FMT(filter, format, ...)
 #define DALI_LOG_TRACE_METHOD(filter)
 
 
@@ -395,7 +395,7 @@ public: \
 /**
  * Allows one object to set another object's std::string easily
  */
-#define DALI_LOG_FMT_OBJECT_STRING(object, fmt, args...) (object->mDebugString = FormatToString(fmt, ## args))
+#define DALI_LOG_FMT_OBJECT_STRING(object, fmt, ...) (object->mDebugString = FormatToString(fmt, ## __VA_ARGS__))
 
 /**
  * Allows one object to get another object's debug string
@@ -418,7 +418,7 @@ public: \
 #define DALI_LOG_OBJECT_STRING_DECLARATION
 #define DALI_LOG_ACTOR_TREE(node)
 #define DALI_LOG_SET_OBJECT_STRING(object, string)
-#define DALI_LOG_FMT_OBJECT_STRING(object, fmt, args...)
+#define DALI_LOG_FMT_OBJECT_STRING(object, fmt, ...)
 #define DALI_LOG_GET_OBJECT_STRING(object)
 #define DALI_LOG_GET_OBJECT_C_STR(object) ""
 #define DALI_LOG_OBJECT(filter, object)
index b704dbc..a1a7541 100644 (file)
@@ -50,7 +50,8 @@ void LocklessBuffer::Write( const unsigned char *src, size_t size )
   DALI_ASSERT_ALWAYS( size <= mSize );
 
   // set WRITING bit
-  BufferState currentState( __sync_fetch_and_or( &mState, WRITING ) );
+  BufferState currentState( std::atomic_fetch_or( &mState, WRITING ) );
+
   DALI_ASSERT_DEBUG( !(currentState & WRITING_MASK) ); // WRITING bit should never be set when we get here
 
   // copy data to current write buffer, negate state to get actual index (recap: R0W1 = 0, R1W0 = 1)
@@ -58,9 +59,9 @@ void LocklessBuffer::Write( const unsigned char *src, size_t size )
   memcpy( mBuffer[index], src, size );
 
   // unset WRITING bit, set UPDATED bit
-  BufferState checkState = __sync_val_compare_and_swap( &mState,
-                                                        static_cast<BufferState>(currentState | WRITING),
-                                                        static_cast<BufferState>(index | UPDATED) );
+  BufferState writingState = static_cast<BufferState>(currentState | WRITING);
+  BufferState checkState = mState;
+  mState.compare_exchange_strong( writingState, static_cast<BufferState>(index | UPDATED) );
 
   DALI_ASSERT_DEBUG( checkState & WRITING );
   (void)checkState; // Avoid unused variable warning
@@ -76,9 +77,8 @@ const unsigned char* LocklessBuffer::Read()
   {
     // Try to swap buffers.
     // This will set mState to 1 if readbuffer 0 was updated, 0 if readbuffer 1 was updated and fail if WRITING is set
-    if( __sync_bool_compare_and_swap( &mState,
-                                      static_cast<BufferState>(currentWriteBuf | UPDATED),
-                                      static_cast<BufferState>(!currentWriteBuf) )  )
+    BufferState writingState = static_cast<BufferState>(currentWriteBuf | UPDATED);
+    if( mState.compare_exchange_strong( writingState, static_cast<BufferState>(!currentWriteBuf) ) )
     {
       // swap successful
       return mBuffer[currentWriteBuf];
index 8c0530d..5a7cc58 100644 (file)
@@ -25,6 +25,8 @@
 #include <dali/public-api/common/vector-wrapper.h>
 #include <dali/public-api/common/dali-common.h>
 
+#include <atomic>
+
 namespace Dali
 {
 
@@ -102,7 +104,7 @@ private:
 
 private:
   unsigned char* mBuffer[2];     ///< bitmap buffers
-  BufferState volatile mState;   ///< readbuffer number and whether we're currently writing into writebuffer or not
+  volatile std::__atomic_base<BufferState> mState;   ///< readbuffer number and whether we're currently writing into writebuffer or not
   size_t mSize;                  ///< size of buffers
 };
 
index 25e53b8..b13b530 100644 (file)
@@ -70,7 +70,7 @@ struct ImageAttributes::ImageAttributesImpl
   unsigned int  width : 16;       ///< image width in pixels
   unsigned int  height : 16;      ///< image height in pixels
   ScalingMode   scaling : 3;      ///< scaling option, ShrinkToFit is default
-  FilterMode    filtering : 3;    ///< filtering option. Box is the default
+  FilterMode    filtering : 4;    ///< filtering option. Box is the default
   bool          mOrientationCorrection : 1; ///< If true, image pixels are reordered according to orientation metadata on load.
 };
 
index b9734c7..3826e73 100644 (file)
@@ -2017,11 +2017,11 @@ protected:
   bool mPositionUsesAnchorPoint                    : 1; ///< Cached: Whether the position uses the anchor point or not.
   bool mVisible                                    : 1; ///< Cached: Whether the actor is visible or not.
   bool mInheritLayoutDirection                     : 1; ///< Whether the actor inherits the layout direction from parent.
-  LayoutDirection::Type mLayoutDirection  : 1; ///< Layout direction, Left to Right or Right to Left.
-  DrawMode::Type mDrawMode                         : 2; ///< Cached: How the actor and its children should be drawn
-  PositionInheritanceMode mPositionInheritanceMode : 2; ///< Cached: Determines how position is inherited
-  ColorMode mColorMode                             : 2; ///< Cached: Determines whether mWorldColor is inherited
-  ClippingMode::Type mClippingMode                 : 2; ///< Cached: Determines which clipping mode (if any) to use.
+  LayoutDirection::Type mLayoutDirection           : 2; ///< Layout direction, Left to Right or Right to Left.
+  DrawMode::Type mDrawMode                         : 3; ///< Cached: How the actor and its children should be drawn
+  PositionInheritanceMode mPositionInheritanceMode : 3; ///< Cached: Determines how position is inherited
+  ColorMode mColorMode                             : 3; ///< Cached: Determines whether mWorldColor is inherited
+  ClippingMode::Type mClippingMode                 : 3; ///< Cached: Determines which clipping mode (if any) to use.
 
 private:
 
index e4911a2..5d8bade 100644 (file)
@@ -322,14 +322,12 @@ private: // data
 
   Render::Renderer::StencilParameters mStencilParameters;            ///< Struct containing all stencil related options
   BlendingOptions                     mBlendingOptions;              ///< Local copy of blending options bitmask
-
   float                               mOpacity;                      ///< Local copy of the opacity
-
-  DepthFunction::Type                 mDepthFunction:3;              ///< Local copy of the depth function
-  FaceCullingMode::Type               mFaceCullingMode:2;            ///< Local copy of the mode of face culling
-  BlendMode::Type                     mBlendMode:2;                  ///< Local copy of the mode of blending
-  DepthWriteMode::Type                mDepthWriteMode:2;             ///< Local copy of the depth write mode
-  DepthTestMode::Type                 mDepthTestMode:2;              ///< Local copy of the depth test mode
+  DepthFunction::Type                 mDepthFunction:4;              ///< Local copy of the depth function
+  FaceCullingMode::Type               mFaceCullingMode:3;            ///< Local copy of the mode of face culling
+  BlendMode::Type                     mBlendMode:3;                  ///< Local copy of the mode of blending
+  DepthWriteMode::Type                mDepthWriteMode:3;             ///< Local copy of the depth write mode
+  DepthTestMode::Type                 mDepthTestMode:3;              ///< Local copy of the depth test mode
   bool                                mPremultipledAlphaEnabled:1;   ///< Flag indicating whether the Pre-multiplied Alpha Blending is required
 };
 
index bae7b47..44eb3fd 100644 (file)
@@ -86,7 +86,6 @@ internal_src_files = \
   $(internal_src_dir)/event/rendering/shader-impl.cpp \
   $(internal_src_dir)/event/size-negotiation/memory-pool-relayout-container.cpp \
   $(internal_src_dir)/event/size-negotiation/relayout-controller-impl.cpp \
-  \
   $(internal_src_dir)/render/common/render-algorithms.cpp \
   $(internal_src_dir)/render/common/render-debug.cpp \
   $(internal_src_dir)/render/common/render-instruction.cpp \
index 498e8f2..78c3ef9 100644 (file)
@@ -34,11 +34,11 @@ Debug::Filter* gRenderTrackerLogFilter = Debug::Filter::New(Debug::NoLogging, fa
 #define TRACKER_LOG(level)                                              \
   DALI_LOG_INFO(gRenderTrackerLogFilter, level, "RenderTracker::%s: this:%p\n", __FUNCTION__, this)
 
-#define TRACKER_LOG_FMT(level, format, args...) \
-  DALI_LOG_INFO(gRenderTrackerLogFilter, level, "RenderTracker::%s: this:%p " format, __FUNCTION__, this, ## args)
+#define TRACKER_LOG_FMT(level, format, ...) \
+  DALI_LOG_INFO(gRenderTrackerLogFilter, level, "RenderTracker::%s: this:%p " format, __FUNCTION__, this, ## __VA_ARGS__)
 #else
 #define TRACKER_LOG(level)
-#define TRACKER_LOG_FMT(level, format, args...)
+#define TRACKER_LOG_FMT(level, format, ...)
 #endif
 
 } // Render
index a7a356e..022f120 100644 (file)
@@ -82,21 +82,24 @@ void RenderTracker::PollSyncObject()
 
 bool RenderTracker::IsSynced()
 {
-  int x = __sync_val_compare_and_swap(&mSyncTrigger, 0xFF, 0x0);
+  int flag = 0xFF;
+  bool ret = mSyncTrigger.compare_exchange_strong( flag, 0 );
 
-  TRACKER_LOG_FMT(Debug::General, " = %s\n", x!=0?"T":"F");
-  return x != 0;
+  TRACKER_LOG_FMT( Debug::General, " = %s\n", true == ret ? "T" : "F" );
+  return ret;
 }
 
 void RenderTracker::ResetSyncFlag()
 {
   TRACKER_LOG(Debug::General);
-  (void)__sync_lock_test_and_set(&mSyncTrigger, 0x0);
+  int flag = 0xFF;
+  mSyncTrigger.compare_exchange_strong( flag, 0 );
 }
 
 void RenderTracker::SetSyncFlag()
 {
-  (void)__sync_lock_test_and_set(&mSyncTrigger, 0xFF);
+  int flag = 0;
+  mSyncTrigger.compare_exchange_strong( flag, 0xFF );
 }
 
 } // Render
index 307e101..0d26838 100644 (file)
@@ -21,6 +21,8 @@
 #include <dali/integration-api/gl-sync-abstraction.h>
 #include <dali/internal/common/message.h>
 
+#include <atomic>
+
 namespace Dali
 {
 namespace Internal
@@ -77,7 +79,7 @@ private:
 
   Integration::GlSyncAbstraction* mGlSyncAbstraction;      // The sync abstraction
   Integration::GlSyncAbstraction::SyncObject* mSyncObject; // Associated sync object
-  volatile int mSyncTrigger;                               // Trigger that update thread can read
+  volatile std::atomic<int> mSyncTrigger;                  // Trigger that update thread can read
 
 };
 
index 478718e..aae4262 100644 (file)
@@ -38,6 +38,7 @@ namespace SceneGraph
 {
 class PropertyBuffer;
 class Shader;
+class Renderer;
 
 /**
  * Wraps all the data providers for the renderer. This allows the
index 866d5ea..dcd440e 100644 (file)
@@ -52,8 +52,8 @@ extern Debug::Filter* gGlLogFilter;
 #endif // DEBUG_ENABLED
 
 // Don't put guards around here (LOG_INFO has it's own guards)
-#define LOG_GL(format, args...) \
-  DALI_LOG_INFO(gGlLogFilter, Debug::General, format, ## args)
+#define LOG_GL(format, ...) \
+  DALI_LOG_INFO(gGlLogFilter, Debug::General, format, ## __VA_ARGS__)
 
 }
 
index 6e1a1f7..55bac57 100644 (file)
@@ -82,11 +82,11 @@ public:
     int stencilFunctionMask;                          ///< The stencil function mask
     int stencilFunctionReference;                     ///< The stencil function reference
     int stencilMask;                                  ///< The stencil mask
-    RenderMode::Type       renderMode:3;              ///< The render mode
-    StencilFunction::Type  stencilFunction:3;         ///< The stencil function
-    StencilOperation::Type stencilOperationOnFail:3;  ///< The stencil operation for stencil test fail
-    StencilOperation::Type stencilOperationOnZFail:3; ///< The stencil operation for depth test fail
-    StencilOperation::Type stencilOperationOnZPass:3; ///< The stencil operation for depth test pass
+    RenderMode::Type       renderMode:4;              ///< The render mode
+    StencilFunction::Type  stencilFunction:4;         ///< The stencil function
+    StencilOperation::Type stencilOperationOnFail:4;  ///< The stencil operation for stencil test fail
+    StencilOperation::Type stencilOperationOnZFail:4; ///< The stencil operation for depth test fail
+    StencilOperation::Type stencilOperationOnZPass:4; ///< The stencil operation for depth test pass
   };
 
   /**
@@ -429,10 +429,10 @@ private:
   size_t                       mIndexedDrawFirstElement;    ///< Offset of first element to draw
   size_t                       mIndexedDrawElementsCount;   ///< Number of elements to draw
 
-  DepthFunction::Type          mDepthFunction:3;            ///< The depth function
-  FaceCullingMode::Type        mFaceCullingMode:2;          ///< The mode of face culling
-  DepthWriteMode::Type         mDepthWriteMode:2;           ///< The depth write mode
-  DepthTestMode::Type          mDepthTestMode:2;            ///< The depth test mode
+  DepthFunction::Type          mDepthFunction:4;            ///< The depth function
+  FaceCullingMode::Type        mFaceCullingMode:3;          ///< The mode of face culling
+  DepthWriteMode::Type         mDepthWriteMode:3;           ///< The depth write mode
+  DepthTestMode::Type          mDepthTestMode:3;            ///< The depth test mode
   bool                         mUpdateAttributesLocation:1; ///< Indicates attribute locations have changed
   bool                         mPremultipledAlphaEnabled:1; ///< Flag indicating whether the Pre-multiplied Alpha Blending is required
 
index d9192e0..771fca0 100644 (file)
@@ -155,7 +155,7 @@ private:
   uint16_t mWidth;                      ///< Width of the texture
   uint16_t mHeight;                     ///< Height of the texture
   uint16_t mMaxMipMapLevel;             ///< Maximum mipmap level
-  Type mType:2;                         ///< Type of the texture
+  Type mType:3;                         ///< Type of the texture
   bool mHasAlpha : 1;                   ///< Whether the format has an alpha channel
   bool mIsCompressed : 1;               ///< Whether the format is compressed
 
index 451de0b..530b629 100644 (file)
@@ -248,7 +248,7 @@ void Program::GetActiveSamplerUniforms()
   mGlAbstraction.GetProgramiv( mProgramId, GL_ACTIVE_UNIFORM_MAX_LENGTH, &uniformMaxNameLength );
 
   std::vector<std::string> samplerNames;
-  char name[uniformMaxNameLength+1]; // Allow for null terminator
+  std::vector<char> name(uniformMaxNameLength + 1); // Allow for null terminator
   std::vector< LocationPosition >  samplerUniformLocations;
 
   {
@@ -259,12 +259,12 @@ void Program::GetActiveSamplerUniforms()
     for( int i=0; i<numberOfActiveUniforms; ++i )
     {
       mGlAbstraction.GetActiveUniform( mProgramId, static_cast< GLuint >( i ), uniformMaxNameLength,
-                                       &nameLength, &number, &type, name );
+                                       &nameLength, &number, &type, name.data() );
 
       if( type == GL_SAMPLER_2D || type == GL_SAMPLER_CUBE || type == GL_SAMPLER_EXTERNAL_OES )
       {
-        GLuint location = mGlAbstraction.GetUniformLocation( mProgramId, name );
-        samplerNames.push_back(name);
+        GLuint location = mGlAbstraction.GetUniformLocation( mProgramId, name.data() );
+        samplerNames.push_back( name.data() );
         samplerUniformLocations.push_back(LocationPosition(location, -1));
       }
     }
index c6e6161..e12a13c 100644 (file)
@@ -42,7 +42,7 @@ SceneGraphBuffers::~SceneGraphBuffers()
 
 void SceneGraphBuffers::Swap()
 {
-  mUpdateBufferIndex = __sync_fetch_and_xor( &mEventBufferIndex, 1 );
+  mUpdateBufferIndex = std::atomic_fetch_xor<BufferIndex>(&mEventBufferIndex, 1);
 }
 
 } // namespace SceneGraph
index b9fb6e0..d0450c4 100644 (file)
@@ -20,6 +20,7 @@
 
 // INTERNAL INCLUDES
 #include <dali/internal/common/buffer-index.h>
+#include <atomic>
 
 namespace Dali
 {
@@ -77,8 +78,7 @@ private:
   SceneGraphBuffers& operator=(const SceneGraphBuffers& rhs);
 
 private:
-
-  BufferIndex mEventBufferIndex;  ///< 0 or 1 (opposite of mUpdateBufferIndex)
+  std::atomic<BufferIndex> mEventBufferIndex;  ///< 0 or 1 (opposite of mUpdateBufferIndex)
   BufferIndex mUpdateBufferIndex; ///< 0 or 1 (opposite of mEventBufferIndex)
 };
 
index aa7f777..4731897 100644 (file)
@@ -357,22 +357,6 @@ void Node::RecursiveDisconnectFromSceneGraph( BufferIndex updateBufferIndex )
 
 } // namespace SceneGraph
 
-template <>
-void OwnerPointer<Dali::Internal::SceneGraph::Node>::Reset()
-{
-  if( mObject != NULL )
-  {
-    Dali::Internal::SceneGraph::Node::Delete( mObject );
-    mObject = NULL;
-  }
-}
-
 } // namespace Internal
 
-template <>
-void OwnerContainer<Dali::Internal::SceneGraph::Node*>::Delete(Dali::Internal::SceneGraph::Node* pointer)
-{
-  Dali::Internal::SceneGraph::Node::Delete( pointer );
-}
-
 } // namespace Dali
index 71102fb..3850580 100644 (file)
@@ -887,9 +887,9 @@ protected:
   // flags, compressed to bitfield
   unsigned int                       mRegenerateUniformMap:2; ///< Indicate if the uniform map has to be regenerated this frame
   int                                mDirtyFlags:8;           ///< A composite set of flags for each of the Node properties
-  DrawMode::Type                     mDrawMode:2;             ///< How the Node and its children should be drawn
-  ColorMode                          mColorMode:2;            ///< Determines whether mWorldColor is inherited, 2 bits is enough
-  ClippingMode::Type                 mClippingMode:2;         ///< The clipping mode of this node
+  DrawMode::Type                     mDrawMode:3;             ///< How the Node and its children should be drawn
+  ColorMode                          mColorMode:3;            ///< Determines whether mWorldColor is inherited, 2 bits is enough
+  ClippingMode::Type                 mClippingMode:3;         ///< The clipping mode of this node
   bool                               mIsRoot:1;               ///< True if the node cannot have a parent
   bool                               mIsLayer:1;              ///< True if the node is a layer
   bool                               mPositionUsesAnchorPoint:1; ///< True if the node should use the anchor-point when calculating the position
@@ -1035,14 +1035,22 @@ inline void SetPositionUsesAnchorPointMessage( EventThreadServices& eventThreadS
 
 // Template specialisation for OwnerPointer<Node>, because delete is protected
 template <>
-void OwnerPointer<Dali::Internal::SceneGraph::Node>::Reset();
-
+inline void OwnerPointer<Dali::Internal::SceneGraph::Node>::Reset()
+{
+  if (mObject != NULL)
+  {
+    Dali::Internal::SceneGraph::Node::Delete(mObject);
+    mObject = NULL;
+  }
+}
 } // namespace Internal
 
 // Template specialisations for OwnerContainer<Node*>, because delete is protected
 template <>
-void OwnerContainer<Dali::Internal::SceneGraph::Node*>::Delete( Dali::Internal::SceneGraph::Node* pointer );
-
+inline void OwnerContainer<Dali::Internal::SceneGraph::Node*>::Delete( Dali::Internal::SceneGraph::Node* pointer )
+{
+  Dali::Internal::SceneGraph::Node::Delete(pointer);
+}
 } // namespace Dali
 
 #endif // DALI_INTERNAL_SCENE_GRAPH_NODE_H
index 46bb14c..4519171 100644 (file)
@@ -113,15 +113,6 @@ void Layer::ClearRenderables()
 
 } // namespace SceneGraph
 
-template <>
-void OwnerPointer<Dali::Internal::SceneGraph::Layer>::Reset()
-{
-  if( mObject != NULL )
-  {
-    Dali::Internal::SceneGraph::Node::Delete( mObject );
-    mObject = NULL;
-  }
-}
 } // namespace Internal
 
 } // namespace Dali
index f56bdd3..26b217e 100644 (file)
@@ -334,8 +334,14 @@ inline void SetDepthTestDisabledMessage( EventThreadServices& eventThreadService
 
 // Template specialisation for OwnerPointer<Layer>, because delete is protected
 template <>
-void OwnerPointer<Dali::Internal::SceneGraph::Layer>::Reset();
-
+inline void OwnerPointer<Dali::Internal::SceneGraph::Layer>::Reset()
+{
+  if (mObject != NULL)
+  {
+    Dali::Internal::SceneGraph::Node::Delete(mObject);
+    mObject = NULL;
+  }
+}
 } // namespace Internal
 
 } // namespace Dali
index adcaf05..655fa26 100644 (file)
@@ -30,14 +30,12 @@ Debug::Filter* gRenderTaskLogFilter = Debug::Filter::New(Debug::NoLogging, false
 
 #define TASK_LOG(level)                                              \
   DALI_LOG_INFO(gRenderTaskLogFilter, level, "SceneGraph::RenderTask::%s: this:%p\n", __FUNCTION__, this)
-#define TASK_LOG_FMT(level, format, args...) \
-  DALI_LOG_INFO(gRenderTaskLogFilter, level, "SceneGraph::RenderTask::%s: this:%p " format, __FUNCTION__, this, ## args)
-
+#define TASK_LOG_FMT(level, format, ...) \
+  DALI_LOG_INFO(gRenderTaskLogFilter, level, "SceneGraph::RenderTask::%s: this:%p " format, __FUNCTION__, this, ## __VA_ARGS__)
 #else
 
 #define TASK_LOG(level)
-#define TASK_LOG_FMT(level, format, args...)
-
+#define TASK_LOG_FMT(level, format, ...)
 #endif
 
 #endif // __DALI_INTERNAL_SCENE_GRAPH_RENDER_TASK_DEBUG_H__
index f1ef2a7..5865014 100644 (file)
@@ -451,11 +451,11 @@ private:
   unsigned int                 mRegenerateUniformMap;             ///< 2 if the map should be regenerated, 1 if it should be copied.
   unsigned int                 mResendFlag;                       ///< Indicate whether data should be resent to the renderer
 
-  DepthFunction::Type          mDepthFunction:3;                  ///< Local copy of the depth function
-  FaceCullingMode::Type        mFaceCullingMode:2;                ///< Local copy of the mode of face culling
-  BlendMode::Type              mBlendMode:2;                      ///< Local copy of the mode of blending
-  DepthWriteMode::Type         mDepthWriteMode:2;                 ///< Local copy of the depth write mode
-  DepthTestMode::Type          mDepthTestMode:2;                  ///< Local copy of the depth test mode
+  DepthFunction::Type          mDepthFunction:4;                  ///< Local copy of the depth function
+  FaceCullingMode::Type        mFaceCullingMode:3;                ///< Local copy of the mode of face culling
+  BlendMode::Type              mBlendMode:3;                      ///< Local copy of the mode of blending
+  DepthWriteMode::Type         mDepthWriteMode:3;                 ///< Local copy of the depth write mode
+  DepthTestMode::Type          mDepthTestMode:3;                  ///< Local copy of the depth test mode
 
   bool                         mUniformMapChanged[2];             ///< Records if the uniform map has been altered this frame
   bool                         mPremultipledAlphaEnabled:1;       ///< Flag indicating whether the Pre-multiplied Alpha Blending is required
index 5f92d43..7444ec7 100644 (file)
@@ -161,8 +161,8 @@ private:
 
   Vector4                 mBezierControlPoints;   //< Control points for the bezier alpha function
   AlphaFunctionPrototype  mCustom;                //< Pointer to an alpha function
-  BuiltinFunction         mBuiltin : Log<COUNT>::value+1; //< Enum indicating the built-in alpha function
-  Mode                    mMode    : 2;                   //< Enum indicating the functioning mode of the AlphaFunction
+  BuiltinFunction         mBuiltin : Log<COUNT>::value+2; //< Enum indicating the built-in alpha function
+  Mode                    mMode    : 3;                   //< Enum indicating the functioning mode of the AlphaFunction
 };
 
 /**
index 4b7c4aa..78cfb62 100755 (executable)
 #    define DALI_INTERNAL   __attribute__ ((visibility ("hidden")))
 #  endif
 #else
-/** Visibility attribute to show method definitions */
-#  define DALI_EXPORT_API
+#ifdef WIN32
+ /** Visibility attribute to show declarations */
+#  define DALI_EXPORT_API __declspec(dllexport) //Deprecated
+
+#ifdef BUILDING_DALI_CORE
+ /** Visibility attribute to hide declarations */
+#  define DALI_CORE_API __declspec(dllexport)
+#else
+/** Visibility attribute to hide declarations */
+#  define DALI_CORE_API __declspec(dllimport)
+#endif
+
+#else
+ /** Visibility attribute to show declarations */
+#  define DALI_EXPORT_API //Deprecated
 /** Visibility attribute to show declarations */
 #  define DALI_IMPORT_API
 /** Visibility attribute to show declarations */
 #  define DALI_CORE_API
+#endif
 /** Visibility attribute to hide declarations */
 #  define DALI_INTERNAL
 #endif
  * DALI_UNLIKELY should be used when a branch is almost never taken.
  * @SINCE_1_0.0
  */
+#ifdef __GNUC
 #define DALI_LIKELY(expression)   __builtin_expect( !!(expression), 1 )
 #define DALI_UNLIKELY(expression) __builtin_expect( !!(expression), 0 )
+#else
+#define DALI_LIKELY(expression)   !!(expression)
+#define DALI_UNLIKELY(expression) !!(expression)
+#endif
 
 /**
  * @brief The DALi namespace.
index 9391124..c9153f1 100644 (file)
@@ -46,7 +46,7 @@ class DALI_CORE_API Matrix
 {
 public:
 
-  friend std::ostream& operator<< (std::ostream& o, const Matrix& matrix);
+  friend DALI_CORE_API std::ostream& operator<< (std::ostream& o, const Matrix& matrix);
 
   /**
    * @brief Constructor.
index 16b52eb..46f7607 100644 (file)
@@ -42,7 +42,7 @@ class DALI_CORE_API Matrix3
 {
 public:
 
-  friend std::ostream& operator<< (std::ostream& o, const Matrix3& matrix);
+  friend DALI_CORE_API std::ostream& operator<< (std::ostream& o, const Matrix3& matrix);
 
   /**
    * @brief The identity matrix.
index 2d5d237..bc6fcbd 100644 (file)
@@ -17,6 +17,8 @@
  * limitations under the License.
  *
  */
+// EXTERNAL INCLUDES
+#include <ctime>
 
 // INTERNAL INCLUDES
 #include <dali/public-api/math/vector4.h>
index ef47612..331d1e9 100644 (file)
@@ -200,7 +200,7 @@ public:
    * @brief Output to stream.
    * @SINCE_1_1.28
    */
-  friend std::ostream& operator<<( std::ostream& stream, const Property::Array& array );
+  friend DALI_CORE_API std::ostream& operator<<( std::ostream& stream, const Property::Array& array );
 
 private:
   struct DALI_INTERNAL Impl; ///< Private data
index 8f77396..44a132f 100644 (file)
@@ -363,7 +363,7 @@ public:
    * @brief Output to stream.
    * @SINCE_1_1.28
    */
-  friend std::ostream& operator<<( std::ostream& stream, const Property::Map& map );
+  friend DALI_CORE_API std::ostream& operator<<( std::ostream& stream, const Property::Map& map );
 
 private:
   struct DALI_INTERNAL Impl; ///< Private data
index fa66e05..4cb607e 100644 (file)
@@ -412,7 +412,7 @@ public:
    * @brief Output to stream.
    * @SINCE_1_0.0
    */
-  friend std::ostream& operator<<( std::ostream& ouputStream, const Property::Value& value );
+  friend DALI_CORE_API std::ostream& operator<<( std::ostream& ouputStream, const Property::Value& value );
 
 private:
 
index 3060f4b..6ed98ba 100644 (file)
@@ -101,8 +101,7 @@ void RefObject::Reference()
 
 #else
 
-  // gcc > 4.1 builtin atomic add and fetch:
-  __sync_add_and_fetch( &mCount, 1 );
+  std::atomic_fetch_add<int>(&mCount, 1);
 
 #endif
 }
@@ -150,8 +149,7 @@ void RefObject::Unreference()
 
 #else
 
-  // gcc > 4.1 builtin atomic subtract and fetch (--mCount; return mCount)
-  newValue = __sync_sub_and_fetch( &mCount, 1 );
+  newValue = ( mCount -= 1 );
 
 #endif
 
index 3ead400..76acbe2 100644 (file)
@@ -22,6 +22,8 @@
 #include <dali/public-api/common/dali-common.h>
 #include <dali/public-api/common/intrusive-ptr.h>
 
+#include <atomic>
+
 namespace Dali
 {
 /**
@@ -100,8 +102,7 @@ protected:
   RefObject& operator=(const RefObject& rhs);
 
 private:
-
-  volatile int mCount; ///< Reference count
+  volatile std::atomic<int> mCount; ///< Reference count
 };
 
 /**
index 2ea9770..159cc6e 100644 (file)
@@ -113,7 +113,7 @@ public:
    * @brief Used to guard against nested Emit() calls.
    * @SINCE_1_0.0
    */
-  struct EmitGuard
+  struct DALI_CORE_API EmitGuard
   {
     /**
      * @brief Creates the guard.
index 5224ee8..2c0f48c 100644 (file)
 #include <dali/public-api/common/dali-common.h>
 #include <dali/public-api/signals/functor-delegate.h>
 
+#ifdef WIN32
+#define STDCALL __stdcall
+#else
+#define STDCALL
+#endif
+
 namespace Dali
 {
 /**
@@ -112,7 +118,7 @@ public:
     }
     else if( !callback.mImpl && callback.mFunction )
     {
-      typedef R(*Function1)();
+      typedef R(STDCALL *Function1)();
       returnVal = (*(reinterpret_cast< Function1 >( callback.mFunction )))();
     }
 
@@ -143,7 +149,7 @@ public:
     else if( !callback.mImpl && callback.mFunction )
     {
       // convert function type
-      typedef void(*Function1)(P1);
+      typedef void(STDCALL *Function1)(P1);
       (*(reinterpret_cast< Function1 >( callback.mFunction )))( param1 );
     }
   }
@@ -174,7 +180,7 @@ public:
     else if( !callback.mImpl && callback.mFunction )
     {
       // convert function type
-      typedef R(*Function1)(P1);
+      typedef R(STDCALL *Function1)(P1);
       returnVal = (*(reinterpret_cast< Function1 >( callback.mFunction )))( param1 );
     }
 
@@ -206,7 +212,7 @@ public:
     else if( !callback.mImpl && callback.mFunction )
     {
       // convert function type
-      typedef void(*Function2)(P1,P2);
+      typedef void(STDCALL *Function2)(P1,P2);
       (*(reinterpret_cast< Function2 >( callback.mFunction )))( param1, param2 );
     }
   }
@@ -238,7 +244,7 @@ public:
     else if( !callback.mImpl && callback.mFunction )
     {
       // convert function type
-      typedef R(*Function2)(P1,P2);
+      typedef R(STDCALL *Function2)(P1,P2);
       returnVal = (*(reinterpret_cast< Function2 >( callback.mFunction )))( param1, param2 );
     }
 
@@ -271,7 +277,7 @@ public:
     else if( !callback.mImpl && callback.mFunction )
     {
       // convert function type
-      typedef void(*Function2)(P1,P2,P3);
+      typedef void(STDCALL *Function2)(P1,P2,P3);
       (*(reinterpret_cast< Function2 >( callback.mFunction )))( param1, param2, param3 );
     }
   }
@@ -304,7 +310,7 @@ public:
     else if( !callback.mImpl && callback.mFunction )
     {
       // convert function type
-      typedef R(*Function2)(P1,P2,P3);
+      typedef R(STDCALL *Function2)(P1,P2,P3);
       returnVal = (*(reinterpret_cast< Function2 >( callback.mFunction )))( param1, param2, param3 );
     }
 
@@ -317,13 +323,13 @@ protected: // Constructors for deriving classes
    * @brief Function with static linkage.
    * @SINCE_1_0.0
    */
-  typedef void(*Function)(void);
+  typedef void(STDCALL *Function)(void);
 
   /**
    * @brief Member function.
    * @SINCE_1_0.0
    */
-  typedef void (CallbackBase::*MemberFunction)( void );
+  typedef void (STDCALL CallbackBase::*MemberFunction)( void );
 
   /**
    * @brief Used to call the correct member function.