X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fdrawscene.cpp;h=c6abda4ac135b28efb588396a144ae5471c32437;hb=de83c29ba0a517630b361ffdbebd1a1f0b5eed4e;hp=218ddec68053de1585010456e60da20ecff228f6;hpb=6b37529bd6dc4d89baced0d4e2cd956daccbaeb7;p=dragonfireclient.git diff --git a/src/drawscene.cpp b/src/drawscene.cpp index 218ddec68..c6abda4ac 100644 --- a/src/drawscene.cpp +++ b/src/drawscene.cpp @@ -18,10 +18,12 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "drawscene.h" -#include "main.h" // for g_settings #include "settings.h" #include "clouds.h" +#include "clientmap.h" #include "util/timetaker.h" +#include "fontengine.h" +#include "guiscalingfilter.h" typedef enum { LEFT = -1, @@ -29,24 +31,9 @@ typedef enum { EYECOUNT = 2 } paralax_sign; -void draw_selectionbox(video::IVideoDriver* driver, Hud& hud, - std::vector& hilightboxes, bool show_hud) -{ - if (!show_hud) - return; - - video::SMaterial oldmaterial = driver->getMaterial2D(); - video::SMaterial m; - m.Thickness = 3; - m.Lighting = false; - driver->setMaterial(m); - hud.drawSelectionBoxes(hilightboxes); - driver->setMaterial(oldmaterial); -} - void draw_anaglyph_3d_mode(Camera& camera, bool show_hud, Hud& hud, - std::vector hilightboxes, video::IVideoDriver* driver, - scene::ISceneManager* smgr, bool draw_wield_tool, Client& client, + video::IVideoDriver* driver, scene::ISceneManager* smgr, + bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv ) { @@ -80,10 +67,8 @@ void draw_anaglyph_3d_mode(Camera& camera, bool show_hud, Hud& hud, camera.getCameraNode()->setTarget(focusPoint); smgr->drawAll(); driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); - if (show_hud) - { - draw_selectionbox(driver, hud, hilightboxes, show_hud); - + if (show_hud) { + hud.drawSelectionMesh(); if (draw_wield_tool) camera.drawWieldedTool(&leftMove); } @@ -110,10 +95,8 @@ void draw_anaglyph_3d_mode(Camera& camera, bool show_hud, Hud& hud, camera.getCameraNode()->setTarget(focusPoint); smgr->drawAll(); driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); - if (show_hud) - { - draw_selectionbox(driver, hud, hilightboxes, show_hud); - + if (show_hud) { + hud.drawSelectionMesh(); if (draw_wield_tool) camera.drawWieldedTool(&rightMove); } @@ -128,42 +111,39 @@ void draw_anaglyph_3d_mode(Camera& camera, bool show_hud, Hud& hud, } void init_texture(video::IVideoDriver* driver, const v2u32& screensize, - video::ITexture** texture) + video::ITexture** texture, const char* name) { - 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), name, + irr::video::ECF_A8R8G8B8); } -video::ITexture* draw_image(const v2u32& screensize, - paralax_sign psign, const irr::core::matrix4& startMatrix, - const irr::core::vector3df& focusPoint, bool show_hud, - video::IVideoDriver* driver, Camera& camera, scene::ISceneManager* smgr, - Hud& hud, std::vector& hilightboxes, - bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv, - video::SColor skycolor ) +video::ITexture* draw_image(const v2u32 &screensize, + paralax_sign psign, const irr::core::matrix4 &startMatrix, + const irr::core::vector3df &focusPoint, bool show_hud, + video::IVideoDriver *driver, Camera &camera, scene::ISceneManager *smgr, + Hud &hud, bool draw_wield_tool, Client &client, + gui::IGUIEnvironment *guienv, const video::SColor &skycolor) { static video::ITexture* images[2] = { NULL, NULL }; + static v2u32 last_screensize = v2u32(0, 0); video::ITexture* image = NULL; + if (screensize != last_screensize) { + init_texture(driver, screensize, &images[1], "mt_drawimage_img1"); + init_texture(driver, screensize, &images[0], "mt_drawimage_img2"); + last_screensize = screensize; + } + if (psign == RIGHT) - { - init_texture(driver, screensize, &images[1]); image = images[1]; - } else { - init_texture(driver, screensize, &images[0]); + else image = images[0]; - } driver->setRenderTarget(image, true, true, irr::video::SColor(255, @@ -184,10 +164,8 @@ video::ITexture* draw_image(const v2u32& screensize, driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); - if (show_hud) - { - draw_selectionbox(driver, hud, hilightboxes, show_hud); - + if (show_hud) { + hud.drawSelectionMesh(); if (draw_wield_tool) camera.drawWieldedTool(&movement); } @@ -207,7 +185,7 @@ video::ITexture* draw_hud(video::IVideoDriver* driver, const v2u32& screensize, video::SColor skycolor, gui::IGUIEnvironment* guienv, Camera& camera ) { static video::ITexture* image = NULL; - init_texture(driver, screensize, &image); + init_texture(driver, screensize, &image, "mt_drawimage_hud"); driver->setRenderTarget(image, true, true, irr::video::SColor(255,0,0,0)); @@ -217,7 +195,7 @@ video::ITexture* draw_hud(video::IVideoDriver* driver, const v2u32& screensize, hud.drawCrosshair(); hud.drawHotbar(client.getPlayerItem()); hud.drawLuaElements(camera.getOffset()); - + camera.drawNametags(); guienv->drawAll(); } @@ -229,7 +207,7 @@ video::ITexture* draw_hud(video::IVideoDriver* driver, const v2u32& screensize, } void draw_interlaced_3d_mode(Camera& camera, bool show_hud, - Hud& hud, std::vector hilightboxes, video::IVideoDriver* driver, + Hud& hud, video::IVideoDriver* driver, scene::ISceneManager* smgr, const v2u32& screensize, bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv, video::SColor skycolor ) @@ -245,7 +223,7 @@ void draw_interlaced_3d_mode(Camera& camera, bool show_hud, /* create left view */ video::ITexture* left_image = draw_image(screensize, LEFT, startMatrix, - focusPoint, show_hud, driver, camera, smgr, hud, hilightboxes, + focusPoint, show_hud, driver, camera, smgr, hud, draw_wield_tool, client, guienv, skycolor); //Right eye... @@ -264,17 +242,19 @@ void draw_interlaced_3d_mode(Camera& camera, bool show_hud, driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); - if (show_hud) - { - draw_selectionbox(driver, hud, hilightboxes, show_hud); - + if (show_hud) { + hud.drawSelectionMesh(); if(draw_wield_tool) camera.drawWieldedTool(&rightMove); } 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); @@ -286,7 +266,7 @@ void draw_interlaced_3d_mode(Camera& camera, bool show_hud, } void draw_sidebyside_3d_mode(Camera& camera, bool show_hud, - Hud& hud, std::vector hilightboxes, video::IVideoDriver* driver, + Hud& hud, video::IVideoDriver* driver, scene::ISceneManager* smgr, const v2u32& screensize, bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv, video::SColor skycolor ) @@ -302,12 +282,12 @@ void draw_sidebyside_3d_mode(Camera& camera, bool show_hud, /* create left view */ video::ITexture* left_image = draw_image(screensize, LEFT, startMatrix, - focusPoint, show_hud, driver, camera, smgr, hud, hilightboxes, + focusPoint, show_hud, driver, camera, smgr, hud, draw_wield_tool, client, guienv, skycolor); /* create right view */ video::ITexture* right_image = draw_image(screensize, RIGHT, startMatrix, - focusPoint, show_hud, driver, camera, smgr, hud, hilightboxes, + focusPoint, show_hud, driver, camera, smgr, hud, draw_wield_tool, client, guienv, skycolor); /* create hud overlay */ @@ -317,19 +297,19 @@ void draw_sidebyside_3d_mode(Camera& camera, bool show_hud, //makeColorKeyTexture mirrors texture so we do it twice to get it right again driver->makeColorKeyTexture(hudtexture, irr::video::SColor(255, 0, 0, 0)); - driver->draw2DImage(left_image, + draw2DImageFilterScaled(driver, left_image, irr::core::rect(0, 0, screensize.X/2, screensize.Y), irr::core::rect(0, 0, screensize.X, screensize.Y), 0, 0, false); - driver->draw2DImage(hudtexture, + draw2DImageFilterScaled(driver, hudtexture, irr::core::rect(0, 0, screensize.X/2, screensize.Y), irr::core::rect(0, 0, screensize.X, screensize.Y), 0, 0, true); - driver->draw2DImage(right_image, + draw2DImageFilterScaled(driver, right_image, irr::core::rect(screensize.X/2, 0, screensize.X, screensize.Y), irr::core::rect(0, 0, screensize.X, screensize.Y), 0, 0, false); - driver->draw2DImage(hudtexture, + draw2DImageFilterScaled(driver, hudtexture, irr::core::rect(screensize.X/2, 0, screensize.X, screensize.Y), irr::core::rect(0, 0, screensize.X, screensize.Y), 0, 0, true); @@ -342,7 +322,7 @@ void draw_sidebyside_3d_mode(Camera& camera, bool show_hud, } void draw_top_bottom_3d_mode(Camera& camera, bool show_hud, - Hud& hud, std::vector hilightboxes, video::IVideoDriver* driver, + Hud& hud, video::IVideoDriver* driver, scene::ISceneManager* smgr, const v2u32& screensize, bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv, video::SColor skycolor ) @@ -358,12 +338,12 @@ void draw_top_bottom_3d_mode(Camera& camera, bool show_hud, /* create left view */ video::ITexture* left_image = draw_image(screensize, LEFT, startMatrix, - focusPoint, show_hud, driver, camera, smgr, hud, hilightboxes, + focusPoint, show_hud, driver, camera, smgr, hud, draw_wield_tool, client, guienv, skycolor); /* create right view */ video::ITexture* right_image = draw_image(screensize, RIGHT, startMatrix, - focusPoint, show_hud, driver, camera, smgr, hud, hilightboxes, + focusPoint, show_hud, driver, camera, smgr, hud, draw_wield_tool, client, guienv, skycolor); /* create hud overlay */ @@ -373,19 +353,19 @@ void draw_top_bottom_3d_mode(Camera& camera, bool show_hud, //makeColorKeyTexture mirrors texture so we do it twice to get it right again driver->makeColorKeyTexture(hudtexture, irr::video::SColor(255, 0, 0, 0)); - driver->draw2DImage(left_image, + draw2DImageFilterScaled(driver, left_image, irr::core::rect(0, 0, screensize.X, screensize.Y/2), irr::core::rect(0, 0, screensize.X, screensize.Y), 0, 0, false); - driver->draw2DImage(hudtexture, + draw2DImageFilterScaled(driver, hudtexture, irr::core::rect(0, 0, screensize.X, screensize.Y/2), irr::core::rect(0, 0, screensize.X, screensize.Y), 0, 0, true); - driver->draw2DImage(right_image, + draw2DImageFilterScaled(driver, right_image, irr::core::rect(0, screensize.Y/2, screensize.X, screensize.Y), irr::core::rect(0, 0, screensize.X, screensize.Y), 0, 0, false); - driver->draw2DImage(hudtexture, + draw2DImageFilterScaled(driver, hudtexture, irr::core::rect(0, screensize.Y/2, screensize.X, screensize.Y), irr::core::rect(0, 0, screensize.X, screensize.Y), 0, 0, true); @@ -397,80 +377,181 @@ void draw_top_bottom_3d_mode(Camera& camera, bool show_hud, camera.getCameraNode()->setTarget(oldTarget); } -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) +void draw_pageflip_3d_mode(Camera& camera, bool show_hud, + Hud& hud, video::IVideoDriver* driver, + scene::ISceneManager* smgr, const v2u32& screensize, + bool draw_wield_tool, Client& client, gui::IGUIEnvironment* guienv, + video::SColor skycolor) { + /* preserve old setup*/ + irr::core::vector3df oldPosition = camera.getCameraNode()->getPosition(); + irr::core::vector3df oldTarget = camera.getCameraNode()->getTarget(); + + irr::core::matrix4 startMatrix = + camera.getCameraNode()->getAbsoluteTransformation(); + irr::core::vector3df focusPoint = (camera.getCameraNode()->getTarget() + - camera.getCameraNode()->getAbsolutePosition()).setLength(1) + + camera.getCameraNode()->getAbsolutePosition(); + + //Left eye... + driver->setRenderTarget(irr::video::ERT_STEREO_LEFT_BUFFER); + + irr::core::vector3df leftEye; + irr::core::matrix4 leftMove; + leftMove.setTranslation( + irr::core::vector3df(-g_settings->getFloat("3d_paralax_strength"), + 0.0f, 0.0f)); + leftEye = (startMatrix * leftMove).getTranslation(); + + //clear the depth buffer, and color + driver->beginScene(true, true, irr::video::SColor(200, 200, 200, 255)); + camera.getCameraNode()->setPosition(leftEye); + camera.getCameraNode()->setTarget(focusPoint); + smgr->drawAll(); + driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); + + if (show_hud) { + hud.drawSelectionMesh(); + if (draw_wield_tool) + camera.drawWieldedTool(&leftMove); + hud.drawHotbar(client.getPlayerItem()); + hud.drawLuaElements(camera.getOffset()); + camera.drawNametags(); + } + + guienv->drawAll(); + + //Right eye... + driver->setRenderTarget(irr::video::ERT_STEREO_RIGHT_BUFFER); - draw_selectionbox(driver, hud, hilightboxes, show_hud); + irr::core::vector3df rightEye; + irr::core::matrix4 rightMove; + rightMove.setTranslation( + irr::core::vector3df(g_settings->getFloat("3d_paralax_strength"), + 0.0f, 0.0f)); + rightEye = (startMatrix * rightMove).getTranslation(); + + //clear the depth buffer, and color + driver->beginScene(true, true, irr::video::SColor(200, 200, 200, 255)); + camera.getCameraNode()->setPosition(rightEye); + camera.getCameraNode()->setTarget(focusPoint); + smgr->drawAll(); + driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); + + if (show_hud) { + hud.drawSelectionMesh(); + if (draw_wield_tool) + camera.drawWieldedTool(&rightMove); + hud.drawHotbar(client.getPlayerItem()); + hud.drawLuaElements(camera.getOffset()); + camera.drawNametags(); + } + + guienv->drawAll(); - if(draw_wield_tool) - camera.drawWieldedTool(); + camera.getCameraNode()->setPosition(oldPosition); + camera.getCameraNode()->setTarget(oldTarget); } -void draw_scene(video::IVideoDriver* driver, scene::ISceneManager* smgr, - Camera& camera, Client& client, LocalPlayer* player, Hud& hud, - gui::IGUIEnvironment* guienv, std::vector hilightboxes, - const v2u32& screensize, video::SColor skycolor, bool show_hud) +void draw_plain(Camera &camera, bool show_hud, Hud &hud, + video::IVideoDriver *driver, bool draw_wield_tool, + Client &client, gui::IGUIEnvironment *guienv) { - //TODO check if usefull - u32 scenetime = 0; - { - TimeTaker timer("smgr"); + driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); + if (show_hud) { + hud.drawSelectionMesh(); + if (draw_wield_tool) { + camera.drawWieldedTool(); + } + } +} - bool draw_wield_tool = (show_hud && - (player->hud_flags & HUD_FLAG_WIELDITEM_VISIBLE) && - camera.getCameraMode() < CAMERA_MODE_THIRD ); +void draw_scene(video::IVideoDriver *driver, scene::ISceneManager *smgr, + Camera &camera, Client& client, LocalPlayer *player, Hud &hud, + Mapper &mapper, gui::IGUIEnvironment *guienv, + const v2u32 &screensize, const video::SColor &skycolor, + bool show_hud, bool show_minimap) +{ + TimeTaker timer("smgr"); - bool draw_crosshair = ((player->hud_flags & HUD_FLAG_CROSSHAIR_VISIBLE) && - (camera.getCameraMode() != CAMERA_MODE_THIRD_FRONT)); + bool draw_wield_tool = (show_hud && + (player->hud_flags & HUD_FLAG_WIELDITEM_VISIBLE) && + camera.getCameraMode() < CAMERA_MODE_THIRD ); - std::string draw_mode = g_settings->get("3d_mode"); + bool draw_crosshair = ((player->hud_flags & HUD_FLAG_CROSSHAIR_VISIBLE) && + (camera.getCameraMode() != CAMERA_MODE_THIRD_FRONT)); - smgr->drawAll(); +#ifdef HAVE_TOUCHSCREENGUI + try { + draw_crosshair = !g_settings->getBool("touchtarget"); + } + catch(SettingNotFoundException) {} +#endif - if (draw_mode == "anaglyph") - { - draw_anaglyph_3d_mode(camera, show_hud, hud, hilightboxes, driver, - smgr, draw_wield_tool, client, guienv); - draw_crosshair = false; - } - else if (draw_mode == "interlaced") - { - draw_interlaced_3d_mode(camera, show_hud, hud, hilightboxes, driver, - smgr, screensize, draw_wield_tool, client, guienv, skycolor); - draw_crosshair = false; - } - else if (draw_mode == "sidebyside") - { - draw_sidebyside_3d_mode(camera, show_hud, hud, hilightboxes, driver, - smgr, screensize, draw_wield_tool, client, guienv, skycolor); - show_hud = false; - } - else if (draw_mode == "topbottom") - { - draw_top_bottom_3d_mode(camera, show_hud, hud, hilightboxes, driver, - smgr, screensize, draw_wield_tool, client, guienv, skycolor); - show_hud = false; - } - else { - draw_plain(camera, show_hud, hud, hilightboxes, driver, - draw_wield_tool, client, guienv); - } - //TODO how to make those 3d too - if (show_hud) - { - if (draw_crosshair) - hud.drawCrosshair(); - hud.drawHotbar(client.getPlayerItem()); - hud.drawLuaElements(camera.getOffset()); - } + std::string draw_mode = g_settings->get("3d_mode"); - guienv->drawAll(); + smgr->drawAll(); - scenetime = timer.stop(true); + if (draw_mode == "anaglyph") + { + draw_anaglyph_3d_mode(camera, show_hud, hud, driver, + smgr, draw_wield_tool, client, guienv); + draw_crosshair = false; + } + else if (draw_mode == "interlaced") + { + draw_interlaced_3d_mode(camera, show_hud, hud, driver, + smgr, screensize, draw_wield_tool, client, guienv, skycolor); + draw_crosshair = false; + } + else if (draw_mode == "sidebyside") + { + draw_sidebyside_3d_mode(camera, show_hud, hud, driver, + smgr, screensize, draw_wield_tool, client, guienv, skycolor); + show_hud = false; + } + else if (draw_mode == "topbottom") + { + draw_top_bottom_3d_mode(camera, show_hud, hud, driver, + smgr, screensize, draw_wield_tool, client, guienv, skycolor); + show_hud = false; + } + else if (draw_mode == "pageflip") + { + draw_pageflip_3d_mode(camera, show_hud, hud, driver, + smgr, screensize, draw_wield_tool, client, guienv, skycolor); + draw_crosshair = false; + show_hud = false; + } + else { + draw_plain(camera, show_hud, hud, driver, + draw_wield_tool, client, guienv); } + /* + Post effects + */ + { + client.getEnv().getClientMap().renderPostFx(camera.getCameraMode()); + } + + //TODO how to make those 3d too + if (show_hud) + { + if (draw_crosshair) + hud.drawCrosshair(); + + hud.drawHotbar(client.getPlayerItem()); + hud.drawLuaElements(camera.getOffset()); + camera.drawNametags(); + + if (show_minimap) + mapper.drawMinimap(); + } + + guienv->drawAll(); + + timer.stop(true); } /* @@ -478,21 +559,18 @@ void draw_scene(video::IVideoDriver* driver, scene::ISceneManager* smgr, Text will be removed when the screen is drawn the next time. Additionally, a progressbar can be drawn when percent is set between 0 and 100. */ -/*gui::IGUIStaticText **/ void draw_load_screen(const std::wstring &text, IrrlichtDevice* device, - gui::IGUIEnvironment* guienv, gui::IGUIFont* font, float dtime, - int percent, bool clouds ) + gui::IGUIEnvironment* guienv, float dtime, int percent, bool clouds ) { - video::IVideoDriver* driver = device->getVideoDriver(); - v2u32 screensize = driver->getScreenSize(); - const wchar_t *loadingtext = text.c_str(); - core::vector2d textsize_u = font->getDimension(loadingtext); - core::vector2d textsize(textsize_u.X,textsize_u.Y); - core::vector2d center(screensize.X/2, screensize.Y/2); - core::rect textrect(center - textsize/2, center + textsize/2); + video::IVideoDriver* driver = device->getVideoDriver(); + v2u32 screensize = porting::getWindowSize(); + + v2s32 textsize(g_fontengine->getTextWidth(text), g_fontengine->getLineHeight()); + v2s32 center(screensize.X / 2, screensize.Y / 2); + core::rect textrect(center - textsize / 2, center + textsize / 2); gui::IGUIStaticText *guitext = guienv->addStaticText( - loadingtext, textrect, false, false); + text.c_str(), textrect, false, false); guitext->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_UPPERLEFT); bool cloud_menu_background = clouds && g_settings->getBool("menu_clouds"); @@ -500,25 +578,33 @@ void draw_load_screen(const std::wstring &text, IrrlichtDevice* device, { g_menuclouds->step(dtime*3); g_menuclouds->render(); - driver->beginScene(true, true, video::SColor(255,140,186,250)); + driver->beginScene(true, true, video::SColor(255, 140, 186, 250)); g_menucloudsmgr->drawAll(); } else - driver->beginScene(true, true, video::SColor(255,0,0,0)); + driver->beginScene(true, true, video::SColor(255, 0, 0, 0)); - if (percent >= 0 && percent <= 100) // draw progress bar + // draw progress bar + if ((percent >= 0) && (percent <= 100)) { - core::vector2d barsize(256,32); - core::rect barrect(center-barsize/2, center+barsize/2); - driver->draw2DRectangle(video::SColor(255,255,255,255),barrect, NULL); // border - driver->draw2DRectangle(video::SColor(255,64,64,64), core::rect ( - barrect.UpperLeftCorner+1, + v2s32 barsize( + // 342 is (approximately) 256/0.75 to keep bar on same size as + // before with default settings + 342 * porting::getDisplayDensity() * + g_settings->getFloat("gui_scaling"), + g_fontengine->getTextHeight() * 2); + + core::rect barrect(center - barsize / 2, center + barsize / 2); + driver->draw2DRectangle(video::SColor(255, 255, 255, 255),barrect, NULL); // border + driver->draw2DRectangle(video::SColor(255, 64, 64, 64), core::rect ( + barrect.UpperLeftCorner + 1, barrect.LowerRightCorner-1), NULL); // black inside the bar - driver->draw2DRectangle(video::SColor(255,128,128,128), core::rect ( - barrect.UpperLeftCorner+1, + driver->draw2DRectangle(video::SColor(255, 128, 128, 128), core::rect ( + barrect.UpperLeftCorner + 1, core::vector2d( - barrect.LowerRightCorner.X-(barsize.X-1)+percent*(barsize.X-2)/100, - barrect.LowerRightCorner.Y-1)), NULL); // the actual progress + barrect.LowerRightCorner.X - + (barsize.X - 1) + percent * (barsize.X - 2) / 100, + barrect.LowerRightCorner.Y - 1)), NULL); // the actual progress } guienv->drawAll(); driver->endScene();