Browse Source

updated demo

dmuratshin 9 years ago
parent
commit
97e5200986

+ 2 - 2
examples/Demo/src/TestDrag.h

@@ -53,9 +53,9 @@ public:
         contacts->attachTo(content);
         contacts->attachTo(content);
         contacts->setPriority(10000);
         contacts->setPriority(10000);
         contacts->setTouchChildrenEnabled(false);
         contacts->setTouchChildrenEnabled(false);
-        contacts->setVisible(false);
+        //contacts->setVisible(false);
 
 
-        content->addTween(TweenOutline(Color::GreenYellow), TweenOptions(5000).loops(-1).twoSides());
+        //content->addTween(TweenOutline(Color::GreenYellow), TweenOptions(5000).loops(-1).twoSides());
     }
     }
 
 
     void doUpdate(const UpdateState& us)
     void doUpdate(const UpdateState& us)

+ 43 - 13
examples/Demo/src/TestTweenPostProcessing.h

@@ -1,6 +1,8 @@
 #pragma once
 #pragma once
 #include "test.h"
 #include "test.h"
 #include "TweenAlphaFade.h"
 #include "TweenAlphaFade.h"
+#include "TweenOutline.h"
+#include "TweenGlow.h"
 #undef OUT
 #undef OUT
 
 
 
 
@@ -12,27 +14,50 @@ public:
     int _type;
     int _type;
 
 
     spActor _test;
     spActor _test;
+
+    spSprite createAnim(bool tween = true)
+    {
+        spSprite anim = new Sprite;
+        anim->setAnchor(0.5f, 0.5f);
+        anim->setResAnim(resources.getResAnim("anim"));
+
+        anim->addTween(TweenAnim(resources.getResAnim("anim")), 1000, -1);
+        if (tween)
+            anim->addTween(Actor::TweenScale(3), 4000, -1, true);
+        return anim;
+    }
+
     TestTweenPostProcessing()
     TestTweenPostProcessing()
     {
     {
         spSprite sprite = new Sprite;
         spSprite sprite = new Sprite;
         sprite->setResAnim(resources.getResAnim("t2p"));
         sprite->setResAnim(resources.getResAnim("t2p"));
         sprite->attachTo(content);
         sprite->attachTo(content);
-
         sprite->setPosition(getStage()->getSize() / 2);
         sprite->setPosition(getStage()->getSize() / 2);
+        sprite->addTween(Actor::TweenRotationDegrees(360), 30000, -1);
+        sprite->setAnchor(0.5f, 0.5f);
+        _test = sprite;
 
 
-        spSprite anim = new Sprite;
+
+        spSprite anim;
+
+        anim = createAnim(false);
+        anim->addTween(Actor::TweenRotation(MATH_PI * 2), 15000, -1, true);
+        anim->addTween(Actor::TweenX(sprite->getWidth()), 10000, -1, true);
+        anim->addTween(Actor::TweenY(sprite->getHeight()), 12000, -1, true);
         anim->attachTo(sprite);
         anim->attachTo(sprite);
-        anim->addTween(Actor::TweenScale(3), 4000, -1, true);
-        anim->setPosition(sprite->getSize() / 2);
-        anim->setAnchor(0.5f, 0.5f);
-        anim->setResAnim(resources.getResAnim("anim"));
-        anim->addTween(TweenAnim(resources.getResAnim("anim")), 1500, -1);
 
 
-        sprite->addTween(Actor::TweenRotationDegrees(360), 30000, -1);
-        sprite->setAnchor(0.5f, 0.5f);
 
 
+        anim = createAnim();
+        anim->setPosition(sprite->getSize() / 2);
+        anim->attachTo(sprite);
 
 
-        _test = sprite;
+        anim = createAnim(false);
+        anim->setPosition(0, sprite->getHeight() / 2);
+        anim->attachTo(sprite);
+
+        anim = createAnim(false);
+        anim->setPosition(sprite->getWidth(), sprite->getHeight() / 2);
+        anim->attachTo(sprite);
 
 
 
 
         _fullscreen = false;
         _fullscreen = false;
@@ -50,8 +75,8 @@ public:
 
 
         toggle t2[] =
         toggle t2[] =
         {
         {
-            toggle("render: dynamic", 0),
-            toggle("render: single", 1),
+            toggle("render: dynamic", 1),
+            toggle("render: static", 0),
         };
         };
 
 
         addToggle("mode.rn", t2, 2);
         addToggle("mode.rn", t2, 2);
@@ -61,10 +86,12 @@ public:
         {
         {
             toggle("tween: Outline", 1),
             toggle("tween: Outline", 1),
             toggle("tween: AlphaFade", 0),
             toggle("tween: AlphaFade", 0),
+            //toggle("tween: Glow", 2),
         };
         };
 
 
         addToggle("type", t3, 2);
         addToggle("type", t3, 2);
 
 
+        //_type = 2;
         addTween();
         addTween();
     }
     }
 
 
