X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali%2Futc-Dali-Renderer.cpp;h=ba640e0e748971abf57e00a58457dccb86b45031;hb=df66eaa6145d1d1ec9c43f49b7595b9cb359d336;hp=3a94cce995cbe433cbde29d8deab662ef6fabaf5;hpb=2d419da00f8544182a37e4009248a0b669f4790a;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/automated-tests/src/dali/utc-Dali-Renderer.cpp b/automated-tests/src/dali/utc-Dali-Renderer.cpp index 3a94cce..ba640e0 100644 --- a/automated-tests/src/dali/utc-Dali-Renderer.cpp +++ b/automated-tests/src/dali/utc-Dali-Renderer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -698,6 +698,8 @@ int UtcDaliRendererBlendOptions05(void) actor.AddRenderer(renderer); actor.SetProperty(Actor::Property::SIZE, Vector2(400, 400)); application.GetScene().Add(actor); + TestGlAbstraction& glAbstraction = application.GetGlAbstraction(); + glAbstraction.EnableEnableDisableCallTrace(true); if(Dali::Capabilities::IsBlendEquationSupported(DevelBlendEquation::MAX)) { @@ -756,48 +758,93 @@ int UtcDaliRendererBlendOptions05(void) { renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::MULTIPLY); DALI_TEST_EQUALS((int)DevelBlendEquation::MULTIPLY, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_MULTIPLY, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::SCREEN); DALI_TEST_EQUALS((int)DevelBlendEquation::SCREEN, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_SCREEN, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::OVERLAY); DALI_TEST_EQUALS((int)DevelBlendEquation::OVERLAY, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_OVERLAY, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::DARKEN); DALI_TEST_EQUALS((int)DevelBlendEquation::DARKEN, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_DARKEN, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::LIGHTEN); DALI_TEST_EQUALS((int)DevelBlendEquation::LIGHTEN, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_LIGHTEN, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::COLOR_DODGE); DALI_TEST_EQUALS((int)DevelBlendEquation::COLOR_DODGE, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_COLORDODGE, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::COLOR_BURN); DALI_TEST_EQUALS((int)DevelBlendEquation::COLOR_BURN, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_COLORBURN, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::HARD_LIGHT); DALI_TEST_EQUALS((int)DevelBlendEquation::HARD_LIGHT, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_HARDLIGHT, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::SOFT_LIGHT); DALI_TEST_EQUALS((int)DevelBlendEquation::SOFT_LIGHT, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_SOFTLIGHT, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::DIFFERENCE); DALI_TEST_EQUALS((int)DevelBlendEquation::DIFFERENCE, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_DIFFERENCE, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::EXCLUSION); DALI_TEST_EQUALS((int)DevelBlendEquation::EXCLUSION, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_EXCLUSION, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::HUE); DALI_TEST_EQUALS((int)DevelBlendEquation::HUE, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_HSL_HUE, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::SATURATION); DALI_TEST_EQUALS((int)DevelBlendEquation::SATURATION, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_HSL_SATURATION, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::COLOR); DALI_TEST_EQUALS((int)DevelBlendEquation::COLOR, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_HSL_COLOR, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::BLEND_EQUATION, DevelBlendEquation::LUMINOSITY); DALI_TEST_EQUALS((int)DevelBlendEquation::LUMINOSITY, renderer.GetProperty(DevelRenderer::Property::BLEND_EQUATION), TEST_LOCATION); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS(glAbstraction.GetLastBlendEquationRgb(), GL_HSL_LUMINOSITY, TEST_LOCATION); } END_TEST; @@ -1411,9 +1458,12 @@ int UtcDaliRendererPreMultipledAlpha(void) application.Render(); Vector4 actualValue(Vector4::ZERO); + Vector4 actualActorColor(Vector4::ZERO); TestGlAbstraction& gl = application.GetGlAbstraction(); DALI_TEST_CHECK(gl.GetUniformValue("uColor", actualValue)); DALI_TEST_EQUALS(actualValue, Vector4(1.0f, 0.0f, 1.0f, 0.5f), TEST_LOCATION); + DALI_TEST_CHECK(gl.GetUniformValue("uActorColor", actualActorColor)); + DALI_TEST_EQUALS(actualActorColor, Vector4(1.0f, 0.0f, 1.0f, 0.5f), TEST_LOCATION); // Enable pre-multiplied alpha renderer.SetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, true); @@ -1441,6 +1491,9 @@ int UtcDaliRendererPreMultipledAlpha(void) DALI_TEST_CHECK(gl.GetUniformValue("uColor", actualValue)); DALI_TEST_EQUALS(actualValue, Vector4(0.5f, 0.0f, 0.5f, 0.5f), TEST_LOCATION); + // Note : uActorColor doesn't premultiplied. + DALI_TEST_CHECK(gl.GetUniformValue("uActorColor", actualActorColor)); + DALI_TEST_EQUALS(actualActorColor, Vector4(1.0f, 0.0f, 1.0f, 0.5f), TEST_LOCATION); // Disable pre-multiplied alpha again renderer.SetProperty(Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA, false); @@ -1468,6 +1521,8 @@ int UtcDaliRendererPreMultipledAlpha(void) DALI_TEST_CHECK(gl.GetUniformValue("uColor", actualValue)); DALI_TEST_EQUALS(actualValue, Vector4(1.0f, 0.0f, 1.0f, 0.5f), TEST_LOCATION); + DALI_TEST_CHECK(gl.GetUniformValue("uActorColor", actualActorColor)); + DALI_TEST_EQUALS(actualActorColor, Vector4(1.0f, 0.0f, 1.0f, 0.5f), TEST_LOCATION); END_TEST; } @@ -3204,9 +3259,12 @@ int UtcDaliRendererOpacity(void) application.Render(); Vector4 actualValue; + Vector4 actualActorColor; TestGlAbstraction& gl = application.GetGlAbstraction(); DALI_TEST_CHECK(gl.GetUniformValue("uColor", actualValue)); DALI_TEST_EQUALS(actualValue.a, 1.0f, Dali::Math::MACHINE_EPSILON_1, TEST_LOCATION); + DALI_TEST_CHECK(gl.GetUniformValue("uActorColor", actualActorColor)); + DALI_TEST_EQUALS(actualActorColor.a, 1.0f, Dali::Math::MACHINE_EPSILON_1, TEST_LOCATION); renderer.SetProperty(DevelRenderer::Property::OPACITY, 0.5f); @@ -3224,6 +3282,10 @@ int UtcDaliRendererOpacity(void) DALI_TEST_CHECK(gl.GetUniformValue("uColor", actualValue)); DALI_TEST_EQUALS(actualValue.a, 0.5f, Dali::Math::MACHINE_EPSILON_1, TEST_LOCATION); + // Note : Renderer opacity doesn't apply to uActorColor. + DALI_TEST_CHECK(gl.GetUniformValue("uActorColor", actualActorColor)); + DALI_TEST_EQUALS(actualActorColor.a, 1.0f, Dali::Math::MACHINE_EPSILON_1, TEST_LOCATION); + END_TEST; } @@ -3725,3 +3787,117 @@ int UtcDaliRendererPreparePipeline(void) END_TEST; } + +int UtcDaliRendererUniformArrayOfStruct(void) +{ + TestApplication application; + tet_infoline("Test that uniforms that are elements of arrays of structs can be accessed"); + + std::vector customUniforms{{"arrayof[10].color", Property::VECTOR4}, + {"arrayof[10].position", Property::VECTOR2}, + {"arrayof[10].normal", Property::VECTOR3}}; + + application.GetGraphicsController().AddCustomUniforms(customUniforms); + + Geometry geometry = CreateQuadGeometry(); + Shader shader = Shader::New("vertexSrc", "fragmentSrc"); + Renderer renderer = Renderer::New(geometry, shader); + Actor actor = Actor::New(); + actor.AddRenderer(renderer); + actor[Actor::Property::SIZE] = Vector2(120, 120); + application.GetScene().Add(actor); + + // Define some properties to match the custom uniforms. + // Ensure they can be written & read back from the abstraction. + + struct UniformIndexPair + { + Property::Index index; + std::string name; + UniformIndexPair(Property::Index index, std::string name) + : index(index), + name(name) + { + } + }; + std::vector uniformIndices; + + std::ostringstream oss; + for(int i = 0; i < 10; ++i) + { + Property::Index index; + oss << "arrayof[" << i << "].color"; + Vector4 color = Color::WHITE; + color.r = 25.5f * i; + index = renderer.RegisterProperty(oss.str(), color); + uniformIndices.emplace_back(index, oss.str()); + + oss.str(""); + oss.clear(); + oss << "arrayof[" << i << "].position"; + Vector2 pos(i, 10 + i * 5); + index = renderer.RegisterProperty(oss.str(), pos); + uniformIndices.emplace_back(index, oss.str()); + + oss.str(""); + oss.clear(); + oss << "arrayof[" << i << "].normal"; + Vector3 normal(i, i * 10, i * 100); + index = renderer.RegisterProperty(oss.str(), normal); + uniformIndices.emplace_back(index, oss.str()); + oss.str(""); + oss.clear(); + } + auto& gl = application.GetGlAbstraction(); + TraceCallStack& callStack = gl.GetSetUniformTrace(); + gl.EnableSetUniformCallTrace(true); + + application.SendNotification(); + application.Render(); + + // Check that the uniforms match. + TraceCallStack::NamedParams params; + for(auto& uniformInfo : uniformIndices) + { + Property::Value value = renderer.GetProperty(uniformInfo.index); + switch(value.GetType()) + { + case Property::VECTOR2: + { + DALI_TEST_CHECK(callStack.FindMethodAndGetParameters(uniformInfo.name, params)); + Vector2 setValue; + DALI_TEST_CHECK(gl.GetUniformValue(uniformInfo.name.c_str(), setValue)); + DALI_TEST_EQUALS(value.Get(), setValue, 0.001f, TEST_LOCATION); + break; + } + case Property::VECTOR3: + { + DALI_TEST_CHECK(callStack.FindMethodAndGetParameters(uniformInfo.name, params)); + Vector3 setValue; + DALI_TEST_CHECK(gl.GetUniformValue(uniformInfo.name.c_str(), setValue)); + DALI_TEST_EQUALS(value.Get(), setValue, 0.001f, TEST_LOCATION); + break; + } + case Property::VECTOR4: + { + DALI_TEST_CHECK(callStack.FindMethodAndGetParameters(uniformInfo.name, params)); + Vector4 setValue; + DALI_TEST_CHECK(gl.GetUniformValue(uniformInfo.name.c_str(), setValue)); + DALI_TEST_EQUALS(value.Get(), setValue, 0.001f, TEST_LOCATION); + break; + } + default: + break; + } + } + + // There is a hash in the property name's uniform map: check this in debugger + // There is a hash in the reflection. Check this in the debugger. + + // Check that the reflection contains individual locs for each array entry's struct element + // and that it hashes the whole string + + // Ensure that the property name's hash is also for the whole string. + + END_TEST; +}