Browse Source

added fullscreen option to TweenAlphaFade

dmuratshin 10 years ago
parent
commit
2417f2be8d
2 changed files with 64 additions and 35 deletions
  1. 15 4
      examples/HelloWorld/src/entry_point.cpp
  2. 49 31
      oxygine/src/TweenAlphaFade.h

+ 15 - 4
examples/HelloWorld/src/entry_point.cpp

@@ -9,11 +9,11 @@ You could start from example.cpp and example.h it has main functions being calle
 #include "DebugActor.h"
 
 #include "example.h"
-
+#include "STDMaterial.h"
 
 using namespace oxygine;
 
-
+//STDRenderer* renderer = 0;
 //called each frame
 int mainloop()
 {
@@ -25,9 +25,15 @@ int mainloop()
     if (core::beginRendering())
     {
         Color clearColor(32, 32, 32, 255);
-        Rect viewport(Point(0, 0), core::getDisplaySize());
+        Rect  viewport(Point(0, 0), core::getDisplaySize());
+
+        //initialize projection and view matrix
+        Matrix proj;
+        Matrix::orthoLH(proj, (float)viewport.getWidth(), (float)viewport.getHeight(), 0, 1);
+        Matrix view = makeViewMatrix(viewport.getWidth(), viewport.getHeight());
+
         //render all actors. Actor::render would be called also for all children
-        getStage()->render(clearColor, viewport);
+        getStage()->render(&clearColor, viewport, view, proj);
 
         core::swapDisplayBuffers();
     }
@@ -47,6 +53,7 @@ void run()
 
     //initialize Oxygine's internal stuff
     core::init_desc desc;
+    desc.title = "Oxygine Application";
 
 #if OXYGINE_SDL || OXYGINE_EMSCRIPTEN
     //we could setup initial window size on SDL builds
@@ -59,9 +66,13 @@ void run()
     example_preinit();
     core::init(&desc);
 
+    //renderer = new STDRenderer;
+    //STDMaterial::instance = new STDMaterial(renderer);
+    //Material::defaultMaterial = STDMaterial::instance;
 
     //create Stage. Stage is a root node
     Stage::instance = new Stage(true);
+    Stage::instance->_material = STDMaterial::instance;
     Point size = core::getDisplaySize();
     getStage()->setSize(size);
 

+ 49 - 31
oxygine/src/TweenAlphaFade.h

@@ -18,10 +18,16 @@ namespace oxygine
         spNativeTexture _rt;
         unsigned char _a;
         bool _fadeIn;
-        bool _singleR2T;
 
+		enum options
+		{
+			opt_singleR2T = 1,
+			opt_fullscreen = 1,
+		};
 
-        TweenAlphaFade(bool fadeIn, bool singleR2T = true) : _actor(0), _prev(0), _fadeIn(fadeIn), _singleR2T(singleR2T) {}
+		int _options;
+
+        TweenAlphaFade(bool fadeIn, int opt = opt_singleR2T) : _actor(0), _prev(0), _fadeIn(fadeIn), _options(opt) {}
 
         ~TweenAlphaFade()
         {
@@ -79,55 +85,67 @@ namespace oxygine
             if (!STDRenderer::isReady())
                 return;
 
-            Actor& actor = *_actor;
-            Rect screen = getScreenRect(actor);
-            if (_rt->getWidth() < screen.getWidth() || _rt->getHeight() < screen.getHeight())
-                _rt->init(screen.getWidth(), screen.getHeight(), TF_R8G8B8A8, true);
+			IVideoDriver* driver = IVideoDriver::instance;
 
 
-            //if (screen.getWidth() != _rt->getW)
 
-            IVideoDriver* driver = IVideoDriver::instance;
+			Actor& actor = *_actor;
+			Rect screen = getScreenRect(actor);
+			
+			if (_options & opt_fullscreen)
+			{
+				driver->getViewport(screen);				
+			}
 
-            driver->setRenderTarget(_rt);
 
-            Rect vp = screen;
-            vp.pos = Point(0, 0);
-            driver->setViewport(vp);
+			if (_rt->getWidth() < screen.getWidth() || _rt->getHeight() < screen.getHeight())
+				_rt->init(screen.getWidth(), screen.getHeight(), TF_R8G8B8A8, true);
 
-            driver->clear(0);
+			driver->setRenderTarget(_rt);
 
+			Rect vp = screen;
+			vp.pos = Point(0, 0);
+			driver->setViewport(vp);
+			driver->clear(0);
 
-            RenderState rs;
-            Material* mat = STDMaterial::instance;
-            STDRenderer* renderer = STDMaterial::instance->getRenderer();
 
-            rs.material = mat;
+			RenderState rs;
+			Material* mat = STDMaterial::instance;
+			STDRenderer* renderer = STDMaterial::instance->getRenderer();
+			rs.material = mat;
 
-            renderer->initCoordinateSystem(vp.getWidth(), vp.getHeight(), true);
-            AffineTransform copy = actor.getTransform();
+			renderer->initCoordinateSystem(vp.getWidth(), vp.getHeight(), true);
 
+			if (_options & opt_fullscreen)
+			{
+				rs.transform = getGlobalTransform(_actor->getParent());
+				mat->render(&actor, rs);
+			}
+			else
+			{
+				AffineTransform copy = actor.getTransform();
 
-            AffineTransform transform;
-            transform.identity();
-            Vector2 gpos = actor._getStage()->local2global(convert_local2stage(&actor, Vector2(0, 0)));
-            Vector2 offset = gpos - screen.pos.cast<Vector2>();
-            transform.translate(offset);
-            transform.scale(actor.getScale());
-            actor.setTransform(transform);
+				AffineTransform transform;
+				transform.identity();
+				Vector2 gpos = actor._getStage()->local2global(convert_local2stage(&actor, Vector2(0, 0)));
+				Vector2 offset = gpos - screen.pos.cast<Vector2>();
+				transform.translate(offset);
+				transform.scale(actor.getScale());
+				actor.setTransform(transform);
 
-            mat->render(&actor, rs);
-            mat->finish();
+				mat->render(&actor, rs);
 
-            //restore original transform
-            actor.setTransform(copy);
+				//restore original transform
+				actor.setTransform(copy);
+			}
 
+			mat->finish();
             driver->setRenderTarget(0);
         }
 
         void update(Actor& actor, float p, const UpdateState& us)
         {
-            if (!_singleR2T)
+            if (!(_options & opt_singleR2T))
                 render2texture();
             _a = lerp(_fadeIn ? 0 : 255, _fadeIn ? 255 : 0, p);
         }