@@ -79,8 +106,11 @@ public:
         spTween t;
         spTween t;
         if (_type == 0)
         if (_type == 0)
             t = _test->addTween(TweenOutline(Color::YellowGreen, opt), 5000, -1, true, 0, Tween::ease_inOutCubic);
             t = _test->addTween(TweenOutline(Color::YellowGreen, opt), 5000, -1, true, 0, Tween::ease_inOutCubic);
-        else
+        if (_type == 1)
             t = _test->addTween(TweenAlphaFade(true, opt), 5000, -1, true, 0, Tween::ease_inOutCubic);
             t = _test->addTween(TweenAlphaFade(true, opt), 5000, -1, true, 0, Tween::ease_inOutCubic);
+        if (_type == 2)
+            t = _test->addTween(TweenGlow(Color::YellowGreen, opt), 5000, -1, true, 0, Tween::ease_inOutCubic);
+
 
 
         t->setName("pp");
         t->setName("pp");
     }
     }

+ 2 - 0
oxygine/SDL/win32/oxygine.vcxproj

@@ -199,6 +199,7 @@
     <ClCompile Include="..\..\src\Tween.cpp" />
     <ClCompile Include="..\..\src\Tween.cpp" />
     <ClCompile Include="..\..\src\TweenAlphaFade.cpp" />
     <ClCompile Include="..\..\src\TweenAlphaFade.cpp" />
     <ClCompile Include="..\..\src\TweenAnim.cpp" />
     <ClCompile Include="..\..\src\TweenAnim.cpp" />
+    <ClCompile Include="..\..\src\TweenGlow.cpp" />
     <ClCompile Include="..\..\src\TweenOutline.cpp" />
     <ClCompile Include="..\..\src\TweenOutline.cpp" />
     <ClCompile Include="..\..\src\TweenQueue.cpp" />
     <ClCompile Include="..\..\src\TweenQueue.cpp" />
     <ClCompile Include="..\..\src\utils\cdecode.c" />
     <ClCompile Include="..\..\src\utils\cdecode.c" />
@@ -320,6 +321,7 @@
     <ClInclude Include="..\..\src\TweenAlphaFade.h" />
     <ClInclude Include="..\..\src\TweenAlphaFade.h" />
     <ClInclude Include="..\..\src\TweenAnim.h" />
     <ClInclude Include="..\..\src\TweenAnim.h" />
     <ClInclude Include="..\..\src\Tweener.h" />
     <ClInclude Include="..\..\src\Tweener.h" />
+    <ClInclude Include="..\..\src\TweenGlow.h" />
     <ClInclude Include="..\..\src\TweenOutline.h" />
     <ClInclude Include="..\..\src\TweenOutline.h" />
     <ClInclude Include="..\..\src\TweenQueue.h" />
     <ClInclude Include="..\..\src\TweenQueue.h" />
     <ClInclude Include="..\..\src\UpdateState.h" />
     <ClInclude Include="..\..\src\UpdateState.h" />

+ 6 - 0
oxygine/SDL/win32/oxygine.vcxproj.filters

@@ -345,6 +345,9 @@
     <ClCompile Include="..\..\src\core\ThreadDispatcher.cpp">
     <ClCompile Include="..\..\src\core\ThreadDispatcher.cpp">
       <Filter>src\core</Filter>
       <Filter>src\core</Filter>
     </ClCompile>
     </ClCompile>
+    <ClCompile Include="..\..\src\TweenGlow.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\..\src\closure\closure.h">
     <ClInclude Include="..\..\src\closure\closure.h">
@@ -743,6 +746,9 @@
     <ClInclude Include="..\..\src\core\ThreadDispatcher.h">
     <ClInclude Include="..\..\src\core\ThreadDispatcher.h">
       <Filter>src\core</Filter>
       <Filter>src\core</Filter>
     </ClInclude>
     </ClInclude>
+    <ClInclude Include="..\..\src\TweenGlow.h">
+      <Filter>src</Filter>
+    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <None Include="ReadMe.txt" />
     <None Include="ReadMe.txt" />

+ 116 - 0
oxygine/src/TweenGlow.cpp

