Node highlighting.
[oweals/minetest.git] / src / drawscene.cpp
index 491101563cbe72a95a74c9c6c5b5a5cd6d578b67..08b08990830adebd0f05edbed4550517778b01e9 100644 (file)
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "main.h" // for g_settings
 #include "settings.h"
 #include "clouds.h"
+#include "clientmap.h"
 #include "util/timetaker.h"
 
 typedef enum {
@@ -130,18 +131,12 @@ void draw_anaglyph_3d_mode(Camera& camera, bool show_hud, Hud& hud,
 void init_texture(video::IVideoDriver* driver, const v2u32& screensize,
                video::ITexture** texture)
 {
-       static v2u32 last_screensize = v2u32(0,0);
-
-       if (( *texture == NULL ) || (screensize != last_screensize))
+       if (*texture != NULL)
        {
-               if (*texture != NULL)
-               {
-                       driver->removeTexture(*texture);
-               }
-               *texture = driver->addRenderTargetTexture(
-                               core::dimension2d<u32>(screensize.X, screensize.Y));
-               last_screensize = screensize;
+               driver->removeTexture(*texture);
        }
+       *texture = driver->addRenderTargetTexture(
+                       core::dimension2d<u32>(screensize.X, screensize.Y));
 }
 
 video::ITexture* draw_image(const v2u32& screensize,
@@ -153,16 +148,16 @@ video::ITexture* draw_image(const v2u32& screensize,
                video::SColor skycolor )
 {
        static video::ITexture* images[2] = { NULL, NULL };
+       static v2u32 last_screensize = v2u32(0,0);
 
        video::ITexture* image = NULL;
 
-       if (psign == RIGHT)
-       {
+       if (screensize != last_screensize) {
                init_texture(driver, screensize, &images[1]);
                image = images[1];
-       } else {
                init_texture(driver, screensize, &images[0]);
                image = images[0];
+               last_screensize = screensize;
        }
 
        driver->setRenderTarget(image, true, true,
@@ -274,7 +269,11 @@ void draw_interlaced_3d_mode(Camera& camera, bool show_hud,
        guienv->drawAll();
 
        for (unsigned int i = 0; i < screensize.Y; i+=2 ) {
+#if (IRRLICHT_VERSION_MAJOR >= 1) && (IRRLICHT_VERSION_MINOR >= 8)
+               driver->draw2DImage(left_image, irr::core::position2d<s32>(0, i),
+#else
                driver->draw2DImage(left_image, irr::core::position2d<s32>(0, screensize.Y-i),
+#endif
                                irr::core::rect<s32>(0, i,screensize.X, i+1), 0,
                                irr::video::SColor(255, 255, 255, 255),
                                false);
@@ -401,6 +400,7 @@ void draw_plain(Camera& camera, bool show_hud, Hud& hud,
                std::vector<aabb3f> hilightboxes, video::IVideoDriver* driver,
                bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv)
 {
+       driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
 
        draw_selectionbox(driver, hud, hilightboxes, show_hud);
 
@@ -425,6 +425,13 @@ void draw_scene(video::IVideoDriver* driver, scene::ISceneManager* smgr,
                bool draw_crosshair = ((player->hud_flags & HUD_FLAG_CROSSHAIR_VISIBLE) &&
                                (camera.getCameraMode() != CAMERA_MODE_THIRD_FRONT));
 
+#ifdef HAVE_TOUCHSCREENGUI
+               try {
+                       draw_crosshair = !g_settings->getBool("touchtarget");
+               }
+               catch(SettingNotFoundException) {}
+#endif
+
                std::string draw_mode = g_settings->get("3d_mode");
 
                smgr->drawAll();
@@ -457,6 +464,14 @@ void draw_scene(video::IVideoDriver* driver, scene::ISceneManager* smgr,
                        draw_plain(camera, show_hud, hud, hilightboxes, driver,
                                        draw_wield_tool, client, guienv);
                }
+
+               /*
+                       Post effects
+               */
+               {
+                       client.getEnv().getClientMap().renderPostFx(camera.getCameraMode());
+               }
+
                //TODO how to make those 3d too
                if (show_hud)
                {
@@ -464,10 +479,10 @@ void draw_scene(video::IVideoDriver* driver, scene::ISceneManager* smgr,
                                hud.drawCrosshair();
                        hud.drawHotbar(client.getPlayerItem());
                        hud.drawLuaElements(camera.getOffset());
-
-                       guienv->drawAll();
                }
 
+               guienv->drawAll();
+
                scenetime = timer.stop(true);
        }