|
@@ -1,56 +1,29 @@
|
|
|
#pragma once
|
|
#pragma once
|
|
|
#include "test.h"
|
|
#include "test.h"
|
|
|
|
|
|
|
|
-template <class T>
|
|
|
|
|
-class IsSame
|
|
|
|
|
-{
|
|
|
|
|
-public:
|
|
|
|
|
- static bool isSame(const T& a, const T &b)
|
|
|
|
|
- {
|
|
|
|
|
- return a.isSame(b);
|
|
|
|
|
- }
|
|
|
|
|
-};
|
|
|
|
|
-template <class T>
|
|
|
|
|
-bool isSameF(const T &a, const T & b)
|
|
|
|
|
-{
|
|
|
|
|
- return a.isSame(b);
|
|
|
|
|
-}
|
|
|
|
|
|
|
|
|
|
class MyTestMat : public MaterialTX<STDMatData>
|
|
class MyTestMat : public MaterialTX<STDMatData>
|
|
|
{
|
|
{
|
|
|
public:
|
|
public:
|
|
|
- Vector4 uniform;
|
|
|
|
|
-
|
|
|
|
|
- //MyTestMat():MaterialTX<STDMatData>( {}
|
|
|
|
|
- MyTestMat() {}
|
|
|
|
|
- MyTestMat(const MyTestMat &other)
|
|
|
|
|
- {
|
|
|
|
|
- _data = other._data;
|
|
|
|
|
- _data.init(_hash);
|
|
|
|
|
|
|
+ MATX(MyTestMat);
|
|
|
|
|
|
|
|
- typedef bool(*fcmp)(const MyTestMat& a, const MyTestMat& b);
|
|
|
|
|
- fcmp fn = &IsSame<MyTestMat>::isSame;
|
|
|
|
|
- _compare = (compare)(fn);
|
|
|
|
|
|
|
+ Vector4 uniform = Vector4(0.0f, 0.0f, 0.0f, 0.0f);
|
|
|
|
|
|
|
|
- hash_combine(_hash, _compare);
|
|
|
|
|
|
|
|
|
|
- // hash_combine(hash, uniform.x, uniform.y, uniform.z, uniform.w);
|
|
|
|
|
|
|
+ void rehash(size_t& hash) const override
|
|
|
|
|
+ {
|
|
|
|
|
+ data.init(hash);
|
|
|
|
|
+ hash_combine(hash, uniform.x, uniform.y, uniform.z, uniform.w);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- bool isSame(const MyTestMat& other) const
|
|
|
|
|
|
|
+ static bool cmp(const MyTestMat& a, const MyTestMat& b)
|
|
|
{
|
|
{
|
|
|
- if (MaterialTX<STDMatData>::cmp(*this, other))
|
|
|
|
|
|
|
+ if (!MaterialTX<STDMatData>::cmp(a, b))
|
|
|
return false;
|
|
return false;
|
|
|
|
|
|
|
|
- return uniform == other.uniform;
|
|
|
|
|
|
|
+ return a.uniform == b.uniform;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- MyTestMat* clone() const override
|
|
|
|
|
- {
|
|
|
|
|
- return new MyTestMat(*this);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
void apply()
|
|
void apply()
|
|
|
{
|
|
{
|
|
|
MaterialTX<STDMatData>::apply();
|
|
MaterialTX<STDMatData>::apply();
|
|
@@ -73,53 +46,38 @@ public:
|
|
|
|
|
|
|
|
void _start(Actor& actor) override
|
|
void _start(Actor& actor) override
|
|
|
{
|
|
{
|
|
|
- actor.setName("zzz");
|
|
|
|
|
Sprite& spr = (Sprite&)actor;
|
|
Sprite& spr = (Sprite&)actor;
|
|
|
|
|
|
|
|
MyTestMat my;
|
|
MyTestMat my;
|
|
|
- my._data = spr._mat->_data;
|
|
|
|
|
|
|
+ my.data = spr._mat->data;
|
|
|
|
|
+ my.data.us = _program;
|
|
|
|
|
+ my.uniform = _val;
|
|
|
|
|
|
|
|
spr._mat = mc().add2(my);
|
|
spr._mat = mc().add2(my);
|
|
|
-// MyTestMat data;
|
|
|
|
|
- //data = spr._mat->_data;
|
|
|
|
|
- //spr._mat = mc().add(data);
|
|
|
|
|
- //actor.setMaterial(this);
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
void _update(Actor& actor, const UpdateState& us) override
|
|
void _update(Actor& actor, const UpdateState& us) override
|
|
|
{
|
|
{
|
|
|
- _val = lerp(Vector4(1, 1, 1, 0), Vector4(0, 0, 0, 0), _percent);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ Sprite& spr = (Sprite&)actor;
|
|
|
|
|
|
|
|
- void _done(Actor& actor, const UpdateState& us) override
|
|
|
|
|
- {
|
|
|
|
|
- actor.setMaterial(0);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ _val = lerp(Vector4(1, 1, 1, 0), Vector4(0, 0, 0, 0), _percent);
|
|
|
|
|
|
|
|
- void setUniforms(IVideoDriver* driver, ShaderProgram* prog)
|
|
|
|
|
- {
|
|
|
|
|
- driver->setUniform("userValue", _val);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ MyTestMat my;
|
|
|
|
|
+ my.data = spr._mat->data;
|
|
|
|
|
+ my.data.us = _program;
|
|
|
|
|
+ my.uniform = _val;
|
|
|
|
|
|
|
|
- /*
|
|
|
|
|
- void apply(Material* prev) override
|
|
|
|
|
- {
|
|
|
|
|
- STDRenderer* renderer = STDRenderer::getCurrent();
|
|
|
|
|
- _program->setShaderUniformsCallback(CLOSURE(this, &TweenShader::setUniforms));
|
|
|
|
|
- renderer->setUberShaderProgram(_program);
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- void doRender(Sprite* s, const RenderState& rs) override
|
|
|
|
|
- {
|
|
|
|
|
- STDMaterial::instance->doRender(s, rs);
|
|
|
|
|
|
|
+ spr._mat = mc().add2(my);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void finish() override
|
|
|
|
|
|
|
+ void _done(Actor& actor, const UpdateState& us) override
|
|
|
{
|
|
{
|
|
|
- STDRenderer* renderer = STDRenderer::getCurrent();
|
|
|
|
|
- renderer->drawBatch();
|
|
|
|
|
|
|
+ Sprite& spr = (Sprite&)actor;
|
|
|
|
|
+ STDMaterialX mat;
|
|
|
|
|
+ mat.data = spr._mat->data;
|
|
|
|
|
+ spr._mat = mc().add2(mat);
|
|
|
}
|
|
}
|
|
|
- */
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
@@ -181,6 +139,8 @@ public:
|
|
|
toggle("->shader:invert", 0, _shaderInvert)
|
|
toggle("->shader:invert", 0, _shaderInvert)
|
|
|
};
|
|
};
|
|
|
addToggle("shader", t, 3);
|
|
addToggle("shader", t, 3);
|
|
|
|
|
+
|
|
|
|
|
+ addButton("blend", "blend");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
~TestUserShader()
|
|
~TestUserShader()
|
|
@@ -200,4 +160,12 @@ public:
|
|
|
_sprite->addTween2(new TweenShader(shader), TweenOptions(3000).twoSides(true).loops(-1));
|
|
_sprite->addTween2(new TweenShader(shader), TweenOptions(3000).twoSides(true).loops(-1));
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ void clicked(string id)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (id == "blend")
|
|
|
|
|
+ {
|
|
|
|
|
+ _sprite->setBlendMode(blend_disabled);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
};
|
|
};
|