@@ -0,0 +1,116 @@
+#include "TweenGlow.h"
+#include "STDMaterial.h"
+#include "Actor.h"
+#include "RenderState.h"
+
+#include "core/gl/VertexDeclarationGL.h"
+
+
+
+namespace oxygine
+{
+
+
+
+    class TweenGlowImpl : public TweenPostProcess
+    {
+    public:
+        Color _color;
+        int _downsample;
+
+        TweenGlowImpl(const Color& c, const PostProcessOptions& opt) : TweenPostProcess(opt), _color(c), _downsample(1) {}
+
+        void render(Actor* actor, const RenderState& rs) OVERRIDE
+        {
+            STDMaterial* mat = STDMaterial::instance;
+            STDRenderer* renderer = mat->getRenderer();
+
+
+            RenderState r = rs;
+            r.material = mat;
+            actor->setMaterial(_prevMaterial);
+            actor->render(r);
+            actor->setMaterial(this);
+
+
+            RectF src(0, 0,
+            _pp._screen.getWidth() / (float)_pp._rt->getWidth() / _downsample,
+            _pp._screen.getHeight() / (float)_pp._rt->getHeight() / _downsample);
+
+            RectF dest = _pp._screen.cast<RectF>();
+
+            renderer->setBlendMode(blend_premultiplied_alpha);
+
+
+            AffineTransform tr = _pp._transform * _actor->computeGlobalTransform();
+            renderer->setTransform(tr);
+            renderer->beginElementRendering(true);
+            Color color = Color(Color::White).withAlpha(255).premultiplied();
+            color = Color::White;
+            renderer->setBlendMode(blend_add);
+            renderer->drawElement(_pp._rt, color.rgba(), src, dest);
+            renderer->drawBatch();
+        }
+
+        void _renderPP() OVERRIDE
+        {
+            PostProcess::initShaders();
+
+            int w = _pp._screen.size.x;
+            int h = _pp._screen.size.y;
+
+
+            IVideoDriver* driver = IVideoDriver::instance;
+            const VertexDeclarationGL* decl = static_cast<const VertexDeclarationGL*>(IVideoDriver::instance->getVertexDeclaration(vertexPCT2::FORMAT));
+
+            _downsample = 1;
+
+
+            spNativeTexture rt = _pp._rt;
+            spNativeTexture rt2 = getRTManager().get(0, w, h, _pp._format);
+
+#if 0
+            driver->setShaderProgram(PostProcess::shaderBlit);
+            pass(rt, Rect(0, 0, w, h), rt2, Rect(0, 0, w / 2, h / 2));
+
+            w /= 2;
+            h /= 2;
+            _downsample *= 2;
+#endif
+
+#if 0
+
+            rt = getRTManager().get(w / 2, h / 2, _pp._format);
+            _pp._rt = rt;
+            pass(rt2, Rect(0, 0, w, h), rt, Rect(0, 0, w / 2, h / 2));
+
+            w /= 2;
+            h /= 2;
+            _downsample *= 2;
+#endif
+
+
+            Rect rc(0, 0, w, h);
+
+
+            driver->setShaderProgram(PostProcess::shaderBlurH);
+            driver->setUniform("step", 1.0f / rt->getWidth());
+            pass(rt, rc, rt2, rc);
+
+
+            int alpha = lerp(0, 255, _progress);
+            //log::messageln("tween alpha %d", alpha);
+
+            Color c = _color.withAlpha(64).premultiplied();
+            driver->setShaderProgram(PostProcess::shaderBlurV);
+            driver->setUniform("step", 1.0f / rt2->getHeight());
+
+            pass(rt2, rc, rt, rc, c);
+        }
+    };
+
+
+    TweenGlow::TweenGlow(const Color& color, const PostProcessOptions& opt) : TweenProxy(new TweenGlowImpl(color, opt))
+    {
+    }
+}

+ 12 - 0
oxygine/src/TweenGlow.h

@@ -0,0 +1,12 @@
+#pragma once
+#include "oxygine_include.h"
+#include "PostProcess.h"
+
+namespace oxygine
+{
+    class TweenGlow : public TweenProxy
+    {
+    public:
+        TweenGlow(const Color& color, const PostProcessOptions& opt = PostProcessOptions());
+    };
+}

+ 5 - 1
oxygine/src/TweenOutline.cpp

@@ -98,7 +98,11 @@ namespace oxygine
             int alpha = lerp(0, 255, _progress);
             int alpha = lerp(0, 255, _progress);
             //log::messageln("tween alpha %d", alpha);
             //log::messageln("tween alpha %d", alpha);
 
 
-            Color c = _color.withAlpha(alpha).premultiplied();
+            Color c;
+            if (_pp._options._flags & PostProcessOptions::flag_singleR2T)
+                c = _color;
+            else
+                c = _color.withAlpha(alpha).premultiplied();
 
 
             driver->setShaderProgram(PostProcess::shaderBlurV);
             driver->setShaderProgram(PostProcess::shaderBlurV);
             driver->setUniform("step", 1.0f / rt2->getHeight());
             driver->setUniform("step", 1.0f / rt2->getHeight());