2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <dali/public-api/dali-core.h>
23 #include <dali/integration-api/events/touch-event-integ.h>
24 #include <dali-test-suite-utils.h>
29 void renderable_actor_startup(void)
31 test_return_value = TET_UNDEF;
34 void renderable_actor_cleanup(void)
36 test_return_value = TET_PASS;
42 static const char* TestTextHelloWorld = "Hello World";
43 static bool gIsActor1SortModifierCorrect;
44 static bool gIsActor2SortModifierCorrect;
45 const float gActor1SortModifierValue = 96.0f;
46 const float gActor2SortModifierValue = 53.0f;
48 static float TestSortFunction(const Vector3& position, float sortModifier)
50 if ( fabs(sortModifier - gActor1SortModifierValue) < 0.01)
51 gIsActor1SortModifierCorrect = true;
53 if ( fabs(sortModifier - gActor2SortModifierValue) < 0.01)
54 gIsActor2SortModifierCorrect = true;
61 int UtcDaliRenderableActorDownCast(void)
63 TestApplication application;
65 tet_infoline("Testing Dali::RenderableActor::DownCast()");
67 TextActor textActor = TextActor::New(TestTextHelloWorld);
69 Actor anActor = Actor::New();
70 anActor.Add( textActor );
72 Actor child = anActor.GetChildAt(0);
73 RenderableActor renderableActor = RenderableActor::DownCast( child );
74 DALI_TEST_CHECK( renderableActor );
76 renderableActor = NULL;
77 DALI_TEST_CHECK( !renderableActor );
79 renderableActor = DownCast< RenderableActor >( child );
80 DALI_TEST_CHECK( renderableActor );
82 renderableActor = DownCast< RenderableActor >( anActor );
83 DALI_TEST_CHECK( !renderableActor );
85 Actor unInitialzedActor;
86 renderableActor = RenderableActor::DownCast( unInitialzedActor );
87 DALI_TEST_CHECK( !renderableActor );
89 renderableActor = DownCast< RenderableActor >( unInitialzedActor );
90 DALI_TEST_CHECK( !renderableActor );
94 int UtcDaliRenderableActorSetSortModifier(void)
96 TestApplication application;
98 tet_infoline("Testing Dali::RenderableActor::SetSortModifier()");
102 TextActor actor = TextActor::New(TestTextHelloWorld);
103 Stage::GetCurrent().Add(actor);
105 actor.SetSortModifier( val );
107 float returnValue = actor.GetSortModifier();
109 //Verify through actor api
110 DALI_TEST_EQUALS(returnValue, val, TEST_LOCATION);
112 Stage::GetCurrent().Remove(actor);
115 //Verify through layer SetSortFunction
116 gIsActor1SortModifierCorrect = false;
117 gIsActor2SortModifierCorrect = false;
118 BitmapImage img = BitmapImage::New( 1,1 );
119 // create two transparent actors so there is something to sort
120 ImageActor actor1 = ImageActor::New( img );
121 ImageActor actor2 = ImageActor::New( img );
123 actor1.SetPosition( 0, 0, 0);
124 actor1.SetSortModifier( gActor1SortModifierValue );
125 actor1.SetColor( Vector4(1, 1, 1, 0.5f ) ); // 50% transparent
127 actor2.SetPosition( 0, 0, 1);
128 actor2.SetSortModifier( gActor2SortModifierValue );
129 actor2.SetColor( Vector4(1, 1, 1, 0.5f ) ); // 50% transparent
132 Stage::GetCurrent().Add( actor1 );
133 Stage::GetCurrent().Add( actor2 );
135 Layer root = Stage::GetCurrent().GetLayer( 0 );
136 root.SetSortFunction( TestSortFunction );
138 // flush the queue and render once
139 application.SendNotification();
140 application.Render();
142 DALI_TEST_CHECK( gIsActor1SortModifierCorrect && gIsActor2SortModifierCorrect );
147 int UtcDaliRenderableActorGetSortModifier(void)
149 TestApplication application;
151 tet_infoline("Testing Dali::RenderableActor::GetSortModifier()");
153 TextActor actor = TextActor::New(TestTextHelloWorld);
154 Stage::GetCurrent().Add(actor);
156 DALI_TEST_EQUALS(actor.GetSortModifier(), 0.0f, TEST_LOCATION);
158 Stage::GetCurrent().Remove(actor);
162 int UtcDaliRenderableActorSetGetBlendMode(void)
164 TestApplication application;
166 tet_infoline("Testing Dali::RenderableActor::SetBlendMode() / Dali::RenderableActor::GetBlendMode()");
168 TextActor actor = TextActor::New(TestTextHelloWorld);
170 actor.SetBlendMode( BlendingMode::OFF );
171 DALI_TEST_CHECK( BlendingMode::OFF == actor.GetBlendMode() );
173 actor.SetBlendMode( BlendingMode::AUTO );
174 DALI_TEST_CHECK( BlendingMode::AUTO == actor.GetBlendMode() );
176 actor.SetBlendMode( BlendingMode::ON );
177 DALI_TEST_CHECK( BlendingMode::ON == actor.GetBlendMode() );
181 int UtcDaliRenderableActorSetCullFace(void)
183 TestApplication application;
185 tet_infoline("Testing Dali::RenderableActor::SetCullFace()");
187 BitmapImage img = BitmapImage::New( 1,1 );
188 ImageActor actor = ImageActor::New( img );
189 ImageActor actor2 = ImageActor::New( img );
191 actor.SetSize(100.0f, 100.0f);
192 actor.SetParentOrigin(ParentOrigin::CENTER);
193 actor.SetAnchorPoint(AnchorPoint::CENTER);
195 actor2.SetSize(100.0f, 100.0f);
196 actor2.SetParentOrigin(ParentOrigin::CENTER);
197 actor2.SetAnchorPoint(AnchorPoint::CENTER);
199 Stage::GetCurrent().Add(actor);
200 Stage::GetCurrent().Add(actor2);
202 //Verify whether the correct GL calls are made when actor is face culled in front and back, and
203 // face culling is disabled for actor2
204 TraceCallStack& cullFaceTrace = application.GetGlAbstraction().GetCullFaceTrace();
205 cullFaceTrace.Enable(true);
206 actor.SetCullFace( CullFrontAndBack );
208 // flush the queue and render once
209 application.SendNotification();
210 application.Render();
212 cullFaceTrace.Enable(false);
213 std::stringstream out;
215 //Verify actor gl state
218 DALI_TEST_EQUALS( cullFaceTrace.TestMethodAndParams(0, "Enable", out.str()), true, TEST_LOCATION);
222 DALI_TEST_EQUALS( cullFaceTrace.TestMethodAndParams(1, "Enable", out.str()), true, TEST_LOCATION);
225 out << GL_FRONT_AND_BACK;
226 DALI_TEST_EQUALS( cullFaceTrace.TestMethodAndParams(2, "CullFace", out.str()), true, TEST_LOCATION);
228 //Verify actor2 gl state
231 DALI_TEST_EQUALS( cullFaceTrace.TestMethodAndParams(3, "Disable", out.str()), true, TEST_LOCATION);
233 //Verify state through the actor api
234 DALI_TEST_CHECK( CullFrontAndBack == actor.GetCullFace() );
235 DALI_TEST_CHECK( CullNone == actor2.GetCullFace() );
237 /**************************************************************/
239 //Verify whether the correct GL calls are made when actor2 is face culled in the front
240 cullFaceTrace.Reset();
241 cullFaceTrace.Enable(true);
242 actor2.SetCullFace( CullFront );
244 // flush the queue and render once
245 application.SendNotification();
246 application.Render();
248 cullFaceTrace.Enable(false);
250 //Verify actor gl state
253 DALI_TEST_EQUALS( cullFaceTrace.TestMethodAndParams(0, "Enable", out.str()), true, TEST_LOCATION);
256 out << GL_FRONT_AND_BACK;
257 DALI_TEST_EQUALS( cullFaceTrace.TestMethodAndParams(1, "CullFace", out.str()), true, TEST_LOCATION);
259 //Verify actor2 gl state
262 DALI_TEST_EQUALS( cullFaceTrace.TestMethodAndParams(2, "Enable", out.str()), true, TEST_LOCATION);
266 DALI_TEST_EQUALS( cullFaceTrace.TestMethodAndParams(3, "CullFace", out.str()), true, TEST_LOCATION);
268 //Verify state through the actor api
269 DALI_TEST_CHECK( CullFrontAndBack == actor.GetCullFace() );
270 DALI_TEST_CHECK( CullFront == actor2.GetCullFace() );
272 /**************************************************************/
273 //Verify whether the correct GL calls are made when face culling is disabled for both actors
274 cullFaceTrace.Reset();
275 cullFaceTrace.Enable(true);
276 actor.SetCullFace( CullNone );
277 actor2.SetCullFace( CullNone );
279 // flush the queue and render once
280 application.SendNotification();
281 application.Render();
283 cullFaceTrace.Enable(false);
287 DALI_TEST_EQUALS( cullFaceTrace.TestMethodAndParams(0, "Disable", out.str()), true, TEST_LOCATION);
289 //Verify state through the actor api
290 DALI_TEST_CHECK( CullNone == actor.GetCullFace() );
291 DALI_TEST_CHECK( CullNone == actor2.GetCullFace() );
293 Stage::GetCurrent().Remove(actor);
294 Stage::GetCurrent().Remove(actor2);
298 int UtcDaliRenderableActorGetCullFace(void)
300 TestApplication application;
302 tet_infoline("Testing Dali::RenderableActor::GetCullFace()");
304 TextActor textActor = TextActor::New(TestTextHelloWorld);
306 DALI_TEST_CHECK( CullNone == textActor.GetCullFace() );
308 ImageActor imageActor = ImageActor::New();
310 DALI_TEST_CHECK( CullNone == imageActor.GetCullFace() );
312 MeshActor meshActor = MeshActor::New();
314 DALI_TEST_CHECK( CullBack == meshActor.GetCullFace() );
318 int UtcDaliRenderableActorSetGetBlendFunc(void)
320 TestApplication application;
321 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
323 tet_infoline("Testing Dali::RenderableActor::UtcDaliRenderableActorSetGetBlendFunc()");
325 BitmapImage img = BitmapImage::New( 1,1 );
326 ImageActor actor = ImageActor::New( img );
327 Stage::GetCurrent().Add( actor );
328 application.SendNotification();
329 application.Render();
331 // Test the defaults as documented int blending.h
333 BlendingFactor::Type srcFactorRgb( BlendingFactor::ZERO );
334 BlendingFactor::Type destFactorRgb( BlendingFactor::ZERO );
335 BlendingFactor::Type srcFactorAlpha( BlendingFactor::ZERO );
336 BlendingFactor::Type destFactorAlpha( BlendingFactor::ZERO );
337 actor.GetBlendFunc( srcFactorRgb, destFactorRgb, srcFactorAlpha, destFactorAlpha );
338 DALI_TEST_EQUALS( BlendingFactor::SRC_ALPHA, srcFactorRgb, TEST_LOCATION );
339 DALI_TEST_EQUALS( BlendingFactor::ONE_MINUS_SRC_ALPHA, destFactorRgb, TEST_LOCATION );
340 DALI_TEST_EQUALS( BlendingFactor::ONE, srcFactorAlpha, TEST_LOCATION );
341 DALI_TEST_EQUALS( BlendingFactor::ONE_MINUS_SRC_ALPHA, destFactorAlpha, TEST_LOCATION );
344 // Set to non-default values
345 actor.SetBlendFunc( BlendingFactor::ONE_MINUS_SRC_COLOR, BlendingFactor::SRC_ALPHA_SATURATE );
347 // Test that Set was successful
349 BlendingFactor::Type srcFactorRgb( BlendingFactor::ZERO );
350 BlendingFactor::Type destFactorRgb( BlendingFactor::ZERO );
351 BlendingFactor::Type srcFactorAlpha( BlendingFactor::ZERO );
352 BlendingFactor::Type destFactorAlpha( BlendingFactor::ZERO );
353 actor.GetBlendFunc( srcFactorRgb, destFactorRgb, srcFactorAlpha, destFactorAlpha );
354 DALI_TEST_EQUALS( BlendingFactor::ONE_MINUS_SRC_COLOR, srcFactorRgb, TEST_LOCATION );
355 DALI_TEST_EQUALS( BlendingFactor::SRC_ALPHA_SATURATE, destFactorRgb, TEST_LOCATION );
356 DALI_TEST_EQUALS( BlendingFactor::ONE_MINUS_SRC_COLOR, srcFactorAlpha, TEST_LOCATION );
357 DALI_TEST_EQUALS( BlendingFactor::SRC_ALPHA_SATURATE, destFactorAlpha, TEST_LOCATION );
360 // Render & check GL commands
361 application.SendNotification();
362 application.Render();
363 DALI_TEST_EQUALS( (GLenum)GL_ONE_MINUS_SRC_COLOR, glAbstraction.GetLastBlendFuncSrcRgb(), TEST_LOCATION );
364 DALI_TEST_EQUALS( (GLenum)GL_SRC_ALPHA_SATURATE, glAbstraction.GetLastBlendFuncDstRgb(), TEST_LOCATION );
365 DALI_TEST_EQUALS( (GLenum)GL_ONE_MINUS_SRC_COLOR, glAbstraction.GetLastBlendFuncSrcAlpha(), TEST_LOCATION );
366 DALI_TEST_EQUALS( (GLenum)GL_SRC_ALPHA_SATURATE, glAbstraction.GetLastBlendFuncDstAlpha(), TEST_LOCATION );
368 // Set using separate alpha settings
369 actor.SetBlendFunc( BlendingFactor::CONSTANT_COLOR, BlendingFactor::ONE_MINUS_CONSTANT_COLOR,
370 BlendingFactor::CONSTANT_ALPHA, BlendingFactor::ONE_MINUS_CONSTANT_ALPHA );
372 // Test that Set was successful
374 BlendingFactor::Type srcFactorRgb( BlendingFactor::ZERO );
375 BlendingFactor::Type destFactorRgb( BlendingFactor::ZERO );
376 BlendingFactor::Type srcFactorAlpha( BlendingFactor::ZERO );
377 BlendingFactor::Type destFactorAlpha( BlendingFactor::ZERO );
378 actor.GetBlendFunc( srcFactorRgb, destFactorRgb, srcFactorAlpha, destFactorAlpha );
379 DALI_TEST_EQUALS( BlendingFactor::CONSTANT_COLOR, srcFactorRgb, TEST_LOCATION );
380 DALI_TEST_EQUALS( BlendingFactor::ONE_MINUS_CONSTANT_COLOR, destFactorRgb, TEST_LOCATION );
381 DALI_TEST_EQUALS( BlendingFactor::CONSTANT_ALPHA, srcFactorAlpha, TEST_LOCATION );
382 DALI_TEST_EQUALS( BlendingFactor::ONE_MINUS_CONSTANT_ALPHA, destFactorAlpha, TEST_LOCATION );
385 // Render & check GL commands
386 application.SendNotification();
387 application.Render();
388 DALI_TEST_EQUALS( (GLenum)GL_CONSTANT_COLOR, glAbstraction.GetLastBlendFuncSrcRgb(), TEST_LOCATION );
389 DALI_TEST_EQUALS( (GLenum)GL_ONE_MINUS_CONSTANT_COLOR, glAbstraction.GetLastBlendFuncDstRgb(), TEST_LOCATION );
390 DALI_TEST_EQUALS( (GLenum)GL_CONSTANT_ALPHA, glAbstraction.GetLastBlendFuncSrcAlpha(), TEST_LOCATION );
391 DALI_TEST_EQUALS( (GLenum)GL_ONE_MINUS_CONSTANT_ALPHA, glAbstraction.GetLastBlendFuncDstAlpha(), TEST_LOCATION );
395 int UtcDaliRenderableActorSetGetBlendEquation(void)
397 TestApplication application;
398 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
400 tet_infoline("Testing Dali::RenderableActor::SetBlendEquation()");
402 BitmapImage img = BitmapImage::New( 1,1 );
403 ImageActor actor = ImageActor::New( img );
404 Stage::GetCurrent().Add( actor );
405 application.SendNotification();
406 application.Render();
408 // Test the defaults as documented int blending.h
410 BlendingEquation::Type equationRgb( BlendingEquation::SUBTRACT );
411 BlendingEquation::Type equationAlpha( BlendingEquation::SUBTRACT );
412 actor.GetBlendEquation( equationRgb, equationAlpha );
413 DALI_TEST_EQUALS( BlendingEquation::ADD, equationRgb, TEST_LOCATION );
414 DALI_TEST_EQUALS( BlendingEquation::ADD, equationAlpha, TEST_LOCATION );
417 // Test the single blending equation setting
419 actor.SetBlendEquation( BlendingEquation::REVERSE_SUBTRACT );
420 BlendingEquation::Type equationRgba( BlendingEquation::SUBTRACT );
421 actor.GetBlendEquation( equationRgba, equationRgba );
422 DALI_TEST_EQUALS( BlendingEquation::REVERSE_SUBTRACT, equationRgba, TEST_LOCATION );
425 actor.SetBlendEquation( BlendingEquation::REVERSE_SUBTRACT, BlendingEquation::REVERSE_SUBTRACT );
427 // Test that Set was successful
429 BlendingEquation::Type equationRgb( BlendingEquation::SUBTRACT );
430 BlendingEquation::Type equationAlpha( BlendingEquation::SUBTRACT );
431 actor.GetBlendEquation( equationRgb, equationAlpha );
432 DALI_TEST_EQUALS( BlendingEquation::REVERSE_SUBTRACT, equationRgb, TEST_LOCATION );
433 DALI_TEST_EQUALS( BlendingEquation::REVERSE_SUBTRACT, equationAlpha, TEST_LOCATION );
436 // Render & check GL commands
437 application.SendNotification();
438 application.Render();
439 DALI_TEST_EQUALS( (GLenum)GL_FUNC_REVERSE_SUBTRACT, glAbstraction.GetLastBlendEquationRgb(), TEST_LOCATION );
440 DALI_TEST_EQUALS( (GLenum)GL_FUNC_REVERSE_SUBTRACT, glAbstraction.GetLastBlendEquationAlpha(), TEST_LOCATION );
444 int UtcDaliRenderableActorSetGetBlendColor(void)
446 TestApplication application;
447 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
449 tet_infoline("Testing Dali::RenderableActor::SetBlendColor()");
451 BitmapImage img = BitmapImage::New( 1,1 );
452 ImageActor actor = ImageActor::New( img );
453 Stage::GetCurrent().Add( actor );
454 application.SendNotification();
455 application.Render();
457 // Test the defaults as documented int blending.h
458 DALI_TEST_EQUALS( Vector4::ZERO, actor.GetBlendColor(), TEST_LOCATION );
460 actor.SetBlendColor( Color::RED );
462 // Test that Set was successful
463 DALI_TEST_EQUALS( Color::RED, actor.GetBlendColor(), TEST_LOCATION );
465 // Render & check GL commands
466 application.SendNotification();
467 application.Render();
468 DALI_TEST_EQUALS( Color::RED, glAbstraction.GetLastBlendColor(), TEST_LOCATION );
472 int UtcDaliRenderableActorSetGetAlpha(void)
474 TestApplication application;
476 tet_infoline("Testing Dali::RenderableActor::SetGetAlpha()");
478 BitmapImage img = BitmapImage::New( 1,1 );
479 ImageActor actor = ImageActor::New( img );
480 Stage::GetCurrent().Add( actor );
481 application.SendNotification();
482 application.Render();
484 // use the image alpha on actor
485 actor.SetBlendMode(BlendingMode::ON);
487 // Test that Set was successful
488 DALI_TEST_EQUALS( BlendingMode::ON, actor.GetBlendMode(), TEST_LOCATION );
490 // Now test that it can be set to false
491 actor.SetBlendMode(BlendingMode::OFF);
492 DALI_TEST_EQUALS(BlendingMode::OFF, actor.GetBlendMode(), TEST_LOCATION );
496 int UtcDaliRenderableActorCreateDestroy(void)
498 tet_infoline("Testing Dali::RenderableActor::CreateDestroy()");
499 RenderableActor* ractor = new RenderableActor;
500 RenderableActor ractor2( *ractor );
501 DALI_TEST_CHECK( ractor );
506 int UtcDaliRenderableActorSetGetFilterModes(void)
508 TestApplication application;
510 tet_infoline("Testing Dali::RenderableActor::SetFilterMode() / Dali::RenderableActor::GetFilterMode()");
512 TextActor actor = TextActor::New(TestTextHelloWorld);
514 FilterMode::Type minifyFilter = FilterMode::NEAREST;
515 FilterMode::Type magnifyFilter = FilterMode::NEAREST;
518 actor.GetFilterMode( minifyFilter, magnifyFilter );
519 DALI_TEST_CHECK( FilterMode::DEFAULT == minifyFilter );
520 DALI_TEST_CHECK( FilterMode::DEFAULT == magnifyFilter );
523 actor.SetFilterMode( FilterMode::DEFAULT, FilterMode::DEFAULT );
524 actor.GetFilterMode( minifyFilter, magnifyFilter );
525 DALI_TEST_CHECK( FilterMode::DEFAULT == minifyFilter );
526 DALI_TEST_CHECK( FilterMode::DEFAULT == magnifyFilter );
529 actor.SetFilterMode( FilterMode::NEAREST, FilterMode::NEAREST );
530 actor.GetFilterMode( minifyFilter, magnifyFilter );
531 DALI_TEST_CHECK( FilterMode::NEAREST == minifyFilter );
532 DALI_TEST_CHECK( FilterMode::NEAREST == magnifyFilter );
535 actor.SetFilterMode( FilterMode::LINEAR, FilterMode::LINEAR );
536 actor.GetFilterMode( minifyFilter, magnifyFilter );
537 DALI_TEST_CHECK( FilterMode::LINEAR == minifyFilter );
538 DALI_TEST_CHECK( FilterMode::LINEAR == magnifyFilter );
541 actor.SetFilterMode( FilterMode::NEAREST, FilterMode::LINEAR );
542 actor.GetFilterMode( minifyFilter, magnifyFilter );
543 DALI_TEST_CHECK( FilterMode::NEAREST == minifyFilter );
544 DALI_TEST_CHECK( FilterMode::LINEAR == magnifyFilter );
547 actor.SetFilterMode( FilterMode::LINEAR, FilterMode::NEAREST );
548 actor.GetFilterMode( minifyFilter, magnifyFilter );
549 DALI_TEST_CHECK( FilterMode::LINEAR == minifyFilter );
550 DALI_TEST_CHECK( FilterMode::NEAREST == magnifyFilter );
555 int UtcDaliRenderableActorSetFilterMode(void)
557 TestApplication application;
559 tet_infoline("Testing Dali::RenderableActor::SetFilterMode()");
561 BitmapImage img = BitmapImage::New( 1,1 );
562 ImageActor actor = ImageActor::New( img );
564 actor.SetSize(100.0f, 100.0f);
565 actor.SetParentOrigin(ParentOrigin::CENTER);
566 actor.SetAnchorPoint(AnchorPoint::CENTER);
568 Stage::GetCurrent().Add(actor);
570 /**************************************************************/
573 TraceCallStack& texParameterTrace = application.GetGlAbstraction().GetTexParameterTrace();
574 texParameterTrace.Reset();
575 texParameterTrace.Enable( true );
577 actor.SetFilterMode( FilterMode::DEFAULT, FilterMode::DEFAULT );
579 // Flush the queue and render once
580 application.SendNotification();
581 application.Render();
583 texParameterTrace.Enable( false );
585 std::stringstream out;
587 // Verify actor gl state
589 // There are two calls to TexParameteri when the texture is first created
590 // Texture mag filter is not called as the first time set it uses the system default
591 DALI_TEST_EQUALS( texParameterTrace.CountMethod( "TexParameteri" ), 3, TEST_LOCATION);
594 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_MIN_FILTER << ", " << GL_LINEAR;
595 DALI_TEST_EQUALS( texParameterTrace.TestMethodAndParams(2, "TexParameteri", out.str()), true, TEST_LOCATION);
597 /**************************************************************/
600 texParameterTrace = application.GetGlAbstraction().GetTexParameterTrace();
601 texParameterTrace.Reset();
602 texParameterTrace.Enable( true );
604 actor.SetFilterMode( FilterMode::DEFAULT, FilterMode::DEFAULT );
606 // Flush the queue and render once
607 application.SendNotification();
608 application.Render();
610 texParameterTrace.Enable( false );
612 // Verify actor gl state
614 // Should not make any calls when settings are the same
615 DALI_TEST_EQUALS( texParameterTrace.CountMethod( "TexParameteri" ), 0, TEST_LOCATION);
617 /**************************************************************/
620 texParameterTrace.Reset();
621 texParameterTrace.Enable( true );
623 actor.SetFilterMode( FilterMode::NEAREST, FilterMode::NEAREST );
625 // Flush the queue and render once
626 application.SendNotification();
627 application.Render();
629 texParameterTrace.Enable( false );
631 // Verify actor gl state
632 DALI_TEST_EQUALS( texParameterTrace.CountMethod( "TexParameteri" ), 2, TEST_LOCATION);
635 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_MIN_FILTER << ", " << GL_NEAREST;
636 DALI_TEST_EQUALS( texParameterTrace.TestMethodAndParams(0, "TexParameteri", out.str()), true, TEST_LOCATION);
639 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_MAG_FILTER << ", " << GL_NEAREST;
640 DALI_TEST_EQUALS( texParameterTrace.TestMethodAndParams(1, "TexParameteri", out.str()), true, TEST_LOCATION);
642 /**************************************************************/
645 texParameterTrace.Reset();
646 texParameterTrace.Enable( true );
648 actor.SetFilterMode( FilterMode::LINEAR, FilterMode::LINEAR );
650 // Flush the queue and render once
651 application.SendNotification();
652 application.Render();
654 texParameterTrace.Enable( false );
656 // Verify actor gl state
657 DALI_TEST_EQUALS( texParameterTrace.CountMethod( "TexParameteri" ), 2, TEST_LOCATION);
660 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_MIN_FILTER << ", " << GL_LINEAR;
661 DALI_TEST_EQUALS( texParameterTrace.TestMethodAndParams(0, "TexParameteri", out.str()), true, TEST_LOCATION);
664 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_MAG_FILTER << ", " << GL_LINEAR;
665 DALI_TEST_EQUALS( texParameterTrace.TestMethodAndParams(1, "TexParameteri", out.str()), true, TEST_LOCATION);
668 /**************************************************************/
671 texParameterTrace.Reset();
672 texParameterTrace.Enable( true );
674 actor.SetFilterMode( FilterMode::NEAREST, FilterMode::LINEAR );
676 // Flush the queue and render once
677 application.SendNotification();
678 application.Render();
680 texParameterTrace.Enable( false );
682 // Verify actor gl state
683 DALI_TEST_EQUALS( texParameterTrace.CountMethod( "TexParameteri" ), 1, TEST_LOCATION);
686 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_MIN_FILTER << ", " << GL_NEAREST;
687 DALI_TEST_EQUALS( texParameterTrace.TestMethodAndParams(0, "TexParameteri", out.str()), true, TEST_LOCATION);
689 /**************************************************************/
692 texParameterTrace.Reset();
693 texParameterTrace.Enable( true );
695 actor.SetFilterMode( FilterMode::DEFAULT, FilterMode::DEFAULT );
697 // Flush the queue and render once
698 application.SendNotification();
699 application.Render();
701 texParameterTrace.Enable( false );
703 // Verify actor gl state
704 DALI_TEST_EQUALS( texParameterTrace.CountMethod( "TexParameteri" ), 1, TEST_LOCATION);
707 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_MIN_FILTER << ", " << GL_LINEAR;
708 DALI_TEST_EQUALS( texParameterTrace.TestMethodAndParams(0, "TexParameteri", out.str()), true, TEST_LOCATION);
710 /**************************************************************/
713 texParameterTrace.Reset();
714 texParameterTrace.Enable( true );
716 actor.SetFilterMode( FilterMode::NONE, FilterMode::NONE );
718 // Flush the queue and render once
719 application.SendNotification();
720 application.Render();
722 texParameterTrace.Enable( false );
724 // Verify actor gl state
725 DALI_TEST_EQUALS( texParameterTrace.CountMethod( "TexParameteri" ), 1, TEST_LOCATION);
728 out << GL_TEXTURE_2D << ", " << GL_TEXTURE_MIN_FILTER << ", " << GL_NEAREST_MIPMAP_LINEAR;
729 DALI_TEST_EQUALS( texParameterTrace.TestMethodAndParams(0, "TexParameteri", out.str()), true, TEST_LOCATION);
731 /**************************************************************/
733 Stage::GetCurrent().Remove(actor);
738 int UtcDaliRenderableActorSetShaderEffect(void)
740 TestApplication application;
741 BitmapImage img = BitmapImage::New( 1,1 );
742 ImageActor actor = ImageActor::New( img );
743 Stage::GetCurrent().Add( actor );
745 // flush the queue and render once
746 application.SendNotification();
747 application.Render();
748 GLuint lastShaderCompiledBefore = application.GetGlAbstraction().GetLastShaderCompiled();
750 application.GetGlAbstraction().EnableShaderCallTrace( true );
752 const std::string vertexShader = "UtcDaliRenderableActorSetShaderEffect-VertexSource";
753 const std::string fragmentShader = "UtcDaliRenderableActorSetShaderEffect-FragmentSource";
754 ShaderEffect effect = ShaderEffect::New(vertexShader, fragmentShader );
755 DALI_TEST_CHECK( effect != actor.GetShaderEffect() );
757 actor.SetShaderEffect( effect );
758 DALI_TEST_CHECK( effect == actor.GetShaderEffect() );
760 // flush the queue and render once
761 application.SendNotification();
762 application.Render();
764 GLuint lastShaderCompiledAfter = application.GetGlAbstraction().GetLastShaderCompiled();
765 DALI_TEST_EQUALS( lastShaderCompiledAfter, lastShaderCompiledBefore + 2, TEST_LOCATION );
767 std::string actualVertexShader = application.GetGlAbstraction().GetShaderSource( lastShaderCompiledBefore + 1 );
768 DALI_TEST_EQUALS( vertexShader,
769 actualVertexShader.substr( actualVertexShader.length() - vertexShader.length() ), TEST_LOCATION );
770 std::string actualFragmentShader = application.GetGlAbstraction().GetShaderSource( lastShaderCompiledBefore + 2 );
771 DALI_TEST_EQUALS( fragmentShader,
772 actualFragmentShader.substr( actualFragmentShader.length() - fragmentShader.length() ), TEST_LOCATION );
777 int UtcDaliRenderableActorGetShaderEffect(void)
779 TestApplication application;
780 TextActor actor = TextActor::New();
782 ShaderEffect effect = ShaderEffect::New("UtcDaliRenderableActorGetShaderEffect-VertexSource", "UtcDaliRenderableActorGetShaderEffect-FragmentSource" );
783 actor.SetShaderEffect(effect);
785 DALI_TEST_CHECK(effect == actor.GetShaderEffect());
789 int UtcDaliRenderableActorRemoveShaderEffect01(void)
791 TestApplication application;
792 TextActor actor = TextActor::New();
794 ShaderEffect defaultEffect = actor.GetShaderEffect();
796 ShaderEffect effect = ShaderEffect::New("UtcDaliRenderableActorRemoveShaderEffect-VertexSource", "UtcDaliRenderableActorRemoveShaderEffect-FragmentSource" );
797 actor.SetShaderEffect(effect);
799 DALI_TEST_CHECK(effect == actor.GetShaderEffect());
801 actor.RemoveShaderEffect();
803 DALI_TEST_CHECK(defaultEffect == actor.GetShaderEffect());
807 int UtcDaliRenderableActorRemoveShaderEffect02(void)
809 TestApplication application;
810 TextActor actor = TextActor::New();
812 ShaderEffect defaultEffect = actor.GetShaderEffect();
814 actor.RemoveShaderEffect();
816 DALI_TEST_CHECK(defaultEffect == actor.GetShaderEffect());
820 int UtcDaliSetShaderEffectRecursively(void)
822 TestApplication application;
830 BitmapImage img = BitmapImage::New( 1,1 );
831 ImageActor actor1 = ImageActor::New( img );
832 Actor actor2 = Actor::New();
833 actor1.Add( actor2 );
834 Actor actor3 = Actor::New();
835 actor2.Add( actor3 );
836 TextActor textactor = TextActor::New( "Foo" );
837 actor2.Add( textactor );
838 ImageActor imageactor = ImageActor::New( img );
839 actor3.Add( imageactor );
840 Actor actor4 = Actor::New();
841 actor1.Add( actor4 );
842 Stage::GetCurrent().Add( actor1 );
844 // flush the queue and render once
845 application.SendNotification();
846 application.Render();
847 GLuint lastShaderCompiledBefore = application.GetGlAbstraction().GetLastShaderCompiled();
849 application.GetGlAbstraction().EnableShaderCallTrace( true );
851 const std::string vertexShader = "UtcDaliRenderableActorSetShaderEffect-VertexSource";
852 const std::string fragmentShader = "UtcDaliRenderableActorSetShaderEffect-FragmentSource";
853 // test with empty effect
855 SetShaderEffectRecursively( actor1, effect );
857 effect = ShaderEffect::New(vertexShader, fragmentShader );
859 DALI_TEST_CHECK( effect != actor1.GetShaderEffect() );
860 DALI_TEST_CHECK( effect != textactor.GetShaderEffect() );
861 DALI_TEST_CHECK( effect != imageactor.GetShaderEffect() );
863 SetShaderEffectRecursively( actor1, effect );
864 DALI_TEST_CHECK( effect == textactor.GetShaderEffect() );
865 DALI_TEST_CHECK( effect == imageactor.GetShaderEffect() );
867 // flush the queue and render once
868 application.SendNotification();
869 application.Render();
871 GLuint lastShaderCompiledAfter = application.GetGlAbstraction().GetLastShaderCompiled();
872 DALI_TEST_EQUALS( lastShaderCompiledAfter, lastShaderCompiledBefore + 2, TEST_LOCATION );
874 std::string actualVertexShader = application.GetGlAbstraction().GetShaderSource( lastShaderCompiledBefore + 1 );
875 DALI_TEST_EQUALS( vertexShader,
876 actualVertexShader.substr( actualVertexShader.length() - vertexShader.length() ), TEST_LOCATION );
877 std::string actualFragmentShader = application.GetGlAbstraction().GetShaderSource( lastShaderCompiledBefore + 2 );
878 DALI_TEST_EQUALS( fragmentShader,
879 actualFragmentShader.substr( actualFragmentShader.length() - fragmentShader.length() ), TEST_LOCATION );
881 // remove from one that does not have shader
882 RemoveShaderEffectRecursively( actor4 );
885 RemoveShaderEffectRecursively( actor3 );
886 DALI_TEST_CHECK( effect == textactor.GetShaderEffect() );
887 DALI_TEST_CHECK( effect != imageactor.GetShaderEffect() );
889 // test with empty actor just to check it does not crash
891 SetShaderEffectRecursively( empty, effect );
892 RemoveShaderEffectRecursively( empty );
894 // test with actor with no children just to check it does not crash
895 Actor loner = Actor::New();
896 Stage::GetCurrent().Add( loner );
897 SetShaderEffectRecursively( loner, effect );
898 DALI_TEST_CHECK( effect != loner.GetShaderEffect() ); // base actor does not have shader effects
899 RemoveShaderEffectRecursively( loner );