From 4618b4087a0d42641820cf61db4a95d61ceae794 Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Fri, 24 Sep 2021 20:26:14 +0900 Subject: [PATCH 1/1] Add Default Uniform : uActorColor Previously, DevelRenderer always merged into uColor.a value. When we use Borderline feature, it will occure some problems. This patch add one more default uniform : named "uActorColor" So now we can split MIX_COLOR.a and Actor::COLOR.a Change-Id: Ib74731fab0bca87fd3970abb8e4f290a09c45e88 Signed-off-by: Eunki, Hong --- .../dali/dali-test-suite-utils/test-gl-abstraction.cpp | 1 + .../dali-test-suite-utils/test-graphics-reflection.cpp | 1 + automated-tests/src/dali/utc-Dali-Renderer.cpp | 15 +++++++++++++++ automated-tests/src/dali/utc-Dali-VertexBuffer.cpp | 4 ++-- dali/internal/render/renderers/render-renderer.cpp | 9 +++++---- dali/internal/render/shaders/program.cpp | 3 ++- dali/internal/render/shaders/program.h | 1 + 7 files changed, 27 insertions(+), 7 deletions(-) diff --git a/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.cpp b/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.cpp index b85cf4d..e99de5c 100644 --- a/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.cpp +++ b/automated-tests/src/dali/dali-test-suite-utils/test-gl-abstraction.cpp @@ -130,6 +130,7 @@ void TestGlAbstraction::Initialize() {"sTextureRect", GL_SAMPLER_2D, 1}, {"sGloss", GL_SAMPLER_2D, 1}, {"uColor", GL_FLOAT_VEC4, 1}, + {"uActorColor", GL_FLOAT_VEC4, 1}, {"uModelMatrix", GL_FLOAT_MAT4, 1}, {"uModelView", GL_FLOAT_MAT4, 1}, {"uMvpMatrix", GL_FLOAT_MAT4, 1}, diff --git a/automated-tests/src/dali/dali-test-suite-utils/test-graphics-reflection.cpp b/automated-tests/src/dali/dali-test-suite-utils/test-graphics-reflection.cpp index 8493992..25c09b5 100644 --- a/automated-tests/src/dali/dali-test-suite-utils/test-graphics-reflection.cpp +++ b/automated-tests/src/dali/dali-test-suite-utils/test-graphics-reflection.cpp @@ -40,6 +40,7 @@ static const std::vector UNIFORMS = UniformData("sTextureRect", Property::Type::FLOAT), UniformData("sGloss", Property::Type::FLOAT), UniformData("uColor", Property::Type::VECTOR4), + UniformData("uActorColor", Property::Type::VECTOR4), UniformData("uModelMatrix", Property::Type::MATRIX), UniformData("uModelView", Property::Type::MATRIX), UniformData("uMvpMatrix", Property::Type::MATRIX), diff --git a/automated-tests/src/dali/utc-Dali-Renderer.cpp b/automated-tests/src/dali/utc-Dali-Renderer.cpp index 3a94cce..208e9d8 100644 --- a/automated-tests/src/dali/utc-Dali-Renderer.cpp +++ b/automated-tests/src/dali/utc-Dali-Renderer.cpp @@ -1411,9 +1411,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 +1444,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 +1474,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 +3212,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 +3235,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; } diff --git a/automated-tests/src/dali/utc-Dali-VertexBuffer.cpp b/automated-tests/src/dali/utc-Dali-VertexBuffer.cpp index 346c6b1..abb8154 100644 --- a/automated-tests/src/dali/utc-Dali-VertexBuffer.cpp +++ b/automated-tests/src/dali/utc-Dali-VertexBuffer.cpp @@ -262,8 +262,8 @@ int UtcDaliVertexBufferSetData02(void) const TestGlAbstraction::BufferDataCalls& bufferDataCalls = application.GetGlAbstraction().GetBufferDataCalls(); - // Should be 15 (using single uniform buffer now) - DALI_TEST_EQUALS(bufferSubDataCalls.size(), 15u, TEST_LOCATION); + // Should be 17 (using single uniform buffer now) + DALI_TEST_EQUALS(bufferSubDataCalls.size(), 17u, TEST_LOCATION); DALI_TEST_EQUALS(bufferDataCalls.size(), 3u, TEST_LOCATION); if(bufferSubDataCalls.size()) diff --git a/dali/internal/render/renderers/render-renderer.cpp b/dali/internal/render/renderers/render-renderer.cpp index 3150bf4..9c8dd47 100644 --- a/dali/internal/render/renderers/render-renderer.cpp +++ b/dali/internal/render/renderers/render-renderer.cpp @@ -657,18 +657,19 @@ void Renderer::WriteUniformBuffer( WriteDefaultUniform(normalUniformInfo, *uboView, normalMatrix); } - Vector4 finalColor; - const Vector4& color = node.GetRenderColor(bufferIndex); + Vector4 finalColor; ///< Applied renderer's opacity color + const Vector4& color = node.GetRenderColor(bufferIndex); ///< Actor's original color if(mPremultipliedAlphaEnabled) { - float alpha = color.a * mRenderDataProvider->GetOpacity(bufferIndex); - finalColor = Vector4(color.r * alpha, color.g * alpha, color.b * alpha, alpha); + const float& alpha = color.a * mRenderDataProvider->GetOpacity(bufferIndex); + finalColor = Vector4(color.r * alpha, color.g * alpha, color.b * alpha, alpha); } else { finalColor = Vector4(color.r, color.g, color.b, color.a * mRenderDataProvider->GetOpacity(bufferIndex)); } WriteDefaultUniform(program->GetDefaultUniform(Program::DefaultUniformIndex::COLOR), *uboView, finalColor); + WriteDefaultUniform(program->GetDefaultUniform(Program::DefaultUniformIndex::ACTOR_COLOR), *uboView, color); // Write uniforms from the uniform map FillUniformBuffer(*program, instruction, *uboView, bindings, uboOffset, bufferIndex); diff --git a/dali/internal/render/shaders/program.cpp b/dali/internal/render/shaders/program.cpp index 56ba362..fca4972 100644 --- a/dali/internal/render/shaders/program.cpp +++ b/dali/internal/render/shaders/program.cpp @@ -56,7 +56,8 @@ size_t DEFAULT_UNIFORM_HASHTABLE[NUMBER_OF_DEFAULT_UNIFORMS] = CalculateHash(std::string("uNormalMatrix")), CalculateHash(std::string("uProjection")), CalculateHash(std::string("uSize")), - CalculateHash(std::string("uColor"))}; + CalculateHash(std::string("uColor")), + CalculateHash(std::string("uActorColor"))}; /** * Helper function to calculate the correct alignment of data for uniform buffers diff --git a/dali/internal/render/shaders/program.h b/dali/internal/render/shaders/program.h index d6cde0f..a0e2ba9 100644 --- a/dali/internal/render/shaders/program.h +++ b/dali/internal/render/shaders/program.h @@ -63,6 +63,7 @@ public: PROJECTION_MATRIX, SIZE, COLOR, + ACTOR_COLOR, COUNT }; -- 2.7.4