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 <eunkiki.hong@samsung.com>
{"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},
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),
application.Render();
Vector4 actualValue(Vector4::ZERO);
+ Vector4 actualActorColor(Vector4::ZERO);
TestGlAbstraction& gl = application.GetGlAbstraction();
DALI_TEST_CHECK(gl.GetUniformValue<Vector4>("uColor", actualValue));
DALI_TEST_EQUALS(actualValue, Vector4(1.0f, 0.0f, 1.0f, 0.5f), TEST_LOCATION);
+ DALI_TEST_CHECK(gl.GetUniformValue<Vector4>("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);
DALI_TEST_CHECK(gl.GetUniformValue<Vector4>("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<Vector4>("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);
DALI_TEST_CHECK(gl.GetUniformValue<Vector4>("uColor", actualValue));
DALI_TEST_EQUALS(actualValue, Vector4(1.0f, 0.0f, 1.0f, 0.5f), TEST_LOCATION);
+ DALI_TEST_CHECK(gl.GetUniformValue<Vector4>("uActorColor", actualActorColor));
+ DALI_TEST_EQUALS(actualActorColor, Vector4(1.0f, 0.0f, 1.0f, 0.5f), TEST_LOCATION);
END_TEST;
}
application.Render();
Vector4 actualValue;
+ Vector4 actualActorColor;
TestGlAbstraction& gl = application.GetGlAbstraction();
DALI_TEST_CHECK(gl.GetUniformValue<Vector4>("uColor", actualValue));
DALI_TEST_EQUALS(actualValue.a, 1.0f, Dali::Math::MACHINE_EPSILON_1, TEST_LOCATION);
+ DALI_TEST_CHECK(gl.GetUniformValue<Vector4>("uActorColor", actualActorColor));
+ DALI_TEST_EQUALS(actualActorColor.a, 1.0f, Dali::Math::MACHINE_EPSILON_1, TEST_LOCATION);
renderer.SetProperty(DevelRenderer::Property::OPACITY, 0.5f);
DALI_TEST_CHECK(gl.GetUniformValue<Vector4>("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<Vector4>("uActorColor", actualActorColor));
+ DALI_TEST_EQUALS(actualActorColor.a, 1.0f, Dali::Math::MACHINE_EPSILON_1, TEST_LOCATION);
+
END_TEST;
}
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())
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);
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
PROJECTION_MATRIX,
SIZE,
COLOR,
+ ACTOR_COLOR,
COUNT
};