From: Adeel Kazmi Date: Fri, 28 Aug 2015 16:48:45 +0000 (-0700) Subject: Merge "Fix VD prevent issues" into devel/master X-Git-Tag: dali_1.1.2~14 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=9fd0114ee708e9c197cc539b09acc6b8eaaf1c61;hp=2147319a00c4214f7ade93f393b96e691f511464 Merge "Fix VD prevent issues" into devel/master --- diff --git a/dali-toolkit/internal/controls/bubble-effect/bubble-actor.cpp b/dali-toolkit/internal/controls/bubble-effect/bubble-actor.cpp index 50df6af..0b3a186 100644 --- a/dali-toolkit/internal/controls/bubble-effect/bubble-actor.cpp +++ b/dali-toolkit/internal/controls/bubble-effect/bubble-actor.cpp @@ -36,7 +36,8 @@ namespace Internal BubbleActor::BubbleActor( unsigned int numberOfBubble, const Vector2& movementArea) : mMovementArea( movementArea ), - mNumBubble( numberOfBubble ) + mNumBubble( numberOfBubble ), + mRandomSeed( 0 ) { mActor = Actor::New(); } @@ -61,18 +62,20 @@ void BubbleActor::MakeRenderable( Geometry geometry, Material material ) mIndexInvertedMovementArea = mActor.RegisterProperty( "uInvertedMovementArea", Vector2(1.f,1.f) / mMovementArea ); - srand(time(NULL)); mIndicesOffset.resize(9); int offset = mMovementArea.Length() / 10.f; - mIndicesOffset[0] = mActor.RegisterProperty( "uOffset[0]", Vector2(0.f,0.f)); - mIndicesOffset[1] = mActor.RegisterProperty( "uOffset[1]", Vector2(rand()%offset,rand()%offset) ); - mIndicesOffset[2] = mActor.RegisterProperty( "uOffset[2]", Vector2(rand()%offset,-rand()%offset) ); - mIndicesOffset[3] = mActor.RegisterProperty( "uOffset[3]", Vector2(-rand()%offset,rand()%offset) ); - mIndicesOffset[4] = mActor.RegisterProperty( "uOffset[4]", Vector2(-rand()%offset,-rand()%offset) ); - mIndicesOffset[5] = mActor.RegisterProperty( "uOffset[5]", Vector2(rand()%offset,0.f)); - mIndicesOffset[6] = mActor.RegisterProperty( "uOffset[6]", Vector2(-rand()%offset,0.f)); - mIndicesOffset[7] = mActor.RegisterProperty( "uOffset[7]", Vector2(0.f,rand()%offset)); - mIndicesOffset[8] = mActor.RegisterProperty( "uOffset[8]", Vector2(0.f,-rand()%offset)); + + mRandomSeed = time( NULL ); + + mIndicesOffset[0] = mActor.RegisterProperty( "uOffset[0]", Vector2( 0.f,0.f ) ); + mIndicesOffset[1] = mActor.RegisterProperty( "uOffset[1]", Vector2( rand_r( &mRandomSeed ) % offset, rand_r( &mRandomSeed ) % offset ) ); + mIndicesOffset[2] = mActor.RegisterProperty( "uOffset[2]", Vector2( rand_r( &mRandomSeed ) % offset, -rand_r( &mRandomSeed ) % offset ) ); + mIndicesOffset[3] = mActor.RegisterProperty( "uOffset[3]", Vector2(-rand_r( &mRandomSeed ) % offset, rand_r( &mRandomSeed ) % offset ) ); + mIndicesOffset[4] = mActor.RegisterProperty( "uOffset[4]", Vector2(-rand_r( &mRandomSeed ) % offset, -rand_r( &mRandomSeed ) % offset ) ); + mIndicesOffset[5] = mActor.RegisterProperty( "uOffset[5]", Vector2( rand_r( &mRandomSeed ) % offset, 0.f ) ); + mIndicesOffset[6] = mActor.RegisterProperty( "uOffset[6]", Vector2(-rand_r( &mRandomSeed ) % offset, 0.f ) ); + mIndicesOffset[7] = mActor.RegisterProperty( "uOffset[7]", Vector2( 0.f, rand_r( &mRandomSeed ) % offset ) ); + mIndicesOffset[8] = mActor.RegisterProperty( "uOffset[8]", Vector2( 0.f, -rand_r( &mRandomSeed ) % offset ) ); Vector4 zeroVector; mIndiceStartEndPos.resize( mNumBubble ); @@ -111,14 +114,15 @@ void BubbleActor::SetMovementArea( const Vector2& movementArea ) mActor.SetProperty( mIndexInvertedMovementArea, Vector2(1.f,1.f) / mMovementArea ); int offset = mMovementArea.Length() / 10.f; - mActor.SetProperty( mIndicesOffset[1], Vector2(rand()%offset,rand()%offset) ); - mActor.SetProperty( mIndicesOffset[2], Vector2(rand()%offset,-rand()%offset) ); - mActor.SetProperty( mIndicesOffset[3], Vector2(-rand()%offset,rand()%offset) ); - mActor.SetProperty( mIndicesOffset[4], Vector2(-rand()%offset,-rand()%offset) ); - mActor.SetProperty( mIndicesOffset[5], Vector2(rand()%offset,0.f)); - mActor.SetProperty( mIndicesOffset[6], Vector2(-rand()%offset,0.f)); - mActor.SetProperty( mIndicesOffset[7], Vector2(0.f,rand()%offset)); - mActor.SetProperty( mIndicesOffset[8], Vector2(0.f,-rand()%offset)); + + mActor.SetProperty( mIndicesOffset[1], Vector2( rand_r( &mRandomSeed ) % offset, rand_r( &mRandomSeed ) % offset ) ); + mActor.SetProperty( mIndicesOffset[2], Vector2( rand_r( &mRandomSeed ) % offset, -rand_r( &mRandomSeed ) % offset ) ); + mActor.SetProperty( mIndicesOffset[3], Vector2(-rand_r( &mRandomSeed ) % offset, rand_r( &mRandomSeed ) % offset ) ); + mActor.SetProperty( mIndicesOffset[4], Vector2(-rand_r( &mRandomSeed ) % offset, -rand_r( &mRandomSeed ) % offset ) ); + mActor.SetProperty( mIndicesOffset[5], Vector2( rand_r( &mRandomSeed ) % offset, 0.f ) ); + mActor.SetProperty( mIndicesOffset[6], Vector2(-rand_r( &mRandomSeed ) % offset, 0.f ) ); + mActor.SetProperty( mIndicesOffset[7], Vector2( 0.f, rand_r( &mRandomSeed ) % offset ) ); + mActor.SetProperty( mIndicesOffset[8], Vector2( 0.f, -rand_r( &mRandomSeed ) % offset ) ); } void BubbleActor::SetStartAndEndPosition( unsigned int index, const Vector4& startAndEndPosition ) diff --git a/dali-toolkit/internal/controls/bubble-effect/bubble-actor.h b/dali-toolkit/internal/controls/bubble-effect/bubble-actor.h index a0938f0..357cddf 100644 --- a/dali-toolkit/internal/controls/bubble-effect/bubble-actor.h +++ b/dali-toolkit/internal/controls/bubble-effect/bubble-actor.h @@ -139,6 +139,7 @@ private: Property::Index mIndexInvertedMovementArea; ///< Index of the property mapping to uniform 'uInvertedMovementArea' unsigned int mNumBubble; ///< How many groups of uniforms are used to control the bubble movement. + unsigned int mRandomSeed; ///< Seed to generate random number. }; } // namespace Internal diff --git a/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp b/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp index a9b9aa9..9fed7cc 100644 --- a/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp +++ b/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp @@ -48,11 +48,12 @@ struct Vertex * Return a random value between the given interval. * @param[in] f0 The low bound * @param[in] f1 The up bound + * @param[in] seed The seed to genergate random number * @return A random value between the given interval */ -float RandomRange(float f0, float f1) +float RandomRange(float f0, float f1, unsigned int& seed) { - return f0 + (rand() & 0xfff) * (f1-f0) * (1.0f/4095.0f); + return f0 + (rand_r( &seed ) & 0xfff) * (f1-f0) * (1.0f/4095.0f); } } @@ -76,6 +77,7 @@ BubbleEmitter::BubbleEmitter( const Vector2& movementArea, mDensity( 5 ), mTotalNumOfBubble( maximumNumberOfBubble ), mCurrentBubble( 0 ), + mRandomSeed( 0 ), mRenderTaskRunning(false) { // Calculate how many shaders are required @@ -95,6 +97,8 @@ BubbleEmitter::BubbleEmitter( const Vector2& movementArea, mNumBubblePerActor = mTotalNumOfBubble; mNumActor = 1; } + + mRandomSeed = time( NULL ); } BubbleEmitter::~BubbleEmitter() @@ -297,7 +301,7 @@ Geometry BubbleEmitter::CreateGeometry( unsigned int numOfPatch ) for(unsigned int i = 0; i < numOfPatch; i++) { - float curSize = RandomRange(mBubbleSizeRange.x, mBubbleSizeRange.y); + float curSize = RandomRange(mBubbleSizeRange.x, mBubbleSizeRange.y, mRandomSeed); float index = static_cast( i ); vertexData.push_back( Vertex( index, Vector2(0.f,0.f), Vector2(0.f,0.f) ) ); @@ -340,7 +344,7 @@ void BubbleEmitter::SetBubbleParameter( BubbleActorPtr bubbleActor, unsigned int int halfRange = displacement.x / 2; // for the y coordinate, always negative, so bubbles always go upwards - Vector2 randomVec(rand()%static_cast(displacement.x) - halfRange, -rand()%static_cast(displacement.y)); + Vector2 randomVec( rand_r( &mRandomSeed ) % static_cast(displacement.x) - halfRange, -rand_r( &mRandomSeed ) % static_cast(displacement.y) ); dir.Normalize(); randomVec.x -= dir.x*halfRange; randomVec.y *= 1.0f - fabsf(dir.x)*0.33f; diff --git a/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.h b/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.h index 91158b2..40b4b74 100644 --- a/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.h +++ b/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.h @@ -178,6 +178,7 @@ private: unsigned int mDensity; ///< How many bubbles will emit at each time, they are controlled by same uniforms in the shader. unsigned int mTotalNumOfBubble; ///< mNumBubblePerShader*mNumShader. unsigned int mCurrentBubble; ///< Keep track of the index for the newly emitted bubble + unsigned int mRandomSeed; ///< Seed to generate random number. bool mRenderTaskRunning; ///< If the background render task is currently running diff --git a/dali-toolkit/public-api/controls/scrollable/item-view/item-layout.h b/dali-toolkit/public-api/controls/scrollable/item-view/item-layout.h index cc1a2ae..39370ac 100644 --- a/dali-toolkit/public-api/controls/scrollable/item-view/item-layout.h +++ b/dali-toolkit/public-api/controls/scrollable/item-view/item-layout.h @@ -346,6 +346,18 @@ protected: */ DALI_IMPORT_API ItemLayout(); +private: + + /** + * Don't allow copy constructor + */ + ItemLayout( const ItemLayout& handle ); + + /** + * Don't allow copy operator + */ + ItemLayout& operator=( const ItemLayout& handle ); + protected: struct Impl;