|
@@ -8,14 +8,12 @@ public:
|
|
|
MATX(ColoredShaderMat);
|
|
MATX(ColoredShaderMat);
|
|
|
|
|
|
|
|
Vector4 uniformBlack = Vector4(0.0f, 0.0f, 0.0f, 1.0f);
|
|
Vector4 uniformBlack = Vector4(0.0f, 0.0f, 0.0f, 1.0f);
|
|
|
- Vector4 uniformWhite = Vector4(1.0f, 1.0f, 1.0f, 1.0f);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void rehash(size_t& hash) const override
|
|
void rehash(size_t& hash) const override
|
|
|
{
|
|
{
|
|
|
data.init(hash);
|
|
data.init(hash);
|
|
|
hash_combine(hash, uniformBlack.x, uniformBlack.y, uniformBlack.z, uniformBlack.w);
|
|
hash_combine(hash, uniformBlack.x, uniformBlack.y, uniformBlack.z, uniformBlack.w);
|
|
|
- hash_combine(hash, uniformWhite.x, uniformWhite.y, uniformWhite.z, uniformWhite.w);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static bool cmp(const ColoredShaderMat& a, const ColoredShaderMat& b)
|
|
static bool cmp(const ColoredShaderMat& a, const ColoredShaderMat& b)
|
|
@@ -23,14 +21,13 @@ public:
|
|
|
if (!MaterialTX<STDMatData>::cmp(a, b))
|
|
if (!MaterialTX<STDMatData>::cmp(a, b))
|
|
|
return false;
|
|
return false;
|
|
|
|
|
|
|
|
- return a.uniformWhite == b.uniformWhite && a.uniformBlack == b.uniformBlack;
|
|
|
|
|
|
|
+ return a.uniformBlack == b.uniformBlack;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void apply()
|
|
|
|
|
|
|
+ void apply() override
|
|
|
{
|
|
{
|
|
|
MaterialTX<STDMatData>::apply();
|
|
MaterialTX<STDMatData>::apply();
|
|
|
IVideoDriver::instance->setUniform("_black", uniformBlack);
|
|
IVideoDriver::instance->setUniform("_black", uniformBlack);
|
|
|
- IVideoDriver::instance->setUniform("_white", uniformWhite);
|
|
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -41,18 +38,20 @@ public:
|
|
|
static void init()
|
|
static void init()
|
|
|
{
|
|
{
|
|
|
shader = new UberShaderProgram();
|
|
shader = new UberShaderProgram();
|
|
|
- shader->init(STDRenderer::uberShaderBody, R"(
|
|
|
|
|
|
|
+ shader->init(STDRenderer::uberShaderBody,
|
|
|
|
|
+ R"(
|
|
|
#define MODIFY_BASE
|
|
#define MODIFY_BASE
|
|
|
- #define DONT_MULT_BY_RESULT_COLOR
|
|
|
|
|
|
|
+ #define DONT_MULT_BY_RESULT_COLOR)",
|
|
|
|
|
+ R"(
|
|
|
uniform lowp vec4 _black;
|
|
uniform lowp vec4 _black;
|
|
|
uniform lowp vec4 _white;
|
|
uniform lowp vec4 _white;
|
|
|
lowp vec4 modify_base(lowp vec4 base)
|
|
lowp vec4 modify_base(lowp vec4 base)
|
|
|
{
|
|
{
|
|
|
- lowp vec4 black = vec4(_black.rgb, 1.0);
|
|
|
|
|
- lowp vec4 white = vec4(_white.rgb, 1.0);
|
|
|
|
|
- return mix(_white, _black, base.r) * base.a;
|
|
|
|
|
|
|
+ lowp vec4 black = vec4(_black.rgb, result_color.a);
|
|
|
|
|
+ lowp vec4 white = result_color;
|
|
|
|
|
+ return mix(white, black, base.r) * base.a;
|
|
|
}
|
|
}
|
|
|
- )");
|
|
|
|
|
|
|
+ )");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static void free()
|
|
static void free()
|
|
@@ -65,6 +64,7 @@ public:
|
|
|
ShaderTextField() : _outer(Color::White)
|
|
ShaderTextField() : _outer(Color::White)
|
|
|
{
|
|
{
|
|
|
mat.data._uberShader = shader;
|
|
mat.data._uberShader = shader;
|
|
|
|
|
+ mat.uniformBlack = _outer.toVector();
|
|
|
_mat = mc().cache(mat);
|
|
_mat = mc().cache(mat);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -76,22 +76,15 @@ public:
|
|
|
void setOuterColor(const Color& v)
|
|
void setOuterColor(const Color& v)
|
|
|
{
|
|
{
|
|
|
_outer = v;
|
|
_outer = v;
|
|
|
|
|
+ mat.uniformBlack = _outer.toVector();
|
|
|
|
|
+
|
|
|
|
|
+ setMat(mc().cache(mat));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
typedef Property<Color, const Color&, ShaderTextField, &ShaderTextField::getOuterColor, &ShaderTextField::setOuterColor> TweenOuterColor;
|
|
typedef Property<Color, const Color&, ShaderTextField, &ShaderTextField::getOuterColor, &ShaderTextField::setOuterColor> TweenOuterColor;
|
|
|
|
|
|
|
|
private:
|
|
private:
|
|
|
Color _outer;
|
|
Color _outer;
|
|
|
- unsigned char _adata;
|
|
|
|
|
-
|
|
|
|
|
- void setUniforms(IVideoDriver* driver, ShaderProgram* prog)
|
|
|
|
|
- {
|
|
|
|
|
- Color q(_adata, _adata, _adata, _adata);
|
|
|
|
|
- Vector4 c = (_outer * q).toVector();
|
|
|
|
|
- driver->setUniform("_black", c);
|
|
|
|
|
- c = (getColor() * _style.color * q).toVector();
|
|
|
|
|
- driver->setUniform("_white", c);
|
|
|
|
|
- }
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
DECLARE_SMART(ShaderTextField, spShaderTextField);
|
|
DECLARE_SMART(ShaderTextField, spShaderTextField);
|
|
@@ -123,8 +116,9 @@ public:
|
|
|
txt->setText("1234567890");
|
|
txt->setText("1234567890");
|
|
|
txt->setPosition(getStage()->getSize() / 2);
|
|
txt->setPosition(getStage()->getSize() / 2);
|
|
|
txt->setOuterColor(Color::White);
|
|
txt->setOuterColor(Color::White);
|
|
|
|
|
+ txt->setKerning(5);
|
|
|
txt->addTween(ShaderTextField::TweenOuterColor(Color::Black), 4000, -1, true, 2000);
|
|
txt->addTween(ShaderTextField::TweenOuterColor(Color::Black), 4000, -1, true, 2000);
|
|
|
- txt->addTween(TextField::TweenColor(Color::Magenta), 5000, -1, true);
|
|
|
|
|
|
|
+ txt->addTween(ShaderTextField::TweenColor(Color::Magenta), 5000, -1, true);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
~TestColorFont()
|
|
~TestColorFont()
|