2 * Copyright (c) 2015 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.
18 #include <dali/public-api/dali-core.h>
19 #include <dali-test-suite-utils.h>
23 #include <mesh-builder.h>
27 void TestConstraintNoBlue( Vector4& current, const PropertyInputContainer& inputs )
33 void renderer_test_startup(void)
35 test_return_value = TET_UNDEF;
38 void renderer_test_cleanup(void)
40 test_return_value = TET_PASS;
44 int UtcDaliRendererNew01(void)
46 TestApplication application;
48 Geometry geometry = CreateQuadGeometry();
49 Material material = CreateMaterial(1.0f);
50 Renderer renderer = Renderer::New(geometry, material);
52 DALI_TEST_EQUALS( (bool)renderer, true, TEST_LOCATION );
56 int UtcDaliRendererNew02(void)
58 TestApplication application;
60 DALI_TEST_EQUALS( (bool)renderer, false, TEST_LOCATION );
64 int UtcDaliRendererDownCast01(void)
66 TestApplication application;
68 Geometry geometry = CreateQuadGeometry();
69 Material material = CreateMaterial(1.0f);
70 Renderer renderer = Renderer::New(geometry, material);
72 BaseHandle handle(renderer);
73 Renderer renderer2 = Renderer::DownCast(handle);
74 DALI_TEST_EQUALS( (bool)renderer2, true, TEST_LOCATION );
78 int UtcDaliRendererDownCast02(void)
80 TestApplication application;
82 Handle handle = Handle::New(); // Create a custom object
83 Renderer renderer = Renderer::DownCast(handle);
84 DALI_TEST_EQUALS( (bool)renderer, false, TEST_LOCATION );
89 int UtcDaliRendererConstraint01(void)
91 TestApplication application;
93 tet_infoline("Test that a non-uniform renderer property can be constrained");
95 Shader shader = Shader::New("VertexSource", "FragmentSource");
96 Material material = Material::New( shader );
97 material.SetProperty(Material::Property::COLOR, Color::WHITE);
99 Geometry geometry = CreateQuadGeometry();
100 Renderer renderer = Renderer::New( geometry, material );
102 Actor actor = Actor::New();
103 actor.AddRenderer(renderer);
104 actor.SetSize(400, 400);
105 Stage::GetCurrent().Add(actor);
107 Vector4 initialColor = Color::WHITE;
108 Property::Index colorIndex = renderer.RegisterProperty( "uFadeColor", initialColor );
110 application.SendNotification();
111 application.Render(0);
112 DALI_TEST_EQUALS( renderer.GetProperty<Vector4>(colorIndex), initialColor, TEST_LOCATION );
115 Constraint constraint = Constraint::New<Vector4>( renderer, colorIndex, TestConstraintNoBlue );
117 application.SendNotification();
118 application.Render(0);
120 // Expect no blue component in either buffer - yellow
121 DALI_TEST_EQUALS( renderer.GetProperty<Vector4>(colorIndex), Color::YELLOW, TEST_LOCATION );
122 application.Render(0);
123 DALI_TEST_EQUALS( renderer.GetProperty<Vector4>(colorIndex), Color::YELLOW, TEST_LOCATION );
125 renderer.RemoveConstraints();
126 renderer.SetProperty(colorIndex, Color::WHITE );
127 application.SendNotification();
128 application.Render(0);
129 DALI_TEST_EQUALS( renderer.GetProperty<Vector4>(colorIndex), Color::WHITE, TEST_LOCATION );
134 int UtcDaliRendererConstraint02(void)
136 TestApplication application;
138 tet_infoline("Test that a uniform map renderer property can be constrained");
140 Shader shader = Shader::New("VertexSource", "FragmentSource");
141 Material material = Material::New( shader );
142 material.SetProperty(Material::Property::COLOR, Color::WHITE);
144 Geometry geometry = CreateQuadGeometry();
145 Renderer renderer = Renderer::New( geometry, material );
147 Actor actor = Actor::New();
148 actor.AddRenderer(renderer);
149 actor.SetSize(400, 400);
150 Stage::GetCurrent().Add(actor);
151 application.SendNotification();
152 application.Render(0);
154 Vector4 initialColor = Color::WHITE;
155 Property::Index colorIndex = renderer.RegisterProperty( "uFadeColor", initialColor );
157 TestGlAbstraction& gl = application.GetGlAbstraction();
159 application.SendNotification();
160 application.Render(0);
162 Vector4 actualValue(Vector4::ZERO);
163 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
164 DALI_TEST_EQUALS( actualValue, initialColor, TEST_LOCATION );
167 Constraint constraint = Constraint::New<Vector4>( renderer, colorIndex, TestConstraintNoBlue );
169 application.SendNotification();
170 application.Render(0);
172 // Expect no blue component in either buffer - yellow
173 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
174 DALI_TEST_EQUALS( actualValue, Color::YELLOW, TEST_LOCATION );
176 application.Render(0);
177 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
178 DALI_TEST_EQUALS( actualValue, Color::YELLOW, TEST_LOCATION );
180 renderer.RemoveConstraints();
181 renderer.SetProperty(colorIndex, Color::WHITE );
182 application.SendNotification();
183 application.Render(0);
185 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
186 DALI_TEST_EQUALS( actualValue, Color::WHITE, TEST_LOCATION );
193 int UtcDaliRendererAnimatedProperty01(void)
195 TestApplication application;
197 tet_infoline("Test that a non-uniform renderer property can be animated");
199 Shader shader = Shader::New("VertexSource", "FragmentSource");
200 Material material = Material::New( shader );
201 material.SetProperty(Material::Property::COLOR, Color::WHITE);
203 Geometry geometry = CreateQuadGeometry();
204 Renderer renderer = Renderer::New( geometry, material );
206 Actor actor = Actor::New();
207 actor.AddRenderer(renderer);
208 actor.SetSize(400, 400);
209 Stage::GetCurrent().Add(actor);
211 Vector4 initialColor = Color::WHITE;
212 Property::Index colorIndex = renderer.RegisterProperty( "uFadeColor", initialColor );
214 application.SendNotification();
215 application.Render(0);
216 DALI_TEST_EQUALS( renderer.GetProperty<Vector4>(colorIndex), initialColor, TEST_LOCATION );
218 Animation animation = Animation::New(1.0f);
219 KeyFrames keyFrames = KeyFrames::New();
220 keyFrames.Add(0.0f, initialColor);
221 keyFrames.Add(1.0f, Color::TRANSPARENT);
222 animation.AnimateBetween( Property( renderer, colorIndex ), keyFrames );
225 application.SendNotification();
226 application.Render(500);
228 DALI_TEST_EQUALS( renderer.GetProperty<Vector4>(colorIndex), Color::WHITE * 0.5f, TEST_LOCATION );
230 application.Render(500);
232 DALI_TEST_EQUALS( renderer.GetProperty<Vector4>(colorIndex), Color::TRANSPARENT, TEST_LOCATION );
237 int UtcDaliRendererAnimatedProperty02(void)
239 TestApplication application;
241 tet_infoline("Test that a uniform map renderer property can be animated");
243 Shader shader = Shader::New("VertexSource", "FragmentSource");
244 Material material = Material::New( shader );
245 material.SetProperty(Material::Property::COLOR, Color::WHITE);
247 Geometry geometry = CreateQuadGeometry();
248 Renderer renderer = Renderer::New( geometry, material );
250 Actor actor = Actor::New();
251 actor.AddRenderer(renderer);
252 actor.SetSize(400, 400);
253 Stage::GetCurrent().Add(actor);
254 application.SendNotification();
255 application.Render(0);
257 Vector4 initialColor = Color::WHITE;
258 Property::Index colorIndex = renderer.RegisterProperty( "uFadeColor", initialColor );
260 TestGlAbstraction& gl = application.GetGlAbstraction();
262 application.SendNotification();
263 application.Render(0);
265 Vector4 actualValue(Vector4::ZERO);
266 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
267 DALI_TEST_EQUALS( actualValue, initialColor, TEST_LOCATION );
269 Animation animation = Animation::New(1.0f);
270 KeyFrames keyFrames = KeyFrames::New();
271 keyFrames.Add(0.0f, initialColor);
272 keyFrames.Add(1.0f, Color::TRANSPARENT);
273 animation.AnimateBetween( Property( renderer, colorIndex ), keyFrames );
276 application.SendNotification();
277 application.Render(500);
279 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
280 DALI_TEST_EQUALS( actualValue, Color::WHITE * 0.5f, TEST_LOCATION );
282 application.Render(500);
283 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
284 DALI_TEST_EQUALS( actualValue, Color::TRANSPARENT, TEST_LOCATION );
292 int UtcDaliRendererUniformMapPrecendence01(void)
294 TestApplication application;
296 tet_infoline("Test the uniform map precedence is applied properly");
298 Image image = BufferImage::New( 64, 64, Pixel::RGBA8888 );
299 Sampler sampler = Sampler::New(image, "sTexture");
300 sampler.SetUniformName( "sEffectTexture" );
302 Shader shader = Shader::New("VertexSource", "FragmentSource");
303 Material material = Material::New( shader );
304 material.AddSampler( sampler );
305 material.SetProperty(Material::Property::COLOR, Color::WHITE);
307 PropertyBuffer vertexBuffer = CreatePropertyBuffer();
308 Geometry geometry = CreateQuadGeometryFromBuffer(vertexBuffer);
309 Renderer renderer = Renderer::New( geometry, material );
311 Actor actor = Actor::New();
312 actor.AddRenderer(renderer);
313 actor.SetSize(400, 400);
314 Stage::GetCurrent().Add(actor);
315 application.SendNotification();
316 application.Render(0);
318 renderer.RegisterProperty( "uFadeColor", Color::RED );
320 actor.RegisterProperty( "uFadeColor", Color::GREEN );
322 Property::Index materialFadeColorIndex = material.RegisterProperty( "uFadeColor", Color::BLUE );
324 sampler.RegisterProperty( "uFadeColor", Color::CYAN );
325 shader.RegisterProperty( "uFadeColor", Color::MAGENTA );
327 geometry.RegisterProperty( "uFadeColor", Color::YELLOW );
329 vertexBuffer.RegisterProperty( "uFadeColor", Color::BLACK );
332 TestGlAbstraction& gl = application.GetGlAbstraction();
334 application.SendNotification();
335 application.Render(0);
337 // Expect that the renderer's fade color property is accessed
338 Vector4 actualValue(Vector4::ZERO);
339 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
340 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
342 // Animate material's fade color property. Should be no change to uniform
343 Animation animation = Animation::New(1.0f);
344 KeyFrames keyFrames = KeyFrames::New();
345 keyFrames.Add(0.0f, Color::WHITE);
346 keyFrames.Add(1.0f, Color::TRANSPARENT);
347 animation.AnimateBetween( Property( material, materialFadeColorIndex ), keyFrames );
350 application.SendNotification();
351 application.Render(500);
353 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
354 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
356 application.Render(500);
357 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
358 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
363 int UtcDaliRendererUniformMapPrecendence02(void)
365 TestApplication application;
367 tet_infoline("Test the uniform map precedence is applied properly");
369 Image image = BufferImage::New( 64, 64, Pixel::RGBA8888 );
370 Sampler sampler = Sampler::New(image, "sTexture");
371 sampler.SetUniformName( "sEffectTexture" );
373 Shader shader = Shader::New("VertexSource", "FragmentSource");
374 Material material = Material::New( shader );
375 material.AddSampler( sampler );
376 material.SetProperty(Material::Property::COLOR, Color::WHITE);
378 PropertyBuffer vertexBuffer = CreatePropertyBuffer();
379 Geometry geometry = CreateQuadGeometryFromBuffer(vertexBuffer);
380 Renderer renderer = Renderer::New( geometry, material );
382 Actor actor = Actor::New();
383 actor.AddRenderer(renderer);
384 actor.SetSize(400, 400);
385 Stage::GetCurrent().Add(actor);
386 application.SendNotification();
387 application.Render(0);
389 // Don't add property / uniform map to renderer
391 actor.RegisterProperty( "uFadeColor", Color::GREEN );
393 Property::Index materialFadeColorIndex = material.RegisterProperty( "uFadeColor", Color::BLUE );
395 sampler.RegisterProperty( "uFadeColor", Color::CYAN );
396 shader.RegisterProperty( "uFadeColor", Color::MAGENTA );
398 geometry.RegisterProperty( "uFadeColor", Color::YELLOW );
400 vertexBuffer.RegisterProperty( "uFadeColor", Color::BLACK );
403 TestGlAbstraction& gl = application.GetGlAbstraction();
405 application.SendNotification();
406 application.Render(0);
408 // Expect that the actor's fade color property is accessed
409 Vector4 actualValue(Vector4::ZERO);
410 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
411 DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
413 // Animate material's fade color property. Should be no change to uniform
414 Animation animation = Animation::New(1.0f);
415 KeyFrames keyFrames = KeyFrames::New();
416 keyFrames.Add(0.0f, Color::WHITE);
417 keyFrames.Add(1.0f, Color::TRANSPARENT);
418 animation.AnimateBetween( Property( material, materialFadeColorIndex ), keyFrames );
421 application.SendNotification();
422 application.Render(500);
424 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
425 DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
427 application.Render(500);
428 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
429 DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
435 int UtcDaliRendererUniformMapPrecendence03(void)
437 TestApplication application;
439 tet_infoline("Test the uniform map precedence is applied properly");
441 Image image = BufferImage::New( 64, 64, Pixel::RGBA8888 );
442 Sampler sampler = Sampler::New(image, "sTexture");
443 sampler.SetUniformName( "sEffectTexture" );
445 Shader shader = Shader::New("VertexSource", "FragmentSource");
446 Material material = Material::New( shader );
447 material.AddSampler( sampler );
448 material.SetProperty(Material::Property::COLOR, Color::WHITE);
450 PropertyBuffer vertexBuffer = CreatePropertyBuffer();
451 Geometry geometry = CreateQuadGeometryFromBuffer(vertexBuffer);
452 Renderer renderer = Renderer::New( geometry, material );
454 Actor actor = Actor::New();
455 actor.AddRenderer(renderer);
456 actor.SetSize(400, 400);
457 Stage::GetCurrent().Add(actor);
458 application.SendNotification();
459 application.Render(0);
461 // Don't add property / uniform map to renderer or actor
463 material.RegisterProperty( "uFadeColor", Color::BLUE );
465 sampler.RegisterProperty( "uFadeColor", Color::CYAN );
466 shader.RegisterProperty( "uFadeColor", Color::MAGENTA );
468 Property::Index geometryFadeColorIndex = geometry.RegisterProperty( "uFadeColor", Color::YELLOW );
470 vertexBuffer.RegisterProperty( "uFadeColor", Color::BLACK );
473 TestGlAbstraction& gl = application.GetGlAbstraction();
475 application.SendNotification();
476 application.Render(0);
478 // Expect that the material's fade color property is accessed
479 Vector4 actualValue(Vector4::ZERO);
480 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
481 DALI_TEST_EQUALS( actualValue, Color::BLUE, TEST_LOCATION );
483 // Animate geometry's fade color property. Should be no change to uniform
484 Animation animation = Animation::New(1.0f);
485 KeyFrames keyFrames = KeyFrames::New();
486 keyFrames.Add(0.0f, Color::WHITE);
487 keyFrames.Add(1.0f, Color::TRANSPARENT);
488 animation.AnimateBetween( Property( geometry, geometryFadeColorIndex ), keyFrames );
491 application.SendNotification();
492 application.Render(500);
494 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
495 DALI_TEST_EQUALS( actualValue, Color::BLUE, TEST_LOCATION );
497 application.Render(500);
498 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
499 DALI_TEST_EQUALS( actualValue, Color::BLUE, TEST_LOCATION );
505 int UtcDaliRendererUniformMapPrecendence04(void)
507 TestApplication application;
509 tet_infoline("Test the uniform map precedence is applied properly");
511 Image image = BufferImage::New( 64, 64, Pixel::RGBA8888 );
512 Sampler sampler = Sampler::New(image, "sTexture");
513 sampler.SetUniformName( "sEffectTexture" );
515 Shader shader = Shader::New("VertexSource", "FragmentSource");
516 Material material = Material::New( shader );
517 material.AddSampler( sampler );
518 material.SetProperty(Material::Property::COLOR, Color::WHITE);
520 PropertyBuffer vertexBuffer = CreatePropertyBuffer();
521 Geometry geometry = CreateQuadGeometryFromBuffer(vertexBuffer);
522 Renderer renderer = Renderer::New( geometry, material );
524 Actor actor = Actor::New();
525 actor.AddRenderer(renderer);
526 actor.SetSize(400, 400);
527 Stage::GetCurrent().Add(actor);
528 application.SendNotification();
529 application.Render(0);
531 // Don't add property / uniform map to renderer/actor/material
533 sampler.RegisterProperty( "uFadeColor", Color::CYAN );
534 shader.RegisterProperty( "uFadeColor", Color::MAGENTA );
536 Property::Index geometryFadeColorIndex = geometry.RegisterProperty( "uFadeColor", Color::YELLOW );
538 vertexBuffer.RegisterProperty( "uFadeColor", Color::BLACK );
541 TestGlAbstraction& gl = application.GetGlAbstraction();
543 application.SendNotification();
544 application.Render(0);
546 // Expect that the sampler's fade color property is accessed
547 Vector4 actualValue(Vector4::ZERO);
548 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
549 DALI_TEST_EQUALS( actualValue, Color::CYAN, TEST_LOCATION );
551 // Animate geometry's fade color property. Should be no change to uniform
552 Animation animation = Animation::New(1.0f);
553 KeyFrames keyFrames = KeyFrames::New();
554 keyFrames.Add(0.0f, Color::WHITE);
555 keyFrames.Add(1.0f, Color::TRANSPARENT);
556 animation.AnimateBetween( Property( geometry, geometryFadeColorIndex ), keyFrames );
559 application.SendNotification();
560 application.Render(500);
562 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
563 DALI_TEST_EQUALS( actualValue, Color::CYAN, TEST_LOCATION );
565 application.Render(500);
566 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
567 DALI_TEST_EQUALS( actualValue, Color::CYAN, TEST_LOCATION );
572 int UtcDaliRendererUniformMapPrecendence05(void)
574 TestApplication application;
576 tet_infoline("Test the uniform map precedence is applied properly");
578 Image image = BufferImage::New( 64, 64, Pixel::RGBA8888 );
579 Sampler sampler = Sampler::New(image, "sTexture");
580 sampler.SetUniformName( "sEffectTexture" );
582 Shader shader = Shader::New("VertexSource", "FragmentSource");
583 Material material = Material::New( shader );
584 material.AddSampler( sampler );
585 material.SetProperty(Material::Property::COLOR, Color::WHITE);
587 PropertyBuffer vertexBuffer = CreatePropertyBuffer();
588 Geometry geometry = CreateQuadGeometryFromBuffer(vertexBuffer);
589 Renderer renderer = Renderer::New( geometry, material );
591 Actor actor = Actor::New();
592 actor.AddRenderer(renderer);
593 actor.SetSize(400, 400);
594 Stage::GetCurrent().Add(actor);
595 application.SendNotification();
596 application.Render(0);
598 // Don't add property / uniform map to renderer/actor/material/sampler
600 shader.RegisterProperty( "uFadeColor", Color::MAGENTA );
602 Property::Index geometryFadeColorIndex = geometry.RegisterProperty( "uFadeColor", Color::YELLOW );
604 vertexBuffer.RegisterProperty( "uFadeColor", Color::BLACK );
607 TestGlAbstraction& gl = application.GetGlAbstraction();
609 application.SendNotification();
610 application.Render(0);
612 // Expect that the shader's fade color property is accessed
613 Vector4 actualValue(Vector4::ZERO);
614 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
615 DALI_TEST_EQUALS( actualValue, Color::MAGENTA, TEST_LOCATION );
617 // Animate geometry's fade color property. Should be no change to uniform
618 Animation animation = Animation::New(1.0f);
619 KeyFrames keyFrames = KeyFrames::New();
620 keyFrames.Add(0.0f, Color::WHITE);
621 keyFrames.Add(1.0f, Color::TRANSPARENT);
622 animation.AnimateBetween( Property( geometry, geometryFadeColorIndex ), keyFrames );
625 application.SendNotification();
626 application.Render(500);
628 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
629 DALI_TEST_EQUALS( actualValue, Color::MAGENTA, TEST_LOCATION );
631 application.Render(500);
632 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
633 DALI_TEST_EQUALS( actualValue, Color::MAGENTA, TEST_LOCATION );
638 int UtcDaliRendererUniformMapPrecendence06(void)
640 TestApplication application;
642 tet_infoline("Test the uniform map precedence is applied properly");
644 Image image = BufferImage::New( 64, 64, Pixel::RGBA8888 );
645 Sampler sampler = Sampler::New(image, "sTexture");
646 sampler.SetUniformName( "sEffectTexture" );
648 Shader shader = Shader::New("VertexSource", "FragmentSource");
649 Material material = Material::New( shader );
650 material.AddSampler( sampler );
651 material.SetProperty(Material::Property::COLOR, Color::WHITE);
653 PropertyBuffer vertexBuffer = CreatePropertyBuffer();
654 Geometry geometry = CreateQuadGeometryFromBuffer(vertexBuffer);
655 Renderer renderer = Renderer::New( geometry, material );
657 Actor actor = Actor::New();
658 actor.AddRenderer(renderer);
659 actor.SetSize(400, 400);
660 Stage::GetCurrent().Add(actor);
661 application.SendNotification();
662 application.Render(0);
664 // Don't add property / uniform map to renderer/actor/material/sampler/shader
666 geometry.RegisterProperty( "uFadeColor", Color::YELLOW );
668 Property::Index vertexFadeColorIndex = vertexBuffer.RegisterProperty( "uFadeColor", Color::BLACK );
671 TestGlAbstraction& gl = application.GetGlAbstraction();
673 application.SendNotification();
674 application.Render(0);
676 // Expect that the geometry's fade color property is accessed
677 Vector4 actualValue(Vector4::ZERO);
678 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
679 DALI_TEST_EQUALS( actualValue, Color::YELLOW, TEST_LOCATION );
681 // Animate vertex buffer's fade color property. Should be no change to uniform
682 Animation animation = Animation::New(1.0f);
683 KeyFrames keyFrames = KeyFrames::New();
684 keyFrames.Add(0.0f, Color::WHITE);
685 keyFrames.Add(1.0f, Color::TRANSPARENT);
686 animation.AnimateBetween( Property( vertexBuffer, vertexFadeColorIndex ), keyFrames );
689 application.SendNotification();
690 application.Render(500);
692 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
693 DALI_TEST_EQUALS( actualValue, Color::YELLOW, TEST_LOCATION );
695 application.Render(500);
696 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
697 DALI_TEST_EQUALS( actualValue, Color::YELLOW, TEST_LOCATION );
702 int UtcDaliRendererUniformMapPrecendence07(void)
704 TestApplication application;
706 tet_infoline("Test the uniform map precedence is applied properly");
708 Image image = BufferImage::New( 64, 64, Pixel::RGBA8888 );
709 Sampler sampler = Sampler::New(image, "sTexture");
710 sampler.SetUniformName( "sEffectTexture" );
712 Shader shader = Shader::New("VertexSource", "FragmentSource");
713 Material material = Material::New( shader );
714 material.AddSampler( sampler );
715 material.SetProperty(Material::Property::COLOR, Color::WHITE);
717 PropertyBuffer vertexBuffer = CreatePropertyBuffer();
718 Geometry geometry = CreateQuadGeometryFromBuffer(vertexBuffer);
719 Renderer renderer = Renderer::New( geometry, material );
721 Actor actor = Actor::New();
722 actor.AddRenderer(renderer);
723 actor.SetSize(400, 400);
724 Stage::GetCurrent().Add(actor);
725 application.SendNotification();
726 application.Render(0);
728 // Don't add property / uniform map to renderer/actor/material/sampler/shader/geometry
730 Property::Index vertexFadeColorIndex = vertexBuffer.RegisterProperty( "uFadeColor", Color::BLACK );
732 TestGlAbstraction& gl = application.GetGlAbstraction();
734 application.SendNotification();
735 application.Render(0);
737 // Expect that the vertex buffer's fade color property is accessed
738 Vector4 actualValue(Vector4::ZERO);
739 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
740 DALI_TEST_EQUALS( actualValue, Color::BLACK, TEST_LOCATION );
742 // Animate vertex buffer's fade color property. Should change the uniform
743 Animation animation = Animation::New(1.0f);
744 KeyFrames keyFrames = KeyFrames::New();
745 keyFrames.Add(0.0f, Color::WHITE);
746 keyFrames.Add(1.0f, Color::TRANSPARENT);
747 animation.AnimateBetween( Property( vertexBuffer, vertexFadeColorIndex ), keyFrames );
750 application.SendNotification();
751 application.Render(500);
753 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
754 DALI_TEST_EQUALS( actualValue, Color::WHITE*0.5f, TEST_LOCATION );
756 application.Render(500);
757 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", actualValue ) );
758 DALI_TEST_EQUALS( actualValue, Color::TRANSPARENT, TEST_LOCATION );
764 int UtcDaliRendererUniformMapMultipleUniforms01(void)
766 TestApplication application;
768 tet_infoline("Test the uniform maps are collected from all objects (same type)");
770 Image image = BufferImage::New( 64, 64, Pixel::RGBA8888 );
771 Sampler sampler = Sampler::New(image, "sTexture");
772 sampler.SetUniformName( "sEffectTexture" );
774 Shader shader = Shader::New("VertexSource", "FragmentSource");
775 Material material = Material::New( shader );
776 material.AddSampler( sampler );
777 material.SetProperty(Material::Property::COLOR, Color::WHITE);
779 PropertyBuffer vertexBuffer = CreatePropertyBuffer();
780 Geometry geometry = CreateQuadGeometryFromBuffer(vertexBuffer);
781 Renderer renderer = Renderer::New( geometry, material );
783 Actor actor = Actor::New();
784 actor.AddRenderer(renderer);
785 actor.SetSize(400, 400);
786 Stage::GetCurrent().Add(actor);
787 application.SendNotification();
788 application.Render(0);
790 renderer.RegisterProperty( "uUniform1", Color::RED );
791 actor.RegisterProperty( "uUniform2", Color::GREEN );
792 material.RegisterProperty( "uUniform3", Color::BLUE );
793 sampler.RegisterProperty( "uUniform4", Color::CYAN );
794 shader.RegisterProperty( "uUniform5", Color::MAGENTA );
795 geometry.RegisterProperty( "uUniform6", Color::YELLOW );
796 vertexBuffer.RegisterProperty( "uUniform7", Color::BLACK );
799 TestGlAbstraction& gl = application.GetGlAbstraction();
801 application.SendNotification();
802 application.Render(0);
804 // Expect that each of the object's uniforms are set
805 Vector4 uniform1Value(Vector4::ZERO);
806 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uUniform1", uniform1Value ) );
807 DALI_TEST_EQUALS( uniform1Value, Color::RED, TEST_LOCATION );
809 Vector4 uniform2Value(Vector4::ZERO);
810 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uUniform2", uniform2Value ) );
811 DALI_TEST_EQUALS( uniform2Value, Color::GREEN, TEST_LOCATION );
813 Vector4 uniform3Value(Vector4::ZERO);
814 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uUniform3", uniform3Value ) );
815 DALI_TEST_EQUALS( uniform3Value, Color::BLUE, TEST_LOCATION );
817 Vector4 uniform4Value(Vector4::ZERO);
818 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uUniform4", uniform4Value ) );
819 DALI_TEST_EQUALS( uniform4Value, Color::CYAN, TEST_LOCATION );
821 Vector4 uniform5Value(Vector4::ZERO);
822 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uUniform5", uniform5Value ) );
823 DALI_TEST_EQUALS( uniform5Value, Color::MAGENTA, TEST_LOCATION );
825 Vector4 uniform6Value(Vector4::ZERO);
826 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uUniform6", uniform6Value ) );
827 DALI_TEST_EQUALS( uniform6Value, Color::YELLOW, TEST_LOCATION );
829 Vector4 uniform7Value(Vector4::ZERO);
830 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uUniform7", uniform7Value ) );
831 DALI_TEST_EQUALS( uniform7Value, Color::BLACK, TEST_LOCATION );
838 int UtcDaliRendererUniformMapMultipleUniforms02(void)
840 TestApplication application;
842 tet_infoline("Test the uniform maps are collected from all objects (different types)");
844 Image image = BufferImage::New( 64, 64, Pixel::RGBA8888 );
845 Sampler sampler = Sampler::New(image, "sTexture");
846 sampler.SetUniformName( "sEffectTexture" );
848 Shader shader = Shader::New("VertexSource", "FragmentSource");
849 Material material = Material::New( shader );
850 material.AddSampler( sampler );
851 material.SetProperty(Material::Property::COLOR, Color::WHITE);
853 PropertyBuffer vertexBuffer = CreatePropertyBuffer();
854 Geometry geometry = CreateQuadGeometryFromBuffer(vertexBuffer);
855 Renderer renderer = Renderer::New( geometry, material );
857 Actor actor = Actor::New();
858 actor.AddRenderer(renderer);
859 actor.SetSize(400, 400);
860 Stage::GetCurrent().Add(actor);
861 application.SendNotification();
862 application.Render(0);
864 Property::Value value1(Color::RED);
865 renderer.RegisterProperty( "uFadeColor", value1 );
867 Property::Value value2(1.0f);
868 actor.RegisterProperty( "uFadeProgress", value2 );
870 Property::Value value3(Vector3(0.5f, 0.5f, 1.0f));
871 material.RegisterProperty( "uFadePosition", value3);
873 Property::Value value4(Vector2(0.5f, 1.0f));
874 sampler.RegisterProperty( "uFadeUV", value4 );
876 Property::Value value5(Matrix3::IDENTITY);
877 shader.RegisterProperty( "uANormalMatrix", value5 );
879 Property::Value value6(Matrix::IDENTITY);
880 geometry.RegisterProperty( "uAWorldMatrix", value6 );
882 Property::Value value7(7);
883 vertexBuffer.RegisterProperty( "uAnotherFadeColor", value7 );
886 TestGlAbstraction& gl = application.GetGlAbstraction();
888 application.SendNotification();
889 application.Render(0);
891 // Expect that each of the object's uniforms are set
892 Vector4 uniform1Value(Vector4::ZERO);
893 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uFadeColor", uniform1Value ) );
894 DALI_TEST_EQUALS( uniform1Value, value1.Get<Vector4>(), TEST_LOCATION );
896 float uniform2Value(0.0f);
897 DALI_TEST_CHECK( gl.GetUniformValue<float>( "uFadeProgress", uniform2Value ) );
898 DALI_TEST_EQUALS( uniform2Value, value2.Get<float>(), TEST_LOCATION );
900 Vector3 uniform3Value(Vector3::ZERO);
901 DALI_TEST_CHECK( gl.GetUniformValue<Vector3>( "uFadePosition", uniform3Value ) );
902 DALI_TEST_EQUALS( uniform3Value, value3.Get<Vector3>(), TEST_LOCATION );
904 Vector2 uniform4Value(Vector2::ZERO);
905 DALI_TEST_CHECK( gl.GetUniformValue<Vector2>( "uFadeUV", uniform4Value ) );
906 DALI_TEST_EQUALS( uniform4Value, value4.Get<Vector2>(), TEST_LOCATION );
908 Matrix3 uniform5Value;
909 DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uANormalMatrix", uniform5Value ) );
910 DALI_TEST_EQUALS( uniform5Value, value5.Get<Matrix3>(), TEST_LOCATION );
912 Matrix uniform6Value;
913 DALI_TEST_CHECK( gl.GetUniformValue<Matrix>( "uAWorldMatrix", uniform6Value ) );
914 DALI_TEST_EQUALS( uniform6Value, value6.Get<Matrix>(), TEST_LOCATION );
916 int uniform7Value = 0;
917 DALI_TEST_CHECK( gl.GetUniformValue<int>( "uAnotherFadeColor", uniform7Value ) );
918 DALI_TEST_EQUALS( uniform7Value, value7.Get<int>(), TEST_LOCATION );