X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fdrawscene.cpp;h=08b08990830adebd0f05edbed4550517778b01e9;hb=58e6d25e033c76dc91aaac18fdeda92ac23fe0e1;hp=491101563cbe72a95a74c9c6c5b5a5cd6d578b67;hpb=09970b7b6daa82ba0cb71540ebb70e671637782f;p=oweals%2Fminetest.git diff --git a/src/drawscene.cpp b/src/drawscene.cpp index 491101563..08b089908 100644 --- a/src/drawscene.cpp +++ b/src/drawscene.cpp @@ -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(screensize.X, screensize.Y)); - last_screensize = screensize; + driver->removeTexture(*texture); } + *texture = driver->addRenderTargetTexture( + core::dimension2d(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(0, i), +#else driver->draw2DImage(left_image, irr::core::position2d(0, screensize.Y-i), +#endif irr::core::rect(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 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); }