From 240f0ec6b7052615f2b5ec30b2a8ed6ba05cc674 Mon Sep 17 00:00:00 2001 From: konstin Date: Tue, 8 Jul 2014 18:34:54 +0200 Subject: [PATCH 01/93] remove m_random_gp --- src/race/grand_prix_manager.cpp | 7 ------- src/race/grand_prix_manager.hpp | 4 ---- src/states_screens/dialogs/random_gp_dialog.cpp | 17 +++-------------- 3 files changed, 3 insertions(+), 25 deletions(-) diff --git a/src/race/grand_prix_manager.cpp b/src/race/grand_prix_manager.cpp index 9270bac06..59ad78280 100644 --- a/src/race/grand_prix_manager.cpp +++ b/src/race/grand_prix_manager.cpp @@ -34,7 +34,6 @@ const char* GrandPrixManager::SUFFIX = ".grandprix"; // ---------------------------------------------------------------------------- GrandPrixManager::GrandPrixManager() { - m_random_gp = NULL; // better do it explicitly and avoid weird stuff loadFiles(); } // GrandPrixManager @@ -42,10 +41,7 @@ GrandPrixManager::GrandPrixManager() GrandPrixManager::~GrandPrixManager() { for(unsigned int i=0; igetId() == s) diff --git a/src/race/grand_prix_manager.hpp b/src/race/grand_prix_manager.hpp index 314ddcc59..c8510bf3a 100644 --- a/src/race/grand_prix_manager.hpp +++ b/src/race/grand_prix_manager.hpp @@ -47,10 +47,6 @@ private: bool existsName(const irr::core::stringw& name) const; public: - /** saved here by a random GP dialog to avoid dangling pinters or - * memory leaks */ - GrandPrixData* m_random_gp; - GrandPrixManager(); ~GrandPrixManager(); void reload(); diff --git a/src/states_screens/dialogs/random_gp_dialog.cpp b/src/states_screens/dialogs/random_gp_dialog.cpp index 5a7406e5e..dffe5221f 100644 --- a/src/states_screens/dialogs/random_gp_dialog.cpp +++ b/src/states_screens/dialogs/random_gp_dialog.cpp @@ -46,14 +46,7 @@ RandomGPInfoDialog::RandomGPInfoDialog() m_over_body = m_area.getHeight()/7 + SPINNER_HEIGHT + 10; // 10px space m_lower_bound = m_area.getHeight()*6/7; - // The GP manager is be used to make the GP live longer than this dialog - if (grand_prix_manager->m_random_gp) - { - delete grand_prix_manager->m_random_gp; - grand_prix_manager->m_random_gp = NULL; - } m_gp = new GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); - grand_prix_manager->m_random_gp = m_gp; addTitle(); addSpinners(); @@ -142,7 +135,7 @@ GUIEngine::EventPropagation RandomGPInfoDialog::processEvent( if (eventSource == "start") { ModalDialog::dismiss(); - race_manager->startGP(grand_prix_manager->m_random_gp, false, false); + race_manager->startGP(m_gp, false, false); return GUIEngine::EVENT_BLOCK; } else if (eventSource == "Number of tracks") @@ -171,9 +164,7 @@ GUIEngine::EventPropagation RandomGPInfoDialog::processEvent( if (s->getValue() > (signed)max) s->setValue(max); - delete m_gp; - m_gp = new GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); - grand_prix_manager->m_random_gp = m_gp; + new (m_gp) GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); addTracks(); } else if (eventSource == "reverse") @@ -184,9 +175,7 @@ GUIEngine::EventPropagation RandomGPInfoDialog::processEvent( } else if (eventSource == "reload") { - delete m_gp; - m_gp = new GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); - grand_prix_manager->m_random_gp = m_gp; + new (m_gp) GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); addTracks(); } From eb0120fb77c3e84c6d91bb7147f3b3970ea09178 Mon Sep 17 00:00:00 2001 From: konstin Date: Tue, 8 Jul 2014 18:37:02 +0200 Subject: [PATCH 02/93] fix #1395 --- src/race/grand_prix_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/race/grand_prix_manager.cpp b/src/race/grand_prix_manager.cpp index 59ad78280..ce9f00b6e 100644 --- a/src/race/grand_prix_manager.cpp +++ b/src/race/grand_prix_manager.cpp @@ -93,7 +93,7 @@ void GrandPrixManager::load(const std::string& filename) catch (std::runtime_error& e) { Log::error("GrandPrixManager", - "Ignoring grand prix %s (%s)\n", filename.c_str(), e.what()); + "Ignoring Grand Prix %s (%s)\n", filename.c_str(), e.what()); } } // load From 872413ba913bc90b993f20565434885dc6957262 Mon Sep 17 00:00:00 2001 From: konstin Date: Sun, 13 Jul 2014 19:45:10 +0200 Subject: [PATCH 03/93] clean code --- src/karts/kart_properties.cpp | 262 +++++++++++++++++----------------- src/karts/kart_properties.hpp | 6 +- 2 files changed, 134 insertions(+), 134 deletions(-) diff --git a/src/karts/kart_properties.cpp b/src/karts/kart_properties.cpp index c9fb3cb4f..a216c37d0 100644 --- a/src/karts/kart_properties.cpp +++ b/src/karts/kart_properties.cpp @@ -461,149 +461,149 @@ void KartProperties::getAllData(const XMLNode * root) } // if sounds-node exist if(const XMLNode *nitro_node = root->getNode("nitro")) + { + nitro_node->get("consumption", &m_nitro_consumption ); + nitro_node->get("small-container", &m_nitro_small_container ); + nitro_node->get("big-container", &m_nitro_big_container ); + nitro_node->get("max-speed-increase", &m_nitro_max_speed_increase); + nitro_node->get("engine-force", &m_nitro_engine_force ); + nitro_node->get("duration", &m_nitro_duration ); + nitro_node->get("fade-out-time", &m_nitro_fade_out_time ); + nitro_node->get("max", &m_nitro_max ); + nitro_node->get("min-consumption-time", &m_nitro_min_consumption ); + } + + if(const XMLNode *bubble_node = root->getNode("bubblegum")) + { + bubble_node->get("time", &m_bubblegum_time ); + bubble_node->get("speed-fraction", &m_bubblegum_speed_fraction); + bubble_node->get("fade-in-time", &m_bubblegum_fade_in_time ); + bubble_node->get("torque", &m_bubblegum_torque ); + } + + if(const XMLNode *rescue_node = root->getNode("rescue")) + { + rescue_node->get("vert-offset", &m_rescue_vert_offset); + rescue_node->get("time", &m_rescue_time ); + rescue_node->get("height", &m_rescue_height ); + } + + if(const XMLNode *explosion_node = root->getNode("explosion")) + { + explosion_node->get("time", &m_explosion_time ); + explosion_node->get("radius", &m_explosion_radius); + explosion_node->get("invulnerability-time", + &m_explosion_invulnerability_time); + } + + if(const XMLNode *skid_node = root->getNode("skid")) + { + m_skidding_properties->load(skid_node); + } + + + if(const XMLNode *slipstream_node = root->getNode("slipstream")) + { + slipstream_node->get("length", &m_slipstream_length ); + slipstream_node->get("width", &m_slipstream_width ); + slipstream_node->get("collect-time", &m_slipstream_collect_time ); + slipstream_node->get("use-time", &m_slipstream_use_time ); + slipstream_node->get("add-power", &m_slipstream_add_power ); + slipstream_node->get("min-speed", &m_slipstream_min_speed ); + slipstream_node->get("max-speed-increase", + &m_slipstream_max_speed_increase); + slipstream_node->get("duration", &m_slipstream_duration ); + slipstream_node->get("fade-out-time",&m_slipstream_fade_out_time ); + } + + if(const XMLNode *turn_node = root->getNode("turn")) + { + turn_node->get("time-full-steer", &m_time_full_steer ); + turn_node->get("time-reset-steer", &m_time_reset_steer ); + turn_node->get("turn-radius", &m_turn_angle_at_speed ); + // For now store the turn radius in turn angle, the correct + // value can only be determined later in ::load + } + + if(const XMLNode *engine_node = root->getNode("engine")) + { + engine_node->get("brake-factor", &m_brake_factor); + engine_node->get("max-speed-reverse-ratio", &m_max_speed_reverse_ratio); + engine_node->get("power", &m_engine_power); + if(m_engine_power.size()!=RaceManager::DIFFICULTY_COUNT) { - nitro_node->get("consumption", &m_nitro_consumption ); - nitro_node->get("small-container", &m_nitro_small_container ); - nitro_node->get("big-container", &m_nitro_big_container ); - nitro_node->get("max-speed-increase", &m_nitro_max_speed_increase); - nitro_node->get("engine-force", &m_nitro_engine_force ); - nitro_node->get("duration", &m_nitro_duration ); - nitro_node->get("fade-out-time", &m_nitro_fade_out_time ); - nitro_node->get("max", &m_nitro_max ); - nitro_node->get("min-consumption-time", &m_nitro_min_consumption ); + Log::fatal("[KartProperties]", + "Incorrect engine-power specifications for kart '%s'", + getIdent().c_str()); } - - if(const XMLNode *bubble_node = root->getNode("bubblegum")) + engine_node->get("max-speed", &m_max_speed); + if(m_max_speed.size()!=RaceManager::DIFFICULTY_COUNT) { - bubble_node->get("time", &m_bubblegum_time ); - bubble_node->get("speed-fraction", &m_bubblegum_speed_fraction); - bubble_node->get("fade-in-time", &m_bubblegum_fade_in_time ); - bubble_node->get("torque", &m_bubblegum_torque ); + Log::fatal("[KartProperties]", + "Incorrect max-speed specifications for kart '%s'", + getIdent().c_str()); } + } // if getNode("engine") - if(const XMLNode *rescue_node = root->getNode("rescue")) + if(const XMLNode *gear_node = root->getNode("gear")) + { + gear_node->get("switch-ratio", &m_gear_switch_ratio ); + gear_node->get("power-increase", &m_gear_power_increase); + } + + if(const XMLNode *mass_node = root->getNode("mass")) + mass_node->get("value", &m_mass); + + if(const XMLNode *plunger_node= root->getNode("plunger")) + { + plunger_node->get("band-max-length", &m_rubber_band_max_length ); + plunger_node->get("band-force", &m_rubber_band_force ); + plunger_node->get("band-duration", &m_rubber_band_duration ); + plunger_node->get("band-speed-increase",&m_rubber_band_speed_increase); + plunger_node->get("band-fade-out-time", &m_rubber_band_fade_out_time ); + plunger_node->get("in-face-time", &m_plunger_in_face_duration); + if(m_plunger_in_face_duration.size()!=RaceManager::DIFFICULTY_COUNT) { - rescue_node->get("vert-offset", &m_rescue_vert_offset); - rescue_node->get("time", &m_rescue_time ); - rescue_node->get("height", &m_rescue_height ); + Log::fatal("KartProperties", + "Invalid plunger in-face-time specification."); } + } - if(const XMLNode *explosion_node = root->getNode("explosion")) + if(const XMLNode *zipper_node= root->getNode("zipper")) + { + zipper_node->get("time", &m_zipper_time ); + zipper_node->get("fade-out-time", &m_zipper_fade_out_time ); + zipper_node->get("force", &m_zipper_force ); + zipper_node->get("speed-gain", &m_zipper_speed_gain ); + zipper_node->get("max-speed-increase", &m_zipper_max_speed_increase); + } + + if(const XMLNode *swatter_node= root->getNode("swatter")) + { + swatter_node->get("duration", &m_swatter_duration ); + swatter_node->get("squash-duration", &m_squash_duration ); + swatter_node->get("squash-slowdown", &m_squash_slowdown ); + if(swatter_node->get("distance", &m_swatter_distance2) ) { - explosion_node->get("time", &m_explosion_time ); - explosion_node->get("radius", &m_explosion_radius); - explosion_node->get("invulnerability-time", - &m_explosion_invulnerability_time); + // Avoid squaring if distance is not defined, so that + // distance2 remains UNDEFINED (which is a negative value) + m_swatter_distance2 *= m_swatter_distance2; } + } - if(const XMLNode *skid_node = root->getNode("skid")) - { - m_skidding_properties->load(skid_node); - } + if(const XMLNode *lean_node= root->getNode("lean")) + { + lean_node->get("max", &m_max_lean ); + lean_node->get("speed", &m_lean_speed); + m_max_lean *= DEGREE_TO_RAD; + m_lean_speed *= DEGREE_TO_RAD; + } - - if(const XMLNode *slipstream_node = root->getNode("slipstream")) - { - slipstream_node->get("length", &m_slipstream_length ); - slipstream_node->get("width", &m_slipstream_width ); - slipstream_node->get("collect-time", &m_slipstream_collect_time ); - slipstream_node->get("use-time", &m_slipstream_use_time ); - slipstream_node->get("add-power", &m_slipstream_add_power ); - slipstream_node->get("min-speed", &m_slipstream_min_speed ); - slipstream_node->get("max-speed-increase", - &m_slipstream_max_speed_increase); - slipstream_node->get("duration", &m_slipstream_duration ); - slipstream_node->get("fade-out-time",&m_slipstream_fade_out_time ); - } - - if(const XMLNode *turn_node = root->getNode("turn")) - { - turn_node->get("time-full-steer", &m_time_full_steer ); - turn_node->get("time-reset-steer", &m_time_reset_steer ); - turn_node->get("turn-radius", &m_turn_angle_at_speed ); - // For now store the turn radius in turn angle, the correct - // value can only be determined later in ::load - } - - if(const XMLNode *engine_node = root->getNode("engine")) - { - engine_node->get("brake-factor", &m_brake_factor); - engine_node->get("max-speed-reverse-ratio", &m_max_speed_reverse_ratio); - engine_node->get("power", &m_engine_power); - if(m_engine_power.size()!=RaceManager::DIFFICULTY_COUNT) - { - Log::fatal("[KartProperties]", - "Incorrect engine-power specifications for kart '%s'", - getIdent().c_str()); - } - engine_node->get("max-speed", &m_max_speed); - if(m_max_speed.size()!=RaceManager::DIFFICULTY_COUNT) - { - Log::fatal("[KartProperties]", - "Incorrect max-speed specifications for kart '%s'", - getIdent().c_str()); - } - } // if getNode("engine") - - if(const XMLNode *gear_node = root->getNode("gear")) - { - gear_node->get("switch-ratio", &m_gear_switch_ratio ); - gear_node->get("power-increase", &m_gear_power_increase); - } - - if(const XMLNode *mass_node = root->getNode("mass")) - mass_node->get("value", &m_mass); - - if(const XMLNode *plunger_node= root->getNode("plunger")) - { - plunger_node->get("band-max-length", &m_rubber_band_max_length ); - plunger_node->get("band-force", &m_rubber_band_force ); - plunger_node->get("band-duration", &m_rubber_band_duration ); - plunger_node->get("band-speed-increase",&m_rubber_band_speed_increase); - plunger_node->get("band-fade-out-time", &m_rubber_band_fade_out_time ); - plunger_node->get("in-face-time", &m_plunger_in_face_duration); - if(m_plunger_in_face_duration.size()!=RaceManager::DIFFICULTY_COUNT) - { - Log::fatal("KartProperties", - "Invalid plunger in-face-time specification."); - } - } - - if(const XMLNode *zipper_node= root->getNode("zipper")) - { - zipper_node->get("time", &m_zipper_time ); - zipper_node->get("fade-out-time", &m_zipper_fade_out_time ); - zipper_node->get("force", &m_zipper_force ); - zipper_node->get("speed-gain", &m_zipper_speed_gain ); - zipper_node->get("max-speed-increase", &m_zipper_max_speed_increase); - } - - if(const XMLNode *swatter_node= root->getNode("swatter")) - { - swatter_node->get("duration", &m_swatter_duration ); - swatter_node->get("squash-duration", &m_squash_duration ); - swatter_node->get("squash-slowdown", &m_squash_slowdown ); - if(swatter_node->get("distance", &m_swatter_distance2) ) - { - // Avoid squaring if distance is not defined, so that - // distance2 remains UNDEFINED (which is a negative value) - m_swatter_distance2 *= m_swatter_distance2; - } - } - - if(const XMLNode *lean_node= root->getNode("lean")) - { - lean_node->get("max", &m_max_lean ); - lean_node->get("speed", &m_lean_speed); - m_max_lean *= DEGREE_TO_RAD; - m_lean_speed *= DEGREE_TO_RAD; - } - - if(const XMLNode *startup_node= root->getNode("startup")) - { - startup_node->get("time", &m_startup_times); - startup_node->get("boost", &m_startup_boost); - } + if(const XMLNode *startup_node= root->getNode("startup")) + { + startup_node->get("time", &m_startup_times); + startup_node->get("boost", &m_startup_boost); + } if(m_kart_model) m_kart_model->loadInfo(*root); diff --git a/src/karts/kart_properties.hpp b/src/karts/kart_properties.hpp index d90dec561..c97b9d322 100644 --- a/src/karts/kart_properties.hpp +++ b/src/karts/kart_properties.hpp @@ -211,7 +211,7 @@ private: float m_nitro_small_container; /** Nitro amount for big bittle. */ float m_nitro_big_container; - /* How much the speed of a kart might exceed its maximum speed (in m/s). */ + /** How much the speed of a kart might exceed its maximum speed (in m/s). */ float m_nitro_max_speed_increase; /** Additional engine force to affect the kart. */ float m_nitro_engine_force; @@ -250,7 +250,7 @@ private: /** The speed with which the roll (when leaning in a curve) changes * (in radians/second). */ float m_lean_speed; - + /** How long a jump must be in order to trigger the jump animation. */ float m_jump_animation_time; @@ -547,7 +547,7 @@ public: { return m_speed_weighted_object_properties; } - + // ------------------------------------------------------------------------ /** Returns the wheel base (distance front to rear axis). */ float getWheelBase () const {return m_wheel_base; } From ab57903f9f5ba21c2eff25e85f66d6d5d21733e3 Mon Sep 17 00:00:00 2001 From: hiker Date: Mon, 14 Jul 2014 23:08:46 +1000 Subject: [PATCH 04/93] Try to convert m_gp from a GPData pointer to a GP object, compiles, but crashes. --- src/race/grand_prix_data.cpp | 8 ++++---- src/race/grand_prix_data.hpp | 13 +++++++++--- src/states_screens/dialogs/gp_info_dialog.cpp | 20 +++++++++---------- src/states_screens/dialogs/gp_info_dialog.hpp | 6 ++++-- .../dialogs/random_gp_dialog.cpp | 16 +++++++-------- .../dialogs/random_gp_dialog.hpp | 9 +-------- 6 files changed, 37 insertions(+), 35 deletions(-) diff --git a/src/race/grand_prix_data.cpp b/src/race/grand_prix_data.cpp index 1405e01c8..46b60794e 100644 --- a/src/race/grand_prix_data.cpp +++ b/src/race/grand_prix_data.cpp @@ -49,7 +49,7 @@ GrandPrixData::GrandPrixData(const std::string& filename) // ---------------------------------------------------------------------------- GrandPrixData::GrandPrixData(const unsigned int number_of_tracks, const std::string& track_group, - const RandomGPInfoDialog::REVERSED use_reverse) + const GrandPrixData::GP_Reversed use_reverse) { m_filename = "Random GP - Not loaded from a file!"; m_id = "random"; @@ -118,13 +118,13 @@ void GrandPrixData::changeTrackNumber(const unsigned int number_of_tracks, // ---------------------------------------------------------------------------- -void GrandPrixData::changeReverse(const RandomGPInfoDialog::REVERSED use_reverse) +void GrandPrixData::changeReverse(const GrandPrixData::GP_Reversed use_reverse) { for (unsigned int i = 0; i < m_tracks.size(); i++) { - if (use_reverse == RandomGPInfoDialog::NO_REVERSE) + if (use_reverse == NO_REVERSE) m_reversed[i] = false; - else if (use_reverse == RandomGPInfoDialog::MIXED) + else if (use_reverse == MIXED) if (track_manager->getTrack(m_tracks[i])->reverseAvailable()) m_reversed[i] = (rand() % 2 != 0); else diff --git a/src/race/grand_prix_data.hpp b/src/race/grand_prix_data.hpp index 742ec15f7..04c05249d 100644 --- a/src/race/grand_prix_data.hpp +++ b/src/race/grand_prix_data.hpp @@ -24,7 +24,6 @@ #include #include -#include "states_screens/dialogs/random_gp_dialog.hpp" #include "utils/translation.hpp" using irr::core::stringw; @@ -69,6 +68,14 @@ private: */ bool isTrackAvailable(const std::string &id, bool includeLocked) const; +public: + enum GP_Reversed + { + NO_REVERSE = 0, + ALL_REVERSE = 1, + MIXED = 2 + }; + public: #if (defined(WIN32) || defined(_WIN32)) && !defined(__MINGW32__) # pragma warning(disable:4290) @@ -80,10 +87,10 @@ public: /** Creates a new random GP */ GrandPrixData(const unsigned int number_of_tracks, const std::string& track_group, - const RandomGPInfoDialog::REVERSED use_reverse); + const GP_Reversed use_reverse); void changeTrackNumber(const unsigned int number_of_tracks, const std::string& track_group); - void changeReverse(const RandomGPInfoDialog::REVERSED use_reverse); + void changeReverse(const GP_Reversed use_reverse); // Methods for the GP editor void setId(const std::string& id); diff --git a/src/states_screens/dialogs/gp_info_dialog.cpp b/src/states_screens/dialogs/gp_info_dialog.cpp index 36fc61646..8072c875b 100644 --- a/src/states_screens/dialogs/gp_info_dialog.cpp +++ b/src/states_screens/dialogs/gp_info_dialog.cpp @@ -53,8 +53,8 @@ GPInfoDialog::GPInfoDialog(const std::string& gp_ident) doInit(); m_curr_time = 0.0f; - m_gp = grand_prix_manager->getGrandPrix(gp_ident); - m_gp->checkConsistency(); + m_gp = *grand_prix_manager->getGrandPrix(gp_ident); + m_gp.checkConsistency(); m_under_title = m_area.getHeight()/7; m_over_body = m_area.getHeight()/7; @@ -72,7 +72,7 @@ GPInfoDialog::~GPInfoDialog() { GUIEngine::Screen* curr_screen = GUIEngine::getCurrentScreen(); if (curr_screen->getName() == "tracks.stkgui") - static_cast(curr_screen)->setFocusOnGP(m_gp->getId()); + static_cast(curr_screen)->setFocusOnGP(m_gp.getId()); } // ---------------------------------------------------------------------------- @@ -81,7 +81,7 @@ void GPInfoDialog::addTitle() { core::rect< s32 > area_top(0, 0, m_area.getWidth(), m_under_title); IGUIStaticText* title = GUIEngine::getGUIEnv()->addStaticText( - translations->fribidize(m_gp->getName()), + translations->fribidize(m_gp.getName()), area_top, false, true, // border, word wrap m_irrlicht_window); title->setTabStop(false); @@ -92,7 +92,7 @@ void GPInfoDialog::addTitle() void GPInfoDialog::addTracks() { - const std::vector tracks = m_gp->getTrackNames(); + const std::vector tracks = m_gp.getTrackNames(); const unsigned int track_amount = tracks.size(); int height_of_one_line = std::min((m_lower_bound - m_over_body)/(track_amount+1), @@ -185,7 +185,7 @@ void GPInfoDialog::addScreenshot() m_screenshot_widget->m_h = m_area.getWidth()*3/8; // *(3/4)*(1/2) } - Track* track = track_manager->getTrack(m_gp->getTrackNames()[0]); + Track* track = track_manager->getTrack(m_gp.getTrackNames()[0]); m_screenshot_widget->m_properties[GUIEngine::PROP_ICON] = (track->getScreenshotFile().c_str()); m_screenshot_widget->setParent(m_irrlicht_window); m_screenshot_widget->add(); @@ -203,7 +203,7 @@ void GPInfoDialog::addButtons() SavedGrandPrix* saved_gp = SavedGrandPrix::getSavedGP( StateManager::get() ->getActivePlayerProfile(0) ->getUniqueID(), - m_gp->getId(), + m_gp.getId(), race_manager->getDifficulty(), race_manager->getNumberOfKarts(), race_manager->getNumLocalPlayers()); @@ -250,7 +250,7 @@ void GPInfoDialog::addButtons() void GPInfoDialog::onEnterPressedInternal() { // Save the GP id because dismiss() will destroy this instance - std::string gp_id = m_gp->getId(); + std::string gp_id = m_gp.getId(); ModalDialog::dismiss(); // Disable accidentally unlocking of a challenge PlayerManager::getCurrentPlayer()->setCurrentChallenge(""); @@ -264,7 +264,7 @@ GUIEngine::EventPropagation GPInfoDialog::processEvent(const std::string& eventS if (eventSource == "start" || eventSource == "continue") { // Save GP identifier, since dismiss will delete this object. - std::string gp_id = m_gp->getId(); + std::string gp_id = m_gp.getId(); ModalDialog::dismiss(); race_manager->startGP(grand_prix_manager->getGrandPrix(gp_id), false, (eventSource == "continue")); @@ -284,7 +284,7 @@ void GPInfoDialog::onUpdate(float dt) m_curr_time += dt; int frameAfter = (int)(m_curr_time / 1.5f); - const std::vector tracks = m_gp->getTrackNames(); + const std::vector tracks = m_gp.getTrackNames(); if (frameAfter >= (int)tracks.size()) { frameAfter = 0; diff --git a/src/states_screens/dialogs/gp_info_dialog.hpp b/src/states_screens/dialogs/gp_info_dialog.hpp index d221d44d9..93158162e 100644 --- a/src/states_screens/dialogs/gp_info_dialog.hpp +++ b/src/states_screens/dialogs/gp_info_dialog.hpp @@ -20,7 +20,7 @@ #define HEADER_GP_INFO_DIALOG_HPP #include "guiengine/modaldialog.hpp" -// Don't include grand_prix_data.hpp here or the compilation will fail +#include "race/grand_prix_data.hpp" class GrandPrixData; @@ -39,7 +39,9 @@ class GPInfoDialog : public GUIEngine::ModalDialog protected: // Necessary for RandomGPInfoDialog GUIEngine::IconButtonWidget* m_screenshot_widget; float m_curr_time; - GrandPrixData* m_gp; + + /** The grand prix data. */ + GrandPrixData m_gp; /** height of the separator over the body */ int m_over_body; diff --git a/src/states_screens/dialogs/random_gp_dialog.cpp b/src/states_screens/dialogs/random_gp_dialog.cpp index dffe5221f..1d9b32dc1 100644 --- a/src/states_screens/dialogs/random_gp_dialog.cpp +++ b/src/states_screens/dialogs/random_gp_dialog.cpp @@ -37,7 +37,7 @@ RandomGPInfoDialog::RandomGPInfoDialog() // Defaults - loading selection from last time frrom a file would be better m_number_of_tracks = 2; // We can assume that there are at least 2 standard tracks m_trackgroup = "standard"; - m_use_reverse = NO_REVERSE; + m_use_reverse = GrandPrixData::NO_REVERSE; doInit(); m_curr_time = 0.0f; @@ -46,7 +46,7 @@ RandomGPInfoDialog::RandomGPInfoDialog() m_over_body = m_area.getHeight()/7 + SPINNER_HEIGHT + 10; // 10px space m_lower_bound = m_area.getHeight()*6/7; - m_gp = new GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); + m_gp = GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); addTitle(); addSpinners(); @@ -135,14 +135,14 @@ GUIEngine::EventPropagation RandomGPInfoDialog::processEvent( if (eventSource == "start") { ModalDialog::dismiss(); - race_manager->startGP(m_gp, false, false); + race_manager->startGP(&m_gp, false, false); return GUIEngine::EVENT_BLOCK; } else if (eventSource == "Number of tracks") { // The old gp can be reused because there's only track deletion/adding m_number_of_tracks = getWidget("Number of tracks")->getValue(); - m_gp->changeTrackNumber(m_number_of_tracks, m_trackgroup); + m_gp.changeTrackNumber(m_number_of_tracks, m_trackgroup); addTracks(); } else if (eventSource == "Trackgroup") @@ -164,18 +164,18 @@ GUIEngine::EventPropagation RandomGPInfoDialog::processEvent( if (s->getValue() > (signed)max) s->setValue(max); - new (m_gp) GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); + m_gp = GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); addTracks(); } else if (eventSource == "reverse") { Spinner* r = getWidget("reverse"); - m_use_reverse = static_cast(r->getValue()); - m_gp->changeReverse(m_use_reverse); + m_use_reverse = static_cast(r->getValue()); + m_gp.changeReverse(m_use_reverse); } else if (eventSource == "reload") { - new (m_gp) GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); + m_gp = GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); addTracks(); } diff --git a/src/states_screens/dialogs/random_gp_dialog.hpp b/src/states_screens/dialogs/random_gp_dialog.hpp index 698217eec..508153ad6 100644 --- a/src/states_screens/dialogs/random_gp_dialog.hpp +++ b/src/states_screens/dialogs/random_gp_dialog.hpp @@ -24,17 +24,10 @@ class RandomGPInfoDialog : public GPInfoDialog { -public: - enum REVERSED - { - NO_REVERSE = 0, - ALL_REVERSE = 1, - MIXED = 2 - }; private: unsigned int m_number_of_tracks; std::string m_trackgroup; - REVERSED m_use_reverse; + GrandPrixData::GP_Reversed m_use_reverse; public: static const int SPINNER_HEIGHT = 40; From 02f2488502827cdda4157da903afb591638d7785 Mon Sep 17 00:00:00 2001 From: konstin Date: Tue, 15 Jul 2014 15:46:17 +0200 Subject: [PATCH 05/93] add default_number_of_laps --- src/race/grand_prix_data.cpp | 2 +- src/tracks/track.cpp | 2 ++ src/tracks/track.hpp | 12 ++++++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/race/grand_prix_data.cpp b/src/race/grand_prix_data.cpp index 1405e01c8..fb99ff6bb 100644 --- a/src/race/grand_prix_data.cpp +++ b/src/race/grand_prix_data.cpp @@ -98,7 +98,7 @@ void GrandPrixData::changeTrackNumber(const unsigned int number_of_tracks, continue; m_tracks.push_back(id); - m_laps.push_back(3); // TODO: Take the default number from the track + m_laps.push_back(track_manager->getTrack(index)->getDefaultNumberOfLaps()); m_reversed.push_back(false); // This will be changed later } } diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index 0b03e0bed..1226daf6f 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -135,6 +135,7 @@ Track::Track(const std::string &filename) m_ident=="overworld"; m_minimap_x_scale = 1.0f; m_minimap_y_scale = 1.0f; + m_default_number_of_laps= 3; m_all_nodes.clear(); m_all_physics_only_nodes.clear(); m_all_cached_meshes.clear(); @@ -483,6 +484,7 @@ void Track::loadTrackInfo() root->get("caustics-speed", &m_caustics_speed); root->get("color-level-in", &m_color_inlevel); root->get("color-level-out", &m_color_outlevel); + root->get("default-number-of-laps",&m_default_number_of_laps); // Make the default for auto-rescue in battle mode and soccer mode to be false if(m_is_arena || m_is_soccer) diff --git a/src/tracks/track.hpp b/src/tracks/track.hpp index 1d7073569..92273860a 100644 --- a/src/tracks/track.hpp +++ b/src/tracks/track.hpp @@ -206,7 +206,7 @@ private: /** True if this track (textures and track data) should be cached. Used * for the overworld. */ bool m_cache_track; - + #ifdef DEBUG /** A list of textures that were cached before the track is loaded. @@ -388,7 +388,7 @@ private: float m_displacement_speed; float m_caustics_speed; - + /** The levels for color correction * m_color_inlevel(black, gamma, white) * m_color_outlevel(black, white)*/ @@ -398,6 +398,9 @@ private: /** List of all bezier curves in the track - for e.g. camera, ... */ std::vector m_all_curves; + /** The number of laps the track will be raced if no other value is given.*/ + int m_default_number_of_laps; + void loadTrackInfo(); void loadQuadGraph(unsigned int mode_id, const bool reverse); void convertTrackToBullet(scene::ISceneNode *node); @@ -602,7 +605,7 @@ public: bool getBloom() const { return m_bloom; } float getBloomThreshold() const { return m_bloom_threshold; } - + /** Return the color levels for color correction shader */ core::vector3df getColorLevelIn() const { return m_color_inlevel; } core::vector2df getColorLevelOut() const { return m_color_outlevel; } @@ -610,11 +613,12 @@ public: bool hasLensFlare() const { return m_lensflare; } bool hasGodRays() const { return m_godrays; } bool hasShadows() const { return m_shadows; } - + void addNode(scene::ISceneNode* node) { m_all_nodes.push_back(node); } float getDisplacementSpeed() const { return m_displacement_speed; } float getCausticsSpeed() const { return m_caustics_speed; } + const int getDefaultNumberOfLaps() const { return m_default_number_of_laps;} bool operator<(const Track &other) const; }; // class Track From a7c6eb385350e43e2d3a106c8215aa0565a525d1 Mon Sep 17 00:00:00 2001 From: konstin Date: Tue, 15 Jul 2014 15:57:33 +0200 Subject: [PATCH 06/93] close #1263 --- src/race/grand_prix_data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/race/grand_prix_data.cpp b/src/race/grand_prix_data.cpp index fb99ff6bb..ca605cdba 100644 --- a/src/race/grand_prix_data.cpp +++ b/src/race/grand_prix_data.cpp @@ -99,7 +99,7 @@ void GrandPrixData::changeTrackNumber(const unsigned int number_of_tracks, m_tracks.push_back(id); m_laps.push_back(track_manager->getTrack(index)->getDefaultNumberOfLaps()); - m_reversed.push_back(false); // This will be changed later + m_reversed.push_back(false); // This will be changed later in the code } } else if (m_tracks.size() > number_of_tracks) From 0df72779a9b9b374c588585894ad0ffaf9a9eaf7 Mon Sep 17 00:00:00 2001 From: konstin Date: Tue, 15 Jul 2014 17:10:37 +0200 Subject: [PATCH 07/93] Use default laps for track info dialog --- .../dialogs/track_info_dialog.cpp | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/states_screens/dialogs/track_info_dialog.cpp b/src/states_screens/dialogs/track_info_dialog.cpp index 706fc619b..5231808e0 100644 --- a/src/states_screens/dialogs/track_info_dialog.cpp +++ b/src/states_screens/dialogs/track_info_dialog.cpp @@ -88,9 +88,7 @@ TrackInfoDialog::TrackInfoDialog(const std::string& ribbonItem, const std::strin screenshotWidget->add(); if (screenshot != NULL) - { screenshotWidget->setImage(screenshot); - } m_widgets.push_back(screenshotWidget); @@ -98,21 +96,11 @@ TrackInfoDialog::TrackInfoDialog(const std::string& ribbonItem, const std::strin if (has_laps) { m_spinner = getWidget("lapcountspinner"); - - m_spinner->m_properties[PROP_ID] = "lapcountspinner"; if (UserConfigParams::m_artist_debug_mode) - { m_spinner->setMin(0); - } - //I18N: In the track setup screen (number of laps choice, where %i is the number) - //m_spinner->setText( _("%i laps") ); - m_spinner->setValue( UserConfigParams::m_num_laps ); - //m_spinner->getIrrlichtElement()->setTabStop(true); - //m_spinner->getIrrlichtElement()->setTabGroup(false); - - const int num_laps = m_spinner->getValue(); - race_manager->setNumLaps(num_laps); + m_spinner->setValue(track->getDefaultNumberOfLaps()); + race_manager->setNumLaps(m_spinner->getValue()); } else { @@ -149,7 +137,6 @@ TrackInfoDialog::TrackInfoDialog(const std::string& ribbonItem, const std::strin m_highscore_entries[2] = getWidget("highscore3"); updateHighScores(); - } else { From ad641eff67e7122426bc2d2c23d839bfbf9f3ac5 Mon Sep 17 00:00:00 2001 From: konstin Date: Tue, 15 Jul 2014 17:15:42 +0200 Subject: [PATCH 08/93] unify separators --- src/achievements/achievement.hpp | 2 +- src/achievements/achievement_info.hpp | 2 +- src/achievements/achievements_manager.hpp | 2 +- src/addons/news_manager.cpp | 4 +-- src/animations/ipo.cpp | 2 +- src/config/player_manager.cpp | 2 +- src/config/saved_grand_prix.cpp | 2 +- src/config/saved_grand_prix.hpp | 2 +- src/config/user_config.cpp | 26 +++++++++---------- src/config/user_config.hpp | 20 +++++++------- src/graphics/camera.cpp | 2 +- src/graphics/irr_driver.cpp | 2 +- src/graphics/particle_emitter.cpp | 10 +++---- src/guiengine/message_queue.cpp | 6 ++--- src/guiengine/skin.cpp | 2 +- src/guiengine/skin.hpp | 4 +-- src/input/input_device.cpp | 2 +- src/input/wiimote_manager.cpp | 2 +- src/io/file_manager.cpp | 10 +++---- src/items/item_manager.cpp | 2 +- src/items/item_manager.hpp | 2 +- src/items/rubber_ball.cpp | 4 +-- src/items/rubber_band.cpp | 4 +-- src/karts/abstract_kart.hpp | 10 +++---- src/karts/kart.hpp | 2 +- src/main.cpp | 20 +++++++------- src/modes/world.hpp | 8 +++--- src/online/online_player_profile.cpp | 2 +- src/online/online_player_profile.hpp | 2 +- src/online/online_profile.cpp | 2 +- src/online/online_profile.hpp | 4 +-- src/online/request.cpp | 2 +- src/online/request.hpp | 2 +- src/online/servers_manager.cpp | 24 ++++++++--------- src/physics/btKart.cpp | 2 +- src/physics/btKartRaycast.cpp | 4 +-- src/physics/physical_object.cpp | 2 +- src/physics/physics.cpp | 10 +++---- src/physics/physics.hpp | 4 +-- src/race/race_manager.cpp | 8 +++--- src/states_screens/dialogs/addons_loading.cpp | 4 +-- src/states_screens/feature_unlocked.cpp | 4 +-- src/states_screens/kart_selection.cpp | 10 +++---- src/states_screens/race_result_gui.cpp | 6 ++--- src/states_screens/state_manager.cpp | 4 +-- src/states_screens/state_manager.hpp | 2 +- src/states_screens/user_screen.cpp | 2 +- src/states_screens/user_screen.hpp | 4 +-- src/utils/leak_check.cpp | 2 +- src/utils/leak_check.hpp | 2 +- 50 files changed, 132 insertions(+), 132 deletions(-) diff --git a/src/achievements/achievement.hpp b/src/achievements/achievement.hpp index b127af293..05dbb9891 100644 --- a/src/achievements/achievement.hpp +++ b/src/achievements/achievement.hpp @@ -29,7 +29,7 @@ class UTFWriter; class XMLNode; -// ============================================================================ +// ---------------------------------------------------------------------------- /** This is the base class for any achievement. It allows achievement status * to be saved, and detects when an achievement is fulfilled. It provides * storage for state information by a generic key-value mapping. The values diff --git a/src/achievements/achievement_info.hpp b/src/achievements/achievement_info.hpp index 648671794..0902f929f 100644 --- a/src/achievements/achievement_info.hpp +++ b/src/achievements/achievement_info.hpp @@ -29,7 +29,7 @@ #include #include -// ============================================================================ +// ---------------------------------------------------------------------------- class Achievement; diff --git a/src/achievements/achievements_manager.hpp b/src/achievements/achievements_manager.hpp index a9c8ab90a..7560ae08c 100644 --- a/src/achievements/achievements_manager.hpp +++ b/src/achievements/achievements_manager.hpp @@ -69,7 +69,7 @@ public: delete m_achievements_manager; m_achievements_manager = NULL; } // destroy - // ======================================================================== + // ------------------------------------------------------------------------ AchievementInfo* getAchievementInfo(uint32_t id) const; AchievementsStatus* createAchievementsStatus(const XMLNode *node=NULL); diff --git a/src/addons/news_manager.cpp b/src/addons/news_manager.cpp index 4c6d964c4..93087e630 100644 --- a/src/addons/news_manager.cpp +++ b/src/addons/news_manager.cpp @@ -407,7 +407,7 @@ bool NewsManager::conditionFulfilled(const std::string &cond) continue; } // Check for stkversion comparisons - // ================================ + // -------------------------------- if(cond[0]=="stkversion") { int news_version = StringUtils::versionToInt(cond[2]); @@ -431,7 +431,7 @@ bool NewsManager::conditionFulfilled(const std::string &cond) "assumed true.", cond_list[i].c_str()); } // Check for addons not installed - // ============================== + // ------------------------------ else if(cond[1]=="not" && cond[2]=="installed") { // The addons_manager can not be access, since it's diff --git a/src/animations/ipo.cpp b/src/animations/ipo.cpp index 8e4331893..7c6eccf7a 100644 --- a/src/animations/ipo.cpp +++ b/src/animations/ipo.cpp @@ -363,7 +363,7 @@ float Ipo::IpoData::getCubicBezier(float t, float p0, float p1, return ((a*t+b)*t+c)*t+p0; } // bezier -// ============================================================================ +// ---------------------------------------------------------------------------- /** The Ipo constructor. Ipos can share the actual data to interpolate, which * is stored in a separate IpoData object, see Ipo(const Ipo *ipo) * constructor. This is used for cannons: the actual check line stores the diff --git a/src/config/player_manager.cpp b/src/config/player_manager.cpp index af4e0bc63..56d541f43 100644 --- a/src/config/player_manager.cpp +++ b/src/config/player_manager.cpp @@ -152,7 +152,7 @@ Online::OnlineProfile* PlayerManager::getCurrentOnlineProfile() return getCurrentPlayer()->getProfile(); } // getCurrentOnlineProfile -// ============================================================================ +// ---------------------------------------------------------------------------- /** Constructor. */ PlayerManager::PlayerManager() diff --git a/src/config/saved_grand_prix.cpp b/src/config/saved_grand_prix.cpp index 3805457da..b16d25e41 100644 --- a/src/config/saved_grand_prix.cpp +++ b/src/config/saved_grand_prix.cpp @@ -62,7 +62,7 @@ SavedGrandPrix::SavedGPKart::SavedGPKart(GroupUserConfigParam * group, m_overall_time.findYourDataInAnAttributeOf(node); } // SavedGPKart -// ============================================================================ +// ---------------------------------------------------------------------------- SavedGrandPrix::SavedGrandPrix(unsigned int player_id, const std::string &gp_id, RaceManager::Difficulty difficulty, diff --git a/src/config/saved_grand_prix.hpp b/src/config/saved_grand_prix.hpp index e8aa32217..2984645e9 100644 --- a/src/config/saved_grand_prix.hpp +++ b/src/config/saved_grand_prix.hpp @@ -26,7 +26,7 @@ class RaceManager; -// ============================================================================ +// ---------------------------------------------------------------------------- /** * \brief Class for managing saved Grand-Prix's diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index 3cf9171cb..ff815c691 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -69,7 +69,7 @@ void UserConfigParam::writeInner(std::ofstream& stream, int level) const << toString().c_str() << "\"\n"; } // writeInner -// ============================================================================ +// ---------------------------------------------------------------------------- GroupUserConfigParam::GroupUserConfigParam(const char* group_name, const char* comment) { @@ -78,7 +78,7 @@ GroupUserConfigParam::GroupUserConfigParam(const char* group_name, if(comment != NULL) m_comment = comment; } // GroupUserConfigParam -// ============================================================================ +// ---------------------------------------------------------------------------- GroupUserConfigParam::GroupUserConfigParam(const char* group_name, GroupUserConfigParam* group, const char* comment) @@ -184,7 +184,7 @@ void GroupUserConfigParam::addChild(UserConfigParam* child) } // addChild -// ============================================================================ +// ---------------------------------------------------------------------------- template ListUserConfigParam::ListUserConfigParam(const char* param_name, const char* comment) @@ -194,7 +194,7 @@ ListUserConfigParam::ListUserConfigParam(const char* param_name, if(comment != NULL) m_comment = comment; } // ListUserConfigParam -// ============================================================================ +// ---------------------------------------------------------------------------- template ListUserConfigParam::ListUserConfigParam(const char* param_name, const char* comment, @@ -213,7 +213,7 @@ ListUserConfigParam::ListUserConfigParam(const char* param_name, va_end ( arguments ); // Cleans up the list } // ListUserConfigParam -// ============================================================================ +// ---------------------------------------------------------------------------- template ListUserConfigParam::ListUserConfigParam(const char* param_name, GroupUserConfigParam* group, @@ -224,7 +224,7 @@ ListUserConfigParam::ListUserConfigParam(const char* param_name, if(comment != NULL) m_comment = comment; } // ListUserConfigParam -// ============================================================================ +// ---------------------------------------------------------------------------- template ListUserConfigParam::ListUserConfigParam(const char* param_name, GroupUserConfigParam* group, @@ -326,7 +326,7 @@ core::stringc ListUserConfigParam::toString() const -// ============================================================================ +// ---------------------------------------------------------------------------- IntUserConfigParam::IntUserConfigParam(int default_value, const char* param_name, const char* comment) @@ -389,7 +389,7 @@ void IntUserConfigParam::findYourDataInAnAttributeOf(const XMLNode* node) node->get( m_param_name, &m_value ); } // findYourDataInAnAttributeOf -// ============================================================================ +// ---------------------------------------------------------------------------- TimeUserConfigParam::TimeUserConfigParam(StkTime::TimeType default_value, const char* param_name, const char* comment) @@ -460,7 +460,7 @@ void TimeUserConfigParam::findYourDataInAnAttributeOf(const XMLNode* node) m_value = tmp; } // findYourDataInAnAttributeOf -// ============================================================================ +// ---------------------------------------------------------------------------- StringUserConfigParam::StringUserConfigParam(const char* default_value, const char* param_name, const char* comment) @@ -509,7 +509,7 @@ void StringUserConfigParam::findYourDataInAnAttributeOf(const XMLNode* node) node->get( m_param_name, &m_value ); } // findYourDataInAnAttributeOf -// ============================================================================ +// ---------------------------------------------------------------------------- BoolUserConfigParam::BoolUserConfigParam(bool default_value, const char* param_name, const char* comment) @@ -597,7 +597,7 @@ irr::core::stringc BoolUserConfigParam::toString() const return (m_value ? "true" : "false" ); } // toString -// ============================================================================ +// ---------------------------------------------------------------------------- FloatUserConfigParam::FloatUserConfigParam(float default_value, const char* param_name, const char* comment) @@ -656,8 +656,8 @@ core::stringc FloatUserConfigParam::toString() const return tmp; } // toString -// ===================================================================================== -// ===================================================================================== +// ------------------------------------------------------------------------------------- +// ------------------------------------------------------------------------------------- #if 0 #pragma mark - diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index bf65f4633..c8970291e 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -75,7 +75,7 @@ public: virtual irr::core::stringc toString() const = 0; }; // UserConfigParam -// ============================================================================ +// ---------------------------------------------------------------------------- class GroupUserConfigParam : public UserConfigParam { std::vector m_attributes; @@ -97,7 +97,7 @@ public: irr::core::stringc toString() const; }; // GroupUserConfigParam -// ============================================================================ +// ---------------------------------------------------------------------------- template class ListUserConfigParam : public UserConfigParam { @@ -136,7 +136,7 @@ public: }; // ListUserConfigParam typedef ListUserConfigParam StringListUserConfigParam; -// ============================================================================ +// ---------------------------------------------------------------------------- class IntUserConfigParam : public UserConfigParam { int m_value; @@ -164,7 +164,7 @@ public: { m_value = (int)v; return m_value; } }; // IntUserConfigParam -// ============================================================================ +// ---------------------------------------------------------------------------- class TimeUserConfigParam : public UserConfigParam { StkTime::TimeType m_value; @@ -190,7 +190,7 @@ public: { m_value = (int)v; return m_value; } }; // TimeUserConfigParam -// ============================================================================ +// ---------------------------------------------------------------------------- class StringUserConfigParam : public UserConfigParam { std::string m_value; @@ -223,7 +223,7 @@ public: const char* c_str() const { return m_value.c_str(); } }; // StringUserConfigParam -// ============================================================================ +// ---------------------------------------------------------------------------- class BoolUserConfigParam : public UserConfigParam { bool m_value; @@ -248,7 +248,7 @@ public: { m_value = (bool)v; return m_value; } }; // BoolUserConfigParam -// ============================================================================ +// ---------------------------------------------------------------------------- class FloatUserConfigParam : public UserConfigParam { float m_value; @@ -274,7 +274,7 @@ public: { m_value = (float)v; return m_value; } }; // FloatUserConfigParam -// ============================================================================ +// ---------------------------------------------------------------------------- enum AnimType {ANIMS_NONE = 0, ANIMS_PLAYERS_ONLY = 1, ANIMS_ALL = 2 }; @@ -294,7 +294,7 @@ enum AnimType {ANIMS_NONE = 0, #define PARAM_DEFAULT(X) #endif -// ============================================================================ +// ---------------------------------------------------------------------------- /** \brief Contains all parameters that are stored in the user's config file * \ingroup config */ @@ -773,7 +773,7 @@ namespace UserConfigParams #undef PARAM_PREFIX #undef PARAM_SUFFIX -// ============================================================================ +// ---------------------------------------------------------------------------- /** * \brief Class for managing general STK user configuration data. * \ingroup config diff --git a/src/graphics/camera.cpp b/src/graphics/camera.cpp index 70a57c36f..d84df0a12 100644 --- a/src/graphics/camera.cpp +++ b/src/graphics/camera.cpp @@ -45,7 +45,7 @@ AlignedArray Camera::m_end_cameras; std::vector Camera::m_all_cameras; -// ============================================================================ +// ---------------------------------------------------------------------------- Camera::Camera(int camera_index, AbstractKart* kart) : m_kart(NULL) { m_mode = CM_NORMAL; diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index b2418fa0e..695a97a0c 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -1928,7 +1928,7 @@ void IrrDriver::doScreenShot() void IrrDriver::update(float dt) { // User aborted (e.g. closed window) - // ================================= + // --------------------------------- if (!m_device->run()) { GUIEngine::cleanUp(); diff --git a/src/graphics/particle_emitter.cpp b/src/graphics/particle_emitter.cpp index bfc66d6b3..219d70626 100644 --- a/src/graphics/particle_emitter.cpp +++ b/src/graphics/particle_emitter.cpp @@ -100,7 +100,7 @@ public: }; // FadeAwayAffector -// ============================================================================ +// ---------------------------------------------------------------------------- class HeightMapCollisionAffector : public scene::IParticleAffector { @@ -178,7 +178,7 @@ public: } }; -// ============================================================================ +// ---------------------------------------------------------------------------- class WindAffector : public scene::IParticleAffector { @@ -218,7 +218,7 @@ public: }; // WindAffector -// ============================================================================ +// ---------------------------------------------------------------------------- class ScaleAffector : public scene::IParticleAffector { @@ -248,7 +248,7 @@ protected: core::vector2df ScaleFactor; }; -// ============================================================================ +// ---------------------------------------------------------------------------- class ColorAffector : public scene::IParticleAffector { @@ -283,7 +283,7 @@ public: -// ============================================================================ +// ---------------------------------------------------------------------------- ParticleEmitter::ParticleEmitter(const ParticleKind* type, const Vec3 &position, diff --git a/src/guiengine/message_queue.cpp b/src/guiengine/message_queue.cpp index 8d43ff227..f7a93033e 100755 --- a/src/guiengine/message_queue.cpp +++ b/src/guiengine/message_queue.cpp @@ -70,7 +70,7 @@ public: } }; // class Message -// ============================================================================ +// ---------------------------------------------------------------------------- /** A function class to compare messages, required for priority_queue. */ class CompareMessages { @@ -85,7 +85,7 @@ public: }; // operator() -// ============================================================================ +// ---------------------------------------------------------------------------- /** List of all messages. */ std::priority_queue, CompareMessages> g_all_messages; @@ -101,7 +101,7 @@ float g_max_display_time = -1.0f; SkinWidgetContainer *g_container = NULL; core::recti g_area; -// ============================================================================ +// ---------------------------------------------------------------------------- void createLabel(const Message *message) { diff --git a/src/guiengine/skin.cpp b/src/guiengine/skin.cpp index 018323d81..36e22e344 100644 --- a/src/guiengine/skin.cpp +++ b/src/guiengine/skin.cpp @@ -183,7 +183,7 @@ namespace SkinConfig } // loadFromFile }; // SkinConfig -// ============================================================================ +// ---------------------------------------------------------------------------- #if 0 #pragma mark - #endif diff --git a/src/guiengine/skin.hpp b/src/guiengine/skin.hpp index efa26f23d..ea167d8ba 100644 --- a/src/guiengine/skin.hpp +++ b/src/guiengine/skin.hpp @@ -190,7 +190,7 @@ namespace GUIEngine } // SkinWidgetContainer }; // class SkinWidgetContainer - // ======================================================================== + // ------------------------------------------------------------------------ class Widget; /** @@ -256,7 +256,7 @@ namespace GUIEngine video::ITexture* getImage() { return m_image; } }; // BoxRenderParams - // ======================================================================== + // ------------------------------------------------------------------------ /** * \brief Object used to render the GUI widgets * see \ref skin for more information about skinning in STK diff --git a/src/input/input_device.cpp b/src/input/input_device.cpp index 70278fdfe..d1d05d4a0 100644 --- a/src/input/input_device.cpp +++ b/src/input/input_device.cpp @@ -83,7 +83,7 @@ bool KeyboardDevice::processAndMapInput(const int id, } } // processAndMapInput -// ============================================================================ +// ---------------------------------------------------------------------------- #if 0 #pragma mark - diff --git a/src/input/wiimote_manager.cpp b/src/input/wiimote_manager.cpp index 01687ef7d..9e05345b3 100644 --- a/src/input/wiimote_manager.cpp +++ b/src/input/wiimote_manager.cpp @@ -396,7 +396,7 @@ int WiimoteManager::askUserToConnectWiimotes() return getNumberOfWiimotes(); } // askUserToConnectWiimotes -// ============================================================================ +// ---------------------------------------------------------------------------- /** Calles when the user clicks on OK, i.e. all wiimotes are in discovery * mode. */ diff --git a/src/io/file_manager.cpp b/src/io/file_manager.cpp index b5d203ef9..fd4f39776 100644 --- a/src/io/file_manager.cpp +++ b/src/io/file_manager.cpp @@ -95,7 +95,7 @@ bool macSetBundlePathIfRelevant(std::string& data_dir) } #endif -// ============================================================================ +// ---------------------------------------------------------------------------- FileManager* file_manager = 0; /** With irrlicht the constructor creates a NULL device. This is necessary to @@ -139,7 +139,7 @@ FileManager::FileManager() irr::io::path exe_path; // Search for the root directory - // ============================= + // ----------------------------- // Also check for data dirs relative to the path of the executable. // This is esp. useful for Visual Studio, since it's not necessary @@ -212,7 +212,7 @@ FileManager::FileManager() m_gp_dir.c_str()); /** Now search for the path to all needed subdirectories. */ - // ========================================================== + // ---------------------------------------------------------- // This must be done here since otherwise translations will not be found. std::vector dir_found; dir_found.resize(ASSET_COUNT, false); @@ -296,7 +296,7 @@ void FileManager::reInit() FileManager::~FileManager() { // Clean up left-over files in addons/tmp that are older than 24h - // ============================================================== + // -------------------------------------------------------------- // (The 24h delay is useful when debugging a problem with a zip file) std::set allfiles; std::string tmp=getAddonsFile("tmp"); @@ -341,7 +341,7 @@ FileManager::~FileManager() } // for i in all files in tmp // Clean up rest of file manager - // ============================= + // ----------------------------- popMusicSearchPath(); popModelSearchPath(); popTextureSearchPath(); diff --git a/src/items/item_manager.cpp b/src/items/item_manager.cpp index fb0c9e287..60e2cf7ae 100644 --- a/src/items/item_manager.cpp +++ b/src/items/item_manager.cpp @@ -139,7 +139,7 @@ void ItemManager::removeTextures() } // removeTextures -// ============================================================================ +// ---------------------------------------------------------------------------- /** Creates a new instance of the item manager. This is done at startup * of each race. */ ItemManager::ItemManager() diff --git a/src/items/item_manager.hpp b/src/items/item_manager.hpp index 66c986829..faf322554 100644 --- a/src/items/item_manager.hpp +++ b/src/items/item_manager.hpp @@ -71,7 +71,7 @@ public: return m_item_manager; } // get - // ======================================================================== + // ------------------------------------------------------------------------ private: /** The vector of all items of the current track. */ typedef std::vector AllItemTypes; diff --git a/src/items/rubber_ball.cpp b/src/items/rubber_ball.cpp index cc6f268e8..191bebcfb 100644 --- a/src/items/rubber_ball.cpp +++ b/src/items/rubber_ball.cpp @@ -384,7 +384,7 @@ bool RubberBall::updateAndDelete(float dt) TrackSector::update(next_xyz); // Ball squashing: - // =============== + // --------------- if(height<1.5f*m_extend.getY()) m_node->setScale(core::vector3df(1.0f, height/m_extend.getY(),1.0f)); else @@ -574,7 +574,7 @@ float RubberBall::updateHeight() // Determine the height of the ball - // ================================ + // -------------------------------- // Consider f(x) = s * x*(x-m_intervall), which is a parabolic function // with f(0) = 0, f(m_intervall)=0. We then scale this function to // fulfill: f(m_intervall/2) = max_height, or: diff --git a/src/items/rubber_band.cpp b/src/items/rubber_band.cpp index d978c3926..44a279a73 100644 --- a/src/items/rubber_band.cpp +++ b/src/items/rubber_band.cpp @@ -236,7 +236,7 @@ void RubberBand::hit(AbstractKart *kart_hit, const Vec3 *track_xyz) // A kart was hit - // ============== + // -------------- if(kart_hit) { if(kart_hit->isShielded()) @@ -253,7 +253,7 @@ void RubberBand::hit(AbstractKart *kart_hit, const Vec3 *track_xyz) } // The track was hit - // ================= + // ----------------- m_hit_position = *track_xyz; m_attached_state = RB_TO_TRACK; } // hit diff --git a/src/karts/abstract_kart.hpp b/src/karts/abstract_kart.hpp index af67b278b..3fb219938 100644 --- a/src/karts/abstract_kart.hpp +++ b/src/karts/abstract_kart.hpp @@ -85,7 +85,7 @@ public: virtual core::stringw getName() const; virtual void reset(); virtual void init(RaceManager::KartType type) = 0; - // ======================================================================== + // ------------------------------------------------------------------------ // Functions related to controlling the kart // ------------------------------------------------------------------------ /** Returns the current steering value for this kart. */ @@ -100,7 +100,7 @@ public: /** Sets the kart controls. Used e.g. by replaying history. */ void setControls(const KartControl &c) { m_controls = c; } - // ======================================================================== + // ------------------------------------------------------------------------ // Access to the kart properties. // ------------------------------------------------------------------------ /** Returns the kart properties of this kart. */ @@ -124,7 +124,7 @@ public: */ virtual float getTimeFullSteer(float steer) const = 0; - // ======================================================================== + // ------------------------------------------------------------------------ // Attachment related functions. // ------------------------------------------------------------------------ /** Returns the current attachment. */ @@ -133,7 +133,7 @@ public: /** Returns the current attachment, non-const version. */ Attachment* getAttachment() {return m_attachment; } - // ======================================================================== + // ------------------------------------------------------------------------ // Access to the graphical kart model. // ------------------------------------------------------------------------ /** Returns this kart's kart model. */ @@ -163,7 +163,7 @@ public: const Vec3& getWheelGraphicsPosition(int i) const {assert(i>=0 && i<4); return m_wheel_graphics_position[i];} - // ======================================================================== + // ------------------------------------------------------------------------ // Emergency animation related functions. // ------------------------------------------------------------------------ /** Returns a kart animation (if any), or NULL if currently no kart diff --git a/src/karts/kart.hpp b/src/karts/kart.hpp index 8ce5ea519..392faa854 100644 --- a/src/karts/kart.hpp +++ b/src/karts/kart.hpp @@ -268,7 +268,7 @@ public: virtual bool playCustomSFX (unsigned int type); virtual void setController(Controller *controller); - // ======================================================================== + // ------------------------------------------------------------------------ // Powerup related functions. // ------------------------------------------------------------------------ /** Sets a new powerup. */ diff --git a/src/main.cpp b/src/main.cpp index 8bc70861a..c7f25a05e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -205,9 +205,9 @@ static void cleanSuperTuxKart(); static void cleanUserConfig(); -// ============================================================================ +// ---------------------------------------------------------------------------- // gamepad visualisation screen -// ============================================================================ +// ---------------------------------------------------------------------------- void gamepadVisualisation() { @@ -360,7 +360,7 @@ void gamepadVisualisation() } } // gamepadVisualisation -// ============================================================================ +// ---------------------------------------------------------------------------- /** Sets the hat mesh name depending on the current christmas mode * m_xmas_mode (0: use current date, 1: always on, 2: always off). */ @@ -385,7 +385,7 @@ void handleXmasMode() if(xmas) kart_properties_manager->setHatMeshName("christmas_hat.b3d"); } // handleXmasMode -// ============================================================================ +// ---------------------------------------------------------------------------- /** This function sets up all data structure for an immediate race start. * It is used when the -N or -R command line options are used. */ @@ -642,7 +642,7 @@ int handleCmdLinePreliminary() return 0; } // handleCmdLinePreliminary -// ============================================================================ +// ---------------------------------------------------------------------------- /** Handles command line options. * \param argc Number of command line options */ @@ -1331,7 +1331,7 @@ int main(int argc, char *argv[] ) // Replay a race - // ============= + // ------------- if(history->replayHistory()) { // This will setup the race manager etc. @@ -1346,13 +1346,13 @@ int main(int argc, char *argv[] ) } // Not replaying - // ============= + // ------------- if(!ProfileWorld::isProfileMode()) { if(UserConfigParams::m_no_start_screen) { // Quickstart (-N) - // =============== + // --------------- // all defaults are set in InitTuxkart() race_manager->setupPlayerKartInfo(); race_manager->startNew(false); @@ -1361,7 +1361,7 @@ int main(int argc, char *argv[] ) else // profile { // Profiling - // ========= + // --------- race_manager->setMajorMode (RaceManager::MAJOR_MODE_SINGLE); race_manager->setupPlayerKartInfo(); race_manager->startNew(false); @@ -1410,7 +1410,7 @@ int main(int argc, char *argv[] ) return 0 ; } // main -// ============================================================================ +// ---------------------------------------------------------------------------- #ifdef WIN32 //routine for running under windows int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, diff --git a/src/modes/world.hpp b/src/modes/world.hpp index 462258477..df86557fb 100644 --- a/src/modes/world.hpp +++ b/src/modes/world.hpp @@ -185,7 +185,7 @@ public: World(); virtual ~World(); // Static functions to access world: - // ================================= + // --------------------------------- // ------------------------------------------------------------------------ /** Returns a pointer to the (singleton) world object. */ static World* getWorld() { return m_world; } @@ -201,7 +201,7 @@ public: // ------------------------------------------------------------------------ // Pure virtual functions - // ====================== + // ---------------------- /** Each game mode should have a unique identifier. Override * this method in child classes to provide it. */ @@ -237,7 +237,7 @@ public: // ------------------------------------------------------------------------ // Virtual functions - // ================= + // ----------------- virtual void init(); virtual void terminateRace() OVERRIDE; virtual void reset(); @@ -269,7 +269,7 @@ public: virtual void onMouseClick(int x, int y) {}; // Other functions - // =============== + // --------------- Highscores *getHighscores() const; void schedulePause(Phase phase); void scheduleUnpause(); diff --git a/src/online/online_player_profile.cpp b/src/online/online_player_profile.cpp index 389805754..d88eb111c 100644 --- a/src/online/online_player_profile.cpp +++ b/src/online/online_player_profile.cpp @@ -68,7 +68,7 @@ namespace Online request->addParameter("action", action); } // setUserDetails - // ======================================================================== + // ------------------------------------------------------------------------ OnlinePlayerProfile::OnlinePlayerProfile(const XMLNode *player) : PlayerProfile(player) { diff --git a/src/online/online_player_profile.hpp b/src/online/online_player_profile.hpp index 58c8353f2..cd635887b 100644 --- a/src/online/online_player_profile.hpp +++ b/src/online/online_player_profile.hpp @@ -40,7 +40,7 @@ namespace Online class OnlineProfile; - // ============================================================================ + // ---------------------------------------------------------------------------- /** * \brief Class that represents an online registered user diff --git a/src/online/online_profile.cpp b/src/online/online_profile.cpp index d3213d57c..7cecfb395 100644 --- a/src/online/online_profile.cpp +++ b/src/online/online_profile.cpp @@ -53,7 +53,7 @@ void OnlineProfile::RelationInfo::setOnline(bool online) m_is_pending = false; } -// ============================================================================ +// ---------------------------------------------------------------------------- /** Constructor for a new profile. It does only store the ID, a name, and * if it is the current user. */ diff --git a/src/online/online_profile.hpp b/src/online/online_profile.hpp index 01bcb975d..b59ca836f 100644 --- a/src/online/online_profile.hpp +++ b/src/online/online_profile.hpp @@ -46,7 +46,7 @@ public: C_RELATION_INFO }; - // ======================================================================== + // ------------------------------------------------------------------------ class RelationInfo { private: @@ -67,7 +67,7 @@ public: // -------------------------------------------------------------------- bool isOnline() const { return m_is_online; } }; // class RelationInfo - // ======================================================================== + // ------------------------------------------------------------------------ typedef std::vector IDList; private: diff --git a/src/online/request.cpp b/src/online/request.cpp index 8fc8672ed..433bfbf0b 100644 --- a/src/online/request.cpp +++ b/src/online/request.cpp @@ -29,7 +29,7 @@ namespace Online { - // ======================================================================== + // ------------------------------------------------------------------------ /** * Creates a request that can be handled by the RequestManager * \param manage_memory whether or not the RequestManager should take care of diff --git a/src/online/request.hpp b/src/online/request.hpp index 743126abd..1d4a549af 100644 --- a/src/online/request.hpp +++ b/src/online/request.hpp @@ -211,7 +211,7 @@ namespace Online * members to a valid value. */ virtual bool isAllowedToAdd() const { return isPreparing(); } - // ==================================================================== + // -------------------------------------------------------------------- /** This class is used by the priority queue to sort requests by * priority. */ diff --git a/src/online/servers_manager.cpp b/src/online/servers_manager.cpp index 9f47739f4..d9a1c2948 100644 --- a/src/online/servers_manager.cpp +++ b/src/online/servers_manager.cpp @@ -45,7 +45,7 @@ namespace Online{ manager_singleton = NULL; } // deallocate - // ============================================================================ + // ---------------------------------------------------------------------------- ServersManager::ServersManager(){ m_last_load_time.setAtomic(0.0f); m_joined_server.setAtomic(NULL); @@ -57,7 +57,7 @@ namespace Online{ delete m_joined_server.getData(); } - // ============================================================================ + // ---------------------------------------------------------------------------- void ServersManager::cleanUpServers() { m_sorted_servers.lock(); @@ -68,7 +68,7 @@ namespace Online{ m_mapped_servers.unlock(); } - // ============================================================================ + // ---------------------------------------------------------------------------- ServersManager::RefreshRequest * ServersManager::refreshRequest(bool request_now) const { RefreshRequest * request = NULL; @@ -103,7 +103,7 @@ namespace Online{ ServersManager::get()->refresh(isSuccess(), getXMLData()); } - // ============================================================================ + // ---------------------------------------------------------------------------- const Server * ServersManager::getQuickPlay() const { if(m_sorted_servers.getData().size() > 0) @@ -112,7 +112,7 @@ namespace Online{ return NULL; } - // ============================================================================ + // ---------------------------------------------------------------------------- void ServersManager::setJoinedServer(uint32_t id) { MutexLocker(m_joined_server); @@ -121,7 +121,7 @@ namespace Online{ m_joined_server.getData() = new Server(*getServerByID(id)); } - // ============================================================================ + // ---------------------------------------------------------------------------- void ServersManager::unsetJoinedServer() { MutexLocker(m_joined_server); @@ -129,7 +129,7 @@ namespace Online{ m_joined_server.getData() = NULL; } - // ============================================================================ + // ---------------------------------------------------------------------------- void ServersManager::addServer(Server * server) { m_sorted_servers.lock(); @@ -140,34 +140,34 @@ namespace Online{ m_mapped_servers.unlock(); } - // ============================================================================ + // ---------------------------------------------------------------------------- int ServersManager::getNumServers () const { MutexLocker(m_sorted_servers); return m_sorted_servers.getData().size(); } - // ============================================================================ + // ---------------------------------------------------------------------------- const Server * ServersManager::getServerBySort (int index) const { MutexLocker(m_sorted_servers); return m_sorted_servers.getData().get(index); } - // ============================================================================ + // ---------------------------------------------------------------------------- const Server * ServersManager::getServerByID (uint32_t id) const { MutexLocker(m_mapped_servers); return m_mapped_servers.getData().at(id); } - // ============================================================================ + // ---------------------------------------------------------------------------- Server * ServersManager::getJoinedServer() const { return m_joined_server.getAtomic(); } - // ============================================================================ + // ---------------------------------------------------------------------------- void ServersManager::sort(bool sort_desc){ MutexLocker(m_sorted_servers); m_sorted_servers.getData().insertionSort(0, sort_desc); diff --git a/src/physics/btKart.cpp b/src/physics/btKart.cpp index bdb8f556c..3f15d7248 100644 --- a/src/physics/btKart.cpp +++ b/src/physics/btKart.cpp @@ -35,7 +35,7 @@ btRigidBody& btKart::getFixedBody() return s_fixed; } -// ============================================================================ +// ---------------------------------------------------------------------------- btKart::btKart(btRigidBody* chassis, btVehicleRaycaster* raycaster, Kart *kart) : m_vehicleRaycaster(raycaster) diff --git a/src/physics/btKartRaycast.cpp b/src/physics/btKartRaycast.cpp index 13b310f76..3cec30c87 100644 --- a/src/physics/btKartRaycast.cpp +++ b/src/physics/btKartRaycast.cpp @@ -22,7 +22,7 @@ void* btKartRaycaster::castRay(const btVector3& from, const btVector3& to, btVehicleRaycasterResult& result) { - // ======================================================================== + // ------------------------------------------------------------------------ class ClosestWithNormal : public btCollisionWorld::ClosestRayResultCallback { private: @@ -55,7 +55,7 @@ void* btKartRaycaster::castRay(const btVector3& from, const btVector3& to, int getTriangleIndex() const { return m_triangle_index; } }; // CloestWithNormal - // ======================================================================== + // ------------------------------------------------------------------------ ClosestWithNormal rayCallback(from,to); diff --git a/src/physics/physical_object.cpp b/src/physics/physical_object.cpp index f6a612336..12d4557a8 100644 --- a/src/physics/physical_object.cpp +++ b/src/physics/physical_object.cpp @@ -98,7 +98,7 @@ void PhysicalObject::Settings::init() m_flatten_kart = false; } // Settings -// ============================================================================ +// ---------------------------------------------------------------------------- PhysicalObject* PhysicalObject::fromXML(bool is_dynamic, const XMLNode &xml_node, TrackObject* object) diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index b1d9c2c71..ed252bd66 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -224,7 +224,7 @@ void Physics::update(float dt) } // now the first object must be a projectile - // ========================================= + // ----------------------------------------- if(p->getUserPointer(1)->is(UserPointer::UP_TRACK)) { // Projectile hits track @@ -487,7 +487,7 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies, if(!upA || !upB) continue; // 1) object A is a track - // ======================= + // ----------------------- if(upA->is(UserPointer::UP_TRACK)) { if(upB->is(UserPointer::UP_FLYABLE)) // 1.1 projectile hits track @@ -520,7 +520,7 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies, } } // 2) object a is a kart - // ===================== + // --------------------- else if(upA->is(UserPointer::UP_KART)) { if(upB->is(UserPointer::UP_TRACK)) @@ -555,7 +555,7 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies, upA, contact_manifold->getContactPoint(0).m_localPointA); } // 3) object is a projectile - // ========================= + // ------------------------- else if(upA->is(UserPointer::UP_FLYABLE)) { // 3.1) projectile hits track @@ -573,7 +573,7 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies, } } // Object is a physical object - // =========================== + // --------------------------- else if(upA->is(UserPointer::UP_PHYSICAL_OBJECT)) { if(upB->is(UserPointer::UP_FLYABLE)) diff --git a/src/physics/physics.hpp b/src/physics/physics.hpp index 96f5fc1b6..4f351b3dc 100644 --- a/src/physics/physics.hpp +++ b/src/physics/physics.hpp @@ -100,7 +100,7 @@ private: } // getContactPointCS }; // CollisionPair - // ======================================================================== + // ------------------------------------------------------------------------ // This class is the list of collision objects, where each collision // pair is stored as most once. class CollisionList : public std::vector @@ -121,7 +121,7 @@ private: push_back(CollisionPair(a, contact_point_a, b, contact_point_b)); } }; // CollisionList - // ======================================================================== + // ------------------------------------------------------------------------ /** This flag is set while bullets time step processing is taking * place. It is used to avoid altering data structures that might diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 2626530b4..f7ecc3bf3 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -295,7 +295,7 @@ void RaceManager::startNew(bool from_overworld) m_num_karts = (int)m_player_karts.size(); // Create the kart status data structure to keep track of scores, times, ... - // ========================================================================== + // -------------------------------------------------------------------------- m_kart_status.clear(); Log::verbose("RaceManager", "Nb of karts=%u, ai:%lu players:%lu\n", (unsigned int)m_num_karts, m_ai_kart_list.size(), m_player_karts.size()); @@ -344,7 +344,7 @@ void RaceManager::startNew(bool from_overworld) !NetworkWorld::getInstance()->isRunning()) // offline mode only { //We look if Player 1 has a saved version of this GP. - // ================================================= + // ------------------------------------------------- SavedGrandPrix* gp = SavedGrandPrix::getSavedGP( StateManager::get() ->getActivePlayerProfile(0) ->getUniqueID(), @@ -354,7 +354,7 @@ void RaceManager::startNew(bool from_overworld) m_player_karts.size()); // Start the race with the appropriate track - // ========================================= + // ----------------------------------------- if(gp != NULL) { if (m_continue_saved_gp) @@ -392,7 +392,7 @@ void RaceManager::startNextRace() m_num_finished_players = 0; // if subsequent race, sort kart status structure - // ============================================== + // ---------------------------------------------- if (m_track_number > 0) { // In follow the leader mode do not change the first kart, diff --git a/src/states_screens/dialogs/addons_loading.cpp b/src/states_screens/dialogs/addons_loading.cpp index 2d6f1ef2d..8166a4531 100644 --- a/src/states_screens/dialogs/addons_loading.cpp +++ b/src/states_screens/dialogs/addons_loading.cpp @@ -111,7 +111,7 @@ void AddonsLoading::beforeAddingWidgets() rating->setStarNumber(3); // Display flags for this addon - // ============================ + // ---------------------------- std::vector l; if(UserConfigParams::m_artist_debug_mode) { @@ -154,7 +154,7 @@ void AddonsLoading::beforeAddingWidgets() } // Display the size - // ================ + // ---------------- int n = m_addon.getSize(); core::stringw unit=""; if(n>1024*1024) diff --git a/src/states_screens/feature_unlocked.cpp b/src/states_screens/feature_unlocked.cpp index 32510f341..15b1ec803 100644 --- a/src/states_screens/feature_unlocked.cpp +++ b/src/states_screens/feature_unlocked.cpp @@ -58,7 +58,7 @@ const int GIFT_EXIT_TO = GIFT_EXIT_FROM + 7; DEFINE_SCREEN_SINGLETON( FeatureUnlockedCutScene ); -// ============================================================================ +// ---------------------------------------------------------------------------- #if 0 #pragma mark FeatureUnlockedCutScene::UnlockedThing @@ -124,7 +124,7 @@ FeatureUnlockedCutScene::UnlockedThing::~UnlockedThing() m_root_gift_node = NULL; } // UnlockedThing::~UnlockedThing -// ============================================================================ +// ---------------------------------------------------------------------------- #if 0 #pragma mark - diff --git a/src/states_screens/kart_selection.cpp b/src/states_screens/kart_selection.cpp index 0195ee189..9496a68aa 100644 --- a/src/states_screens/kart_selection.cpp +++ b/src/states_screens/kart_selection.cpp @@ -121,7 +121,7 @@ void FocusDispatcher::add() static FocusDispatcher* g_dispatcher = NULL; -// ============================================================================ +// ---------------------------------------------------------------------------- /** A small extension to the spinner widget to add features like player ID * management or badging */ @@ -176,7 +176,7 @@ void PlayerNameSpinner::markAsCorrect() m_incorrect = false; } } // markAsCorrect -// ============================================================================ +// ---------------------------------------------------------------------------- #if 0 #pragma mark - @@ -871,7 +871,7 @@ bool sameKart(const PlayerKartWidget& player1, const PlayerKartWidget& player2) #pragma mark - #pragma mark KartHoverListener #endif -// ============================================================================ +// ---------------------------------------------------------------------------- KartHoverListener::KartHoverListener(KartSelectionScreen* parent) { @@ -921,7 +921,7 @@ void KartHoverListener::onSelectionChanged(DynamicRibbonWidget* theWidget, #pragma mark KartSelectionScreen #endif -// ============================================================================ +// ---------------------------------------------------------------------------- KartSelectionScreen::KartSelectionScreen(const char* filename) : Screen(filename) { @@ -931,7 +931,7 @@ KartSelectionScreen::KartSelectionScreen(const char* filename) : Screen(filename m_go_to_overworld_next = false; } // KartSelectionScreen -// ============================================================================ +// ---------------------------------------------------------------------------- KartSelectionScreen* KartSelectionScreen::getRunningInstance() { diff --git a/src/states_screens/race_result_gui.cpp b/src/states_screens/race_result_gui.cpp index 9b5803421..ae1377014 100644 --- a/src/states_screens/race_result_gui.cpp +++ b/src/states_screens/race_result_gui.cpp @@ -635,7 +635,7 @@ void RaceResultGUI::renderGlobal(float dt) unsigned int num_karts = m_all_row_infos.size(); // First: Update the finite state machine - // ====================================== + // -------------------------------------- switch(m_animation_state) { case RR_INIT: @@ -733,7 +733,7 @@ void RaceResultGUI::renderGlobal(float dt) } // switch // Second phase: update X and Y positions for the various animations - // ================================================================= + // ----------------------------------------------------------------- float v = 0.9f*UserConfigParams::m_width/m_time_single_scroll; if(!isSoccerWorld) { @@ -902,7 +902,7 @@ void RaceResultGUI::displayOneEntry(unsigned int x, unsigned int y, } // Only display points in GP mode and when the GP results are displayed. - // ===================================================================== + // --------------------------------------------------------------------- if (race_manager->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX && m_animation_state != RR_RACE_RESULT) { diff --git a/src/states_screens/state_manager.cpp b/src/states_screens/state_manager.cpp index def056fc1..9074adfa3 100644 --- a/src/states_screens/state_manager.cpp +++ b/src/states_screens/state_manager.cpp @@ -51,7 +51,7 @@ void StateManager::deallocate() } // deallocate -// ============================================================================ +// ---------------------------------------------------------------------------- #if 0 #pragma mark - @@ -245,7 +245,7 @@ void StateManager::onStackEmptied() main_loop->abort(); } // onStackEmptied -// ============================================================================ +// ---------------------------------------------------------------------------- #if 0 #pragma mark - diff --git a/src/states_screens/state_manager.hpp b/src/states_screens/state_manager.hpp index cfda60c06..5eb5fb23c 100644 --- a/src/states_screens/state_manager.hpp +++ b/src/states_screens/state_manager.hpp @@ -172,7 +172,7 @@ public: }; // ActivePlayer - // ======================================================================== + // ------------------------------------------------------------------------ const PtrVector& getActivePlayers() { return m_active_players; } ActivePlayer* getActivePlayer(const int id); diff --git a/src/states_screens/user_screen.cpp b/src/states_screens/user_screen.cpp index de5b1fa72..84cf2e464 100644 --- a/src/states_screens/user_screen.cpp +++ b/src/states_screens/user_screen.cpp @@ -549,7 +549,7 @@ void BaseUserScreen::unloaded() -// ============================================================================ +// ---------------------------------------------------------------------------- /** In the tab version, make sure the right tab is selected. */ void TabbedUserScreen::init() diff --git a/src/states_screens/user_screen.hpp b/src/states_screens/user_screen.hpp index b3294881d..b5c4ddfee 100644 --- a/src/states_screens/user_screen.hpp +++ b/src/states_screens/user_screen.hpp @@ -114,7 +114,7 @@ public: void logoutError(const irr::core::stringw &error_message); }; // class BaseUserScreen -// ============================================================================ +// ---------------------------------------------------------------------------- class UserScreen : public BaseUserScreen, public GUIEngine::ScreenSingleton { @@ -125,7 +125,7 @@ public: friend class GUIEngine::ScreenSingleton; }; // class UserScreenTabed -// ============================================================================ +// ---------------------------------------------------------------------------- class TabbedUserScreen : public BaseUserScreen, public GUIEngine::ScreenSingleton { diff --git a/src/utils/leak_check.cpp b/src/utils/leak_check.cpp index 5f199c6ab..e4c2d204a 100644 --- a/src/utils/leak_check.cpp +++ b/src/utils/leak_check.cpp @@ -99,7 +99,7 @@ namespace MemoryLeaks } // print - // ======================================================================== + // ------------------------------------------------------------------------ /** Adds an object to the sets of all allocated objects. */ void addObject(AllocatedObject* obj) { diff --git a/src/utils/leak_check.hpp b/src/utils/leak_check.hpp index 6d461ed78..0b212a60c 100644 --- a/src/utils/leak_check.hpp +++ b/src/utils/leak_check.hpp @@ -52,7 +52,7 @@ namespace MemoryLeaks virtual void print() const; }; // AllocatedObjects - // ======================================================================== + // ------------------------------------------------------------------------ void checkForLeaks(); void addObject(AllocatedObject* obj); From 649848cac22910b5e69b687d4f13543b2a788a11 Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 16 Jul 2014 08:11:09 +1000 Subject: [PATCH 09/93] Mostly cosmetic changes (renamed variables, added comments). Changed 'random' constructor of GrandPrixData into a function so that there is no need to create a new GPData objects and then copy it. --- src/race/grand_prix_data.cpp | 126 +++++++++++++----- src/race/grand_prix_data.hpp | 26 ++-- src/race/grand_prix_manager.hpp | 3 +- .../dialogs/random_gp_dialog.cpp | 15 ++- .../dialogs/random_gp_dialog.hpp | 7 +- 5 files changed, 128 insertions(+), 49 deletions(-) diff --git a/src/race/grand_prix_data.cpp b/src/race/grand_prix_data.cpp index 46b60794e..a378cd537 100644 --- a/src/race/grand_prix_data.cpp +++ b/src/race/grand_prix_data.cpp @@ -37,6 +37,9 @@ // ---------------------------------------------------------------------------- +/** Loads a grand prix definition from a file. + * \param filename Name of the file to load. + */ GrandPrixData::GrandPrixData(const std::string& filename) { m_filename = filename; @@ -44,18 +47,34 @@ GrandPrixData::GrandPrixData(const std::string& filename) StringUtils::removeExtension(filename)); m_editable = (filename.find(file_manager->getGPDir(), 0) == 0); reload(); -} +} // GrandPrixData // ---------------------------------------------------------------------------- -GrandPrixData::GrandPrixData(const unsigned int number_of_tracks, - const std::string& track_group, - const GrandPrixData::GP_Reversed use_reverse) +/** Creates a random grand prix from the specified parameters. + * \param number_of_tracks How many tracks to select. + * \param track_group From which track group to select the tracks. + * \param use_reverse How the reverse setting is to be determined. + * \param new_tracks If true, new tracks are selected, otherwise existing + * tracks will not be changed (used to e.g. increase the number of + * tracks in an already existing random grand prix). + * + */ +void GrandPrixData::createRandomGP(const unsigned int number_of_tracks, + const std::string &track_group, + const GPReverseType use_reverse, + bool new_tracks) { m_filename = "Random GP - Not loaded from a file!"; m_id = "random"; m_name = "Random Grand Prix"; m_editable = false; + if(new_tracks) + { + m_tracks.clear(); + m_laps.clear(); + m_reversed.clear(); + } m_tracks.reserve(number_of_tracks); m_laps.reserve(number_of_tracks); m_reversed.reserve(number_of_tracks); @@ -117,48 +136,64 @@ void GrandPrixData::changeTrackNumber(const unsigned int number_of_tracks, } // ---------------------------------------------------------------------------- - -void GrandPrixData::changeReverse(const GrandPrixData::GP_Reversed use_reverse) +/** Updates the GP data with newly decided reverse requirements. + * \param use_reverse How reverse setting for each track is to be determined. + */ +void GrandPrixData::changeReverse(const GrandPrixData::GPReverseType use_reverse) { for (unsigned int i = 0; i < m_tracks.size(); i++) { - if (use_reverse == NO_REVERSE) + if (use_reverse == GP_NO_REVERSE) m_reversed[i] = false; - else if (use_reverse == MIXED) + else if (use_reverse == GP_RANDOM_REVERSE) if (track_manager->getTrack(m_tracks[i])->reverseAvailable()) m_reversed[i] = (rand() % 2 != 0); else m_reversed[i] = false; else // all reversed m_reversed[i] = track_manager->getTrack(m_tracks[i])->reverseAvailable(); - } -} + } // for i < m_tracks.size() +} // changeReverse // ---------------------------------------------------------------------------- +/** Sets the id of this grand prix. + * \param id The new id. + */ void GrandPrixData::setId(const std::string& id) { m_id = id; -} +} // setId // ---------------------------------------------------------------------------- +/** Sets the name of the grand prix. + * \param name New name. + */ void GrandPrixData::setName(const irr::core::stringw& name) { m_name = name; -} +} // setName // ---------------------------------------------------------------------------- +/** Sets the filename of this grand prix. + * \param filename New filename. + */ void GrandPrixData::setFilename(const std::string& filename) { m_filename = filename; -} +} // setFilename // ---------------------------------------------------------------------------- +/** Sets if this grand prix can be edited. + * \param editable New value. + */ void GrandPrixData::setEditable(const bool editable) { m_editable = editable; -} +} // setEditable // ---------------------------------------------------------------------------- +/** Reloads grand prix from file. + */ void GrandPrixData::reload() { m_tracks.clear(); @@ -270,6 +305,8 @@ void GrandPrixData::reload() } // reload() // ---------------------------------------------------------------------------- +/** Saves the grand prix data to a file. + */ bool GrandPrixData::writeToFile() { try @@ -303,9 +340,12 @@ bool GrandPrixData::writeToFile() m_filename.c_str(), e.what()); return false; } -} +} // writeToFile // ---------------------------------------------------------------------------- +/** Checks if the grand prix data are consistent. + * \param log_error: If errors should be sent to the logger. + */ bool GrandPrixData::checkConsistency(bool log_error) const { for (unsigned int i = 0; i < m_tracks.size(); i++) @@ -323,8 +363,7 @@ bool GrandPrixData::checkConsistency(bool log_error) const } } return true; -} - +} // checkConsistency // ---------------------------------------------------------------------------- /** Returns true if the track is available. This is used to test if Fort Magma @@ -332,76 +371,99 @@ bool GrandPrixData::checkConsistency(bool log_error) const * story mode, but will be available once all challenges are done and nolok * is unlocked). It also prevents people from using the grand prix editor as * a way to play tracks that still haven't been unlocked + * \param id Name of the track to test. + * \param include_locked If set to true, all tracks (including locked tracks) + * are considered to be available. */ bool GrandPrixData::isTrackAvailable(const std::string &id, - bool includeLocked ) const + bool include_locked ) const { - if (includeLocked) + if (include_locked) return true; else if (id == "fortmagma") return !PlayerManager::getCurrentPlayer()->isLocked("fortmagma"); else return (!m_editable || !PlayerManager::get()->getCurrentPlayer()->isLocked(id)); -} +} // isTrackAvailable // ---------------------------------------------------------------------------- -std::vector GrandPrixData::getTrackNames(bool includeLocked) const +/** Returns the list of tracks that is available (i.e. unlocked) of this + * grand prix. + * \param include_locked If data for locked tracks should be included or not. + * \return A copy of the list of available tracks in this grand prix. + */ +std::vector GrandPrixData::getTrackNames(bool include_locked) const { std::vector names; for (unsigned int i = 0; i < m_tracks.size(); i++) { - if(isTrackAvailable(m_tracks[i], includeLocked)) + if(isTrackAvailable(m_tracks[i], include_locked)) names.push_back(m_tracks[i]); } return names; -} +} // getTrackNames // ---------------------------------------------------------------------------- -std::vector GrandPrixData::getLaps(bool includeLocked) const +/** Returns the laps for each available track of the grand prix. + * \param include_locked If data for locked tracks should be included or not. + * \return a std::vector containing the laps for each grand prix. + */ +std::vector GrandPrixData::getLaps(bool include_locked) const { std::vector laps; for (unsigned int i = 0; i< m_tracks.size(); i++) - if(isTrackAvailable(m_tracks[i], includeLocked)) + if(isTrackAvailable(m_tracks[i], include_locked)) laps.push_back(m_laps[i]); return laps; -} +} // getLaps // ---------------------------------------------------------------------------- -std::vector GrandPrixData::getReverse(bool includeLocked) const +/** Returns the reverse setting for each available grand prix. + * \param include_locked If data for locked tracks should be included or not. + * \return A copy of alist with the reverse status for each track. + */ +std::vector GrandPrixData::getReverse(bool include_locked) const { std::vector reverse; for (unsigned int i = 0; i< m_tracks.size(); i++) - if(isTrackAvailable(m_tracks[i], includeLocked)) + if(isTrackAvailable(m_tracks[i], include_locked)) reverse.push_back(m_reversed[i]); return reverse; -} +} // getReverse // ---------------------------------------------------------------------------- +/** Returns true if this grand prix can be edited. + */ bool GrandPrixData::isEditable() const { return m_editable; -} +} // isEditable // ---------------------------------------------------------------------------- +/** Returns the number of tracks in this grand prix. + * \param include_locked If data for locked tracks should be included or not. + */ unsigned int GrandPrixData::getNumberOfTracks(bool includeLocked) const { if (includeLocked) return m_tracks.size(); else return getTrackNames(false).size(); -} +} // getNumberOfTracks // ---------------------------------------------------------------------------- +/** Returns the (translated) name of the track with the specified index. + */ irr::core::stringw GrandPrixData::getTrackName(const unsigned int track) const { assert(track < getNumberOfTracks(true)); Track* t = track_manager->getTrack(m_tracks[track]); assert(t != NULL); return t->getName(); -} +} // getTrackName // ---------------------------------------------------------------------------- const std::string& GrandPrixData::getTrackId(const unsigned int track) const diff --git a/src/race/grand_prix_data.hpp b/src/race/grand_prix_data.hpp index 04c05249d..ea8422e43 100644 --- a/src/race/grand_prix_data.hpp +++ b/src/race/grand_prix_data.hpp @@ -69,12 +69,15 @@ private: bool isTrackAvailable(const std::string &id, bool includeLocked) const; public: - enum GP_Reversed + /** Used to define the reverse setting when creating a random GP: + * No reverse, all reverse (if available on the track), random + * selection. */ + enum GPReverseType { - NO_REVERSE = 0, - ALL_REVERSE = 1, - MIXED = 2 - }; + GP_NO_REVERSE = 0, + GP_ALL_REVERSE = 1, + GP_RANDOM_REVERSE = 2 + }; // GPReverseType public: #if (defined(WIN32) || defined(_WIN32)) && !defined(__MINGW32__) @@ -82,15 +85,18 @@ public: #endif /** Load the GrandPrixData from the given filename */ GrandPrixData(const std::string& filename); + /** Needed for simple creation of an instance of GrandPrixData */ GrandPrixData() {}; - /** Creates a new random GP */ - GrandPrixData(const unsigned int number_of_tracks, - const std::string& track_group, - const GP_Reversed use_reverse); + void changeTrackNumber(const unsigned int number_of_tracks, const std::string& track_group); - void changeReverse(const GP_Reversed use_reverse); + void changeReverse(const GPReverseType use_reverse); + + void createRandomGP(const unsigned int number_of_tracks, + const std::string& track_group, + const GPReverseType use_reverse, + bool new_tracks=false); // Methods for the GP editor void setId(const std::string& id); diff --git a/src/race/grand_prix_manager.hpp b/src/race/grand_prix_manager.hpp index c8510bf3a..d4800204a 100644 --- a/src/race/grand_prix_manager.hpp +++ b/src/race/grand_prix_manager.hpp @@ -22,7 +22,8 @@ #include #include -#include "race/grand_prix_data.hpp" +#include "irrlicht.h" +class GrandPrixData; /** * \ingroup race diff --git a/src/states_screens/dialogs/random_gp_dialog.cpp b/src/states_screens/dialogs/random_gp_dialog.cpp index 5ddfb4139..b63330712 100644 --- a/src/states_screens/dialogs/random_gp_dialog.cpp +++ b/src/states_screens/dialogs/random_gp_dialog.cpp @@ -33,11 +33,12 @@ using irr::gui::IGUIStaticText; typedef GUIEngine::SpinnerWidget Spinner; RandomGPInfoDialog::RandomGPInfoDialog() + { // Defaults - loading selection from last time frrom a file would be better m_number_of_tracks = 2; // We can assume that there are at least 2 standard tracks m_trackgroup = "standard"; - m_use_reverse = GrandPrixData::NO_REVERSE; + m_use_reverse = GrandPrixData::GP_NO_REVERSE; doInit(); m_curr_time = 0.0f; @@ -46,7 +47,7 @@ RandomGPInfoDialog::RandomGPInfoDialog() m_over_body = m_area.getHeight()/7 + SPINNER_HEIGHT + 10; // 10px space m_lower_bound = m_area.getHeight()*6/7; - m_gp = GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); + m_gp.createRandomGP(m_number_of_tracks, m_trackgroup, m_use_reverse); addTitle(); addSpinners(); @@ -166,18 +167,22 @@ GUIEngine::EventPropagation RandomGPInfoDialog::processEvent( if (s->getValue() > (signed)max) s->setValue(max); - m_gp = GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); + // Create a new (i.e. with new tracks) random gp, since the old + // tracks might not all belong to the newly selected group. + m_gp.createRandomGP(m_number_of_tracks, m_trackgroup, m_use_reverse, + /*new_tracks*/true); addTracks(); } else if (eventSource == "reverse") { Spinner* r = getWidget("reverse"); - m_use_reverse = static_cast(r->getValue()); + m_use_reverse = static_cast(r->getValue()); m_gp.changeReverse(m_use_reverse); } else if (eventSource == "reload") { - m_gp = GrandPrixData(m_number_of_tracks, m_trackgroup, m_use_reverse); + m_gp.createRandomGP(m_number_of_tracks, m_trackgroup, m_use_reverse, + /*new_tracks*/true); addTracks(); } diff --git a/src/states_screens/dialogs/random_gp_dialog.hpp b/src/states_screens/dialogs/random_gp_dialog.hpp index 508153ad6..35a058825 100644 --- a/src/states_screens/dialogs/random_gp_dialog.hpp +++ b/src/states_screens/dialogs/random_gp_dialog.hpp @@ -25,9 +25,14 @@ class RandomGPInfoDialog : public GPInfoDialog { private: + /** How many tracks to pick. */ unsigned int m_number_of_tracks; + + /** Name of the track group from which to pick tracks. */ std::string m_trackgroup; - GrandPrixData::GP_Reversed m_use_reverse; + + /** How reverse settings should be determined. */ + GrandPrixData::GPReverseType m_use_reverse; public: static const int SPINNER_HEIGHT = 40; From b79cebba402d37c955a0f1c75e90ae08ae82a662 Mon Sep 17 00:00:00 2001 From: vlj Date: Wed, 16 Jul 2014 00:16:12 +0200 Subject: [PATCH 10/93] Use singleton template again. --- src/graphics/render_geometry.cpp | 32 +++++++++++++-------------- src/graphics/shaders.cpp | 9 -------- src/graphics/shaders.hpp | 36 ++++++++----------------------- src/graphics/stkmeshscenenode.cpp | 18 ++++++++-------- 4 files changed, 34 insertions(+), 61 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index d0ac5f935..ffde226af 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -117,10 +117,10 @@ void IrrDriver::renderSolidFirstPass() } } -template -void renderMeshes2ndPass(const T *Shader, const std::vector &TexUnits, std::vector > &meshes) +template +void renderMeshes2ndPass(const std::vector &TexUnits, std::vector > &meshes) { - glUseProgram(Shader->Program); + glUseProgram(Shader::getInstance()->Program); glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < meshes.size(); i++) { @@ -150,7 +150,7 @@ void renderMeshes2ndPass(const T *Shader, const std::vector &TexUnits, s #endif continue; } - apply_instance(Shader, meshes[i]); + apply_instance(Shader::getInstance(), meshes[i]); } } @@ -193,14 +193,14 @@ void IrrDriver::renderSolidSecondPass() m_scene_manager->drawAll(scene::ESNRP_SOLID); - renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, { MeshShader::ObjectPass2ShaderInstance->TU_Albedo }, ListDefaultStandardSM::Arguments); - renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, { MeshShader::ObjectPass2ShaderInstance->TU_Albedo }, ListDefaultTangentSM::Arguments); - renderMeshes2ndPass(MeshShader::ObjectRefPass2ShaderInstance, { MeshShader::ObjectRefPass2ShaderInstance->TU_Albedo }, ListAlphaRefSM::Arguments); - renderMeshes2ndPass(MeshShader::SphereMapShaderInstance, { MeshShader::SphereMapShaderInstance->TU_tex }, ListSphereMapSM::Arguments); - renderMeshes2ndPass(MeshShader::ObjectUnlitShaderInstance, { MeshShader::ObjectUnlitShaderInstance->TU_tex }, ListUnlitSM::Arguments); - renderMeshes2ndPass(MeshShader::DetailledObjectPass2ShaderInstance, { MeshShader::DetailledObjectPass2ShaderInstance->TU_Albedo, MeshShader::DetailledObjectPass2ShaderInstance->TU_detail }, ListDetailSM::Arguments); - renderMeshes2ndPass(MeshShader::SplattingShaderInstance, { 8, MeshShader::SplattingShaderInstance->TU_tex_layout, MeshShader::SplattingShaderInstance->TU_tex_detail0, MeshShader::SplattingShaderInstance->TU_tex_detail1, MeshShader::SplattingShaderInstance->TU_tex_detail2, MeshShader::SplattingShaderInstance->TU_tex_detail3 }, ListSplattingSM::Arguments); - renderMeshes2ndPass(MeshShader::GrassPass2ShaderInstance, { MeshShader::GrassPass2ShaderInstance->TU_Albedo }, ListGrassSM::Arguments); + renderMeshes2ndPass({ MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo }, ListDefaultStandardSM::Arguments); + renderMeshes2ndPass({ MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo }, ListDefaultTangentSM::Arguments); + renderMeshes2ndPass({ MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo }, ListAlphaRefSM::Arguments); + renderMeshes2ndPass({ MeshShader::SphereMapShader::getInstance()->TU_tex }, ListSphereMapSM::Arguments); + renderMeshes2ndPass({ MeshShader::ObjectUnlitShader::getInstance()->TU_tex }, ListUnlitSM::Arguments); + renderMeshes2ndPass({ MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail }, ListDetailSM::Arguments); + renderMeshes2ndPass({ 8, MeshShader::SplattingShader::getInstance()->TU_tex_layout, MeshShader::SplattingShader::getInstance()->TU_tex_detail0, MeshShader::SplattingShader::getInstance()->TU_tex_detail1, MeshShader::SplattingShader::getInstance()->TU_tex_detail2, MeshShader::SplattingShader::getInstance()->TU_tex_detail3 }, ListSplattingSM::Arguments); + renderMeshes2ndPass({ MeshShader::GrassPass2Shader::getInstance()->TU_Albedo }, ListGrassSM::Arguments); } } @@ -227,16 +227,16 @@ void IrrDriver::renderTransparent() if (World::getWorld() && World::getWorld()->isFogEnabled()) { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass(MeshShader::TransparentFogShaderInstance, { MeshShader::TransparentFogShaderInstance->TU_tex }, ListBlendTransparentFog::Arguments); + renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListBlendTransparentFog::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass(MeshShader::TransparentFogShaderInstance, { MeshShader::TransparentFogShaderInstance->TU_tex }, ListAdditiveTransparentFog::Arguments); + renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListAdditiveTransparentFog::Arguments); } else { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass(MeshShader::TransparentShaderInstance, { MeshShader::TransparentShaderInstance->TU_tex }, ListBlendTransparent::Arguments); + renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListBlendTransparent::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass(MeshShader::TransparentShaderInstance, { MeshShader::TransparentShaderInstance->TU_tex }, ListAdditiveTransparent::Arguments); + renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListAdditiveTransparent::Arguments); } if (!UserConfigParams::m_dynamic_lights) diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 466b706a3..43f1e2c87 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -328,19 +328,10 @@ void Shaders::loadShaders() MeshShader::InstancedObjectPass1ShaderInstance = new MeshShader::InstancedObjectPass1Shader(); MeshShader::InstancedObjectRefPass1ShaderInstance = new MeshShader::InstancedObjectRefPass1Shader(); MeshShader::InstancedGrassPass1ShaderInstance = new MeshShader::InstancedGrassPass1Shader(); - MeshShader::ObjectPass2ShaderInstance = new MeshShader::ObjectPass2Shader(); MeshShader::InstancedObjectPass2ShaderInstance = new MeshShader::InstancedObjectPass2Shader(); MeshShader::InstancedObjectRefPass2ShaderInstance = new MeshShader::InstancedObjectRefPass2Shader(); MeshShader::InstancedGrassPass2ShaderInstance = new MeshShader::InstancedGrassPass2Shader(); - MeshShader::DetailledObjectPass2ShaderInstance = new MeshShader::DetailledObjectPass2Shader(); - MeshShader::ObjectRefPass2ShaderInstance = new MeshShader::ObjectRefPass2Shader(); - MeshShader::ObjectUnlitShaderInstance = new MeshShader::ObjectUnlitShader(); - MeshShader::SphereMapShaderInstance = new MeshShader::SphereMapShader(); - MeshShader::SplattingShaderInstance = new MeshShader::SplattingShader(); - MeshShader::GrassPass2ShaderInstance = new MeshShader::GrassPass2Shader(); MeshShader::BubbleShader::init(); - MeshShader::TransparentShaderInstance = new MeshShader::TransparentShader(); - MeshShader::TransparentFogShaderInstance = new MeshShader::TransparentFogShader(); MeshShader::BillboardShader::init(); LightShader::PointLightShader::init(); MeshShader::DisplaceShaderInstance = new MeshShader::DisplaceShader(); diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index 8077a0f6f..e5d0eecd2 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -198,7 +198,7 @@ public: extern InstancedGrassPass1Shader *InstancedGrassPass1ShaderInstance; -class ObjectPass2Shader : public ShaderHelper +class ObjectPass2Shader : public ShaderHelperSingleton { public: GLuint TU_Albedo; @@ -206,8 +206,6 @@ public: ObjectPass2Shader(); }; -extern ObjectPass2Shader *ObjectPass2ShaderInstance; - class InstancedObjectPass2Shader : public ShaderHelper { public: @@ -228,7 +226,7 @@ public: extern InstancedObjectRefPass2Shader *InstancedObjectRefPass2ShaderInstance; -class DetailledObjectPass2Shader : public ShaderHelper +class DetailledObjectPass2Shader : public ShaderHelperSingleton { public: GLuint TU_Albedo, TU_detail; @@ -236,9 +234,7 @@ public: DetailledObjectPass2Shader(); }; -extern DetailledObjectPass2Shader *DetailledObjectPass2ShaderInstance; - -class ObjectUnlitShader : public ShaderHelper +class ObjectUnlitShader : public ShaderHelperSingleton { public: GLuint TU_tex; @@ -246,9 +242,7 @@ public: ObjectUnlitShader(); }; -extern ObjectUnlitShader *ObjectUnlitShaderInstance; - -class ObjectRefPass2Shader : public ShaderHelper +class ObjectRefPass2Shader : public ShaderHelperSingleton { public: GLuint TU_Albedo; @@ -256,9 +250,7 @@ public: ObjectRefPass2Shader(); }; -extern ObjectRefPass2Shader *ObjectRefPass2ShaderInstance; - -class GrassPass2Shader : public ShaderHelper +class GrassPass2Shader : public ShaderHelperSingleton { public: GLuint TU_Albedo; @@ -266,8 +258,6 @@ public: GrassPass2Shader(); }; -extern GrassPass2Shader *GrassPass2ShaderInstance; - class InstancedGrassPass2Shader : public ShaderHelper { public: @@ -278,7 +268,7 @@ public: extern InstancedGrassPass2Shader *InstancedGrassPass2ShaderInstance; -class SphereMapShader : public ShaderHelper +class SphereMapShader : public ShaderHelperSingleton { public: GLuint TU_tex; @@ -286,9 +276,7 @@ public: SphereMapShader(); }; -extern SphereMapShader *SphereMapShaderInstance; - -class SplattingShader : public ShaderHelper +class SplattingShader : public ShaderHelperSingleton { public: GLuint TU_tex_layout, TU_tex_detail0, TU_tex_detail1, TU_tex_detail2, TU_tex_detail3; @@ -296,8 +284,6 @@ public: SplattingShader(); }; -extern SplattingShader *SplattingShaderInstance; - class BubbleShader { public: @@ -308,7 +294,7 @@ public: static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_tex, float time, float transparency); }; -class TransparentShader : public ShaderHelper +class TransparentShader : public ShaderHelperSingleton { public: GLuint TU_tex; @@ -316,9 +302,7 @@ public: TransparentShader(); }; -extern TransparentShader *TransparentShaderInstance; - -class TransparentFogShader : public ShaderHelper +class TransparentFogShader : public ShaderHelperSingleton { public: GLuint TU_tex; @@ -326,8 +310,6 @@ public: TransparentFogShader(); }; -extern TransparentFogShader *TransparentFogShaderInstance; - class BillboardShader { public: diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index 96ee82d1b..b8b49771b 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -276,7 +276,7 @@ void STKMeshSceneNode::render() glDisable(GL_CULL_FACE); if (!spareWhiteTex) spareWhiteTex = getUnicolorTexture(video::SColor(255, 255, 255, 255)); - glUseProgram(MeshShader::ObjectPass2ShaderInstance->Program); + glUseProgram(MeshShader::ObjectPass2Shader::getInstance()->Program); // Only untextured for (unsigned i = 0; i < GLmeshes.size(); i++) { @@ -286,8 +286,8 @@ void STKMeshSceneNode::render() GLenum itype = mesh.IndexType; size_t count = mesh.IndexCount; - setTexture(MeshShader::ObjectPass2ShaderInstance->TU_Albedo, getTextureGLuint(spareWhiteTex), GL_NEAREST, GL_NEAREST, false); - MeshShader::ObjectPass2ShaderInstance->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + setTexture(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, getTextureGLuint(spareWhiteTex), GL_NEAREST, GL_NEAREST, false); + MeshShader::ObjectPass2Shader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); assert(mesh.vao); glBindVertexArray(mesh.vao); glDrawElements(ptype, count, itype, 0); @@ -350,7 +350,7 @@ void STKMeshSceneNode::render() if (World::getWorld() && World::getWorld()->isFogEnabled()) { - glUseProgram(MeshShader::TransparentFogShaderInstance->Program); + glUseProgram(MeshShader::TransparentFogShader::getInstance()->Program); for (unsigned i = 0; i < GLmeshes.size(); i++) { GLMesh &mesh = GLmeshes[i]; @@ -374,8 +374,8 @@ void STKMeshSceneNode::render() tmpcol.getBlue() / 255.0f); compressTexture(mesh.textures[0], true); - setTexture(0, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - MeshShader::TransparentFogShaderInstance->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, fogmax, startH, endH, start, end, col); + setTexture(MeshShader::TransparentFogShader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); + MeshShader::TransparentFogShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, fogmax, startH, endH, start, end, col); assert(mesh.vao); glBindVertexArray(mesh.vao); @@ -385,7 +385,7 @@ void STKMeshSceneNode::render() } else { - glUseProgram(MeshShader::TransparentShaderInstance->Program); + glUseProgram(MeshShader::TransparentShader::getInstance()->Program); for (unsigned i = 0; i < GLmeshes.size(); i++) { irr_driver->IncreaseObjectCount(); @@ -395,9 +395,9 @@ void STKMeshSceneNode::render() size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); - setTexture(MeshShader::TransparentShaderInstance->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); + setTexture(MeshShader::TransparentShader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - MeshShader::TransparentShaderInstance->setUniforms(AbsoluteTransformation, mesh.TextureMatrix); + MeshShader::TransparentShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix); assert(mesh.vao); glBindVertexArray(mesh.vao); glDrawElements(ptype, count, itype, 0); From a03d1df8dcf3ec9f69e5cbc5b076e3367e801fd4 Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 16 Jul 2014 09:35:59 +1000 Subject: [PATCH 11/93] Fix linux compilation. --- src/graphics/render_geometry.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index ffde226af..8347fb9ba 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -120,7 +120,7 @@ void IrrDriver::renderSolidFirstPass() template void renderMeshes2ndPass(const std::vector &TexUnits, std::vector > &meshes) { - glUseProgram(Shader::getInstance()->Program); + glUseProgram(Shader::getInstance()->Program); glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < meshes.size(); i++) { @@ -150,7 +150,7 @@ void renderMeshes2ndPass(const std::vector &TexUnits, std::vector(), meshes[i]); + apply_instance(Shader::getInstance(), meshes[i]); } } @@ -410,4 +410,4 @@ void IrrDriver::renderShadows() drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListDefaultStandardG::Arguments); drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListDefault2TCoordG::Arguments); -} \ No newline at end of file +} From c386f48689f4b8c1bcef3cbc96bd945384d0262c Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 16 Jul 2014 09:47:06 +1000 Subject: [PATCH 12/93] Try to fix travis ci by using a different version (quantal is not on the ubuntu servers anymore). --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 86a203378..915cb4876 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ before_install: # Install dependencies - sudo apt-get install build-essential cmake libogg-dev libvorbis-dev libopenal-dev libxxf86vm-dev libcurl4-openssl-dev libfribidi-dev libbluetooth-dev # Install mesa from an other repo (a newer version is required) - - sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu quantal main restricted" + - sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu precise main restricted" - sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 - sudo apt-get update -qq - sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev From 797dcf845e343e49faa0b285577006afbe53fca3 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Tue, 15 Jul 2014 19:48:34 -0400 Subject: [PATCH 13/93] Test converting code to home-brew Tuple so that STK compiles again on my mac, where clang does not include tuple --- src/graphics/render_geometry.cpp | 46 ++++++++-------- src/graphics/stkanimatedmesh.cpp | 25 ++++----- src/graphics/stkmesh.cpp | 36 ++++++------- src/graphics/stkmesh.hpp | 39 +++++++------- src/graphics/stkmeshscenenode.cpp | 39 +++++++------- src/main.cpp | 7 +++ src/utils/tuple.hpp | 87 +++++++++++++++++++++++++++++++ 7 files changed, 189 insertions(+), 90 deletions(-) create mode 100644 src/utils/tuple.hpp diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index 44a7e81af..e33aad4ff 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -28,6 +28,7 @@ #include "utils/helpers.hpp" #include "utils/log.hpp" #include "utils/profiler.hpp" +#include "utils/tuple.hpp" #include @@ -36,9 +37,9 @@ template struct unroll_args_instance { template - static void exec(const T *Shader, const std::tuple &t, Args... args) + static void exec(const T *Shader, const STK::Tuple &t, Args... args) { - unroll_args_instance::template exec(Shader, t, std::get(t), args...); + unroll_args_instance::template exec(Shader, t, STK::tuple_get(t), args...); } }; @@ -46,26 +47,27 @@ template<> struct unroll_args_instance<0> { template - static void exec(const T *Shader, const std::tuple &t, Args... args) + static void exec(const T *Shader, const STK::Tuple &t, Args... args) { draw(Shader, args...); } }; template -void apply_instance(const T *Shader, const std::tuple &arg) +void apply_instance(const T *Shader, const STK::Tuple &arg) { - unroll_args_instance >::value >::template exec(Shader, arg); + unroll_args_instance::template exec(Shader, arg); + //unroll_args_instance >::value >::template exec(Shader, arg); } template -void renderMeshes1stPass(const std::vector &TexUnits, std::vector > &meshes) +void renderMeshes1stPass(const std::vector &TexUnits, std::vector > &meshes) { glUseProgram(Shader::getInstance()->Program); glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < meshes.size(); i++) { - GLMesh &mesh = *(std::get<0>(meshes[i])); + GLMesh &mesh = *(STK::tuple_get<0>(meshes[i])); for (unsigned j = 0; j < TexUnits.size(); j++) { if (!mesh.textures[j]) @@ -118,13 +120,13 @@ void IrrDriver::renderSolidFirstPass() } template -void renderMeshes2ndPass(const T *Shader, const std::vector &TexUnits, std::vector > &meshes) +void renderMeshes2ndPass(const T *Shader, const std::vector &TexUnits, std::vector > &meshes) { glUseProgram(Shader->Program); glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < meshes.size(); i++) { - GLMesh &mesh = *(std::get<0>(meshes[i])); + GLMesh &mesh = *(STK::tuple_get<0>(meshes[i])); for (unsigned j = 0; j < TexUnits.size(); j++) { if (!mesh.textures[j]) @@ -266,8 +268,8 @@ void IrrDriver::renderTransparent() irr_driver->getFBO(FBO_TMP1_WITH_DS).Bind(); for (unsigned i = 0; i < ListDisplacement::Arguments.size(); i++) { - const GLMesh &mesh = *(std::get<0>(ListDisplacement::Arguments[i])); - const core::matrix4 &AbsoluteTransformation = std::get<1>(ListDisplacement::Arguments[i]); + const GLMesh &mesh = *(STK::tuple_get<0>(ListDisplacement::Arguments[i])); + const core::matrix4 &AbsoluteTransformation = STK::tuple_get<1>(ListDisplacement::Arguments[i]); if (mesh.VAOType != video::EVT_2TCOORDS) { #ifdef DEBUG @@ -290,8 +292,8 @@ void IrrDriver::renderTransparent() displaceTex = irr_driver->getTexture(FileManager::TEXTURE, "displace.png"); for (unsigned i = 0; i < ListDisplacement::Arguments.size(); i++) { - const GLMesh &mesh = *(std::get<0>(ListDisplacement::Arguments[i])); - const core::matrix4 &AbsoluteTransformation = std::get<1>(ListDisplacement::Arguments[i]); + const GLMesh &mesh = *(STK::tuple_get<0>(ListDisplacement::Arguments[i])); + const core::matrix4 &AbsoluteTransformation = STK::tuple_get<1>(ListDisplacement::Arguments[i]); if (mesh.VAOType != video::EVT_2TCOORDS) continue; @@ -319,13 +321,13 @@ void IrrDriver::renderTransparent() } template -void drawShadow(const T *Shader, const std::vector TextureUnits, const std::vector >&t) +void drawShadow(const T *Shader, const std::vector TextureUnits, const std::vector >&t) { glUseProgram(Shader->Program); glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < t.size(); i++) { - const GLMesh *mesh = std::get<0>(t[i]); + const GLMesh *mesh = STK::tuple_get<0>(t[i]); irr_driver->IncreaseObjectCount(); GLenum ptype = mesh->PrimitiveType; GLenum itype = mesh->IndexType; @@ -336,18 +338,18 @@ void drawShadow(const T *Shader, const std::vector TextureUnits, const s setTexture(TextureUnits[j], getTextureGLuint(mesh->textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); } - Shader->setUniforms(std::get<1>(t[i])); + Shader->setUniforms(STK::tuple_get<1>(t[i])); glDrawElementsInstancedBaseVertex(ptype, count, itype, (GLvoid *)mesh->vaoOffset, 4, mesh->vaoBaseVertex); } } -static void drawShadowGrass(const std::vector TextureUnits, const std::vector > &t) +static void drawShadowGrass(const std::vector TextureUnits, const std::vector > &t) { glUseProgram(MeshShader::GrassShadowShaderInstance->Program); glBindVertexArray(getVAO(EVT_STANDARD)); for (unsigned i = 0; i < t.size(); i++) { - const GLMesh *mesh = std::get<0>(t[i]); + const GLMesh *mesh = STK::tuple_get<0>(t[i]); irr_driver->IncreaseObjectCount(); GLenum ptype = mesh->PrimitiveType; GLenum itype = mesh->IndexType; @@ -358,25 +360,25 @@ static void drawShadowGrass(const std::vector TextureUnits, const std::v setTexture(TextureUnits[j], getTextureGLuint(mesh->textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); } - MeshShader::GrassShadowShaderInstance->setUniforms(std::get<1>(t[i]), std::get<3>(t[i])); + MeshShader::GrassShadowShaderInstance->setUniforms(STK::tuple_get<1>(t[i]), STK::tuple_get<3>(t[i])); glDrawElementsInstancedBaseVertex(ptype, count, itype, (GLvoid *)mesh->vaoOffset, 4, mesh->vaoBaseVertex); } } template -void drawRSM(const core::matrix4 & rsm_matrix, const std::vector TextureUnits, const std::vector >&t) +void drawRSM(const core::matrix4 & rsm_matrix, const std::vector TextureUnits, const std::vector >&t) { glUseProgram(MeshShader::RSMShader::Program); glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < t.size(); i++) { - const GLMesh *mesh = std::get<0>(t[i]); + const GLMesh *mesh = STK::tuple_get<0>(t[i]); for (unsigned j = 0; j < TextureUnits.size(); j++) { compressTexture(mesh->textures[j], true); setTexture(TextureUnits[j], getTextureGLuint(mesh->textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); } - draw(mesh, rsm_matrix, std::get<1>(t[i])); + draw(mesh, rsm_matrix, STK::tuple_get<1>(t[i])); } } diff --git a/src/graphics/stkanimatedmesh.cpp b/src/graphics/stkanimatedmesh.cpp index cb36955f9..ae33bcb0e 100644 --- a/src/graphics/stkanimatedmesh.cpp +++ b/src/graphics/stkanimatedmesh.cpp @@ -8,6 +8,7 @@ #include "tracks/track.hpp" #include "graphics/camera.hpp" #include "utils/profiler.hpp" +#include "utils/tuple.hpp" using namespace irr; @@ -145,13 +146,13 @@ void STKAnimatedMesh::render() GLMesh* mesh; for_in(mesh, GeometricMesh[FPSM_DEFAULT_STANDARD]) - ListDefaultStandardG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel)); + ListDefaultStandardG::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, invmodel)); for_in(mesh, GeometricMesh[FPSM_DEFAULT_2TCOORD]) - ListDefault2TCoordG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel)); + ListDefault2TCoordG::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, invmodel)); for_in(mesh, GeometricMesh[FPSM_ALPHA_REF_TEXTURE]) - ListAlphaRefG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix)); + ListAlphaRefG::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix)); return; } @@ -163,19 +164,19 @@ void STKAnimatedMesh::render() GLMesh* mesh; for_in(mesh, ShadedMesh[SM_DEFAULT_STANDARD]) - ListDefaultStandardSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListDefaultStandardSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); for_in(mesh, ShadedMesh[SM_DEFAULT_TANGENT]) - ListDefaultTangentSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListDefaultTangentSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); for_in(mesh, ShadedMesh[SM_ALPHA_REF_TEXTURE]) - ListAlphaRefSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListAlphaRefSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); for_in (mesh, ShadedMesh[SM_UNLIT]) - ListUnlitSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation)); + ListUnlitSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation)); for_in(mesh, ShadedMesh[SM_DETAILS]) - ListDetailSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, irr_driver->getSceneManager()->getAmbientLight())); + ListDetailSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, irr_driver->getSceneManager()->getAmbientLight())); return; } @@ -206,20 +207,20 @@ void STKAnimatedMesh::render() for_in(mesh, TransparentMesh[TM_DEFAULT]) ListBlendTransparentFog::Arguments.push_back( - std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, + STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, fogmax, startH, endH, start, end, col)); for_in(mesh, TransparentMesh[TM_ADDITIVE]) ListAdditiveTransparentFog::Arguments.push_back( - std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, + STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, fogmax, startH, endH, start, end, col)); } else { for_in(mesh, TransparentMesh[TM_DEFAULT]) - ListBlendTransparent::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); + ListBlendTransparent::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); for_in(mesh, TransparentMesh[TM_ADDITIVE]) - ListAdditiveTransparent::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); + ListAdditiveTransparent::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); } return; } diff --git a/src/graphics/stkmesh.cpp b/src/graphics/stkmesh.cpp index d7bde2d5f..0d3abd974 100644 --- a/src/graphics/stkmesh.cpp +++ b/src/graphics/stkmesh.cpp @@ -307,22 +307,22 @@ bool isObject(video::E_MATERIAL_TYPE type) return false; } -std::vector > ListDefaultStandardG::Arguments; -std::vector > ListDefault2TCoordG::Arguments; -std::vector > ListAlphaRefG::Arguments; -std::vector > ListNormalG::Arguments; -std::vector > ListGrassG::Arguments; +std::vector > ListDefaultStandardG::Arguments; +std::vector > ListDefault2TCoordG::Arguments; +std::vector > ListAlphaRefG::Arguments; +std::vector > ListNormalG::Arguments; +std::vector > ListGrassG::Arguments; -std::vector > ListDefaultStandardSM::Arguments; -std::vector > ListDefaultTangentSM::Arguments; -std::vector > ListAlphaRefSM::Arguments; -std::vector > ListSplattingSM::Arguments; -std::vector > ListSphereMapSM::Arguments; -std::vector > ListUnlitSM::Arguments; -std::vector > ListDetailSM::Arguments; -std::vector > ListBlendTransparent::Arguments; -std::vector > ListAdditiveTransparent::Arguments; -std::vector > ListDisplacement::Arguments; -std::vector > ListBlendTransparentFog::Arguments; -std::vector > ListAdditiveTransparentFog::Arguments; -std::vector > ListGrassSM::Arguments; +std::vector > ListDefaultStandardSM::Arguments; +std::vector > ListDefaultTangentSM::Arguments; +std::vector > ListAlphaRefSM::Arguments; +std::vector > ListSplattingSM::Arguments; +std::vector > ListSphereMapSM::Arguments; +std::vector > ListUnlitSM::Arguments; +std::vector > ListDetailSM::Arguments; +std::vector > ListBlendTransparent::Arguments; +std::vector > ListAdditiveTransparent::Arguments; +std::vector > ListDisplacement::Arguments; +std::vector > ListBlendTransparentFog::Arguments; +std::vector > ListAdditiveTransparentFog::Arguments; +std::vector > ListGrassSM::Arguments; diff --git a/src/graphics/stkmesh.hpp b/src/graphics/stkmesh.hpp index 5c184e663..08d235633 100644 --- a/src/graphics/stkmesh.hpp +++ b/src/graphics/stkmesh.hpp @@ -3,12 +3,13 @@ #include "graphics/glwrap.hpp" #include "graphics/irr_driver.hpp" +#include "utils/tuple.hpp" #include #include #include "../lib/irrlicht/source/Irrlicht/CMeshSceneNode.h" -#include +//#include #include enum GeometricMaterial @@ -72,31 +73,31 @@ core::vector3df getWind(); class ListDefaultStandardG { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListDefault2TCoordG { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListAlphaRefG { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListNormalG { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListGrassG { public: - static std::vector > Arguments; + static std::vector > Arguments; }; template @@ -128,79 +129,79 @@ void draw(const T *Shader, const GLMesh *mesh, uniforms... Args) class ListDefaultStandardSM { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListDefaultTangentSM { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListAlphaRefSM { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListSphereMapSM { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListSplattingSM { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListUnlitSM { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListDetailSM { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListGrassSM { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListBlendTransparent { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListAdditiveTransparent { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListBlendTransparentFog { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListAdditiveTransparentFog { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListDisplacement { public: - static std::vector > Arguments; + static std::vector > Arguments; }; // Forward pass (for transparents meshes) diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index 96ee82d1b..a1c74761c 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -6,9 +6,10 @@ #include #include "config/user_config.hpp" #include "graphics/callbacks.hpp" -#include "utils/helpers.hpp" #include "graphics/camera.hpp" #include "modes/world.hpp" +#include "utils/helpers.hpp" +#include "utils/tuple.hpp" STKMeshSceneNode::STKMeshSceneNode(irr::scene::IMesh* mesh, ISceneNode* parent, irr::scene::ISceneManager* mgr, irr::s32 id, const irr::core::vector3df& position, @@ -248,20 +249,20 @@ void STKMeshSceneNode::render() GLMesh* mesh; for_in(mesh, GeometricMesh[FPSM_DEFAULT_STANDARD]) - ListDefaultStandardG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel)); + ListDefaultStandardG::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, invmodel)); for_in(mesh, GeometricMesh[FPSM_DEFAULT_2TCOORD]) - ListDefault2TCoordG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel)); + ListDefault2TCoordG::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, invmodel)); for_in(mesh, GeometricMesh[FPSM_ALPHA_REF_TEXTURE]) - ListAlphaRefG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix)); + ListAlphaRefG::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix)); for_in(mesh, GeometricMesh[FPSM_NORMAL_MAP]) - ListNormalG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel)); + ListNormalG::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, invmodel)); windDir = getWind(); for_in(mesh, GeometricMesh[FPSM_GRASS]) - ListGrassG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, windDir)); + ListGrassG::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, invmodel, windDir)); return; } @@ -299,28 +300,28 @@ void STKMeshSceneNode::render() GLMesh* mesh; for_in(mesh, ShadedMesh[SM_DEFAULT_STANDARD]) - ListDefaultStandardSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListDefaultStandardSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); for_in(mesh, ShadedMesh[SM_DEFAULT_TANGENT]) - ListDefaultTangentSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListDefaultTangentSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); for_in(mesh, ShadedMesh[SM_ALPHA_REF_TEXTURE]) - ListAlphaRefSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListAlphaRefSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); for_in(mesh, ShadedMesh[SM_SPHEREMAP]) - ListSphereMapSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight())); + ListSphereMapSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight())); for_in(mesh, ShadedMesh[SM_SPLATTING]) - ListSplattingSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, irr_driver->getSceneManager()->getAmbientLight())); + ListSplattingSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, irr_driver->getSceneManager()->getAmbientLight())); for_in(mesh, ShadedMesh[SM_UNLIT]) - ListUnlitSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation)); + ListUnlitSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation)); for_in(mesh, ShadedMesh[SM_DETAILS]) - ListDetailSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, irr_driver->getSceneManager()->getAmbientLight())); + ListDetailSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, irr_driver->getSceneManager()->getAmbientLight())); for_in(mesh, ShadedMesh[SM_GRASS]) - ListGrassSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, windDir, irr_driver->getSceneManager()->getAmbientLight())); + ListGrassSM::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, windDir, irr_driver->getSceneManager()->getAmbientLight())); return; } @@ -427,24 +428,24 @@ void STKMeshSceneNode::render() for_in(mesh, TransparentMesh[TM_DEFAULT]) ListBlendTransparentFog::Arguments.push_back( - std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, + STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, fogmax, startH, endH, start, end, col)); for_in(mesh, TransparentMesh[TM_ADDITIVE]) ListAdditiveTransparentFog::Arguments.push_back( - std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, + STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, fogmax, startH, endH, start, end, col)); } else { for_in(mesh, TransparentMesh[TM_DEFAULT]) - ListBlendTransparent::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); + ListBlendTransparent::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); for_in(mesh, TransparentMesh[TM_ADDITIVE]) - ListAdditiveTransparent::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); + ListAdditiveTransparent::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); } for_in(mesh, TransparentMesh[TM_DISPLACEMENT]) - ListDisplacement::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation)); + ListDisplacement::Arguments.push_back(STK::make_tuple(mesh, AbsoluteTransformation)); if (!TransparentMesh[TM_BUBBLE].empty()) glUseProgram(MeshShader::BubbleShader::Program); diff --git a/src/main.cpp b/src/main.cpp index 8bc70861a..d057a1daa 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -201,6 +201,7 @@ #include "utils/leak_check.hpp" #include "utils/log.hpp" #include "utils/translation.hpp" +#include "utils/tuple.hpp" static void cleanSuperTuxKart(); static void cleanUserConfig(); @@ -1162,6 +1163,12 @@ void askForInternetPermission() // ---------------------------------------------------------------------------- int main(int argc, char *argv[] ) { + STK::Tuple tup(1, 3.14f, "Hello"); + auto tup2 = STK::make_tuple(1, 3.14f, "Hello"); + + Log::info("TEST", "Tuple 1 : %i %f %s", STK::tuple_get<0>(tup), STK::tuple_get<1>(tup), STK::tuple_get<2>(tup).c_str()); + Log::info("TEST", "Tuple 2 : %i %f %s", STK::tuple_get<0>(tup2), STK::tuple_get<1>(tup2), STK::tuple_get<2>(tup2)); + CommandLine::init(argc, argv); CrashReporting::installHandlers(); diff --git a/src/utils/tuple.hpp b/src/utils/tuple.hpp new file mode 100644 index 000000000..3583da478 --- /dev/null +++ b/src/utils/tuple.hpp @@ -0,0 +1,87 @@ +#ifndef __STK_TUPLE_HPP__ +#define __STK_TUPLE_HPP__ + +namespace STK { + + + // tuple + template class Tuple; + + // empty tuple + template<> class Tuple<> {}; + + // recursive tuple definition + template + class Tuple<_This, _Rest...> : private Tuple<_Rest...> + { + public: + _This _Elem; + + Tuple() + { + } + + Tuple(_This val, _Rest... rest) : Tuple<_Rest...>(rest...) + { + _Elem = val; + } + }; + + // tuple_element + template struct tuple_element; + + // select first element + template + struct tuple_element<0, Tuple<_This, _Rest...>> + { + typedef _This& type; + typedef Tuple<_This, _Rest...> _Ttype; + }; + + // recursive tuple_element definition + template + struct tuple_element<_Index, Tuple<_This, _Rest...>> + : public tuple_element<_Index - 1, Tuple<_Rest...> > + { + }; + + template inline + typename tuple_element<_Index, Tuple<_Types...>>::type + tuple_get(Tuple<_Types...>& _Tuple) + { + typedef typename tuple_element<_Index, Tuple<_Types...>>::_Ttype _Ttype; + return (((_Ttype&)_Tuple)._Elem); + } + + template inline + typename const tuple_element<_Index, Tuple<_Types...>>::type + tuple_get(const Tuple<_Types...>& _Tuple) + { + typedef typename tuple_element<_Index, Tuple<_Types...>>::_Ttype _Ttype; + return (((_Ttype&)_Tuple)._Elem); + } + + template inline + Tuple make_tuple(T... values) + { + return Tuple(values...); + } + + //template + //int tuple_size(Tuple tuple) + //{ + // return sizeof...(T); + //} + + template + struct TupleSize + { + int value; + TupleSize() + { + value = sizeof...(T); + } + }; +} + +#endif From cfed9fc44e888885c8637d0f73c9a8267653cd4d Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 16 Jul 2014 10:01:24 +1000 Subject: [PATCH 14/93] Try to use saucy repo for the opengl updates. Fingers crossed. --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 915cb4876..0bf901918 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,8 +15,9 @@ before_install: - sudo apt-get update -qq # Install dependencies - sudo apt-get install build-essential cmake libogg-dev libvorbis-dev libopenal-dev libxxf86vm-dev libcurl4-openssl-dev libfribidi-dev libbluetooth-dev - # Install mesa from an other repo (a newer version is required) - - sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu precise main restricted" + # Install mesa from an other repo (a newer version is required). Quantal is not supported anymore, so try to find something else that works + # (precise it too old and doesn't link) + - sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu saucy main restricted" - sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 - sudo apt-get update -qq - sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev From e79c637a11879b8d73ff4acc9174a4e6c19d9966 Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 16 Jul 2014 10:18:07 +1000 Subject: [PATCH 15/93] Try to use an even newer repo, since the previous one is only supported till ... end of this week ;) --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0bf901918..06ef93281 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,9 +15,9 @@ before_install: - sudo apt-get update -qq # Install dependencies - sudo apt-get install build-essential cmake libogg-dev libvorbis-dev libopenal-dev libxxf86vm-dev libcurl4-openssl-dev libfribidi-dev libbluetooth-dev - # Install mesa from an other repo (a newer version is required). Quantal is not supported anymore, so try to find something else that works - # (precise it too old and doesn't link) - - sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu saucy main restricted" + # Install mesa from an other repo (a newer version is required). Quantal is not supported anymore, saucy is only supported till July 2014, + # so we try to use trusty (precise which is what traiv uses a too old mesa version which doesn't link) + - sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu trusty main restricted" - sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32 - sudo apt-get update -qq - sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev From d0784f3fcd7700aa636e8026905b2abab5b47074 Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 16 Jul 2014 16:28:32 +1000 Subject: [PATCH 16/93] Fix #1407 (huge rank number in FTL HUD). --- src/states_screens/race_gui.cpp | 34 ++++++++++++++++++++++----------- src/states_screens/race_gui.hpp | 8 ++++---- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/src/states_screens/race_gui.cpp b/src/states_screens/race_gui.cpp index 2b1c492e1..40c4474ee 100644 --- a/src/states_screens/race_gui.cpp +++ b/src/states_screens/race_gui.cpp @@ -108,7 +108,7 @@ RaceGUI::RaceGUI() int n = race_manager->getNumberOfKarts(); m_animation_states.resize(n); - m_rank_animation_start_times.resize(n); + m_rank_animation_duration.resize(n); m_last_ranks.resize(n); } // RaceGUI @@ -211,7 +211,7 @@ void RaceGUI::renderPlayerView(const Camera *camera, float dt) if(!World::getWorld()->isRacePhase()) return; drawPowerupIcons (kart, viewport, scaling); - drawSpeedEnergyRank(kart, viewport, scaling); + drawSpeedEnergyRank(kart, viewport, scaling, dt); if (!m_is_tutorial) drawLap(kart, viewport, scaling); @@ -601,10 +601,18 @@ void RaceGUI::drawEnergyMeter(int x, int y, const AbstractKart *kart, } // drawEnergyMeter //----------------------------------------------------------------------------- +/** Draws the rank of a player. + * \param kart The kart of the player. + * \param offset Offset of top left corner for this display (for splitscreen). + * \param min_ratio Scaling of the screen (for splitscreen). + * \param meter_width Width of the meter (inside which the rank is shown). + * \param meter_height Height of the meter (inside which the rank is shown). + * \param dt Time step size. + */ void RaceGUI::drawRank(const AbstractKart *kart, const core::vector2df &offset, float min_ratio, int meter_width, - int meter_height) + int meter_height, float dt) { // Draw rank WorldWithRank *world = dynamic_cast(World::getWorld()); @@ -617,10 +625,14 @@ void RaceGUI::drawRank(const AbstractKart *kart, { if (m_last_ranks[id] != kart->getPosition()) { - m_rank_animation_start_times[id] = world->getTime(); + m_rank_animation_duration[id] = 0.0f; m_animation_states[id] = AS_SMALLER; } } + else + { + m_rank_animation_duration[id] += dt; + } float scale = 1.0f; int rank = kart->getPosition(); @@ -628,13 +640,12 @@ void RaceGUI::drawRank(const AbstractKart *kart, const float MIN_SHRINK = 0.3f; if (m_animation_states[id] == AS_SMALLER) { - scale = 1.0f - (world->getTime() - m_rank_animation_start_times[id]) - / DURATION; + scale = 1.0f - m_rank_animation_duration[id]/ DURATION; rank = m_last_ranks[id]; if (scale < MIN_SHRINK) { m_animation_states[id] = AS_BIGGER; - m_rank_animation_start_times[id] = world->getTime(); + m_rank_animation_duration[id] = 0.0f; // Store the new rank m_last_ranks[id] = kart->getPosition(); scale = MIN_SHRINK; @@ -642,8 +653,7 @@ void RaceGUI::drawRank(const AbstractKart *kart, } else if (m_animation_states[id] == AS_BIGGER) { - scale = (world->getTime() - m_rank_animation_start_times[id]) - / DURATION + MIN_SHRINK; + scale = m_rank_animation_duration[id] / DURATION + MIN_SHRINK; rank = m_last_ranks[id]; if (scale > 1.0f) { @@ -680,10 +690,12 @@ void RaceGUI::drawRank(const AbstractKart *kart, * \param kart The kart for which to show the data. * \param viewport The viewport to use. * \param scaling Which scaling to apply to the speedometer. + * \param dt Time step size. */ void RaceGUI::drawSpeedEnergyRank(const AbstractKart* kart, const core::recti &viewport, - const core::vector2df &scaling) + const core::vector2df &scaling, + float dt) { float min_ratio = std::min(scaling.X, scaling.Y); const int SPEEDWIDTH = 128; @@ -712,7 +724,7 @@ void RaceGUI::drawSpeedEnergyRank(const AbstractKart* kart, const float speed = kart->getSpeed(); - drawRank(kart, offset, min_ratio, meter_width, meter_height); + drawRank(kart, offset, min_ratio, meter_width, meter_height, dt); if(speed <=0) return; // Nothing to do if speed is negative. diff --git a/src/states_screens/race_gui.hpp b/src/states_screens/race_gui.hpp index dca0b2669..8ae4d626b 100644 --- a/src/states_screens/race_gui.hpp +++ b/src/states_screens/race_gui.hpp @@ -89,8 +89,8 @@ private: enum AnimationState {AS_NONE, AS_SMALLER, AS_BIGGER}; std::vector m_animation_states; - /** When the animation state was changed. */ - std::vector m_rank_animation_start_times; + /** How long the rank animation has been shown. */ + std::vector m_rank_animation_duration; /** Stores the previous rank for each kart. Used for the rank animation. */ std::vector m_last_ranks; @@ -103,14 +103,14 @@ private: const core::vector2df &scaling); void drawSpeedEnergyRank (const AbstractKart* kart, const core::recti &viewport, - const core::vector2df &scaling); + const core::vector2df &scaling, float dt); void drawLap (const AbstractKart* kart, const core::recti &viewport, const core::vector2df &scaling); void drawRank (const AbstractKart *kart, const core::vector2df &offset, float min_ratio, int meter_width, - int meter_height); + int meter_height, float dt); /** Display items that are shown once only (for all karts). */ void drawGlobalMiniMap (); From a39efe7b3f23b35976e7f33ecb9dcb1220076112 Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 16 Jul 2014 16:38:41 +1000 Subject: [PATCH 17/93] Fixed incorrect fix for linux compilation done by me: Shader::getInstance()->Program does not compile on some gnu compiler, proper way is: Shader::template getInstance()->Program Thanks to auria! --- src/graphics/render_geometry.cpp | 8 ++++---- src/graphics/stkmeshscenenode.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index 8347fb9ba..3212a1c8f 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -61,7 +61,7 @@ void apply_instance(const T *Shader, const std::tuple &arg) template void renderMeshes1stPass(const std::vector &TexUnits, std::vector > &meshes) { - glUseProgram(Shader::getInstance()->Program); + glUseProgram(Shader::template getInstance()->Program); glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < meshes.size(); i++) { @@ -80,7 +80,7 @@ void renderMeshes1stPass(const std::vector &TexUnits, std::vector(), meshes[i]); } } @@ -120,7 +120,7 @@ void IrrDriver::renderSolidFirstPass() template void renderMeshes2ndPass(const std::vector &TexUnits, std::vector > &meshes) { - glUseProgram(Shader::getInstance()->Program); + glUseProgram(Shader::template getInstance()->Program); glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < meshes.size(); i++) { @@ -150,7 +150,7 @@ void renderMeshes2ndPass(const std::vector &TexUnits, std::vector(), meshes[i]); } } diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index b8b49771b..8365c1897 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -225,7 +225,7 @@ void STKMeshSceneNode::render() glDisable(GL_CULL_FACE); if (update_each_frame) updatevbo(); - glUseProgram(MeshShader::ObjectPass1Shader::getInstance()->Program); + glUseProgram(MeshShader::ObjectPass1Shader::template getInstance()->Program); // Only untextured for (unsigned i = 0; i < GLmeshes.size(); i++) { From ed349914fbc0864b0992de86d8146612aa67e5a1 Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 16 Jul 2014 21:24:32 +1000 Subject: [PATCH 18/93] Fix linux compilation. --- src/graphics/stkmeshscenenode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index 8365c1897..1825e5434 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -225,7 +225,7 @@ void STKMeshSceneNode::render() glDisable(GL_CULL_FACE); if (update_each_frame) updatevbo(); - glUseProgram(MeshShader::ObjectPass1Shader::template getInstance()->Program); + glUseProgram(MeshShader::ObjectPass1Shader::getInstance()->Program); // Only untextured for (unsigned i = 0; i < GLmeshes.size(); i++) { From ec73fcb2b72929c1833f08274ad224ba1db959f9 Mon Sep 17 00:00:00 2001 From: konstin Date: Wed, 16 Jul 2014 15:40:27 +0200 Subject: [PATCH 19/93] minor stuff --- src/states_screens/dialogs/random_gp_dialog.cpp | 10 +++------- src/tracks/track.cpp | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/states_screens/dialogs/random_gp_dialog.cpp b/src/states_screens/dialogs/random_gp_dialog.cpp index b63330712..1b79fa955 100644 --- a/src/states_screens/dialogs/random_gp_dialog.cpp +++ b/src/states_screens/dialogs/random_gp_dialog.cpp @@ -78,13 +78,9 @@ void RandomGPInfoDialog::addSpinners() const std::vector& groups = track_manager->getAllTrackGroups(); for (unsigned int i = 0; i < groups.size(); i++) { - // FIXME: The NULL check is necessary until #1348 on github is fixed - if (groups[i].c_str() != NULL) - { - spinner->addLabel(stringw(groups[i].c_str())); - if(groups[i] == "standard") - index_standard = i+1; - } + spinner->addLabel(stringw(groups[i].c_str())); + if(groups[i] == "standard") + index_standard = i+1; } // The value can only be set here because SpinnerWidget resets the value // every time a label is added diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index 455a2bf87..7242d5419 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -135,7 +135,7 @@ Track::Track(const std::string &filename) m_ident=="overworld"; m_minimap_x_scale = 1.0f; m_minimap_y_scale = 1.0f; - m_default_number_of_laps= 3; + m_default_number_of_laps= UserConfigParams::m_num_laps; m_all_nodes.clear(); m_all_physics_only_nodes.clear(); m_all_cached_meshes.clear(); From ea56f66d83f773ece292fa003cce1f51044431f9 Mon Sep 17 00:00:00 2001 From: konstin Date: Wed, 16 Jul 2014 15:46:52 +0200 Subject: [PATCH 20/93] Revert "unify separators" This reverts commit ad641eff67e7122426bc2d2c23d839bfbf9f3ac5. --- src/achievements/achievement.hpp | 2 +- src/achievements/achievement_info.hpp | 2 +- src/achievements/achievements_manager.hpp | 2 +- src/addons/news_manager.cpp | 4 +-- src/animations/ipo.cpp | 2 +- src/config/player_manager.cpp | 2 +- src/config/saved_grand_prix.cpp | 2 +- src/config/saved_grand_prix.hpp | 2 +- src/config/user_config.cpp | 26 +++++++++---------- src/config/user_config.hpp | 20 +++++++------- src/graphics/camera.cpp | 2 +- src/graphics/irr_driver.cpp | 2 +- src/graphics/particle_emitter.cpp | 10 +++---- src/guiengine/message_queue.cpp | 6 ++--- src/guiengine/skin.cpp | 2 +- src/guiengine/skin.hpp | 4 +-- src/input/input_device.cpp | 2 +- src/input/wiimote_manager.cpp | 2 +- src/io/file_manager.cpp | 10 +++---- src/items/item_manager.cpp | 2 +- src/items/item_manager.hpp | 2 +- src/items/rubber_ball.cpp | 4 +-- src/items/rubber_band.cpp | 4 +-- src/karts/abstract_kart.hpp | 10 +++---- src/karts/kart.hpp | 2 +- src/main.cpp | 20 +++++++------- src/modes/world.hpp | 8 +++--- src/online/online_player_profile.cpp | 2 +- src/online/online_player_profile.hpp | 2 +- src/online/online_profile.cpp | 2 +- src/online/online_profile.hpp | 4 +-- src/online/request.cpp | 2 +- src/online/request.hpp | 2 +- src/online/servers_manager.cpp | 24 ++++++++--------- src/physics/btKart.cpp | 2 +- src/physics/btKartRaycast.cpp | 4 +-- src/physics/physical_object.cpp | 2 +- src/physics/physics.cpp | 10 +++---- src/physics/physics.hpp | 4 +-- src/race/race_manager.cpp | 8 +++--- src/states_screens/dialogs/addons_loading.cpp | 4 +-- src/states_screens/feature_unlocked.cpp | 4 +-- src/states_screens/kart_selection.cpp | 10 +++---- src/states_screens/race_result_gui.cpp | 6 ++--- src/states_screens/state_manager.cpp | 4 +-- src/states_screens/state_manager.hpp | 2 +- src/states_screens/user_screen.cpp | 2 +- src/states_screens/user_screen.hpp | 4 +-- src/utils/leak_check.cpp | 2 +- src/utils/leak_check.hpp | 2 +- 50 files changed, 132 insertions(+), 132 deletions(-) diff --git a/src/achievements/achievement.hpp b/src/achievements/achievement.hpp index 05dbb9891..b127af293 100644 --- a/src/achievements/achievement.hpp +++ b/src/achievements/achievement.hpp @@ -29,7 +29,7 @@ class UTFWriter; class XMLNode; -// ---------------------------------------------------------------------------- +// ============================================================================ /** This is the base class for any achievement. It allows achievement status * to be saved, and detects when an achievement is fulfilled. It provides * storage for state information by a generic key-value mapping. The values diff --git a/src/achievements/achievement_info.hpp b/src/achievements/achievement_info.hpp index 0902f929f..648671794 100644 --- a/src/achievements/achievement_info.hpp +++ b/src/achievements/achievement_info.hpp @@ -29,7 +29,7 @@ #include #include -// ---------------------------------------------------------------------------- +// ============================================================================ class Achievement; diff --git a/src/achievements/achievements_manager.hpp b/src/achievements/achievements_manager.hpp index 7560ae08c..a9c8ab90a 100644 --- a/src/achievements/achievements_manager.hpp +++ b/src/achievements/achievements_manager.hpp @@ -69,7 +69,7 @@ public: delete m_achievements_manager; m_achievements_manager = NULL; } // destroy - // ------------------------------------------------------------------------ + // ======================================================================== AchievementInfo* getAchievementInfo(uint32_t id) const; AchievementsStatus* createAchievementsStatus(const XMLNode *node=NULL); diff --git a/src/addons/news_manager.cpp b/src/addons/news_manager.cpp index 93087e630..4c6d964c4 100644 --- a/src/addons/news_manager.cpp +++ b/src/addons/news_manager.cpp @@ -407,7 +407,7 @@ bool NewsManager::conditionFulfilled(const std::string &cond) continue; } // Check for stkversion comparisons - // -------------------------------- + // ================================ if(cond[0]=="stkversion") { int news_version = StringUtils::versionToInt(cond[2]); @@ -431,7 +431,7 @@ bool NewsManager::conditionFulfilled(const std::string &cond) "assumed true.", cond_list[i].c_str()); } // Check for addons not installed - // ------------------------------ + // ============================== else if(cond[1]=="not" && cond[2]=="installed") { // The addons_manager can not be access, since it's diff --git a/src/animations/ipo.cpp b/src/animations/ipo.cpp index 7c6eccf7a..8e4331893 100644 --- a/src/animations/ipo.cpp +++ b/src/animations/ipo.cpp @@ -363,7 +363,7 @@ float Ipo::IpoData::getCubicBezier(float t, float p0, float p1, return ((a*t+b)*t+c)*t+p0; } // bezier -// ---------------------------------------------------------------------------- +// ============================================================================ /** The Ipo constructor. Ipos can share the actual data to interpolate, which * is stored in a separate IpoData object, see Ipo(const Ipo *ipo) * constructor. This is used for cannons: the actual check line stores the diff --git a/src/config/player_manager.cpp b/src/config/player_manager.cpp index 56d541f43..af4e0bc63 100644 --- a/src/config/player_manager.cpp +++ b/src/config/player_manager.cpp @@ -152,7 +152,7 @@ Online::OnlineProfile* PlayerManager::getCurrentOnlineProfile() return getCurrentPlayer()->getProfile(); } // getCurrentOnlineProfile -// ---------------------------------------------------------------------------- +// ============================================================================ /** Constructor. */ PlayerManager::PlayerManager() diff --git a/src/config/saved_grand_prix.cpp b/src/config/saved_grand_prix.cpp index b16d25e41..3805457da 100644 --- a/src/config/saved_grand_prix.cpp +++ b/src/config/saved_grand_prix.cpp @@ -62,7 +62,7 @@ SavedGrandPrix::SavedGPKart::SavedGPKart(GroupUserConfigParam * group, m_overall_time.findYourDataInAnAttributeOf(node); } // SavedGPKart -// ---------------------------------------------------------------------------- +// ============================================================================ SavedGrandPrix::SavedGrandPrix(unsigned int player_id, const std::string &gp_id, RaceManager::Difficulty difficulty, diff --git a/src/config/saved_grand_prix.hpp b/src/config/saved_grand_prix.hpp index 2984645e9..e8aa32217 100644 --- a/src/config/saved_grand_prix.hpp +++ b/src/config/saved_grand_prix.hpp @@ -26,7 +26,7 @@ class RaceManager; -// ---------------------------------------------------------------------------- +// ============================================================================ /** * \brief Class for managing saved Grand-Prix's diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index ff815c691..3cf9171cb 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -69,7 +69,7 @@ void UserConfigParam::writeInner(std::ofstream& stream, int level) const << toString().c_str() << "\"\n"; } // writeInner -// ---------------------------------------------------------------------------- +// ============================================================================ GroupUserConfigParam::GroupUserConfigParam(const char* group_name, const char* comment) { @@ -78,7 +78,7 @@ GroupUserConfigParam::GroupUserConfigParam(const char* group_name, if(comment != NULL) m_comment = comment; } // GroupUserConfigParam -// ---------------------------------------------------------------------------- +// ============================================================================ GroupUserConfigParam::GroupUserConfigParam(const char* group_name, GroupUserConfigParam* group, const char* comment) @@ -184,7 +184,7 @@ void GroupUserConfigParam::addChild(UserConfigParam* child) } // addChild -// ---------------------------------------------------------------------------- +// ============================================================================ template ListUserConfigParam::ListUserConfigParam(const char* param_name, const char* comment) @@ -194,7 +194,7 @@ ListUserConfigParam::ListUserConfigParam(const char* param_name, if(comment != NULL) m_comment = comment; } // ListUserConfigParam -// ---------------------------------------------------------------------------- +// ============================================================================ template ListUserConfigParam::ListUserConfigParam(const char* param_name, const char* comment, @@ -213,7 +213,7 @@ ListUserConfigParam::ListUserConfigParam(const char* param_name, va_end ( arguments ); // Cleans up the list } // ListUserConfigParam -// ---------------------------------------------------------------------------- +// ============================================================================ template ListUserConfigParam::ListUserConfigParam(const char* param_name, GroupUserConfigParam* group, @@ -224,7 +224,7 @@ ListUserConfigParam::ListUserConfigParam(const char* param_name, if(comment != NULL) m_comment = comment; } // ListUserConfigParam -// ---------------------------------------------------------------------------- +// ============================================================================ template ListUserConfigParam::ListUserConfigParam(const char* param_name, GroupUserConfigParam* group, @@ -326,7 +326,7 @@ core::stringc ListUserConfigParam::toString() const -// ---------------------------------------------------------------------------- +// ============================================================================ IntUserConfigParam::IntUserConfigParam(int default_value, const char* param_name, const char* comment) @@ -389,7 +389,7 @@ void IntUserConfigParam::findYourDataInAnAttributeOf(const XMLNode* node) node->get( m_param_name, &m_value ); } // findYourDataInAnAttributeOf -// ---------------------------------------------------------------------------- +// ============================================================================ TimeUserConfigParam::TimeUserConfigParam(StkTime::TimeType default_value, const char* param_name, const char* comment) @@ -460,7 +460,7 @@ void TimeUserConfigParam::findYourDataInAnAttributeOf(const XMLNode* node) m_value = tmp; } // findYourDataInAnAttributeOf -// ---------------------------------------------------------------------------- +// ============================================================================ StringUserConfigParam::StringUserConfigParam(const char* default_value, const char* param_name, const char* comment) @@ -509,7 +509,7 @@ void StringUserConfigParam::findYourDataInAnAttributeOf(const XMLNode* node) node->get( m_param_name, &m_value ); } // findYourDataInAnAttributeOf -// ---------------------------------------------------------------------------- +// ============================================================================ BoolUserConfigParam::BoolUserConfigParam(bool default_value, const char* param_name, const char* comment) @@ -597,7 +597,7 @@ irr::core::stringc BoolUserConfigParam::toString() const return (m_value ? "true" : "false" ); } // toString -// ---------------------------------------------------------------------------- +// ============================================================================ FloatUserConfigParam::FloatUserConfigParam(float default_value, const char* param_name, const char* comment) @@ -656,8 +656,8 @@ core::stringc FloatUserConfigParam::toString() const return tmp; } // toString -// ------------------------------------------------------------------------------------- -// ------------------------------------------------------------------------------------- +// ===================================================================================== +// ===================================================================================== #if 0 #pragma mark - diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index c8970291e..bf65f4633 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -75,7 +75,7 @@ public: virtual irr::core::stringc toString() const = 0; }; // UserConfigParam -// ---------------------------------------------------------------------------- +// ============================================================================ class GroupUserConfigParam : public UserConfigParam { std::vector m_attributes; @@ -97,7 +97,7 @@ public: irr::core::stringc toString() const; }; // GroupUserConfigParam -// ---------------------------------------------------------------------------- +// ============================================================================ template class ListUserConfigParam : public UserConfigParam { @@ -136,7 +136,7 @@ public: }; // ListUserConfigParam typedef ListUserConfigParam StringListUserConfigParam; -// ---------------------------------------------------------------------------- +// ============================================================================ class IntUserConfigParam : public UserConfigParam { int m_value; @@ -164,7 +164,7 @@ public: { m_value = (int)v; return m_value; } }; // IntUserConfigParam -// ---------------------------------------------------------------------------- +// ============================================================================ class TimeUserConfigParam : public UserConfigParam { StkTime::TimeType m_value; @@ -190,7 +190,7 @@ public: { m_value = (int)v; return m_value; } }; // TimeUserConfigParam -// ---------------------------------------------------------------------------- +// ============================================================================ class StringUserConfigParam : public UserConfigParam { std::string m_value; @@ -223,7 +223,7 @@ public: const char* c_str() const { return m_value.c_str(); } }; // StringUserConfigParam -// ---------------------------------------------------------------------------- +// ============================================================================ class BoolUserConfigParam : public UserConfigParam { bool m_value; @@ -248,7 +248,7 @@ public: { m_value = (bool)v; return m_value; } }; // BoolUserConfigParam -// ---------------------------------------------------------------------------- +// ============================================================================ class FloatUserConfigParam : public UserConfigParam { float m_value; @@ -274,7 +274,7 @@ public: { m_value = (float)v; return m_value; } }; // FloatUserConfigParam -// ---------------------------------------------------------------------------- +// ============================================================================ enum AnimType {ANIMS_NONE = 0, ANIMS_PLAYERS_ONLY = 1, ANIMS_ALL = 2 }; @@ -294,7 +294,7 @@ enum AnimType {ANIMS_NONE = 0, #define PARAM_DEFAULT(X) #endif -// ---------------------------------------------------------------------------- +// ============================================================================ /** \brief Contains all parameters that are stored in the user's config file * \ingroup config */ @@ -773,7 +773,7 @@ namespace UserConfigParams #undef PARAM_PREFIX #undef PARAM_SUFFIX -// ---------------------------------------------------------------------------- +// ============================================================================ /** * \brief Class for managing general STK user configuration data. * \ingroup config diff --git a/src/graphics/camera.cpp b/src/graphics/camera.cpp index d84df0a12..70a57c36f 100644 --- a/src/graphics/camera.cpp +++ b/src/graphics/camera.cpp @@ -45,7 +45,7 @@ AlignedArray Camera::m_end_cameras; std::vector Camera::m_all_cameras; -// ---------------------------------------------------------------------------- +// ============================================================================ Camera::Camera(int camera_index, AbstractKart* kart) : m_kart(NULL) { m_mode = CM_NORMAL; diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index 695a97a0c..b2418fa0e 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -1928,7 +1928,7 @@ void IrrDriver::doScreenShot() void IrrDriver::update(float dt) { // User aborted (e.g. closed window) - // --------------------------------- + // ================================= if (!m_device->run()) { GUIEngine::cleanUp(); diff --git a/src/graphics/particle_emitter.cpp b/src/graphics/particle_emitter.cpp index 219d70626..bfc66d6b3 100644 --- a/src/graphics/particle_emitter.cpp +++ b/src/graphics/particle_emitter.cpp @@ -100,7 +100,7 @@ public: }; // FadeAwayAffector -// ---------------------------------------------------------------------------- +// ============================================================================ class HeightMapCollisionAffector : public scene::IParticleAffector { @@ -178,7 +178,7 @@ public: } }; -// ---------------------------------------------------------------------------- +// ============================================================================ class WindAffector : public scene::IParticleAffector { @@ -218,7 +218,7 @@ public: }; // WindAffector -// ---------------------------------------------------------------------------- +// ============================================================================ class ScaleAffector : public scene::IParticleAffector { @@ -248,7 +248,7 @@ protected: core::vector2df ScaleFactor; }; -// ---------------------------------------------------------------------------- +// ============================================================================ class ColorAffector : public scene::IParticleAffector { @@ -283,7 +283,7 @@ public: -// ---------------------------------------------------------------------------- +// ============================================================================ ParticleEmitter::ParticleEmitter(const ParticleKind* type, const Vec3 &position, diff --git a/src/guiengine/message_queue.cpp b/src/guiengine/message_queue.cpp index f7a93033e..8d43ff227 100755 --- a/src/guiengine/message_queue.cpp +++ b/src/guiengine/message_queue.cpp @@ -70,7 +70,7 @@ public: } }; // class Message -// ---------------------------------------------------------------------------- +// ============================================================================ /** A function class to compare messages, required for priority_queue. */ class CompareMessages { @@ -85,7 +85,7 @@ public: }; // operator() -// ---------------------------------------------------------------------------- +// ============================================================================ /** List of all messages. */ std::priority_queue, CompareMessages> g_all_messages; @@ -101,7 +101,7 @@ float g_max_display_time = -1.0f; SkinWidgetContainer *g_container = NULL; core::recti g_area; -// ---------------------------------------------------------------------------- +// ============================================================================ void createLabel(const Message *message) { diff --git a/src/guiengine/skin.cpp b/src/guiengine/skin.cpp index 36e22e344..018323d81 100644 --- a/src/guiengine/skin.cpp +++ b/src/guiengine/skin.cpp @@ -183,7 +183,7 @@ namespace SkinConfig } // loadFromFile }; // SkinConfig -// ---------------------------------------------------------------------------- +// ============================================================================ #if 0 #pragma mark - #endif diff --git a/src/guiengine/skin.hpp b/src/guiengine/skin.hpp index ea167d8ba..efa26f23d 100644 --- a/src/guiengine/skin.hpp +++ b/src/guiengine/skin.hpp @@ -190,7 +190,7 @@ namespace GUIEngine } // SkinWidgetContainer }; // class SkinWidgetContainer - // ------------------------------------------------------------------------ + // ======================================================================== class Widget; /** @@ -256,7 +256,7 @@ namespace GUIEngine video::ITexture* getImage() { return m_image; } }; // BoxRenderParams - // ------------------------------------------------------------------------ + // ======================================================================== /** * \brief Object used to render the GUI widgets * see \ref skin for more information about skinning in STK diff --git a/src/input/input_device.cpp b/src/input/input_device.cpp index d1d05d4a0..70278fdfe 100644 --- a/src/input/input_device.cpp +++ b/src/input/input_device.cpp @@ -83,7 +83,7 @@ bool KeyboardDevice::processAndMapInput(const int id, } } // processAndMapInput -// ---------------------------------------------------------------------------- +// ============================================================================ #if 0 #pragma mark - diff --git a/src/input/wiimote_manager.cpp b/src/input/wiimote_manager.cpp index 9e05345b3..01687ef7d 100644 --- a/src/input/wiimote_manager.cpp +++ b/src/input/wiimote_manager.cpp @@ -396,7 +396,7 @@ int WiimoteManager::askUserToConnectWiimotes() return getNumberOfWiimotes(); } // askUserToConnectWiimotes -// ---------------------------------------------------------------------------- +// ============================================================================ /** Calles when the user clicks on OK, i.e. all wiimotes are in discovery * mode. */ diff --git a/src/io/file_manager.cpp b/src/io/file_manager.cpp index fd4f39776..b5d203ef9 100644 --- a/src/io/file_manager.cpp +++ b/src/io/file_manager.cpp @@ -95,7 +95,7 @@ bool macSetBundlePathIfRelevant(std::string& data_dir) } #endif -// ---------------------------------------------------------------------------- +// ============================================================================ FileManager* file_manager = 0; /** With irrlicht the constructor creates a NULL device. This is necessary to @@ -139,7 +139,7 @@ FileManager::FileManager() irr::io::path exe_path; // Search for the root directory - // ----------------------------- + // ============================= // Also check for data dirs relative to the path of the executable. // This is esp. useful for Visual Studio, since it's not necessary @@ -212,7 +212,7 @@ FileManager::FileManager() m_gp_dir.c_str()); /** Now search for the path to all needed subdirectories. */ - // ---------------------------------------------------------- + // ========================================================== // This must be done here since otherwise translations will not be found. std::vector dir_found; dir_found.resize(ASSET_COUNT, false); @@ -296,7 +296,7 @@ void FileManager::reInit() FileManager::~FileManager() { // Clean up left-over files in addons/tmp that are older than 24h - // -------------------------------------------------------------- + // ============================================================== // (The 24h delay is useful when debugging a problem with a zip file) std::set allfiles; std::string tmp=getAddonsFile("tmp"); @@ -341,7 +341,7 @@ FileManager::~FileManager() } // for i in all files in tmp // Clean up rest of file manager - // ----------------------------- + // ============================= popMusicSearchPath(); popModelSearchPath(); popTextureSearchPath(); diff --git a/src/items/item_manager.cpp b/src/items/item_manager.cpp index 60e2cf7ae..fb0c9e287 100644 --- a/src/items/item_manager.cpp +++ b/src/items/item_manager.cpp @@ -139,7 +139,7 @@ void ItemManager::removeTextures() } // removeTextures -// ---------------------------------------------------------------------------- +// ============================================================================ /** Creates a new instance of the item manager. This is done at startup * of each race. */ ItemManager::ItemManager() diff --git a/src/items/item_manager.hpp b/src/items/item_manager.hpp index faf322554..66c986829 100644 --- a/src/items/item_manager.hpp +++ b/src/items/item_manager.hpp @@ -71,7 +71,7 @@ public: return m_item_manager; } // get - // ------------------------------------------------------------------------ + // ======================================================================== private: /** The vector of all items of the current track. */ typedef std::vector AllItemTypes; diff --git a/src/items/rubber_ball.cpp b/src/items/rubber_ball.cpp index 191bebcfb..cc6f268e8 100644 --- a/src/items/rubber_ball.cpp +++ b/src/items/rubber_ball.cpp @@ -384,7 +384,7 @@ bool RubberBall::updateAndDelete(float dt) TrackSector::update(next_xyz); // Ball squashing: - // --------------- + // =============== if(height<1.5f*m_extend.getY()) m_node->setScale(core::vector3df(1.0f, height/m_extend.getY(),1.0f)); else @@ -574,7 +574,7 @@ float RubberBall::updateHeight() // Determine the height of the ball - // -------------------------------- + // ================================ // Consider f(x) = s * x*(x-m_intervall), which is a parabolic function // with f(0) = 0, f(m_intervall)=0. We then scale this function to // fulfill: f(m_intervall/2) = max_height, or: diff --git a/src/items/rubber_band.cpp b/src/items/rubber_band.cpp index 44a279a73..d978c3926 100644 --- a/src/items/rubber_band.cpp +++ b/src/items/rubber_band.cpp @@ -236,7 +236,7 @@ void RubberBand::hit(AbstractKart *kart_hit, const Vec3 *track_xyz) // A kart was hit - // -------------- + // ============== if(kart_hit) { if(kart_hit->isShielded()) @@ -253,7 +253,7 @@ void RubberBand::hit(AbstractKart *kart_hit, const Vec3 *track_xyz) } // The track was hit - // ----------------- + // ================= m_hit_position = *track_xyz; m_attached_state = RB_TO_TRACK; } // hit diff --git a/src/karts/abstract_kart.hpp b/src/karts/abstract_kart.hpp index 3fb219938..af67b278b 100644 --- a/src/karts/abstract_kart.hpp +++ b/src/karts/abstract_kart.hpp @@ -85,7 +85,7 @@ public: virtual core::stringw getName() const; virtual void reset(); virtual void init(RaceManager::KartType type) = 0; - // ------------------------------------------------------------------------ + // ======================================================================== // Functions related to controlling the kart // ------------------------------------------------------------------------ /** Returns the current steering value for this kart. */ @@ -100,7 +100,7 @@ public: /** Sets the kart controls. Used e.g. by replaying history. */ void setControls(const KartControl &c) { m_controls = c; } - // ------------------------------------------------------------------------ + // ======================================================================== // Access to the kart properties. // ------------------------------------------------------------------------ /** Returns the kart properties of this kart. */ @@ -124,7 +124,7 @@ public: */ virtual float getTimeFullSteer(float steer) const = 0; - // ------------------------------------------------------------------------ + // ======================================================================== // Attachment related functions. // ------------------------------------------------------------------------ /** Returns the current attachment. */ @@ -133,7 +133,7 @@ public: /** Returns the current attachment, non-const version. */ Attachment* getAttachment() {return m_attachment; } - // ------------------------------------------------------------------------ + // ======================================================================== // Access to the graphical kart model. // ------------------------------------------------------------------------ /** Returns this kart's kart model. */ @@ -163,7 +163,7 @@ public: const Vec3& getWheelGraphicsPosition(int i) const {assert(i>=0 && i<4); return m_wheel_graphics_position[i];} - // ------------------------------------------------------------------------ + // ======================================================================== // Emergency animation related functions. // ------------------------------------------------------------------------ /** Returns a kart animation (if any), or NULL if currently no kart diff --git a/src/karts/kart.hpp b/src/karts/kart.hpp index 392faa854..8ce5ea519 100644 --- a/src/karts/kart.hpp +++ b/src/karts/kart.hpp @@ -268,7 +268,7 @@ public: virtual bool playCustomSFX (unsigned int type); virtual void setController(Controller *controller); - // ------------------------------------------------------------------------ + // ======================================================================== // Powerup related functions. // ------------------------------------------------------------------------ /** Sets a new powerup. */ diff --git a/src/main.cpp b/src/main.cpp index c7f25a05e..8bc70861a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -205,9 +205,9 @@ static void cleanSuperTuxKart(); static void cleanUserConfig(); -// ---------------------------------------------------------------------------- +// ============================================================================ // gamepad visualisation screen -// ---------------------------------------------------------------------------- +// ============================================================================ void gamepadVisualisation() { @@ -360,7 +360,7 @@ void gamepadVisualisation() } } // gamepadVisualisation -// ---------------------------------------------------------------------------- +// ============================================================================ /** Sets the hat mesh name depending on the current christmas mode * m_xmas_mode (0: use current date, 1: always on, 2: always off). */ @@ -385,7 +385,7 @@ void handleXmasMode() if(xmas) kart_properties_manager->setHatMeshName("christmas_hat.b3d"); } // handleXmasMode -// ---------------------------------------------------------------------------- +// ============================================================================ /** This function sets up all data structure for an immediate race start. * It is used when the -N or -R command line options are used. */ @@ -642,7 +642,7 @@ int handleCmdLinePreliminary() return 0; } // handleCmdLinePreliminary -// ---------------------------------------------------------------------------- +// ============================================================================ /** Handles command line options. * \param argc Number of command line options */ @@ -1331,7 +1331,7 @@ int main(int argc, char *argv[] ) // Replay a race - // ------------- + // ============= if(history->replayHistory()) { // This will setup the race manager etc. @@ -1346,13 +1346,13 @@ int main(int argc, char *argv[] ) } // Not replaying - // ------------- + // ============= if(!ProfileWorld::isProfileMode()) { if(UserConfigParams::m_no_start_screen) { // Quickstart (-N) - // --------------- + // =============== // all defaults are set in InitTuxkart() race_manager->setupPlayerKartInfo(); race_manager->startNew(false); @@ -1361,7 +1361,7 @@ int main(int argc, char *argv[] ) else // profile { // Profiling - // --------- + // ========= race_manager->setMajorMode (RaceManager::MAJOR_MODE_SINGLE); race_manager->setupPlayerKartInfo(); race_manager->startNew(false); @@ -1410,7 +1410,7 @@ int main(int argc, char *argv[] ) return 0 ; } // main -// ---------------------------------------------------------------------------- +// ============================================================================ #ifdef WIN32 //routine for running under windows int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, diff --git a/src/modes/world.hpp b/src/modes/world.hpp index df86557fb..462258477 100644 --- a/src/modes/world.hpp +++ b/src/modes/world.hpp @@ -185,7 +185,7 @@ public: World(); virtual ~World(); // Static functions to access world: - // --------------------------------- + // ================================= // ------------------------------------------------------------------------ /** Returns a pointer to the (singleton) world object. */ static World* getWorld() { return m_world; } @@ -201,7 +201,7 @@ public: // ------------------------------------------------------------------------ // Pure virtual functions - // ---------------------- + // ====================== /** Each game mode should have a unique identifier. Override * this method in child classes to provide it. */ @@ -237,7 +237,7 @@ public: // ------------------------------------------------------------------------ // Virtual functions - // ----------------- + // ================= virtual void init(); virtual void terminateRace() OVERRIDE; virtual void reset(); @@ -269,7 +269,7 @@ public: virtual void onMouseClick(int x, int y) {}; // Other functions - // --------------- + // =============== Highscores *getHighscores() const; void schedulePause(Phase phase); void scheduleUnpause(); diff --git a/src/online/online_player_profile.cpp b/src/online/online_player_profile.cpp index d88eb111c..389805754 100644 --- a/src/online/online_player_profile.cpp +++ b/src/online/online_player_profile.cpp @@ -68,7 +68,7 @@ namespace Online request->addParameter("action", action); } // setUserDetails - // ------------------------------------------------------------------------ + // ======================================================================== OnlinePlayerProfile::OnlinePlayerProfile(const XMLNode *player) : PlayerProfile(player) { diff --git a/src/online/online_player_profile.hpp b/src/online/online_player_profile.hpp index cd635887b..58c8353f2 100644 --- a/src/online/online_player_profile.hpp +++ b/src/online/online_player_profile.hpp @@ -40,7 +40,7 @@ namespace Online class OnlineProfile; - // ---------------------------------------------------------------------------- + // ============================================================================ /** * \brief Class that represents an online registered user diff --git a/src/online/online_profile.cpp b/src/online/online_profile.cpp index 7cecfb395..d3213d57c 100644 --- a/src/online/online_profile.cpp +++ b/src/online/online_profile.cpp @@ -53,7 +53,7 @@ void OnlineProfile::RelationInfo::setOnline(bool online) m_is_pending = false; } -// ---------------------------------------------------------------------------- +// ============================================================================ /** Constructor for a new profile. It does only store the ID, a name, and * if it is the current user. */ diff --git a/src/online/online_profile.hpp b/src/online/online_profile.hpp index b59ca836f..01bcb975d 100644 --- a/src/online/online_profile.hpp +++ b/src/online/online_profile.hpp @@ -46,7 +46,7 @@ public: C_RELATION_INFO }; - // ------------------------------------------------------------------------ + // ======================================================================== class RelationInfo { private: @@ -67,7 +67,7 @@ public: // -------------------------------------------------------------------- bool isOnline() const { return m_is_online; } }; // class RelationInfo - // ------------------------------------------------------------------------ + // ======================================================================== typedef std::vector IDList; private: diff --git a/src/online/request.cpp b/src/online/request.cpp index 433bfbf0b..8fc8672ed 100644 --- a/src/online/request.cpp +++ b/src/online/request.cpp @@ -29,7 +29,7 @@ namespace Online { - // ------------------------------------------------------------------------ + // ======================================================================== /** * Creates a request that can be handled by the RequestManager * \param manage_memory whether or not the RequestManager should take care of diff --git a/src/online/request.hpp b/src/online/request.hpp index 1d4a549af..743126abd 100644 --- a/src/online/request.hpp +++ b/src/online/request.hpp @@ -211,7 +211,7 @@ namespace Online * members to a valid value. */ virtual bool isAllowedToAdd() const { return isPreparing(); } - // -------------------------------------------------------------------- + // ==================================================================== /** This class is used by the priority queue to sort requests by * priority. */ diff --git a/src/online/servers_manager.cpp b/src/online/servers_manager.cpp index d9a1c2948..9f47739f4 100644 --- a/src/online/servers_manager.cpp +++ b/src/online/servers_manager.cpp @@ -45,7 +45,7 @@ namespace Online{ manager_singleton = NULL; } // deallocate - // ---------------------------------------------------------------------------- + // ============================================================================ ServersManager::ServersManager(){ m_last_load_time.setAtomic(0.0f); m_joined_server.setAtomic(NULL); @@ -57,7 +57,7 @@ namespace Online{ delete m_joined_server.getData(); } - // ---------------------------------------------------------------------------- + // ============================================================================ void ServersManager::cleanUpServers() { m_sorted_servers.lock(); @@ -68,7 +68,7 @@ namespace Online{ m_mapped_servers.unlock(); } - // ---------------------------------------------------------------------------- + // ============================================================================ ServersManager::RefreshRequest * ServersManager::refreshRequest(bool request_now) const { RefreshRequest * request = NULL; @@ -103,7 +103,7 @@ namespace Online{ ServersManager::get()->refresh(isSuccess(), getXMLData()); } - // ---------------------------------------------------------------------------- + // ============================================================================ const Server * ServersManager::getQuickPlay() const { if(m_sorted_servers.getData().size() > 0) @@ -112,7 +112,7 @@ namespace Online{ return NULL; } - // ---------------------------------------------------------------------------- + // ============================================================================ void ServersManager::setJoinedServer(uint32_t id) { MutexLocker(m_joined_server); @@ -121,7 +121,7 @@ namespace Online{ m_joined_server.getData() = new Server(*getServerByID(id)); } - // ---------------------------------------------------------------------------- + // ============================================================================ void ServersManager::unsetJoinedServer() { MutexLocker(m_joined_server); @@ -129,7 +129,7 @@ namespace Online{ m_joined_server.getData() = NULL; } - // ---------------------------------------------------------------------------- + // ============================================================================ void ServersManager::addServer(Server * server) { m_sorted_servers.lock(); @@ -140,34 +140,34 @@ namespace Online{ m_mapped_servers.unlock(); } - // ---------------------------------------------------------------------------- + // ============================================================================ int ServersManager::getNumServers () const { MutexLocker(m_sorted_servers); return m_sorted_servers.getData().size(); } - // ---------------------------------------------------------------------------- + // ============================================================================ const Server * ServersManager::getServerBySort (int index) const { MutexLocker(m_sorted_servers); return m_sorted_servers.getData().get(index); } - // ---------------------------------------------------------------------------- + // ============================================================================ const Server * ServersManager::getServerByID (uint32_t id) const { MutexLocker(m_mapped_servers); return m_mapped_servers.getData().at(id); } - // ---------------------------------------------------------------------------- + // ============================================================================ Server * ServersManager::getJoinedServer() const { return m_joined_server.getAtomic(); } - // ---------------------------------------------------------------------------- + // ============================================================================ void ServersManager::sort(bool sort_desc){ MutexLocker(m_sorted_servers); m_sorted_servers.getData().insertionSort(0, sort_desc); diff --git a/src/physics/btKart.cpp b/src/physics/btKart.cpp index 3f15d7248..bdb8f556c 100644 --- a/src/physics/btKart.cpp +++ b/src/physics/btKart.cpp @@ -35,7 +35,7 @@ btRigidBody& btKart::getFixedBody() return s_fixed; } -// ---------------------------------------------------------------------------- +// ============================================================================ btKart::btKart(btRigidBody* chassis, btVehicleRaycaster* raycaster, Kart *kart) : m_vehicleRaycaster(raycaster) diff --git a/src/physics/btKartRaycast.cpp b/src/physics/btKartRaycast.cpp index 3cec30c87..13b310f76 100644 --- a/src/physics/btKartRaycast.cpp +++ b/src/physics/btKartRaycast.cpp @@ -22,7 +22,7 @@ void* btKartRaycaster::castRay(const btVector3& from, const btVector3& to, btVehicleRaycasterResult& result) { - // ------------------------------------------------------------------------ + // ======================================================================== class ClosestWithNormal : public btCollisionWorld::ClosestRayResultCallback { private: @@ -55,7 +55,7 @@ void* btKartRaycaster::castRay(const btVector3& from, const btVector3& to, int getTriangleIndex() const { return m_triangle_index; } }; // CloestWithNormal - // ------------------------------------------------------------------------ + // ======================================================================== ClosestWithNormal rayCallback(from,to); diff --git a/src/physics/physical_object.cpp b/src/physics/physical_object.cpp index 12d4557a8..f6a612336 100644 --- a/src/physics/physical_object.cpp +++ b/src/physics/physical_object.cpp @@ -98,7 +98,7 @@ void PhysicalObject::Settings::init() m_flatten_kart = false; } // Settings -// ---------------------------------------------------------------------------- +// ============================================================================ PhysicalObject* PhysicalObject::fromXML(bool is_dynamic, const XMLNode &xml_node, TrackObject* object) diff --git a/src/physics/physics.cpp b/src/physics/physics.cpp index ed252bd66..b1d9c2c71 100644 --- a/src/physics/physics.cpp +++ b/src/physics/physics.cpp @@ -224,7 +224,7 @@ void Physics::update(float dt) } // now the first object must be a projectile - // ----------------------------------------- + // ========================================= if(p->getUserPointer(1)->is(UserPointer::UP_TRACK)) { // Projectile hits track @@ -487,7 +487,7 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies, if(!upA || !upB) continue; // 1) object A is a track - // ----------------------- + // ======================= if(upA->is(UserPointer::UP_TRACK)) { if(upB->is(UserPointer::UP_FLYABLE)) // 1.1 projectile hits track @@ -520,7 +520,7 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies, } } // 2) object a is a kart - // --------------------- + // ===================== else if(upA->is(UserPointer::UP_KART)) { if(upB->is(UserPointer::UP_TRACK)) @@ -555,7 +555,7 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies, upA, contact_manifold->getContactPoint(0).m_localPointA); } // 3) object is a projectile - // ------------------------- + // ========================= else if(upA->is(UserPointer::UP_FLYABLE)) { // 3.1) projectile hits track @@ -573,7 +573,7 @@ btScalar Physics::solveGroup(btCollisionObject** bodies, int numBodies, } } // Object is a physical object - // --------------------------- + // =========================== else if(upA->is(UserPointer::UP_PHYSICAL_OBJECT)) { if(upB->is(UserPointer::UP_FLYABLE)) diff --git a/src/physics/physics.hpp b/src/physics/physics.hpp index 4f351b3dc..96f5fc1b6 100644 --- a/src/physics/physics.hpp +++ b/src/physics/physics.hpp @@ -100,7 +100,7 @@ private: } // getContactPointCS }; // CollisionPair - // ------------------------------------------------------------------------ + // ======================================================================== // This class is the list of collision objects, where each collision // pair is stored as most once. class CollisionList : public std::vector @@ -121,7 +121,7 @@ private: push_back(CollisionPair(a, contact_point_a, b, contact_point_b)); } }; // CollisionList - // ------------------------------------------------------------------------ + // ======================================================================== /** This flag is set while bullets time step processing is taking * place. It is used to avoid altering data structures that might diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index f7ecc3bf3..2626530b4 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -295,7 +295,7 @@ void RaceManager::startNew(bool from_overworld) m_num_karts = (int)m_player_karts.size(); // Create the kart status data structure to keep track of scores, times, ... - // -------------------------------------------------------------------------- + // ========================================================================== m_kart_status.clear(); Log::verbose("RaceManager", "Nb of karts=%u, ai:%lu players:%lu\n", (unsigned int)m_num_karts, m_ai_kart_list.size(), m_player_karts.size()); @@ -344,7 +344,7 @@ void RaceManager::startNew(bool from_overworld) !NetworkWorld::getInstance()->isRunning()) // offline mode only { //We look if Player 1 has a saved version of this GP. - // ------------------------------------------------- + // ================================================= SavedGrandPrix* gp = SavedGrandPrix::getSavedGP( StateManager::get() ->getActivePlayerProfile(0) ->getUniqueID(), @@ -354,7 +354,7 @@ void RaceManager::startNew(bool from_overworld) m_player_karts.size()); // Start the race with the appropriate track - // ----------------------------------------- + // ========================================= if(gp != NULL) { if (m_continue_saved_gp) @@ -392,7 +392,7 @@ void RaceManager::startNextRace() m_num_finished_players = 0; // if subsequent race, sort kart status structure - // ---------------------------------------------- + // ============================================== if (m_track_number > 0) { // In follow the leader mode do not change the first kart, diff --git a/src/states_screens/dialogs/addons_loading.cpp b/src/states_screens/dialogs/addons_loading.cpp index 8166a4531..2d6f1ef2d 100644 --- a/src/states_screens/dialogs/addons_loading.cpp +++ b/src/states_screens/dialogs/addons_loading.cpp @@ -111,7 +111,7 @@ void AddonsLoading::beforeAddingWidgets() rating->setStarNumber(3); // Display flags for this addon - // ---------------------------- + // ============================ std::vector l; if(UserConfigParams::m_artist_debug_mode) { @@ -154,7 +154,7 @@ void AddonsLoading::beforeAddingWidgets() } // Display the size - // ---------------- + // ================ int n = m_addon.getSize(); core::stringw unit=""; if(n>1024*1024) diff --git a/src/states_screens/feature_unlocked.cpp b/src/states_screens/feature_unlocked.cpp index 15b1ec803..32510f341 100644 --- a/src/states_screens/feature_unlocked.cpp +++ b/src/states_screens/feature_unlocked.cpp @@ -58,7 +58,7 @@ const int GIFT_EXIT_TO = GIFT_EXIT_FROM + 7; DEFINE_SCREEN_SINGLETON( FeatureUnlockedCutScene ); -// ---------------------------------------------------------------------------- +// ============================================================================ #if 0 #pragma mark FeatureUnlockedCutScene::UnlockedThing @@ -124,7 +124,7 @@ FeatureUnlockedCutScene::UnlockedThing::~UnlockedThing() m_root_gift_node = NULL; } // UnlockedThing::~UnlockedThing -// ---------------------------------------------------------------------------- +// ============================================================================ #if 0 #pragma mark - diff --git a/src/states_screens/kart_selection.cpp b/src/states_screens/kart_selection.cpp index 9496a68aa..0195ee189 100644 --- a/src/states_screens/kart_selection.cpp +++ b/src/states_screens/kart_selection.cpp @@ -121,7 +121,7 @@ void FocusDispatcher::add() static FocusDispatcher* g_dispatcher = NULL; -// ---------------------------------------------------------------------------- +// ============================================================================ /** A small extension to the spinner widget to add features like player ID * management or badging */ @@ -176,7 +176,7 @@ void PlayerNameSpinner::markAsCorrect() m_incorrect = false; } } // markAsCorrect -// ---------------------------------------------------------------------------- +// ============================================================================ #if 0 #pragma mark - @@ -871,7 +871,7 @@ bool sameKart(const PlayerKartWidget& player1, const PlayerKartWidget& player2) #pragma mark - #pragma mark KartHoverListener #endif -// ---------------------------------------------------------------------------- +// ============================================================================ KartHoverListener::KartHoverListener(KartSelectionScreen* parent) { @@ -921,7 +921,7 @@ void KartHoverListener::onSelectionChanged(DynamicRibbonWidget* theWidget, #pragma mark KartSelectionScreen #endif -// ---------------------------------------------------------------------------- +// ============================================================================ KartSelectionScreen::KartSelectionScreen(const char* filename) : Screen(filename) { @@ -931,7 +931,7 @@ KartSelectionScreen::KartSelectionScreen(const char* filename) : Screen(filename m_go_to_overworld_next = false; } // KartSelectionScreen -// ---------------------------------------------------------------------------- +// ============================================================================ KartSelectionScreen* KartSelectionScreen::getRunningInstance() { diff --git a/src/states_screens/race_result_gui.cpp b/src/states_screens/race_result_gui.cpp index ae1377014..9b5803421 100644 --- a/src/states_screens/race_result_gui.cpp +++ b/src/states_screens/race_result_gui.cpp @@ -635,7 +635,7 @@ void RaceResultGUI::renderGlobal(float dt) unsigned int num_karts = m_all_row_infos.size(); // First: Update the finite state machine - // -------------------------------------- + // ====================================== switch(m_animation_state) { case RR_INIT: @@ -733,7 +733,7 @@ void RaceResultGUI::renderGlobal(float dt) } // switch // Second phase: update X and Y positions for the various animations - // ----------------------------------------------------------------- + // ================================================================= float v = 0.9f*UserConfigParams::m_width/m_time_single_scroll; if(!isSoccerWorld) { @@ -902,7 +902,7 @@ void RaceResultGUI::displayOneEntry(unsigned int x, unsigned int y, } // Only display points in GP mode and when the GP results are displayed. - // --------------------------------------------------------------------- + // ===================================================================== if (race_manager->getMajorMode() == RaceManager::MAJOR_MODE_GRAND_PRIX && m_animation_state != RR_RACE_RESULT) { diff --git a/src/states_screens/state_manager.cpp b/src/states_screens/state_manager.cpp index 9074adfa3..def056fc1 100644 --- a/src/states_screens/state_manager.cpp +++ b/src/states_screens/state_manager.cpp @@ -51,7 +51,7 @@ void StateManager::deallocate() } // deallocate -// ---------------------------------------------------------------------------- +// ============================================================================ #if 0 #pragma mark - @@ -245,7 +245,7 @@ void StateManager::onStackEmptied() main_loop->abort(); } // onStackEmptied -// ---------------------------------------------------------------------------- +// ============================================================================ #if 0 #pragma mark - diff --git a/src/states_screens/state_manager.hpp b/src/states_screens/state_manager.hpp index 5eb5fb23c..cfda60c06 100644 --- a/src/states_screens/state_manager.hpp +++ b/src/states_screens/state_manager.hpp @@ -172,7 +172,7 @@ public: }; // ActivePlayer - // ------------------------------------------------------------------------ + // ======================================================================== const PtrVector& getActivePlayers() { return m_active_players; } ActivePlayer* getActivePlayer(const int id); diff --git a/src/states_screens/user_screen.cpp b/src/states_screens/user_screen.cpp index 84cf2e464..de5b1fa72 100644 --- a/src/states_screens/user_screen.cpp +++ b/src/states_screens/user_screen.cpp @@ -549,7 +549,7 @@ void BaseUserScreen::unloaded() -// ---------------------------------------------------------------------------- +// ============================================================================ /** In the tab version, make sure the right tab is selected. */ void TabbedUserScreen::init() diff --git a/src/states_screens/user_screen.hpp b/src/states_screens/user_screen.hpp index b5c4ddfee..b3294881d 100644 --- a/src/states_screens/user_screen.hpp +++ b/src/states_screens/user_screen.hpp @@ -114,7 +114,7 @@ public: void logoutError(const irr::core::stringw &error_message); }; // class BaseUserScreen -// ---------------------------------------------------------------------------- +// ============================================================================ class UserScreen : public BaseUserScreen, public GUIEngine::ScreenSingleton { @@ -125,7 +125,7 @@ public: friend class GUIEngine::ScreenSingleton; }; // class UserScreenTabed -// ---------------------------------------------------------------------------- +// ============================================================================ class TabbedUserScreen : public BaseUserScreen, public GUIEngine::ScreenSingleton { diff --git a/src/utils/leak_check.cpp b/src/utils/leak_check.cpp index e4c2d204a..5f199c6ab 100644 --- a/src/utils/leak_check.cpp +++ b/src/utils/leak_check.cpp @@ -99,7 +99,7 @@ namespace MemoryLeaks } // print - // ------------------------------------------------------------------------ + // ======================================================================== /** Adds an object to the sets of all allocated objects. */ void addObject(AllocatedObject* obj) { diff --git a/src/utils/leak_check.hpp b/src/utils/leak_check.hpp index 0b212a60c..6d461ed78 100644 --- a/src/utils/leak_check.hpp +++ b/src/utils/leak_check.hpp @@ -52,7 +52,7 @@ namespace MemoryLeaks virtual void print() const; }; // AllocatedObjects - // ------------------------------------------------------------------------ + // ======================================================================== void checkForLeaks(); void addObject(AllocatedObject* obj); From b0f3a48d80d7d863e23fb9151f858bd8b4bc6664 Mon Sep 17 00:00:00 2001 From: konstin Date: Wed, 16 Jul 2014 16:02:36 +0200 Subject: [PATCH 21/93] close #1397 --- src/states_screens/dialogs/random_gp_dialog.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/states_screens/dialogs/random_gp_dialog.cpp b/src/states_screens/dialogs/random_gp_dialog.cpp index 1b79fa955..74d219875 100644 --- a/src/states_screens/dialogs/random_gp_dialog.cpp +++ b/src/states_screens/dialogs/random_gp_dialog.cpp @@ -33,7 +33,6 @@ using irr::gui::IGUIStaticText; typedef GUIEngine::SpinnerWidget Spinner; RandomGPInfoDialog::RandomGPInfoDialog() - { // Defaults - loading selection from last time frrom a file would be better m_number_of_tracks = 2; // We can assume that there are at least 2 standard tracks From 1aa43814b039a532588fc5f16bb760ff25637940 Mon Sep 17 00:00:00 2001 From: vlj Date: Wed, 16 Jul 2014 19:41:28 +0200 Subject: [PATCH 22/93] Partially unroll template for grass shadow. --- src/graphics/render_geometry.cpp | 77 ++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 34 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index 3212a1c8f..3bec5b34d 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -318,7 +318,43 @@ void IrrDriver::renderTransparent() } -template +template +void drawShadow(const T *Shader, const GLMesh *mesh, uniforms... Args) +{ + irr_driver->IncreaseObjectCount(); + GLenum ptype = mesh->PrimitiveType; + GLenum itype = mesh->IndexType; + size_t count = mesh->IndexCount; + + Shader->setUniforms(Args...); + glDrawElementsInstancedBaseVertex(ptype, count, itype, (GLvoid *)mesh->vaoOffset, 4, mesh->vaoBaseVertex); +} + +template +struct custom_unroll_args; + +template<> +struct custom_unroll_args<> +{ + template + static void exec(const T *Shader, const std::tuple &t, Args... args) + { + drawShadow(Shader, std::get<0>(t), args...); + } +}; + +template +struct custom_unroll_args +{ + template + static void exec(const T *Shader, const std::tuple &t, Args... args) + { + custom_unroll_args::template exec(Shader, t, std::get(t), args...); + } +}; + + +template void drawShadow(const T *Shader, const std::vector TextureUnits, const std::vector >&t) { glUseProgram(Shader->Program); @@ -326,40 +362,13 @@ void drawShadow(const T *Shader, const std::vector TextureUnits, const s for (unsigned i = 0; i < t.size(); i++) { const GLMesh *mesh = std::get<0>(t[i]); - irr_driver->IncreaseObjectCount(); - GLenum ptype = mesh->PrimitiveType; - GLenum itype = mesh->IndexType; - size_t count = mesh->IndexCount; for (unsigned j = 0; j < TextureUnits.size(); j++) { compressTexture(mesh->textures[j], true); setTexture(TextureUnits[j], getTextureGLuint(mesh->textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); } - Shader->setUniforms(std::get<1>(t[i])); - glDrawElementsInstancedBaseVertex(ptype, count, itype, (GLvoid *)mesh->vaoOffset, 4, mesh->vaoBaseVertex); - } -} - -static void drawShadowGrass(const std::vector TextureUnits, const std::vector > &t) -{ - glUseProgram(MeshShader::GrassShadowShaderInstance->Program); - glBindVertexArray(getVAO(EVT_STANDARD)); - for (unsigned i = 0; i < t.size(); i++) - { - const GLMesh *mesh = std::get<0>(t[i]); - irr_driver->IncreaseObjectCount(); - GLenum ptype = mesh->PrimitiveType; - GLenum itype = mesh->IndexType; - size_t count = mesh->IndexCount; - for (unsigned j = 0; j < TextureUnits.size(); j++) - { - compressTexture(mesh->textures[j], true); - setTexture(TextureUnits[j], getTextureGLuint(mesh->textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - } - - MeshShader::GrassShadowShaderInstance->setUniforms(std::get<1>(t[i]), std::get<3>(t[i])); - glDrawElementsInstancedBaseVertex(ptype, count, itype, (GLvoid *)mesh->vaoOffset, 4, mesh->vaoBaseVertex); + custom_unroll_args::template exec(Shader, t[i]); } } @@ -394,11 +403,11 @@ void IrrDriver::renderShadows() m_scene_manager->drawAll(scene::ESNRP_SOLID); - drawShadow(MeshShader::ShadowShaderInstance, {}, ListDefaultStandardG::Arguments); - drawShadow(MeshShader::ShadowShaderInstance, {}, ListDefault2TCoordG::Arguments); - drawShadow(MeshShader::ShadowShaderInstance, {}, ListNormalG::Arguments); - drawShadow(MeshShader::RefShadowShaderInstance, { MeshShader::RefShadowShaderInstance->TU_tex }, ListAlphaRefG::Arguments); - drawShadowGrass({ MeshShader::GrassShadowShaderInstance->TU_tex }, ListGrassG::Arguments); + drawShadow(MeshShader::ShadowShaderInstance, {}, ListDefaultStandardG::Arguments); + drawShadow(MeshShader::ShadowShaderInstance, {}, ListDefault2TCoordG::Arguments); + drawShadow(MeshShader::ShadowShaderInstance, {}, ListNormalG::Arguments); + drawShadow(MeshShader::RefShadowShaderInstance, { MeshShader::RefShadowShaderInstance->TU_tex }, ListAlphaRefG::Arguments); + drawShadow(MeshShader::GrassShadowShaderInstance, { MeshShader::GrassShadowShaderInstance->TU_tex }, ListGrassG::Arguments); glDisable(GL_POLYGON_OFFSET_FILL); From 27020c0c92f2c8b2663ac4a50f6fe8dd662ab770 Mon Sep 17 00:00:00 2001 From: vlj Date: Wed, 16 Jul 2014 21:38:38 +0200 Subject: [PATCH 23/93] Move draw template function to render_geometry.cpp --- src/graphics/render_geometry.cpp | 25 +++++++++++++++++++++++++ src/graphics/stkmesh.hpp | 24 ------------------------ 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index 3bec5b34d..cb309fb5f 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -32,6 +32,31 @@ #include +template +void draw(const GLMesh *mesh, uniforms... Args) +{ + irr_driver->IncreaseObjectCount(); + GLenum ptype = mesh->PrimitiveType; + GLenum itype = mesh->IndexType; + size_t count = mesh->IndexCount; + + Shader::setUniforms(Args...); + glDrawElementsBaseVertex(ptype, count, itype, (GLvoid *)mesh->vaoOffset, mesh->vaoBaseVertex); +} + + +template +void draw(const T *Shader, const GLMesh *mesh, uniforms... Args) +{ + irr_driver->IncreaseObjectCount(); + GLenum ptype = mesh->PrimitiveType; + GLenum itype = mesh->IndexType; + size_t count = mesh->IndexCount; + + Shader->setUniforms(Args...); + glDrawElementsBaseVertex(ptype, count, itype, (GLvoid *)mesh->vaoOffset, mesh->vaoBaseVertex); +} + template struct unroll_args_instance { diff --git a/src/graphics/stkmesh.hpp b/src/graphics/stkmesh.hpp index 5c184e663..bd6a80f73 100644 --- a/src/graphics/stkmesh.hpp +++ b/src/graphics/stkmesh.hpp @@ -99,30 +99,6 @@ public: static std::vector > Arguments; }; -template -void draw(const GLMesh *mesh, uniforms... Args) -{ - irr_driver->IncreaseObjectCount(); - GLenum ptype = mesh->PrimitiveType; - GLenum itype = mesh->IndexType; - size_t count = mesh->IndexCount; - - Shader::setUniforms(Args...); - glDrawElementsBaseVertex(ptype, count, itype, (GLvoid *)mesh->vaoOffset, mesh->vaoBaseVertex); -} - - -template -void draw(const T *Shader, const GLMesh *mesh, uniforms... Args) -{ - irr_driver->IncreaseObjectCount(); - GLenum ptype = mesh->PrimitiveType; - GLenum itype = mesh->IndexType; - size_t count = mesh->IndexCount; - - Shader->setUniforms(Args...); - glDrawElementsBaseVertex(ptype, count, itype, (GLvoid *)mesh->vaoOffset, mesh->vaoBaseVertex); -} // Pass 2 shader (ie shaders that outputs final color) class ListDefaultStandardSM From 1d0fb9ca687a92e27419d0e27ada14b7f4833e03 Mon Sep 17 00:00:00 2001 From: vlj Date: Wed, 16 Jul 2014 23:15:07 +0200 Subject: [PATCH 24/93] Simplify material --- src/graphics/render.cpp | 10 +- src/graphics/render_geometry.cpp | 135 +++++++++++++++---------- src/graphics/stkanimatedmesh.cpp | 53 +++------- src/graphics/stkanimatedmesh.hpp | 3 +- src/graphics/stkinstancedscenenode.cpp | 8 +- src/graphics/stkinstancedscenenode.hpp | 2 +- src/graphics/stkmesh.cpp | 61 ++++------- src/graphics/stkmesh.hpp | 116 +++++++++------------ src/graphics/stkmeshscenenode.cpp | 125 +++++++++++------------ src/graphics/stkmeshscenenode.hpp | 3 +- 10 files changed, 240 insertions(+), 276 deletions(-) diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index 1e5d36c65..90bf81d42 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -266,10 +266,6 @@ void IrrDriver::renderScene(scene::ICameraSceneNode * const camnode, unsigned po { glBindBufferBase(GL_UNIFORM_BUFFER, 0, SharedObject::ViewProjectionMatrixesUBO); - PROFILER_PUSH_CPU_MARKER("- Solid Pass 1", 0xFF, 0x00, 0x00); - renderSolidFirstPass(); - PROFILER_POP_CPU_MARKER(); - // Shadows { PROFILER_PUSH_CPU_MARKER("- Shadow", 0x30, 0x6F, 0x90); @@ -283,6 +279,12 @@ void IrrDriver::renderScene(scene::ICameraSceneNode * const camnode, unsigned po PROFILER_POP_CPU_MARKER(); } + PROFILER_PUSH_CPU_MARKER("- Solid Pass 1", 0xFF, 0x00, 0x00); + renderSolidFirstPass(); + PROFILER_POP_CPU_MARKER(); + + + // Lights { PROFILER_PUSH_CPU_MARKER("- Light", 0x00, 0xFF, 0x00); diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index cb309fb5f..bb2b2debe 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -83,7 +83,31 @@ void apply_instance(const T *Shader, const std::tuple &arg) unroll_args_instance >::value >::template exec(Shader, arg); } -template +template +struct custom_unroll_args; + +template<> +struct custom_unroll_args<> +{ + template + static void exec(const T *Shader, const std::tuple &t, Args... args) + { + draw(Shader, std::get<0>(t), args...); + } +}; + +template +struct custom_unroll_args +{ + template + static void exec(const T *Shader, const std::tuple &t, Args... args) + { + custom_unroll_args::template exec(Shader, t, std::get(t), args...); + } +}; + + +template void renderMeshes1stPass(const std::vector &TexUnits, std::vector > &meshes) { glUseProgram(Shader::template getInstance()->Program); @@ -105,7 +129,7 @@ void renderMeshes1stPass(const std::vector &TexUnits, std::vector(), meshes[i]); + custom_unroll_args::template exec(Shader::template getInstance(), meshes[i]); } } @@ -122,11 +146,14 @@ void IrrDriver::renderSolidFirstPass() glDisable(GL_BLEND); glEnable(GL_CULL_FACE); irr_driver->setPhase(SOLID_NORMAL_AND_DEPTH_PASS); - ListDefaultStandardG::Arguments.clear(); - ListDefault2TCoordG::Arguments.clear(); - ListAlphaRefG::Arguments.clear(); - ListNormalG::Arguments.clear(); - ListGrassG::Arguments.clear(); + ListMatDefault::Arguments.clear(); + ListMatAlphaRef::Arguments.clear(); + ListMatSphereMap::Arguments.clear(); + ListMatDetails::Arguments.clear(); + ListMatUnlit::Arguments.clear(); + ListMatNormalMap::Arguments.clear(); + ListMatGrass::Arguments.clear(); + ListMatSplatting::Arguments.clear(); m_scene_manager->drawAll(scene::ESNRP_SOLID); if (!UserConfigParams::m_dynamic_lights) @@ -134,15 +161,18 @@ void IrrDriver::renderSolidFirstPass() { ScopedGPUTimer Timer(getGPUTimer(Q_SOLID_PASS1)); - renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListDefaultStandardG::Arguments); - renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListDefault2TCoordG::Arguments); - renderMeshes1stPass({ MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex }, ListAlphaRefG::Arguments); - renderMeshes1stPass({ MeshShader::NormalMapShader::getInstance()->TU_glossy, MeshShader::NormalMapShader::getInstance()->TU_normalmap }, ListNormalG::Arguments); - renderMeshes1stPass({ MeshShader::GrassPass1Shader::getInstance()->TU_tex }, ListGrassG::Arguments); + renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListMatDefault::Arguments); + renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListMatSphereMap::Arguments); + renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListMatUnlit::Arguments); + renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListMatDetails::Arguments); + renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListMatSplatting::Arguments); + renderMeshes1stPass({ MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex }, ListMatAlphaRef::Arguments); + renderMeshes1stPass({ MeshShader::GrassPass1Shader::getInstance()->TU_tex }, ListMatGrass::Arguments); +// renderMeshes1stPass({ MeshShader::NormalMapShader::getInstance()->TU_glossy, MeshShader::NormalMapShader::getInstance()->TU_normalmap }, ListNormalG::Arguments); } } -template +template void renderMeshes2ndPass(const std::vector &TexUnits, std::vector > &meshes) { glUseProgram(Shader::template getInstance()->Program); @@ -175,7 +205,7 @@ void renderMeshes2ndPass(const std::vector &TexUnits, std::vector(), meshes[i]); + custom_unroll_args::template exec(Shader::template getInstance(), meshes[i]); } } @@ -201,14 +231,6 @@ void IrrDriver::renderSolidSecondPass() glEnable(GL_DEPTH_TEST); glDisable(GL_ALPHA_TEST); glDisable(GL_BLEND); - ListDefaultStandardSM::Arguments.clear(); - ListDefaultTangentSM::Arguments.clear(); - ListAlphaRefSM::Arguments.clear(); - ListSphereMapSM::Arguments.clear(); - ListUnlitSM::Arguments.clear(); - ListDetailSM::Arguments.clear(); - ListSplattingSM::Arguments.clear(); - ListGrassSM::Arguments.clear(); setTexture(0, m_rtts->getRenderTarget(RTT_TMP1), GL_NEAREST, GL_NEAREST); setTexture(1, m_rtts->getRenderTarget(RTT_TMP2), GL_NEAREST, GL_NEAREST); setTexture(2, m_rtts->getRenderTarget(RTT_HALF1_R), GL_LINEAR, GL_LINEAR); @@ -218,14 +240,13 @@ void IrrDriver::renderSolidSecondPass() m_scene_manager->drawAll(scene::ESNRP_SOLID); - renderMeshes2ndPass({ MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo }, ListDefaultStandardSM::Arguments); - renderMeshes2ndPass({ MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo }, ListDefaultTangentSM::Arguments); - renderMeshes2ndPass({ MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo }, ListAlphaRefSM::Arguments); - renderMeshes2ndPass({ MeshShader::SphereMapShader::getInstance()->TU_tex }, ListSphereMapSM::Arguments); - renderMeshes2ndPass({ MeshShader::ObjectUnlitShader::getInstance()->TU_tex }, ListUnlitSM::Arguments); - renderMeshes2ndPass({ MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail }, ListDetailSM::Arguments); - renderMeshes2ndPass({ 8, MeshShader::SplattingShader::getInstance()->TU_tex_layout, MeshShader::SplattingShader::getInstance()->TU_tex_detail0, MeshShader::SplattingShader::getInstance()->TU_tex_detail1, MeshShader::SplattingShader::getInstance()->TU_tex_detail2, MeshShader::SplattingShader::getInstance()->TU_tex_detail3 }, ListSplattingSM::Arguments); - renderMeshes2ndPass({ MeshShader::GrassPass2Shader::getInstance()->TU_Albedo }, ListGrassSM::Arguments); + renderMeshes2ndPass({ MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo }, ListMatDefault::Arguments); + renderMeshes2ndPass({ MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo }, ListMatAlphaRef::Arguments); + renderMeshes2ndPass({ MeshShader::SphereMapShader::getInstance()->TU_tex }, ListMatSphereMap::Arguments); + renderMeshes2ndPass({ MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail }, ListMatDetails::Arguments); + renderMeshes2ndPass({ MeshShader::GrassPass2Shader::getInstance()->TU_Albedo }, ListMatGrass::Arguments); + renderMeshes2ndPass({ MeshShader::ObjectUnlitShader::getInstance()->TU_tex }, ListMatUnlit::Arguments); + renderMeshes2ndPass({ 8, MeshShader::SplattingShader::getInstance()->TU_tex_layout, MeshShader::SplattingShader::getInstance()->TU_tex_detail0, MeshShader::SplattingShader::getInstance()->TU_tex_detail1, MeshShader::SplattingShader::getInstance()->TU_tex_detail2, MeshShader::SplattingShader::getInstance()->TU_tex_detail3 }, ListMatSplatting::Arguments); } } @@ -252,16 +273,16 @@ void IrrDriver::renderTransparent() if (World::getWorld() && World::getWorld()->isFogEnabled()) { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListBlendTransparentFog::Arguments); + renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListBlendTransparentFog::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListAdditiveTransparentFog::Arguments); + renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListAdditiveTransparentFog::Arguments); } else { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListBlendTransparent::Arguments); + renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListBlendTransparent::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListAdditiveTransparent::Arguments); + renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListAdditiveTransparent::Arguments); } if (!UserConfigParams::m_dynamic_lights) @@ -285,7 +306,7 @@ void IrrDriver::renderTransparent() glStencilFunc(GL_ALWAYS, 1, 0xFF); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); - glBindVertexArray(getVAO(EVT_2TCOORDS)); +/* glBindVertexArray(getVAO(EVT_2TCOORDS)); // Generate displace mask // Use RTT_TMP4 as displace mask irr_driver->getFBO(FBO_TMP1_WITH_DS).Bind(); @@ -339,7 +360,7 @@ void IrrDriver::renderTransparent() irr_driver->getFBO(FBO_COLORS).Bind(); glStencilFunc(GL_EQUAL, 1, 0xFF); m_post_processing->renderPassThrough(m_rtts->getRenderTarget(RTT_DISPLACE)); - glDisable(GL_STENCIL_TEST); + glDisable(GL_STENCIL_TEST);*/ } @@ -356,10 +377,10 @@ void drawShadow(const T *Shader, const GLMesh *mesh, uniforms... Args) } template -struct custom_unroll_args; +struct shadow_custom_unroll_args; template<> -struct custom_unroll_args<> +struct shadow_custom_unroll_args<> { template static void exec(const T *Shader, const std::tuple &t, Args... args) @@ -369,18 +390,17 @@ struct custom_unroll_args<> }; template -struct custom_unroll_args +struct shadow_custom_unroll_args { template static void exec(const T *Shader, const std::tuple &t, Args... args) { - custom_unroll_args::template exec(Shader, t, std::get(t), args...); + shadow_custom_unroll_args::template exec(Shader, t, std::get(t), args...); } }; - template -void drawShadow(const T *Shader, const std::vector TextureUnits, const std::vector >&t) +void renderShadow(const T *Shader, const std::vector TextureUnits, const std::vector >&t) { glUseProgram(Shader->Program); glBindVertexArray(getVAO(VertexType)); @@ -393,7 +413,7 @@ void drawShadow(const T *Shader, const std::vector TextureUnits, const s setTexture(TextureUnits[j], getTextureGLuint(mesh->textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); } - custom_unroll_args::template exec(Shader, t[i]); + shadow_custom_unroll_args::template exec(Shader, t[i]); } } @@ -416,7 +436,9 @@ void drawRSM(const core::matrix4 & rsm_matrix, const std::vector Texture void IrrDriver::renderShadows() { - irr_driver->setPhase(SHADOW_PASS); + glDepthFunc(GL_LEQUAL); + glDepthMask(GL_TRUE); + glEnable(GL_DEPTH_TEST); glDisable(GL_BLEND); glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(1.5, 0.); @@ -426,13 +448,24 @@ void IrrDriver::renderShadows() glBindBufferBase(GL_UNIFORM_BUFFER, 0, SharedObject::ViewProjectionMatrixesUBO); + irr_driver->setPhase(SHADOW_PASS); + ListMatDefault::Arguments.clear(); + ListMatAlphaRef::Arguments.clear(); + ListMatSphereMap::Arguments.clear(); + ListMatDetails::Arguments.clear(); + ListMatUnlit::Arguments.clear(); + ListMatNormalMap::Arguments.clear(); + ListMatGrass::Arguments.clear(); + ListMatSplatting::Arguments.clear(); m_scene_manager->drawAll(scene::ESNRP_SOLID); - drawShadow(MeshShader::ShadowShaderInstance, {}, ListDefaultStandardG::Arguments); - drawShadow(MeshShader::ShadowShaderInstance, {}, ListDefault2TCoordG::Arguments); - drawShadow(MeshShader::ShadowShaderInstance, {}, ListNormalG::Arguments); - drawShadow(MeshShader::RefShadowShaderInstance, { MeshShader::RefShadowShaderInstance->TU_tex }, ListAlphaRefG::Arguments); - drawShadow(MeshShader::GrassShadowShaderInstance, { MeshShader::GrassShadowShaderInstance->TU_tex }, ListGrassG::Arguments); + renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatDefault::Arguments); + renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatSphereMap::Arguments); + renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatUnlit::Arguments); + renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatDetails::Arguments); + renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatSplatting::Arguments); + renderShadow(MeshShader::RefShadowShaderInstance, { MeshShader::RefShadowShaderInstance->TU_tex }, ListMatAlphaRef::Arguments); + renderShadow(MeshShader::GrassShadowShaderInstance, { MeshShader::GrassShadowShaderInstance->TU_tex }, ListMatGrass::Arguments); glDisable(GL_POLYGON_OFFSET_FILL); @@ -442,6 +475,6 @@ void IrrDriver::renderShadows() m_rtts->getRSM().Bind(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListDefaultStandardG::Arguments); - drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListDefault2TCoordG::Arguments); +// drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListDefaultStandardG::Arguments); +// drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListDefault2TCoordG::Arguments); } diff --git a/src/graphics/stkanimatedmesh.cpp b/src/graphics/stkanimatedmesh.cpp index cb36955f9..53dae93af 100644 --- a/src/graphics/stkanimatedmesh.cpp +++ b/src/graphics/stkanimatedmesh.cpp @@ -39,10 +39,8 @@ void STKAnimatedMesh::setMesh(scene::IAnimatedMesh* mesh) { firstTime = true; GLmeshes.clear(); - for (unsigned i = 0; i < FPSM_COUNT; i++) - GeometricMesh[i].clearWithoutDeleting(); - for (unsigned i = 0; i < SM_COUNT; i++) - ShadedMesh[i].clearWithoutDeleting(); + for (unsigned i = 0; i < MAT_COUNT; i++) + MeshSolidMaterial[i].clearWithoutDeleting(); CAnimatedMeshSceneNode::setMesh(mesh); } @@ -98,10 +96,8 @@ void STKAnimatedMesh::render() } else { - GeometricMaterial GeometricType = MaterialTypeToGeometricMaterial(type, mb->getVertexType()); - ShadedMaterial ShadedType = MaterialTypeToShadedMaterial(type, mesh.textures, mb->getVertexType()); - GeometricMesh[GeometricType].push_back(&mesh); - ShadedMesh[ShadedType].push_back(&mesh); + MeshMaterial MatType = MaterialTypeToMeshMaterial(type, mb->getVertexType()); + MeshSolidMaterial[MatType].push_back(&mesh); } std::pair p = getVAOOffsetAndBase(mb); mesh.vaoBaseVertex = p.first; @@ -117,7 +113,7 @@ void STKAnimatedMesh::render() const video::SMaterial& material = ReadOnlyMaterials ? mb->getMaterial() : Materials[i]; if (isObject(material.MaterialType)) { - if (irr_driver->getPhase() == SOLID_NORMAL_AND_DEPTH_PASS || irr_driver->getPhase() == TRANSPARENT_PASS) + if (irr_driver->getPhase() == SOLID_NORMAL_AND_DEPTH_PASS || irr_driver->getPhase() == TRANSPARENT_PASS || irr_driver->getPhase() == SHADOW_PASS) { glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, getVBO(mb->getVertexType())); @@ -137,45 +133,24 @@ void STKAnimatedMesh::render() continue; } - if (irr_driver->getPhase() == SOLID_NORMAL_AND_DEPTH_PASS) + if (irr_driver->getPhase() == SOLID_NORMAL_AND_DEPTH_PASS || irr_driver->getPhase() == SHADOW_PASS) { ModelViewProjectionMatrix = computeMVP(AbsoluteTransformation); core::matrix4 invmodel; AbsoluteTransformation.getInverse(invmodel); GLMesh* mesh; - for_in(mesh, GeometricMesh[FPSM_DEFAULT_STANDARD]) - ListDefaultStandardG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel)); + for_in(mesh, MeshSolidMaterial[MAT_DEFAULT]) + ListMatDefault::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - for_in(mesh, GeometricMesh[FPSM_DEFAULT_2TCOORD]) - ListDefault2TCoordG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel)); + for_in(mesh, MeshSolidMaterial[MAT_ALPHA_REF]) + ListMatAlphaRef::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - for_in(mesh, GeometricMesh[FPSM_ALPHA_REF_TEXTURE]) - ListAlphaRefG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix)); + for_in(mesh, MeshSolidMaterial[MAT_DETAIL]) + ListMatDetails::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - return; - } - - if (irr_driver->getPhase() == SOLID_LIT_PASS) - { - core::matrix4 invmodel; - AbsoluteTransformation.getInverse(invmodel); - - GLMesh* mesh; - for_in(mesh, ShadedMesh[SM_DEFAULT_STANDARD]) - ListDefaultStandardSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - - for_in(mesh, ShadedMesh[SM_DEFAULT_TANGENT]) - ListDefaultTangentSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - - for_in(mesh, ShadedMesh[SM_ALPHA_REF_TEXTURE]) - ListAlphaRefSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - - for_in (mesh, ShadedMesh[SM_UNLIT]) - ListUnlitSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation)); - - for_in(mesh, ShadedMesh[SM_DETAILS]) - ListDetailSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, irr_driver->getSceneManager()->getAmbientLight())); + for_in(mesh, MeshSolidMaterial[MAT_UNLIT]) + ListMatUnlit::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY)); return; } diff --git a/src/graphics/stkanimatedmesh.hpp b/src/graphics/stkanimatedmesh.hpp index 92e12991a..745554c15 100644 --- a/src/graphics/stkanimatedmesh.hpp +++ b/src/graphics/stkanimatedmesh.hpp @@ -11,8 +11,7 @@ class STKAnimatedMesh : public irr::scene::CAnimatedMeshSceneNode { protected: bool firstTime; - PtrVector GeometricMesh[FPSM_COUNT]; - PtrVector ShadedMesh[SM_COUNT]; + PtrVector MeshSolidMaterial[FPSM_COUNT]; PtrVector TransparentMesh[TM_COUNT]; std::vector GLmeshes; core::matrix4 ModelViewProjectionMatrix; diff --git a/src/graphics/stkinstancedscenenode.cpp b/src/graphics/stkinstancedscenenode.cpp index e9f2b0d45..7a9dc9501 100644 --- a/src/graphics/stkinstancedscenenode.cpp +++ b/src/graphics/stkinstancedscenenode.cpp @@ -55,7 +55,7 @@ void STKInstancedSceneNode::createGLMeshes() isMaterialInitialized = false; } -void STKInstancedSceneNode::initinstancedvaostate(GLMesh &mesh, GeometricMaterial GeoMat, ShadedMaterial ShadedMat) +void STKInstancedSceneNode::initinstancedvaostate(GLMesh &mesh) { mesh.vao = createVAO(mesh.vertex_buffer, mesh.index_buffer, getVTXTYPEFromStride(mesh.Stride)); glGenBuffers(1, &instances_vbo); @@ -99,9 +99,9 @@ void STKInstancedSceneNode::setFirstTimeMaterial() video::E_MATERIAL_TYPE type = mb->getMaterial().MaterialType; GLMesh &mesh = GLmeshes[i]; - GeometricMaterial GeometricType = MaterialTypeToGeometricMaterial(type, mb->getVertexType()); - ShadedMaterial ShadedType = MaterialTypeToShadedMaterial(type, mesh.textures, mb->getVertexType()); - initinstancedvaostate(mesh, GeometricType, ShadedType); + GeometricMaterial GeometricType;// = MaterialTypeToGeometricMaterial(type, mb->getVertexType()); + ShadedMaterial ShadedType;// = MaterialTypeToShadedMaterial(type, mesh.textures, mb->getVertexType()); + initinstancedvaostate(mesh); GeometricMesh[GeometricType].push_back(&mesh); ShadedMesh[ShadedType].push_back(&mesh); } diff --git a/src/graphics/stkinstancedscenenode.hpp b/src/graphics/stkinstancedscenenode.hpp index 19f37abf3..c626415de 100644 --- a/src/graphics/stkinstancedscenenode.hpp +++ b/src/graphics/stkinstancedscenenode.hpp @@ -17,7 +17,7 @@ protected: void createGLMeshes(); bool isMaterialInitialized; void setFirstTimeMaterial(); - void initinstancedvaostate(GLMesh &mesh, GeometricMaterial GeoMat, ShadedMaterial ShadedMat); + void initinstancedvaostate(GLMesh &mesh); void cleanGL(); core::vector3df windDir; public: diff --git a/src/graphics/stkmesh.cpp b/src/graphics/stkmesh.cpp index d7bde2d5f..6fa1910d5 100644 --- a/src/graphics/stkmesh.cpp +++ b/src/graphics/stkmesh.cpp @@ -9,37 +9,23 @@ #include "graphics/camera.hpp" #include "modes/world.hpp" -GeometricMaterial MaterialTypeToGeometricMaterial(video::E_MATERIAL_TYPE MaterialType, video::E_VERTEX_TYPE tp) +MeshMaterial MaterialTypeToMeshMaterial(video::E_MATERIAL_TYPE MaterialType, video::E_VERTEX_TYPE tp) { + if (tp == irr_driver->getShader(ES_SPHERE_MAP)) + return MAT_SPHEREMAP; if (MaterialType == irr_driver->getShader(ES_NORMAL_MAP)) - return FPSM_NORMAL_MAP; + return MAT_NORMAL_MAP; else if (MaterialType == irr_driver->getShader(ES_OBJECTPASS_REF) || MaterialType == video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF) - return FPSM_ALPHA_REF_TEXTURE; + return MAT_ALPHA_REF; else if (MaterialType == irr_driver->getShader(ES_GRASS) || MaterialType == irr_driver->getShader(ES_GRASS_REF)) - return FPSM_GRASS; + return MAT_GRASS; + else if (tp == irr_driver->getShader(ES_SPLATTING)) + return MAT_SPLATTING; + else if (tp == irr_driver->getShader(ES_OBJECT_UNLIT)) + return MAT_UNLIT; else if (tp == video::EVT_2TCOORDS) - return FPSM_DEFAULT_2TCOORD; - assert(tp == video::EVT_STANDARD); - return FPSM_DEFAULT_STANDARD; -} - -ShadedMaterial MaterialTypeToShadedMaterial(video::E_MATERIAL_TYPE type, video::ITexture **textures, video::E_VERTEX_TYPE tp) -{ - if (type == irr_driver->getShader(ES_SPHERE_MAP)) - return SM_SPHEREMAP; - else if (type == irr_driver->getShader(ES_SPLATTING)) - return SM_SPLATTING; - else if (type == irr_driver->getShader(ES_OBJECTPASS_REF) || type == video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF) - return SM_ALPHA_REF_TEXTURE; - else if (type == irr_driver->getShader(ES_GRASS) || type == irr_driver->getShader(ES_GRASS_REF)) - return SM_GRASS; - else if (type == irr_driver->getShader(ES_OBJECT_UNLIT)) - return SM_UNLIT; - else if (tp == video::EVT_2TCOORDS) - return SM_DETAILS; - else if (tp == video::EVT_TANGENTS) - return SM_DEFAULT_TANGENT; - return SM_DEFAULT_STANDARD; + return MAT_DETAIL; + return MAT_DEFAULT; } TransparentMaterial MaterialTypeToTransparentMaterial(video::E_MATERIAL_TYPE type, f32 MaterialTypeParam) @@ -307,22 +293,17 @@ bool isObject(video::E_MATERIAL_TYPE type) return false; } -std::vector > ListDefaultStandardG::Arguments; -std::vector > ListDefault2TCoordG::Arguments; -std::vector > ListAlphaRefG::Arguments; -std::vector > ListNormalG::Arguments; -std::vector > ListGrassG::Arguments; +std::vector > ListMatDefault::Arguments; +std::vector > ListMatAlphaRef::Arguments; +std::vector > ListMatSphereMap::Arguments; +std::vector > ListMatDetails::Arguments; +std::vector > ListMatGrass::Arguments; +std::vector > ListMatUnlit::Arguments; +std::vector > ListMatSplatting::Arguments; +std::vector > ListMatNormalMap::Arguments; -std::vector > ListDefaultStandardSM::Arguments; -std::vector > ListDefaultTangentSM::Arguments; -std::vector > ListAlphaRefSM::Arguments; -std::vector > ListSplattingSM::Arguments; -std::vector > ListSphereMapSM::Arguments; -std::vector > ListUnlitSM::Arguments; -std::vector > ListDetailSM::Arguments; std::vector > ListBlendTransparent::Arguments; std::vector > ListAdditiveTransparent::Arguments; -std::vector > ListDisplacement::Arguments; std::vector > ListBlendTransparentFog::Arguments; std::vector > ListAdditiveTransparentFog::Arguments; -std::vector > ListGrassSM::Arguments; +std::vector > ListDisplacement::Arguments; \ No newline at end of file diff --git a/src/graphics/stkmesh.hpp b/src/graphics/stkmesh.hpp index bd6a80f73..2e87d65ed 100644 --- a/src/graphics/stkmesh.hpp +++ b/src/graphics/stkmesh.hpp @@ -12,6 +12,7 @@ #include enum GeometricMaterial + { FPSM_DEFAULT_STANDARD, FPSM_DEFAULT_2TCOORD, @@ -34,6 +35,19 @@ enum ShadedMaterial SM_COUNT }; +enum MeshMaterial +{ + MAT_DEFAULT, + MAT_ALPHA_REF, + MAT_NORMAL_MAP, + MAT_GRASS, + MAT_SPHEREMAP, + MAT_SPLATTING, + MAT_UNLIT, + MAT_DETAIL, + MAT_COUNT +}; + enum TransparentMaterial { TM_DEFAULT, @@ -69,85 +83,54 @@ bool isObject(video::E_MATERIAL_TYPE type); core::vector3df getWind(); // Pass 1 shader (ie shaders that outputs normals and depth) -class ListDefaultStandardG +class ListMatDefault +{ +public: + static std::vector > Arguments; +}; + +class ListMatAlphaRef +{ +public: + static std::vector > Arguments; +}; + +class ListMatNormalMap { public: static std::vector > Arguments; }; -class ListDefault2TCoordG +class ListMatGrass +{ +public: + static std::vector > Arguments; +}; + +class ListMatSphereMap +{ +public: + static std::vector > Arguments; +}; + +class ListMatSplatting +{ +public: + static std::vector > Arguments; +}; + +class ListMatUnlit { public: static std::vector > Arguments; }; -class ListAlphaRefG +class ListMatDetails { public: - static std::vector > Arguments; + static std::vector > Arguments; }; -class ListNormalG -{ -public: - static std::vector > Arguments; -}; - -class ListGrassG -{ -public: - static std::vector > Arguments; -}; - - -// Pass 2 shader (ie shaders that outputs final color) -class ListDefaultStandardSM -{ -public: - static std::vector > Arguments; -}; - -class ListDefaultTangentSM -{ -public: - static std::vector > Arguments; -}; - -class ListAlphaRefSM -{ -public: - static std::vector > Arguments; -}; - -class ListSphereMapSM -{ -public: - static std::vector > Arguments; -}; - -class ListSplattingSM -{ -public: - static std::vector > Arguments; -}; - -class ListUnlitSM -{ -public: - static std::vector > Arguments; -}; - -class ListDetailSM -{ -public: - static std::vector > Arguments; -}; - -class ListGrassSM -{ -public: - static std::vector > Arguments; -}; class ListBlendTransparent { @@ -182,8 +165,7 @@ public: // Forward pass (for transparents meshes) void drawBubble(const GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix); -GeometricMaterial MaterialTypeToGeometricMaterial(video::E_MATERIAL_TYPE, video::E_VERTEX_TYPE); -ShadedMaterial MaterialTypeToShadedMaterial(video::E_MATERIAL_TYPE, irr::video::ITexture **textures, video::E_VERTEX_TYPE tp); +MeshMaterial MaterialTypeToMeshMaterial(video::E_MATERIAL_TYPE, video::E_VERTEX_TYPE); TransparentMaterial MaterialTypeToTransparentMaterial(video::E_MATERIAL_TYPE, f32 MaterialTypeParam); #endif // STKMESH_H diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index 1825e5434..1f8cfa6ea 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -78,8 +78,7 @@ void STKMeshSceneNode::setFirstTimeMaterial() else { assert(!isDisplacement); - GeometricMaterial GeometricType = MaterialTypeToGeometricMaterial(type, mb->getVertexType()); - ShadedMaterial ShadedType = MaterialTypeToShadedMaterial(type, mesh.textures, mb->getVertexType()); + MeshMaterial MatType = MaterialTypeToMeshMaterial(type, mb->getVertexType()); if (immediate_draw) { fillLocalBuffer(mesh, mb); @@ -87,10 +86,7 @@ void STKMeshSceneNode::setFirstTimeMaterial() glBindVertexArray(0); } else - { - GeometricMesh[GeometricType].push_back(&mesh); - ShadedMesh[ShadedType].push_back(&mesh); - } + MeshSolidMaterials[MatType].push_back(&mesh); } if (!immediate_draw) @@ -117,10 +113,8 @@ void STKMeshSceneNode::cleanGLMeshes() glDeleteBuffers(1, &(mesh.index_buffer)); } GLmeshes.clear(); - for (unsigned i = 0; i < FPSM_COUNT; i++) - GeometricMesh[i].clearWithoutDeleting(); - for (unsigned i = 0; i < SM_COUNT; i++) - ShadedMesh[i].clearWithoutDeleting(); + for (unsigned i = 0; i < MAT_COUNT; i++) + MeshSolidMaterials[i].clearWithoutDeleting(); } void STKMeshSceneNode::setMesh(irr::scene::IMesh* mesh) @@ -215,53 +209,77 @@ void STKMeshSceneNode::render() GLmeshes[i].TextureMatrix = getMaterial(i).getTextureMatrix(0); } - if (irr_driver->getPhase() == SOLID_NORMAL_AND_DEPTH_PASS) + if (irr_driver->getPhase() == SOLID_NORMAL_AND_DEPTH_PASS && immediate_draw) { core::matrix4 invmodel; AbsoluteTransformation.getInverse(invmodel); - if (immediate_draw) + + glDisable(GL_CULL_FACE); + if (update_each_frame) + updatevbo(); + glUseProgram(MeshShader::ObjectPass1Shader::getInstance()->Program); + // Only untextured + for (unsigned i = 0; i < GLmeshes.size(); i++) { - glDisable(GL_CULL_FACE); - if (update_each_frame) - updatevbo(); - glUseProgram(MeshShader::ObjectPass1Shader::getInstance()->Program); - // Only untextured - for (unsigned i = 0; i < GLmeshes.size(); i++) - { - irr_driver->IncreaseObjectCount(); - GLMesh &mesh = GLmeshes[i]; - GLenum ptype = mesh.PrimitiveType; - GLenum itype = mesh.IndexType; - size_t count = mesh.IndexCount; + irr_driver->IncreaseObjectCount(); + GLMesh &mesh = GLmeshes[i]; + GLenum ptype = mesh.PrimitiveType; + GLenum itype = mesh.IndexType; + size_t count = mesh.IndexCount; - MeshShader::ObjectPass1Shader::getInstance()->setUniforms(AbsoluteTransformation, invmodel); - assert(mesh.vao); - glBindVertexArray(mesh.vao); - glDrawElements(ptype, count, itype, 0); - glBindVertexArray(0); - } - glEnable(GL_CULL_FACE); - return; + MeshShader::ObjectPass1Shader::getInstance()->setUniforms(AbsoluteTransformation, invmodel); + assert(mesh.vao); + glBindVertexArray(mesh.vao); + glDrawElements(ptype, count, itype, 0); + glBindVertexArray(0); } + glEnable(GL_CULL_FACE); + return; + } + if (irr_driver->getPhase() == SOLID_NORMAL_AND_DEPTH_PASS || irr_driver->getPhase() == SHADOW_PASS) + { + core::matrix4 invmodel; + AbsoluteTransformation.getInverse(invmodel); GLMesh* mesh; - for_in(mesh, GeometricMesh[FPSM_DEFAULT_STANDARD]) - ListDefaultStandardG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel)); + for_in(mesh, MeshSolidMaterials[MAT_DEFAULT]) + ListMatDefault::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - for_in(mesh, GeometricMesh[FPSM_DEFAULT_2TCOORD]) - ListDefault2TCoordG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel)); + for_in(mesh, MeshSolidMaterials[MAT_ALPHA_REF]) + ListMatAlphaRef::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - for_in(mesh, GeometricMesh[FPSM_ALPHA_REF_TEXTURE]) - ListAlphaRefG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix)); + for_in(mesh, MeshSolidMaterials[MAT_SPHEREMAP]) + ListMatSphereMap::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + + for_in(mesh, MeshSolidMaterials[MAT_DETAIL]) + ListMatDetails::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + + windDir = getWind(); + for_in(mesh, MeshSolidMaterials[MAT_GRASS]) + ListMatGrass::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, windDir, irr_driver->getSceneManager()->getAmbientLight())); + + for_in(mesh, MeshSolidMaterials[MAT_UNLIT]) + ListMatUnlit::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY)); + + for_in(mesh, MeshSolidMaterials[MAT_SPLATTING]) + ListMatSplatting::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight())); + + /* for_in(mesh, GeometricMesh[FPSM_NORMAL_MAP]) ListNormalG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel)); - windDir = getWind(); - for_in(mesh, GeometricMesh[FPSM_GRASS]) - ListGrassG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, windDir)); +*/ + + /* + + + for_in(mesh, ShadedMesh[SM_DEFAULT_TANGENT]) + ListDefaultTangentSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + + */ return; } @@ -297,31 +315,6 @@ void STKMeshSceneNode::render() return; } - GLMesh* mesh; - for_in(mesh, ShadedMesh[SM_DEFAULT_STANDARD]) - ListDefaultStandardSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - - for_in(mesh, ShadedMesh[SM_DEFAULT_TANGENT]) - ListDefaultTangentSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - - for_in(mesh, ShadedMesh[SM_ALPHA_REF_TEXTURE]) - ListAlphaRefSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - - for_in(mesh, ShadedMesh[SM_SPHEREMAP]) - ListSphereMapSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight())); - - for_in(mesh, ShadedMesh[SM_SPLATTING]) - ListSplattingSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, irr_driver->getSceneManager()->getAmbientLight())); - - for_in(mesh, ShadedMesh[SM_UNLIT]) - ListUnlitSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation)); - - for_in(mesh, ShadedMesh[SM_DETAILS]) - ListDetailSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, irr_driver->getSceneManager()->getAmbientLight())); - - for_in(mesh, ShadedMesh[SM_GRASS]) - ListGrassSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, windDir, irr_driver->getSceneManager()->getAmbientLight())); - return; } diff --git a/src/graphics/stkmeshscenenode.hpp b/src/graphics/stkmeshscenenode.hpp index 23b1af56e..8cee51772 100644 --- a/src/graphics/stkmeshscenenode.hpp +++ b/src/graphics/stkmeshscenenode.hpp @@ -7,8 +7,7 @@ class STKMeshSceneNode : public irr::scene::CMeshSceneNode { protected: - PtrVector GeometricMesh[FPSM_COUNT]; - PtrVector ShadedMesh[SM_COUNT]; + PtrVector MeshSolidMaterials[MAT_COUNT]; PtrVector TransparentMesh[TM_COUNT]; std::vector GLmeshes; core::matrix4 ModelViewProjectionMatrix; From 55ab93a4e6e66405e11a76fab084897be4fc551a Mon Sep 17 00:00:00 2001 From: vlj Date: Wed, 16 Jul 2014 23:44:16 +0200 Subject: [PATCH 25/93] More work. --- src/graphics/render_geometry.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index bb2b2debe..c99ead6ee 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -424,9 +424,11 @@ void drawRSM(const core::matrix4 & rsm_matrix, const std::vector Texture glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < t.size(); i++) { - const GLMesh *mesh = std::get<0>(t[i]); + GLMesh *mesh = std::get<0>(t[i]); for (unsigned j = 0; j < TextureUnits.size(); j++) { + if (!mesh->textures[j]) + mesh->textures[j] = getUnicolorTexture(video::SColor(255, 255, 255, 255)); compressTexture(mesh->textures[j], true); setTexture(TextureUnits[j], getTextureGLuint(mesh->textures[j]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); } @@ -446,8 +448,6 @@ void IrrDriver::renderShadows() glClear(GL_DEPTH_BUFFER_BIT); glDrawBuffer(GL_NONE); - glBindBufferBase(GL_UNIFORM_BUFFER, 0, SharedObject::ViewProjectionMatrixesUBO); - irr_driver->setPhase(SHADOW_PASS); ListMatDefault::Arguments.clear(); ListMatAlphaRef::Arguments.clear(); @@ -475,6 +475,9 @@ void IrrDriver::renderShadows() m_rtts->getRSM().Bind(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); -// drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListDefaultStandardG::Arguments); -// drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListDefault2TCoordG::Arguments); + drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListMatDefault::Arguments); + drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListMatSphereMap::Arguments); + drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListMatUnlit::Arguments); + drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListMatDetails::Arguments); + drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListMatSplatting::Arguments); } From e6bade24adad1b3ea0a7f9a88a2882676a6fcc4d Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 00:10:34 +0200 Subject: [PATCH 26/93] Fix RSM --- src/graphics/render_geometry.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index c99ead6ee..25dc09b5f 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -442,6 +442,7 @@ void IrrDriver::renderShadows() glDepthMask(GL_TRUE); glEnable(GL_DEPTH_TEST); glDisable(GL_BLEND); + glDisable(GL_ALPHA_TEST); glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(1.5, 0.); m_rtts->getShadowFBO().Bind(); From 40a7ab0780d55bf4dfcdec4a0e3765f204f0aa1a Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 00:12:54 +0200 Subject: [PATCH 27/93] Raise one of ssao tolerance value. --- data/shaders/ssao.frag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/shaders/ssao.frag b/data/shaders/ssao.frag index 7ecd3dbaa..c31e34f0b 100644 --- a/data/shaders/ssao.frag +++ b/data/shaders/ssao.frag @@ -26,7 +26,7 @@ out float AO; const float sigma = 1.; const float tau = 7.; -const float beta = 0.001; +const float beta = 0.002; const float epsilon = .00001; const float radius = 1.; const float k = 1.5; From f5a5988967c787f623208de1062b81a62f4fb399 Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 00:24:09 +0200 Subject: [PATCH 28/93] Fix instanced and reenable displace. --- src/graphics/render_geometry.cpp | 4 +- src/graphics/stkanimatedmesh.hpp | 2 +- src/graphics/stkinstancedscenenode.cpp | 66 +++++++++++++------------- src/graphics/stkinstancedscenenode.hpp | 3 +- src/graphics/stkmesh.hpp | 24 ---------- 5 files changed, 36 insertions(+), 63 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index 25dc09b5f..69c06d9c8 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -306,7 +306,7 @@ void IrrDriver::renderTransparent() glStencilFunc(GL_ALWAYS, 1, 0xFF); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); -/* glBindVertexArray(getVAO(EVT_2TCOORDS)); + glBindVertexArray(getVAO(EVT_2TCOORDS)); // Generate displace mask // Use RTT_TMP4 as displace mask irr_driver->getFBO(FBO_TMP1_WITH_DS).Bind(); @@ -360,7 +360,7 @@ void IrrDriver::renderTransparent() irr_driver->getFBO(FBO_COLORS).Bind(); glStencilFunc(GL_EQUAL, 1, 0xFF); m_post_processing->renderPassThrough(m_rtts->getRenderTarget(RTT_DISPLACE)); - glDisable(GL_STENCIL_TEST);*/ + glDisable(GL_STENCIL_TEST); } diff --git a/src/graphics/stkanimatedmesh.hpp b/src/graphics/stkanimatedmesh.hpp index 745554c15..c5c113da0 100644 --- a/src/graphics/stkanimatedmesh.hpp +++ b/src/graphics/stkanimatedmesh.hpp @@ -11,7 +11,7 @@ class STKAnimatedMesh : public irr::scene::CAnimatedMeshSceneNode { protected: bool firstTime; - PtrVector MeshSolidMaterial[FPSM_COUNT]; + PtrVector MeshSolidMaterial[MAT_COUNT]; PtrVector TransparentMesh[TM_COUNT]; std::vector GLmeshes; core::matrix4 ModelViewProjectionMatrix; diff --git a/src/graphics/stkinstancedscenenode.cpp b/src/graphics/stkinstancedscenenode.cpp index 7a9dc9501..27ae172df 100644 --- a/src/graphics/stkinstancedscenenode.cpp +++ b/src/graphics/stkinstancedscenenode.cpp @@ -99,11 +99,9 @@ void STKInstancedSceneNode::setFirstTimeMaterial() video::E_MATERIAL_TYPE type = mb->getMaterial().MaterialType; GLMesh &mesh = GLmeshes[i]; - GeometricMaterial GeometricType;// = MaterialTypeToGeometricMaterial(type, mb->getVertexType()); - ShadedMaterial ShadedType;// = MaterialTypeToShadedMaterial(type, mesh.textures, mb->getVertexType()); + MeshMaterial MatType = MaterialTypeToMeshMaterial(type, mb->getVertexType()); initinstancedvaostate(mesh); - GeometricMesh[GeometricType].push_back(&mesh); - ShadedMesh[ShadedType].push_back(&mesh); + MeshSolidMaterial[MatType].push_back(&mesh); } isMaterialInitialized = true; } @@ -224,7 +222,7 @@ static void drawFSPMGrass(GLMesh &mesh, const core::vector3df &windDir, size_t i glDrawElementsInstanced(ptype, count, itype, 0, instance_count); } -static void drawSMDefault(GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix, size_t instance_count) +static void drawSMDefault(GLMesh &mesh, size_t instance_count) { irr_driver->IncreaseObjectCount(); GLenum ptype = mesh.PrimitiveType; @@ -249,7 +247,7 @@ static void drawSMDefault(GLMesh &mesh, const core::matrix4 &ModelViewProjection glDrawElementsInstanced(ptype, count, itype, 0, instance_count); } -static void drawSMAlphaRefTexture(GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix, size_t instance_count) +static void drawSMAlphaRefTexture(GLMesh &mesh, size_t instance_count) { irr_driver->IncreaseObjectCount(); GLenum ptype = mesh.PrimitiveType; @@ -275,7 +273,7 @@ static void drawSMAlphaRefTexture(GLMesh &mesh, const core::matrix4 &ModelViewPr glDrawElementsInstanced(ptype, count, itype, 0, instance_count); } -static void drawSMGrass(GLMesh &mesh, const core::matrix4 &ModelViewProjectionMatrix, const core::vector3df &windDir, size_t instance_count) +static void drawSMGrass(GLMesh &mesh, const core::vector3df &windDir, size_t instance_count) { irr_driver->IncreaseObjectCount(); GLenum ptype = mesh.PrimitiveType; @@ -318,59 +316,59 @@ void STKInstancedSceneNode::render() ModelViewProjectionMatrix = irr_driver->getProjMatrix(); ModelViewProjectionMatrix *= irr_driver->getViewMatrix(); - if (!GeometricMesh[FPSM_DEFAULT_STANDARD].empty()) + if (!MeshSolidMaterial[MAT_DEFAULT].empty()) glUseProgram(MeshShader::InstancedObjectPass1ShaderInstance->Program); - for (unsigned i = 0; i < GeometricMesh[FPSM_DEFAULT_STANDARD].size(); i++) - drawFSPMDefault(*GeometricMesh[FPSM_DEFAULT_STANDARD][i], instance_pos.size() / 9); + for (unsigned i = 0; i < MeshSolidMaterial[MAT_DEFAULT].size(); i++) + drawFSPMDefault(*MeshSolidMaterial[MAT_DEFAULT][i], instance_pos.size() / 9); - if (!GeometricMesh[FPSM_ALPHA_REF_TEXTURE].empty()) + if (!MeshSolidMaterial[MAT_ALPHA_REF].empty()) glUseProgram(MeshShader::InstancedObjectRefPass1ShaderInstance->Program); - for (unsigned i = 0; i < GeometricMesh[FPSM_ALPHA_REF_TEXTURE].size(); i++) - drawFSPMAlphaRefTexture(*GeometricMesh[FPSM_ALPHA_REF_TEXTURE][i], instance_pos.size() / 9); + for (unsigned i = 0; i < MeshSolidMaterial[MAT_ALPHA_REF].size(); i++) + drawFSPMAlphaRefTexture(*MeshSolidMaterial[MAT_ALPHA_REF][i], instance_pos.size() / 9); windDir = getWind(); - if (!GeometricMesh[FPSM_GRASS].empty()) + if (!MeshSolidMaterial[MAT_GRASS].empty()) glUseProgram(MeshShader::InstancedGrassPass1ShaderInstance->Program); - for (unsigned i = 0; i < GeometricMesh[FPSM_GRASS].size(); i++) - drawFSPMGrass(*GeometricMesh[FPSM_GRASS][i], windDir, instance_pos.size() / 9); + for (unsigned i = 0; i < MeshSolidMaterial[MAT_GRASS].size(); i++) + drawFSPMGrass(*MeshSolidMaterial[MAT_GRASS][i], windDir, instance_pos.size() / 9); return; } if (irr_driver->getPhase() == SOLID_LIT_PASS) { - if (!ShadedMesh[SM_DEFAULT_STANDARD].empty()) + if (!MeshSolidMaterial[MAT_DEFAULT].empty()) glUseProgram(MeshShader::InstancedObjectPass2ShaderInstance->Program); - for (unsigned i = 0; i < ShadedMesh[SM_DEFAULT_STANDARD].size(); i++) - drawSMDefault(*ShadedMesh[SM_DEFAULT_STANDARD][i], ModelViewProjectionMatrix, instance_pos.size() / 9); + for (unsigned i = 0; i < MeshSolidMaterial[MAT_DEFAULT].size(); i++) + drawSMDefault(*MeshSolidMaterial[MAT_DEFAULT][i], instance_pos.size() / 9); - if (!ShadedMesh[SM_ALPHA_REF_TEXTURE].empty()) + if (!MeshSolidMaterial[MAT_ALPHA_REF].empty()) glUseProgram(MeshShader::InstancedObjectRefPass2ShaderInstance->Program); - for (unsigned i = 0; i < ShadedMesh[SM_ALPHA_REF_TEXTURE].size(); i++) - drawSMAlphaRefTexture(*ShadedMesh[SM_ALPHA_REF_TEXTURE][i], ModelViewProjectionMatrix, instance_pos.size() / 9); + for (unsigned i = 0; i < MeshSolidMaterial[MAT_ALPHA_REF].size(); i++) + drawSMAlphaRefTexture(*MeshSolidMaterial[MAT_ALPHA_REF][i], instance_pos.size() / 9); - if (!ShadedMesh[SM_GRASS].empty()) + if (!MeshSolidMaterial[MAT_GRASS].empty()) glUseProgram(MeshShader::InstancedGrassPass2ShaderInstance->Program); - for (unsigned i = 0; i < ShadedMesh[SM_GRASS].size(); i++) - drawSMGrass(*ShadedMesh[SM_GRASS][i], ModelViewProjectionMatrix, windDir, instance_pos.size() / 9); + for (unsigned i = 0; i < MeshSolidMaterial[MAT_GRASS].size(); i++) + drawSMGrass(*MeshSolidMaterial[MAT_GRASS][i], windDir, instance_pos.size() / 9); return; } if (irr_driver->getPhase() == SHADOW_PASS) { - if (!GeometricMesh[FPSM_DEFAULT_STANDARD].empty()) + if (!MeshSolidMaterial[MAT_DEFAULT].empty()) glUseProgram(MeshShader::InstancedShadowShaderInstance->Program); - for (unsigned i = 0; i < GeometricMesh[FPSM_DEFAULT_STANDARD].size(); i++) - drawShadowDefault(*GeometricMesh[FPSM_DEFAULT_STANDARD][i], instance_pos.size() / 9); + for (unsigned i = 0; i < MeshSolidMaterial[MAT_DEFAULT].size(); i++) + drawShadowDefault(*MeshSolidMaterial[MAT_DEFAULT][i], instance_pos.size() / 9); - if (!GeometricMesh[FPSM_ALPHA_REF_TEXTURE].empty()) + if (!MeshSolidMaterial[MAT_ALPHA_REF].empty()) glUseProgram(MeshShader::InstancedRefShadowShaderInstance->Program); - for (unsigned i = 0; i < GeometricMesh[FPSM_ALPHA_REF_TEXTURE].size(); i++) - drawShadowAlphaRefTexture(*GeometricMesh[FPSM_ALPHA_REF_TEXTURE][i], instance_pos.size() / 9); + for (unsigned i = 0; i < MeshSolidMaterial[MAT_ALPHA_REF].size(); i++) + drawShadowAlphaRefTexture(*MeshSolidMaterial[MAT_ALPHA_REF][i], instance_pos.size() / 9); - if (!GeometricMesh[FPSM_GRASS].empty()) + if (!MeshSolidMaterial[MAT_GRASS].empty()) glUseProgram(MeshShader::InstancedGrassShadowShaderInstance->Program); - for (unsigned i = 0; i < GeometricMesh[FPSM_GRASS].size(); i++) - drawShadowGrass(*GeometricMesh[FPSM_GRASS][i], windDir, instance_pos.size() / 9); + for (unsigned i = 0; i < MeshSolidMaterial[MAT_GRASS].size(); i++) + drawShadowGrass(*MeshSolidMaterial[MAT_GRASS][i], windDir, instance_pos.size() / 9); return; } } diff --git a/src/graphics/stkinstancedscenenode.hpp b/src/graphics/stkinstancedscenenode.hpp index c626415de..5d9bbb784 100644 --- a/src/graphics/stkinstancedscenenode.hpp +++ b/src/graphics/stkinstancedscenenode.hpp @@ -8,8 +8,7 @@ class STKInstancedSceneNode : public irr::scene::CMeshSceneNode { protected: int m_ref_count; - std::vector GeometricMesh[FPSM_COUNT]; - std::vector ShadedMesh[SM_COUNT]; + std::vector MeshSolidMaterial[MAT_COUNT]; std::vector GLmeshes; std::vector instance_pos; core::matrix4 ModelViewProjectionMatrix, TransposeInverseModelView; diff --git a/src/graphics/stkmesh.hpp b/src/graphics/stkmesh.hpp index 2e87d65ed..5d8774851 100644 --- a/src/graphics/stkmesh.hpp +++ b/src/graphics/stkmesh.hpp @@ -11,30 +11,6 @@ #include #include -enum GeometricMaterial - -{ - FPSM_DEFAULT_STANDARD, - FPSM_DEFAULT_2TCOORD, - FPSM_ALPHA_REF_TEXTURE, - FPSM_NORMAL_MAP, - FPSM_GRASS, - FPSM_COUNT -}; - -enum ShadedMaterial -{ - SM_DEFAULT_STANDARD, - SM_DEFAULT_TANGENT, - SM_ALPHA_REF_TEXTURE, - SM_SPHEREMAP, - SM_SPLATTING, - SM_GRASS, - SM_UNLIT, - SM_DETAILS, - SM_COUNT -}; - enum MeshMaterial { MAT_DEFAULT, From 44bce402e37d10d293f57c31a4ab64b3ef8ad8c8 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Wed, 16 Jul 2014 18:34:59 -0400 Subject: [PATCH 29/93] clang fixes --- src/graphics/render_geometry.cpp | 39 ++++++++++++++++++++------------ src/utils/tuple.hpp | 11 ++++++--- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index e33aad4ff..f61cb2efb 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -63,7 +63,7 @@ void apply_instance(const T *Shader, const STK::Tuple &arg) template void renderMeshes1stPass(const std::vector &TexUnits, std::vector > &meshes) { - glUseProgram(Shader::getInstance()->Program); + glUseProgram(Shader::getInstance()->Program); glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < meshes.size(); i++) { @@ -82,7 +82,7 @@ void renderMeshes1stPass(const std::vector &TexUnits, std::vector(), meshes[i]); + apply_instance(Shader::getInstance(), meshes[i]); } } @@ -111,11 +111,12 @@ void IrrDriver::renderSolidFirstPass() { ScopedGPUTimer Timer(getGPUTimer(Q_SOLID_PASS1)); - renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListDefaultStandardG::Arguments); - renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListDefault2TCoordG::Arguments); - renderMeshes1stPass({ MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex }, ListAlphaRefG::Arguments); - renderMeshes1stPass({ MeshShader::NormalMapShader::getInstance()->TU_glossy, MeshShader::NormalMapShader::getInstance()->TU_normalmap }, ListNormalG::Arguments); - renderMeshes1stPass({ MeshShader::GrassPass1Shader::getInstance()->TU_tex }, ListGrassG::Arguments); + renderMeshes1stPass(std::vector({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }), ListDefaultStandardG::Arguments); + renderMeshes1stPass(std::vector({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }), ListDefault2TCoordG::Arguments); + renderMeshes1stPass(std::vector({ MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex }), ListAlphaRefG::Arguments); + renderMeshes1stPass(std::vector({ MeshShader::NormalMapShader::getInstance()->TU_glossy, + MeshShader::NormalMapShader::getInstance()->TU_normalmap }), ListNormalG::Arguments); + renderMeshes1stPass(std::vector({ MeshShader::GrassPass1Shader::getInstance()->TU_tex }), ListGrassG::Arguments); } } @@ -195,14 +196,22 @@ void IrrDriver::renderSolidSecondPass() m_scene_manager->drawAll(scene::ESNRP_SOLID); - renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, { MeshShader::ObjectPass2ShaderInstance->TU_Albedo }, ListDefaultStandardSM::Arguments); - renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, { MeshShader::ObjectPass2ShaderInstance->TU_Albedo }, ListDefaultTangentSM::Arguments); - renderMeshes2ndPass(MeshShader::ObjectRefPass2ShaderInstance, { MeshShader::ObjectRefPass2ShaderInstance->TU_Albedo }, ListAlphaRefSM::Arguments); - renderMeshes2ndPass(MeshShader::SphereMapShaderInstance, { MeshShader::SphereMapShaderInstance->TU_tex }, ListSphereMapSM::Arguments); - renderMeshes2ndPass(MeshShader::ObjectUnlitShaderInstance, { MeshShader::ObjectUnlitShaderInstance->TU_tex }, ListUnlitSM::Arguments); - renderMeshes2ndPass(MeshShader::DetailledObjectPass2ShaderInstance, { MeshShader::DetailledObjectPass2ShaderInstance->TU_Albedo, MeshShader::DetailledObjectPass2ShaderInstance->TU_detail }, ListDetailSM::Arguments); - renderMeshes2ndPass(MeshShader::SplattingShaderInstance, { 8, MeshShader::SplattingShaderInstance->TU_tex_layout, MeshShader::SplattingShaderInstance->TU_tex_detail0, MeshShader::SplattingShaderInstance->TU_tex_detail1, MeshShader::SplattingShaderInstance->TU_tex_detail2, MeshShader::SplattingShaderInstance->TU_tex_detail3 }, ListSplattingSM::Arguments); - renderMeshes2ndPass(MeshShader::GrassPass2ShaderInstance, { MeshShader::GrassPass2ShaderInstance->TU_Albedo }, ListGrassSM::Arguments); + renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, std::vector({ MeshShader::ObjectPass2ShaderInstance->TU_Albedo }), ListDefaultStandardSM::Arguments); + renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, std::vector({ MeshShader::ObjectPass2ShaderInstance->TU_Albedo }), ListDefaultTangentSM::Arguments); + renderMeshes2ndPass(MeshShader::ObjectRefPass2ShaderInstance, std::vector({ (GLuint)MeshShader::ObjectRefPass2ShaderInstance->TU_Albedo }, ListAlphaRefSM::Arguments); + renderMeshes2ndPass(MeshShader::SphereMapShaderInstance, std::vector({ MeshShader::SphereMapShaderInstance->TU_tex }), ListSphereMapSM::Arguments); + renderMeshes2ndPass(MeshShader::ObjectUnlitShaderInstance, std::vector({ MeshShader::ObjectUnlitShaderInstance->TU_tex }), ListUnlitSM::Arguments); + renderMeshes2ndPass(MeshShader::DetailledObjectPass2ShaderInstance, std::vector({ MeshShader::DetailledObjectPass2ShaderInstance->TU_Albedo, MeshShader::DetailledObjectPass2ShaderInstance->TU_detail }), ListDetailSM::Arguments); + renderMeshes2ndPass(MeshShader::SplattingShaderInstance, + std::vector({ + (GLuint)8, + (GLuint)MeshShader::SplattingShaderInstance->TU_tex_layout, + (GLuint)MeshShader::SplattingShaderInstance->TU_tex_detail0, + (GLuint)MeshShader::SplattingShaderInstance->TU_tex_detail1, + (GLuint)MeshShader::SplattingShaderInstance->TU_tex_detail2, + (GLuint)MeshShader::SplattingShaderInstance->TU_tex_detail3 }), + ListSplattingSM::Arguments); + renderMeshes2ndPass(MeshShader::GrassPass2ShaderInstance, std::vector({ MeshShader::GrassPass2ShaderInstance->TU_Albedo }), ListGrassSM::Arguments); } } diff --git a/src/utils/tuple.hpp b/src/utils/tuple.hpp index 3583da478..007bebbee 100644 --- a/src/utils/tuple.hpp +++ b/src/utils/tuple.hpp @@ -54,13 +54,18 @@ namespace STK { } template inline - typename const tuple_element<_Index, Tuple<_Types...>>::type - tuple_get(const Tuple<_Types...>& _Tuple) + typename tuple_element<_Index, Tuple<_Types...>>::type tuple_get(const Tuple<_Types...>& _Tuple) { typedef typename tuple_element<_Index, Tuple<_Types...>>::_Ttype _Ttype; return (((_Ttype&)_Tuple)._Elem); } - + + template inline + Tuple make_tuple(T... values) + { + return Tuple(values...); + } + template inline Tuple make_tuple(T... values) { From be55a1a1c6303f19560bf76113ede6ae1f1eb826 Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 00:36:10 +0200 Subject: [PATCH 30/93] Reenable normal map material. --- src/graphics/render_geometry.cpp | 4 +++- src/graphics/stkmesh.cpp | 2 +- src/graphics/stkmesh.hpp | 2 +- src/graphics/stkmeshscenenode.cpp | 16 ++-------------- 4 files changed, 7 insertions(+), 17 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index 69c06d9c8..aa6799cdd 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -168,7 +168,7 @@ void IrrDriver::renderSolidFirstPass() renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListMatSplatting::Arguments); renderMeshes1stPass({ MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex }, ListMatAlphaRef::Arguments); renderMeshes1stPass({ MeshShader::GrassPass1Shader::getInstance()->TU_tex }, ListMatGrass::Arguments); -// renderMeshes1stPass({ MeshShader::NormalMapShader::getInstance()->TU_glossy, MeshShader::NormalMapShader::getInstance()->TU_normalmap }, ListNormalG::Arguments); + renderMeshes1stPass({ MeshShader::NormalMapShader::getInstance()->TU_glossy, MeshShader::NormalMapShader::getInstance()->TU_normalmap }, ListMatNormalMap::Arguments); } } @@ -247,6 +247,7 @@ void IrrDriver::renderSolidSecondPass() renderMeshes2ndPass({ MeshShader::GrassPass2Shader::getInstance()->TU_Albedo }, ListMatGrass::Arguments); renderMeshes2ndPass({ MeshShader::ObjectUnlitShader::getInstance()->TU_tex }, ListMatUnlit::Arguments); renderMeshes2ndPass({ 8, MeshShader::SplattingShader::getInstance()->TU_tex_layout, MeshShader::SplattingShader::getInstance()->TU_tex_detail0, MeshShader::SplattingShader::getInstance()->TU_tex_detail1, MeshShader::SplattingShader::getInstance()->TU_tex_detail2, MeshShader::SplattingShader::getInstance()->TU_tex_detail3 }, ListMatSplatting::Arguments); + renderMeshes2ndPass({ MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo }, ListMatNormalMap::Arguments); } } @@ -465,6 +466,7 @@ void IrrDriver::renderShadows() renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatUnlit::Arguments); renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatDetails::Arguments); renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatSplatting::Arguments); + renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatNormalMap::Arguments); renderShadow(MeshShader::RefShadowShaderInstance, { MeshShader::RefShadowShaderInstance->TU_tex }, ListMatAlphaRef::Arguments); renderShadow(MeshShader::GrassShadowShaderInstance, { MeshShader::GrassShadowShaderInstance->TU_tex }, ListMatGrass::Arguments); diff --git a/src/graphics/stkmesh.cpp b/src/graphics/stkmesh.cpp index 6fa1910d5..155123c95 100644 --- a/src/graphics/stkmesh.cpp +++ b/src/graphics/stkmesh.cpp @@ -300,7 +300,7 @@ std::vector > ListMatGrass::Arguments; std::vector > ListMatUnlit::Arguments; std::vector > ListMatSplatting::Arguments; -std::vector > ListMatNormalMap::Arguments; +std::vector > ListMatNormalMap::Arguments; std::vector > ListBlendTransparent::Arguments; std::vector > ListAdditiveTransparent::Arguments; diff --git a/src/graphics/stkmesh.hpp b/src/graphics/stkmesh.hpp index 5d8774851..ca435130a 100644 --- a/src/graphics/stkmesh.hpp +++ b/src/graphics/stkmesh.hpp @@ -74,7 +74,7 @@ public: class ListMatNormalMap { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListMatGrass diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index 1f8cfa6ea..776cf01c8 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -266,20 +266,8 @@ void STKMeshSceneNode::render() for_in(mesh, MeshSolidMaterials[MAT_SPLATTING]) ListMatSplatting::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight())); - /* - - for_in(mesh, GeometricMesh[FPSM_NORMAL_MAP]) - ListNormalG::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel)); - -*/ - - /* - - - for_in(mesh, ShadedMesh[SM_DEFAULT_TANGENT]) - ListDefaultTangentSM::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); - - */ + for_in(mesh, MeshSolidMaterials[MAT_NORMAL_MAP]) + ListMatNormalMap::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, core::matrix4::EM4CONST_IDENTITY, irr_driver->getSceneManager()->getAmbientLight())); return; } From 6710f61863dd7584aa2ec1a8b61b5512d8ec2236 Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 00:46:17 +0200 Subject: [PATCH 31/93] Do not convert normal map to srgb. --- src/graphics/render_geometry.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index aa6799cdd..c6f23ff3e 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -108,7 +108,7 @@ struct custom_unroll_args template -void renderMeshes1stPass(const std::vector &TexUnits, std::vector > &meshes) +void renderMeshes1stPass(const std::vector > &TexUnits, std::vector > &meshes) { glUseProgram(Shader::template getInstance()->Program); glBindVertexArray(getVAO(VertexType)); @@ -119,8 +119,8 @@ void renderMeshes1stPass(const std::vector &TexUnits, std::vector({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListMatDefault::Arguments); - renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListMatSphereMap::Arguments); - renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListMatUnlit::Arguments); - renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListMatDetails::Arguments); - renderMeshes1stPass({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListMatSplatting::Arguments); - renderMeshes1stPass({ MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex }, ListMatAlphaRef::Arguments); - renderMeshes1stPass({ MeshShader::GrassPass1Shader::getInstance()->TU_tex }, ListMatGrass::Arguments); - renderMeshes1stPass({ MeshShader::NormalMapShader::getInstance()->TU_glossy, MeshShader::NormalMapShader::getInstance()->TU_normalmap }, ListMatNormalMap::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatDefault::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatSphereMap::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatUnlit::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatDetails::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatSplatting::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex, true } }, ListMatAlphaRef::Arguments); + renderMeshes1stPass({ { MeshShader::GrassPass1Shader::getInstance()->TU_tex, true } }, ListMatGrass::Arguments); + renderMeshes1stPass({ { MeshShader::NormalMapShader::getInstance()->TU_glossy, true }, { MeshShader::NormalMapShader::getInstance()->TU_normalmap, false } }, ListMatNormalMap::Arguments); } } From 25c5fb326fb07926e9d23be634cce54791153dce Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 00:56:11 +0200 Subject: [PATCH 32/93] Do not use srgb texture for splatting. --- src/graphics/render_geometry.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index c6f23ff3e..531077e41 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -173,7 +173,7 @@ void IrrDriver::renderSolidFirstPass() } template -void renderMeshes2ndPass(const std::vector &TexUnits, std::vector > &meshes) +void renderMeshes2ndPass(const std::vector > &TexUnits, std::vector > &meshes) { glUseProgram(Shader::template getInstance()->Program); glBindVertexArray(getVAO(VertexType)); @@ -184,8 +184,8 @@ void renderMeshes2ndPass(const std::vector &TexUnits, std::vectorgetLightViz()) { GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA }; @@ -240,14 +240,14 @@ void IrrDriver::renderSolidSecondPass() m_scene_manager->drawAll(scene::ESNRP_SOLID); - renderMeshes2ndPass({ MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo }, ListMatDefault::Arguments); - renderMeshes2ndPass({ MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo }, ListMatAlphaRef::Arguments); - renderMeshes2ndPass({ MeshShader::SphereMapShader::getInstance()->TU_tex }, ListMatSphereMap::Arguments); - renderMeshes2ndPass({ MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail }, ListMatDetails::Arguments); - renderMeshes2ndPass({ MeshShader::GrassPass2Shader::getInstance()->TU_Albedo }, ListMatGrass::Arguments); - renderMeshes2ndPass({ MeshShader::ObjectUnlitShader::getInstance()->TU_tex }, ListMatUnlit::Arguments); - renderMeshes2ndPass({ 8, MeshShader::SplattingShader::getInstance()->TU_tex_layout, MeshShader::SplattingShader::getInstance()->TU_tex_detail0, MeshShader::SplattingShader::getInstance()->TU_tex_detail1, MeshShader::SplattingShader::getInstance()->TU_tex_detail2, MeshShader::SplattingShader::getInstance()->TU_tex_detail3 }, ListMatSplatting::Arguments); - renderMeshes2ndPass({ MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo }, ListMatNormalMap::Arguments); + renderMeshes2ndPass({ { MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true } }, ListMatDefault::Arguments); + renderMeshes2ndPass({ { MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo, true } }, ListMatAlphaRef::Arguments); + renderMeshes2ndPass({ { MeshShader::SphereMapShader::getInstance()->TU_tex, true } }, ListMatSphereMap::Arguments); + renderMeshes2ndPass({ { MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, true }, { MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail, true } }, ListMatDetails::Arguments); + renderMeshes2ndPass({ { MeshShader::GrassPass2Shader::getInstance()->TU_Albedo, true } }, ListMatGrass::Arguments); + renderMeshes2ndPass({ { MeshShader::ObjectUnlitShader::getInstance()->TU_tex, true } }, ListMatUnlit::Arguments); + renderMeshes2ndPass({ { 8, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_layout, false }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail0, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail1, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail2, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail3, true } }, ListMatSplatting::Arguments); + renderMeshes2ndPass({ { MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true } }, ListMatNormalMap::Arguments); } } @@ -274,16 +274,16 @@ void IrrDriver::renderTransparent() if (World::getWorld() && World::getWorld()->isFogEnabled()) { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListBlendTransparentFog::Arguments); +// renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListBlendTransparentFog::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListAdditiveTransparentFog::Arguments); +// renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListAdditiveTransparentFog::Arguments); } else { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListBlendTransparent::Arguments); +// renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListBlendTransparent::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListAdditiveTransparent::Arguments); +// renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListAdditiveTransparent::Arguments); } if (!UserConfigParams::m_dynamic_lights) From 6e4cca81d1dae57618281d5c28d83c1ed9f3f2b3 Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 01:06:17 +0200 Subject: [PATCH 33/93] Fix material identification. --- src/graphics/stkmesh.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/graphics/stkmesh.cpp b/src/graphics/stkmesh.cpp index 155123c95..84134720e 100644 --- a/src/graphics/stkmesh.cpp +++ b/src/graphics/stkmesh.cpp @@ -11,7 +11,7 @@ MeshMaterial MaterialTypeToMeshMaterial(video::E_MATERIAL_TYPE MaterialType, video::E_VERTEX_TYPE tp) { - if (tp == irr_driver->getShader(ES_SPHERE_MAP)) + if (MaterialType == irr_driver->getShader(ES_SPHERE_MAP)) return MAT_SPHEREMAP; if (MaterialType == irr_driver->getShader(ES_NORMAL_MAP)) return MAT_NORMAL_MAP; @@ -19,9 +19,9 @@ MeshMaterial MaterialTypeToMeshMaterial(video::E_MATERIAL_TYPE MaterialType, vid return MAT_ALPHA_REF; else if (MaterialType == irr_driver->getShader(ES_GRASS) || MaterialType == irr_driver->getShader(ES_GRASS_REF)) return MAT_GRASS; - else if (tp == irr_driver->getShader(ES_SPLATTING)) + else if (MaterialType == irr_driver->getShader(ES_SPLATTING)) return MAT_SPLATTING; - else if (tp == irr_driver->getShader(ES_OBJECT_UNLIT)) + else if (MaterialType == irr_driver->getShader(ES_OBJECT_UNLIT)) return MAT_UNLIT; else if (tp == video::EVT_2TCOORDS) return MAT_DETAIL; From 366439bdd0ec0ec93723f3719a8e58a76d191574 Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 01:07:59 +0200 Subject: [PATCH 34/93] Reenable transparents. --- src/graphics/render_geometry.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index 531077e41..ee2eabb07 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -274,16 +274,16 @@ void IrrDriver::renderTransparent() if (World::getWorld() && World::getWorld()->isFogEnabled()) { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); -// renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListBlendTransparentFog::Arguments); + renderMeshes2ndPass({ { MeshShader::TransparentFogShader::getInstance()->TU_tex, true } }, ListBlendTransparentFog::Arguments); glBlendFunc(GL_ONE, GL_ONE); -// renderMeshes2ndPass({ MeshShader::TransparentFogShader::getInstance()->TU_tex }, ListAdditiveTransparentFog::Arguments); + renderMeshes2ndPass({ { MeshShader::TransparentFogShader::getInstance()->TU_tex, true } }, ListAdditiveTransparentFog::Arguments); } else { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); -// renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListBlendTransparent::Arguments); + renderMeshes2ndPass({ { MeshShader::TransparentShader::getInstance()->TU_tex, true } }, ListBlendTransparent::Arguments); glBlendFunc(GL_ONE, GL_ONE); -// renderMeshes2ndPass({ MeshShader::TransparentShader::getInstance()->TU_tex }, ListAdditiveTransparent::Arguments); + renderMeshes2ndPass({ { MeshShader::TransparentShader::getInstance()->TU_tex, true } }, ListAdditiveTransparent::Arguments); } if (!UserConfigParams::m_dynamic_lights) From 14e3ccd0592064840331fcac5c900d442f5f17f4 Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 01:30:45 +0200 Subject: [PATCH 35/93] Duplicate singleton code for abstract/non abstract cases --- src/graphics/render_geometry.cpp | 48 +++++++++++++------------- src/graphics/stkmeshscenenode.cpp | 20 +++++------ src/network/client_network_manager.hpp | 4 +-- src/network/network_interface.hpp | 4 +-- src/network/network_manager.hpp | 4 +-- src/network/network_world.hpp | 4 +-- src/network/protocol_manager.hpp | 4 +-- src/network/server_network_manager.hpp | 4 +-- src/utils/singleton.hpp | 44 +++++++++++++++++++++-- 9 files changed, 87 insertions(+), 49 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index ee2eabb07..20ee1d760 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -110,7 +110,7 @@ struct custom_unroll_args template void renderMeshes1stPass(const std::vector > &TexUnits, std::vector > &meshes) { - glUseProgram(Shader::template getInstance()->Program); + glUseProgram(Shader::getInstance()->Program); glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < meshes.size(); i++) { @@ -129,7 +129,7 @@ void renderMeshes1stPass(const std::vector > &TexUnits, #endif continue; } - custom_unroll_args::template exec(Shader::template getInstance(), meshes[i]); + custom_unroll_args::template exec(Shader::getInstance(), meshes[i]); } } @@ -161,21 +161,21 @@ void IrrDriver::renderSolidFirstPass() { ScopedGPUTimer Timer(getGPUTimer(Q_SOLID_PASS1)); - renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatDefault::Arguments); - renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatSphereMap::Arguments); - renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatUnlit::Arguments); - renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatDetails::Arguments); - renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatSplatting::Arguments); - renderMeshes1stPass({ { MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex, true } }, ListMatAlphaRef::Arguments); - renderMeshes1stPass({ { MeshShader::GrassPass1Shader::getInstance()->TU_tex, true } }, ListMatGrass::Arguments); - renderMeshes1stPass({ { MeshShader::NormalMapShader::getInstance()->TU_glossy, true }, { MeshShader::NormalMapShader::getInstance()->TU_normalmap, false } }, ListMatNormalMap::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatDefault::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatSphereMap::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatUnlit::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatDetails::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true } }, ListMatSplatting::Arguments); + renderMeshes1stPass({ { MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex, true } }, ListMatAlphaRef::Arguments); + renderMeshes1stPass({ { MeshShader::GrassPass1Shader::getInstance()->TU_tex, true } }, ListMatGrass::Arguments); + renderMeshes1stPass({ { MeshShader::NormalMapShader::getInstance()->TU_glossy, true }, { MeshShader::NormalMapShader::getInstance()->TU_normalmap, false } }, ListMatNormalMap::Arguments); } } template void renderMeshes2ndPass(const std::vector > &TexUnits, std::vector > &meshes) { - glUseProgram(Shader::template getInstance()->Program); + glUseProgram(Shader::getInstance()->Program); glBindVertexArray(getVAO(VertexType)); for (unsigned i = 0; i < meshes.size(); i++) { @@ -205,7 +205,7 @@ void renderMeshes2ndPass(const std::vector > &TexUnits, #endif continue; } - custom_unroll_args::template exec(Shader::template getInstance(), meshes[i]); + custom_unroll_args::template exec(Shader::getInstance(), meshes[i]); } } @@ -240,14 +240,14 @@ void IrrDriver::renderSolidSecondPass() m_scene_manager->drawAll(scene::ESNRP_SOLID); - renderMeshes2ndPass({ { MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true } }, ListMatDefault::Arguments); - renderMeshes2ndPass({ { MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo, true } }, ListMatAlphaRef::Arguments); - renderMeshes2ndPass({ { MeshShader::SphereMapShader::getInstance()->TU_tex, true } }, ListMatSphereMap::Arguments); - renderMeshes2ndPass({ { MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, true }, { MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail, true } }, ListMatDetails::Arguments); - renderMeshes2ndPass({ { MeshShader::GrassPass2Shader::getInstance()->TU_Albedo, true } }, ListMatGrass::Arguments); - renderMeshes2ndPass({ { MeshShader::ObjectUnlitShader::getInstance()->TU_tex, true } }, ListMatUnlit::Arguments); - renderMeshes2ndPass({ { 8, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_layout, false }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail0, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail1, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail2, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail3, true } }, ListMatSplatting::Arguments); - renderMeshes2ndPass({ { MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true } }, ListMatNormalMap::Arguments); + renderMeshes2ndPass({ { MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true } }, ListMatDefault::Arguments); + renderMeshes2ndPass({ { MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo, true } }, ListMatAlphaRef::Arguments); + renderMeshes2ndPass({ { MeshShader::SphereMapShader::getInstance()->TU_tex, true } }, ListMatSphereMap::Arguments); + renderMeshes2ndPass({ { MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, true }, { MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail, true } }, ListMatDetails::Arguments); + renderMeshes2ndPass({ { MeshShader::GrassPass2Shader::getInstance()->TU_Albedo, true } }, ListMatGrass::Arguments); + renderMeshes2ndPass({ { MeshShader::ObjectUnlitShader::getInstance()->TU_tex, true } }, ListMatUnlit::Arguments); + renderMeshes2ndPass({ { 8, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_layout, false }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail0, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail1, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail2, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail3, true } }, ListMatSplatting::Arguments); + renderMeshes2ndPass({ { MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true } }, ListMatNormalMap::Arguments); } } @@ -274,16 +274,16 @@ void IrrDriver::renderTransparent() if (World::getWorld() && World::getWorld()->isFogEnabled()) { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass({ { MeshShader::TransparentFogShader::getInstance()->TU_tex, true } }, ListBlendTransparentFog::Arguments); + renderMeshes2ndPass({ { MeshShader::TransparentFogShader::getInstance()->TU_tex, true } }, ListBlendTransparentFog::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass({ { MeshShader::TransparentFogShader::getInstance()->TU_tex, true } }, ListAdditiveTransparentFog::Arguments); + renderMeshes2ndPass({ { MeshShader::TransparentFogShader::getInstance()->TU_tex, true } }, ListAdditiveTransparentFog::Arguments); } else { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass({ { MeshShader::TransparentShader::getInstance()->TU_tex, true } }, ListBlendTransparent::Arguments); + renderMeshes2ndPass({ { MeshShader::TransparentShader::getInstance()->TU_tex, true } }, ListBlendTransparent::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass({ { MeshShader::TransparentShader::getInstance()->TU_tex, true } }, ListAdditiveTransparent::Arguments); + renderMeshes2ndPass({ { MeshShader::TransparentShader::getInstance()->TU_tex, true } }, ListAdditiveTransparent::Arguments); } if (!UserConfigParams::m_dynamic_lights) diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index 776cf01c8..062934e34 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -218,7 +218,7 @@ void STKMeshSceneNode::render() glDisable(GL_CULL_FACE); if (update_each_frame) updatevbo(); - glUseProgram(MeshShader::ObjectPass1Shader::getInstance()->Program); + glUseProgram(MeshShader::ObjectPass1Shader::getInstance()->Program); // Only untextured for (unsigned i = 0; i < GLmeshes.size(); i++) { @@ -282,7 +282,7 @@ void STKMeshSceneNode::render() glDisable(GL_CULL_FACE); if (!spareWhiteTex) spareWhiteTex = getUnicolorTexture(video::SColor(255, 255, 255, 255)); - glUseProgram(MeshShader::ObjectPass2Shader::getInstance()->Program); + glUseProgram(MeshShader::ObjectPass2Shader::getInstance()->Program); // Only untextured for (unsigned i = 0; i < GLmeshes.size(); i++) { @@ -292,8 +292,8 @@ void STKMeshSceneNode::render() GLenum itype = mesh.IndexType; size_t count = mesh.IndexCount; - setTexture(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, getTextureGLuint(spareWhiteTex), GL_NEAREST, GL_NEAREST, false); - MeshShader::ObjectPass2Shader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + setTexture(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, getTextureGLuint(spareWhiteTex), GL_NEAREST, GL_NEAREST, false); + MeshShader::ObjectPass2Shader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); assert(mesh.vao); glBindVertexArray(mesh.vao); glDrawElements(ptype, count, itype, 0); @@ -331,7 +331,7 @@ void STKMeshSceneNode::render() if (World::getWorld() && World::getWorld()->isFogEnabled()) { - glUseProgram(MeshShader::TransparentFogShader::getInstance()->Program); + glUseProgram(MeshShader::TransparentFogShader::getInstance()->Program); for (unsigned i = 0; i < GLmeshes.size(); i++) { GLMesh &mesh = GLmeshes[i]; @@ -355,8 +355,8 @@ void STKMeshSceneNode::render() tmpcol.getBlue() / 255.0f); compressTexture(mesh.textures[0], true); - setTexture(MeshShader::TransparentFogShader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - MeshShader::TransparentFogShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, fogmax, startH, endH, start, end, col); + setTexture(MeshShader::TransparentFogShader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); + MeshShader::TransparentFogShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, fogmax, startH, endH, start, end, col); assert(mesh.vao); glBindVertexArray(mesh.vao); @@ -366,7 +366,7 @@ void STKMeshSceneNode::render() } else { - glUseProgram(MeshShader::TransparentShader::getInstance()->Program); + glUseProgram(MeshShader::TransparentShader::getInstance()->Program); for (unsigned i = 0; i < GLmeshes.size(); i++) { irr_driver->IncreaseObjectCount(); @@ -376,9 +376,9 @@ void STKMeshSceneNode::render() size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); - setTexture(MeshShader::TransparentShader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); + setTexture(MeshShader::TransparentShader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - MeshShader::TransparentShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix); + MeshShader::TransparentShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix); assert(mesh.vao); glBindVertexArray(mesh.vao); glDrawElements(ptype, count, itype, 0); diff --git a/src/network/client_network_manager.hpp b/src/network/client_network_manager.hpp index 422d08dc0..1c54d62dc 100644 --- a/src/network/client_network_manager.hpp +++ b/src/network/client_network_manager.hpp @@ -30,7 +30,7 @@ */ class ClientNetworkManager : public NetworkManager { - friend class Singleton; + friend class AbstractSingleton; public: /*! \brief Get the instance. * This is a utility function to avoid passing templates parameters @@ -38,7 +38,7 @@ class ClientNetworkManager : public NetworkManager */ static ClientNetworkManager* getInstance() { - return Singleton::getInstance(); + return AbstractSingleton::getInstance(); } /*! \brief Initializes network. diff --git a/src/network/network_interface.hpp b/src/network/network_interface.hpp index 6b82e6f41..4da28b430 100644 --- a/src/network/network_interface.hpp +++ b/src/network/network_interface.hpp @@ -33,9 +33,9 @@ /** \class NetworkInterface * \ingroup network */ -class NetworkInterface : public Singleton +class NetworkInterface : public AbstractSingleton { - friend class Singleton; + friend class AbstractSingleton; public: /*! \brief Used to init the network. diff --git a/src/network/network_manager.hpp b/src/network/network_manager.hpp index e660137f9..80cd42210 100644 --- a/src/network/network_manager.hpp +++ b/src/network/network_manager.hpp @@ -43,9 +43,9 @@ * Here are defined some functions that will be specifically implemented by * the ServerNetworkManager and the ClientNetworkManager. */ -class NetworkManager : public Singleton +class NetworkManager : public AbstractSingleton { - friend class Singleton; + friend class AbstractSingleton; public: /** \brief Function to start the Network Manager (start threads) */ virtual void run(); diff --git a/src/network/network_world.hpp b/src/network/network_world.hpp index 3adc90faf..f9b4f820f 100644 --- a/src/network/network_world.hpp +++ b/src/network/network_world.hpp @@ -34,9 +34,9 @@ class Item; /*! \brief Manages the world updates during an online game * This function's update is to be called instead of the normal World update */ -class NetworkWorld : public Singleton +class NetworkWorld : public AbstractSingleton { - friend class Singleton; + friend class AbstractSingleton; public: void update(float dt); diff --git a/src/network/protocol_manager.hpp b/src/network/protocol_manager.hpp index f7507a584..b54b5d0e2 100644 --- a/src/network/protocol_manager.hpp +++ b/src/network/protocol_manager.hpp @@ -102,9 +102,9 @@ typedef struct EventProcessingInfo * frames per second. Then, the management of protocols is thread-safe: any * object can start/pause/stop protocols whithout problems. */ -class ProtocolManager : public Singleton +class ProtocolManager : public AbstractSingleton { - friend class Singleton; + friend class AbstractSingleton; friend void* protocolManagerAsynchronousUpdate(void* data); public: diff --git a/src/network/server_network_manager.hpp b/src/network/server_network_manager.hpp index 1f85e879a..460cf6031 100644 --- a/src/network/server_network_manager.hpp +++ b/src/network/server_network_manager.hpp @@ -27,11 +27,11 @@ class ServerNetworkManager : public NetworkManager { - friend class Singleton; + friend class AbstractSingleton; public: static ServerNetworkManager* getInstance() { - return Singleton::getInstance(); + return AbstractSingleton::getInstance(); } virtual void run(); diff --git a/src/utils/singleton.hpp b/src/utils/singleton.hpp index fa48ca6bd..96ac90023 100644 --- a/src/utils/singleton.hpp +++ b/src/utils/singleton.hpp @@ -31,13 +31,13 @@ * classes. */ template -class Singleton +class AbstractSingleton { protected: /*! \brief Constructor */ - Singleton () { m_singleton = NULL; } + AbstractSingleton() { m_singleton = NULL; } /*! \brief Destructor */ - virtual ~Singleton () + virtual ~AbstractSingleton() { Log::info("Singleton", "Destroyed singleton."); } @@ -80,6 +80,44 @@ class Singleton static T *m_singleton; }; +template T *AbstractSingleton::m_singleton = NULL; + +template +class Singleton +{ +protected: + /*! \brief Constructor */ + Singleton() { m_singleton = NULL; } + /*! \brief Destructor */ + virtual ~Singleton() + { + Log::info("Singleton", "Destroyed singleton."); + } + +public: + /*! \brief Used to get the instance. */ + static T *getInstance() + { + if (m_singleton == NULL) + m_singleton = new T; + return m_singleton; + } + + /*! \brief Used to kill the singleton, if needed. */ + static void kill() + { + if (m_singleton) + { + delete m_singleton; + m_singleton = NULL; + } + } + +private: + static T *m_singleton; +}; + template T *Singleton::m_singleton = NULL; + #endif // SINGLETON_HPP From c4238d208982635b58dfe10d2fdcf041bd602667 Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 01:44:57 +0200 Subject: [PATCH 36/93] Use emplace_back instead of push_back(std::make_tuple()) --- src/graphics/stkanimatedmesh.cpp | 12 ++++++------ src/graphics/stkmeshscenenode.cpp | 32 +++++++++++++++---------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/graphics/stkanimatedmesh.cpp b/src/graphics/stkanimatedmesh.cpp index 53dae93af..babbfdad9 100644 --- a/src/graphics/stkanimatedmesh.cpp +++ b/src/graphics/stkanimatedmesh.cpp @@ -141,16 +141,16 @@ void STKAnimatedMesh::render() GLMesh* mesh; for_in(mesh, MeshSolidMaterial[MAT_DEFAULT]) - ListMatDefault::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListMatDefault::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterial[MAT_ALPHA_REF]) - ListMatAlphaRef::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListMatAlphaRef::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterial[MAT_DETAIL]) - ListMatDetails::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListMatDetails::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterial[MAT_UNLIT]) - ListMatUnlit::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY)); + ListMatUnlit::Arguments.emplace_back(mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY); return; } @@ -191,10 +191,10 @@ void STKAnimatedMesh::render() else { for_in(mesh, TransparentMesh[TM_DEFAULT]) - ListBlendTransparent::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); + ListBlendTransparent::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix); for_in(mesh, TransparentMesh[TM_ADDITIVE]) - ListAdditiveTransparent::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); + ListAdditiveTransparent::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix); } return; } diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index 062934e34..7ce60fbf8 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -245,29 +245,29 @@ void STKMeshSceneNode::render() GLMesh* mesh; for_in(mesh, MeshSolidMaterials[MAT_DEFAULT]) - ListMatDefault::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListMatDefault::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterials[MAT_ALPHA_REF]) - ListMatAlphaRef::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListMatAlphaRef::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterials[MAT_SPHEREMAP]) - ListMatSphereMap::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListMatSphereMap::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterials[MAT_DETAIL]) - ListMatDetails::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight())); + ListMatDetails::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); windDir = getWind(); for_in(mesh, MeshSolidMaterials[MAT_GRASS]) - ListMatGrass::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, windDir, irr_driver->getSceneManager()->getAmbientLight())); + ListMatGrass::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, windDir, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterials[MAT_UNLIT]) - ListMatUnlit::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY)); + ListMatUnlit::Arguments.emplace_back(mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY); for_in(mesh, MeshSolidMaterials[MAT_SPLATTING]) - ListMatSplatting::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight())); + ListMatSplatting::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterials[MAT_NORMAL_MAP]) - ListMatNormalMap::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, invmodel, core::matrix4::EM4CONST_IDENTITY, irr_driver->getSceneManager()->getAmbientLight())); + ListMatNormalMap::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, core::matrix4::EM4CONST_IDENTITY, irr_driver->getSceneManager()->getAmbientLight()); return; } @@ -407,25 +407,23 @@ void STKMeshSceneNode::render() tmpcol.getBlue() / 255.0f); for_in(mesh, TransparentMesh[TM_DEFAULT]) - ListBlendTransparentFog::Arguments.push_back( - std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, - fogmax, startH, endH, start, end, col)); + ListBlendTransparentFog::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix, + fogmax, startH, endH, start, end, col); for_in(mesh, TransparentMesh[TM_ADDITIVE]) - ListAdditiveTransparentFog::Arguments.push_back( - std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix, - fogmax, startH, endH, start, end, col)); + ListAdditiveTransparentFog::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix, + fogmax, startH, endH, start, end, col); } else { for_in(mesh, TransparentMesh[TM_DEFAULT]) - ListBlendTransparent::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); + ListBlendTransparent::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix); for_in(mesh, TransparentMesh[TM_ADDITIVE]) - ListAdditiveTransparent::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation, mesh->TextureMatrix)); + ListAdditiveTransparent::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix); } for_in(mesh, TransparentMesh[TM_DISPLACEMENT]) - ListDisplacement::Arguments.push_back(std::make_tuple(mesh, AbsoluteTransformation)); + ListDisplacement::Arguments.emplace_back(mesh, AbsoluteTransformation); if (!TransparentMesh[TM_BUBBLE].empty()) glUseProgram(MeshShader::BubbleShader::Program); From 8483613a4e3369b0b611f2a7845d88ad2d7cf5ed Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Wed, 16 Jul 2014 19:51:24 -0400 Subject: [PATCH 37/93] clang fixes --- src/graphics/render_geometry.cpp | 40 ++--- src/graphics/shaders.cpp | 259 +++++++++++++++++++++++++------ 2 files changed, 230 insertions(+), 69 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index f61cb2efb..ee678ba71 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -198,18 +198,18 @@ void IrrDriver::renderSolidSecondPass() renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, std::vector({ MeshShader::ObjectPass2ShaderInstance->TU_Albedo }), ListDefaultStandardSM::Arguments); renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, std::vector({ MeshShader::ObjectPass2ShaderInstance->TU_Albedo }), ListDefaultTangentSM::Arguments); - renderMeshes2ndPass(MeshShader::ObjectRefPass2ShaderInstance, std::vector({ (GLuint)MeshShader::ObjectRefPass2ShaderInstance->TU_Albedo }, ListAlphaRefSM::Arguments); + renderMeshes2ndPass(MeshShader::ObjectRefPass2ShaderInstance, std::vector({ MeshShader::ObjectRefPass2ShaderInstance->TU_Albedo }), ListAlphaRefSM::Arguments); renderMeshes2ndPass(MeshShader::SphereMapShaderInstance, std::vector({ MeshShader::SphereMapShaderInstance->TU_tex }), ListSphereMapSM::Arguments); renderMeshes2ndPass(MeshShader::ObjectUnlitShaderInstance, std::vector({ MeshShader::ObjectUnlitShaderInstance->TU_tex }), ListUnlitSM::Arguments); renderMeshes2ndPass(MeshShader::DetailledObjectPass2ShaderInstance, std::vector({ MeshShader::DetailledObjectPass2ShaderInstance->TU_Albedo, MeshShader::DetailledObjectPass2ShaderInstance->TU_detail }), ListDetailSM::Arguments); - renderMeshes2ndPass(MeshShader::SplattingShaderInstance, - std::vector({ - (GLuint)8, - (GLuint)MeshShader::SplattingShaderInstance->TU_tex_layout, - (GLuint)MeshShader::SplattingShaderInstance->TU_tex_detail0, - (GLuint)MeshShader::SplattingShaderInstance->TU_tex_detail1, - (GLuint)MeshShader::SplattingShaderInstance->TU_tex_detail2, - (GLuint)MeshShader::SplattingShaderInstance->TU_tex_detail3 }), + std::vector v; + v.push_back(8); + v.push_back(MeshShader::SplattingShaderInstance->TU_tex_layout); + v.push_back(MeshShader::SplattingShaderInstance->TU_tex_detail0); + v.push_back(MeshShader::SplattingShaderInstance->TU_tex_detail1); + v.push_back(MeshShader::SplattingShaderInstance->TU_tex_detail2); + v.push_back(MeshShader::SplattingShaderInstance->TU_tex_detail3); + renderMeshes2ndPass(MeshShader::SplattingShaderInstance, v, ListSplattingSM::Arguments); renderMeshes2ndPass(MeshShader::GrassPass2ShaderInstance, std::vector({ MeshShader::GrassPass2ShaderInstance->TU_Albedo }), ListGrassSM::Arguments); } @@ -238,16 +238,16 @@ void IrrDriver::renderTransparent() if (World::getWorld() && World::getWorld()->isFogEnabled()) { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass(MeshShader::TransparentFogShaderInstance, { MeshShader::TransparentFogShaderInstance->TU_tex }, ListBlendTransparentFog::Arguments); + renderMeshes2ndPass(MeshShader::TransparentFogShaderInstance, std::vector({ MeshShader::TransparentFogShaderInstance->TU_tex }), ListBlendTransparentFog::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass(MeshShader::TransparentFogShaderInstance, { MeshShader::TransparentFogShaderInstance->TU_tex }, ListAdditiveTransparentFog::Arguments); + renderMeshes2ndPass(MeshShader::TransparentFogShaderInstance, std::vector({ MeshShader::TransparentFogShaderInstance->TU_tex }), ListAdditiveTransparentFog::Arguments); } else { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass(MeshShader::TransparentShaderInstance, { MeshShader::TransparentShaderInstance->TU_tex }, ListBlendTransparent::Arguments); + renderMeshes2ndPass(MeshShader::TransparentShaderInstance, std::vector({ MeshShader::TransparentShaderInstance->TU_tex }), ListBlendTransparent::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass(MeshShader::TransparentShaderInstance, { MeshShader::TransparentShaderInstance->TU_tex }, ListAdditiveTransparent::Arguments); + renderMeshes2ndPass(MeshShader::TransparentShaderInstance, std::vector({ MeshShader::TransparentShaderInstance->TU_tex }), ListAdditiveTransparent::Arguments); } if (!UserConfigParams::m_dynamic_lights) @@ -405,11 +405,11 @@ void IrrDriver::renderShadows() m_scene_manager->drawAll(scene::ESNRP_SOLID); - drawShadow(MeshShader::ShadowShaderInstance, {}, ListDefaultStandardG::Arguments); - drawShadow(MeshShader::ShadowShaderInstance, {}, ListDefault2TCoordG::Arguments); - drawShadow(MeshShader::ShadowShaderInstance, {}, ListNormalG::Arguments); - drawShadow(MeshShader::RefShadowShaderInstance, { MeshShader::RefShadowShaderInstance->TU_tex }, ListAlphaRefG::Arguments); - drawShadowGrass({ MeshShader::GrassShadowShaderInstance->TU_tex }, ListGrassG::Arguments); + drawShadow(MeshShader::ShadowShaderInstance, std::vector(), ListDefaultStandardG::Arguments); + drawShadow(MeshShader::ShadowShaderInstance, std::vector(), ListDefault2TCoordG::Arguments); + drawShadow(MeshShader::ShadowShaderInstance, std::vector(), ListNormalG::Arguments); + drawShadow(MeshShader::RefShadowShaderInstance, std::vector({ MeshShader::RefShadowShaderInstance->TU_tex }), ListAlphaRefG::Arguments); + drawShadowGrass(std::vector({ MeshShader::GrassShadowShaderInstance->TU_tex }), ListGrassG::Arguments); glDisable(GL_POLYGON_OFFSET_FILL); @@ -419,6 +419,6 @@ void IrrDriver::renderShadows() m_rtts->getRSM().Bind(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListDefaultStandardG::Arguments); - drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListDefault2TCoordG::Arguments); + drawRSM(rsm_matrix, std::vector({ MeshShader::RSMShader::TU_tex }), ListDefaultStandardG::Arguments); + drawRSM(rsm_matrix, std::vector({ MeshShader::RSMShader::TU_tex }), ListDefault2TCoordG::Arguments); } \ No newline at end of file diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 466b706a3..dd22deb46 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -483,6 +483,166 @@ void glUniform1fWrapper(GLuint a, float b) namespace MeshShader { + std::vector > TexUnit(GLuint tex, const char* n) + { + std::vector > v; + v.push_back(std::pair(tex, n)); + return v; + } + std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2) + { + std::vector > v; + v.push_back(std::pair(tex, n)); + v.push_back(std::pair(tex2, n2)); + return v; + } + std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, + GLuint tex3, const char* n3) + { + std::vector > v; + v.push_back(std::pair(tex, n)); + v.push_back(std::pair(tex2, n2)); + v.push_back(std::pair(tex3, n3)); + return v; + } + std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, + GLuint tex3, const char* n3, GLuint tex4, const char* n4) + { + std::vector > v; + v.push_back(std::pair(tex, n)); + v.push_back(std::pair(tex2, n2)); + v.push_back(std::pair(tex3, n3)); + v.push_back(std::pair(tex4, n4)); + return v; + } + std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, + GLuint tex3, const char* n3, GLuint tex4, const char* n4, GLuint tex5, const char* n5) + { + std::vector > v; + v.push_back(std::pair(tex, n)); + v.push_back(std::pair(tex2, n2)); + v.push_back(std::pair(tex3, n3)); + v.push_back(std::pair(tex4, n4)); + v.push_back(std::pair(tex5, n5)); + return v; + } + std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, + GLuint tex3, const char* n3, GLuint tex4, const char* n4, GLuint tex5, const char* n5, + GLuint tex6, const char* n6) + { + std::vector > v; + v.push_back(std::pair(tex, n)); + v.push_back(std::pair(tex2, n2)); + v.push_back(std::pair(tex3, n3)); + v.push_back(std::pair(tex4, n4)); + v.push_back(std::pair(tex5, n5)); + v.push_back(std::pair(tex6, n6)); + return v; + } + std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, + GLuint tex3, const char* n3, GLuint tex4, const char* n4, GLuint tex5, const char* n5, + GLuint tex6, const char* n6, GLuint tex7, const char* n7) + { + std::vector > v; + v.push_back(std::pair(tex, n)); + v.push_back(std::pair(tex2, n2)); + v.push_back(std::pair(tex3, n3)); + v.push_back(std::pair(tex4, n4)); + v.push_back(std::pair(tex5, n5)); + v.push_back(std::pair(tex6, n6)); + v.push_back(std::pair(tex7, n7)); + return v; + } + std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, + GLuint tex3, const char* n3, GLuint tex4, const char* n4, GLuint tex5, const char* n5, + GLuint tex6, const char* n6, GLuint tex7, const char* n7, GLuint tex8, const char* n8) + { + std::vector > v; + v.push_back(std::pair(tex, n)); + v.push_back(std::pair(tex2, n2)); + v.push_back(std::pair(tex3, n3)); + v.push_back(std::pair(tex4, n4)); + v.push_back(std::pair(tex5, n5)); + v.push_back(std::pair(tex6, n6)); + v.push_back(std::pair(tex8, n8)); + return v; + } + std::vector Uniforms(const char* c1) + { + std::vector v; + v.push_back(c1); + return v; + } + std::vector Uniforms(const char* c1, const char* c2) + { + std::vector v; + v.push_back(c1); + v.push_back(c2); + return v; + } + std::vector Uniforms(const char* c1, const char* c2, const char* c3) + { + std::vector v; + v.push_back(c1); + v.push_back(c2); + v.push_back(c3); + return v; + } + std::vector Uniforms(const char* c1, const char* c2, const char* c3, const char* c4) + { + std::vector v; + v.push_back(c1); + v.push_back(c2); + v.push_back(c3); + v.push_back(c4); + return v; + } + std::vector Uniforms(const char* c1, const char* c2, const char* c3, const char* c4, const char* c5) + { + std::vector v; + v.push_back(c1); + v.push_back(c2); + v.push_back(c3); + v.push_back(c4); + v.push_back(c5); + return v; + } + std::vector Uniforms(const char* c1, const char* c2, const char* c3, const char* c4, const char* c5, const char* c6) + { + std::vector v; + v.push_back(c1); + v.push_back(c2); + v.push_back(c3); + v.push_back(c4); + v.push_back(c5); + v.push_back(c6); + return v; + } + std::vector Uniforms(const char* c1, const char* c2, const char* c3, const char* c4, const char* c5, const char* c6, const char* c7) + { + std::vector v; + v.push_back(c1); + v.push_back(c2); + v.push_back(c3); + v.push_back(c4); + v.push_back(c5); + v.push_back(c6); + v.push_back(c7); + return v; + } + std::vector Uniforms(const char* c1, const char* c2, const char* c3, const char* c4, const char* c5, const char* c6, const char* c7, const char* c8) + { + std::vector v; + v.push_back(c1); + v.push_back(c2); + v.push_back(c3); + v.push_back(c4); + v.push_back(c5); + v.push_back(c6); + v.push_back(c7); + v.push_back(c8); + return v; + } // Solid Normal and depth pass shaders ObjectPass1Shader::ObjectPass1Shader() @@ -491,14 +651,14 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass1.frag").c_str()); - AssignUniforms(Program, uniforms, {"ModelMatrix", "InverseModelMatrix"}); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "InverseModelMatrix")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit( TU_tex, "tex" )); } ObjectRefPass1Shader::ObjectRefPass1Shader() @@ -507,14 +667,14 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str()); - AssignUniforms(Program, uniforms, { "ModelMatrix", "InverseModelMatrix", "TextureMatrix" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "InverseModelMatrix", "TextureMatrix")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } GrassPass1Shader::GrassPass1Shader() @@ -523,9 +683,9 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/grass_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str()); - AssignUniforms(Program, uniforms, { "ModelMatrix", "InverseModelMatrix", "windDir" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "InverseModelMatrix", "windDir")); TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } NormalMapShader::NormalMapShader() @@ -534,7 +694,7 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/normalmap.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/normalmap.frag").c_str()); - AssignUniforms(Program, uniforms, {"ModelMatrix", "InverseModelMatrix"}); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "InverseModelMatrix")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -542,7 +702,7 @@ namespace MeshShader } TU_normalmap = 1; TU_glossy = 0; - AssignTextureUnit(Program, { { TU_normalmap, "normalMap" }, { TU_glossy, "DiffuseForAlpha" } }); + AssignTextureUnit(Program, TexUnit(TU_normalmap, "normalMap", TU_glossy, "DiffuseForAlpha")); } InstancedObjectPass1Shader::InstancedObjectPass1Shader() @@ -553,7 +713,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass1.frag").c_str()); TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -571,7 +731,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str()); TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -588,9 +748,9 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_grass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str()); - AssignUniforms(Program, uniforms, { "windDir" }); + AssignUniforms(Program, uniforms, Uniforms("windDir")); TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -607,7 +767,7 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, { "ModelMatrix", "TextureMatrix", "ambient" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "TextureMatrix", "ambient")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -615,7 +775,7 @@ namespace MeshShader } TU_Albedo = 3; - AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_Albedo, "Albedo" } }); + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo")); } ObjectPass2Shader *ObjectPass2ShaderInstance; @@ -627,10 +787,10 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, { "ambient" }); + AssignUniforms(Program, uniforms, Uniforms("ambient")); TU_Albedo = 3; - AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_Albedo, "Albedo" } }); + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo")); if (!UserConfigParams::m_ubo_disabled) { @@ -648,10 +808,10 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, { "ambient" }); + AssignUniforms(Program, uniforms, Uniforms("ambient")); TU_Albedo = 3; - AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_Albedo, "Albedo" } }); + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo")); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); @@ -665,13 +825,13 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/detailledobject_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, { "ModelMatrix", "ambient" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "ambient")); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); TU_Albedo = 3; TU_detail = 4; - AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_Albedo, "Albedo" }, { TU_detail, "Detail" } }); + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo", TU_detail, "Detail")); } DetailledObjectPass2Shader *DetailledObjectPass2ShaderInstance; @@ -681,7 +841,7 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str()); - AssignUniforms(Program, uniforms, { "ModelMatrix" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -689,7 +849,7 @@ namespace MeshShader } TU_tex = 3; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } ObjectUnlitShader *ObjectUnlitShaderInstance; @@ -700,7 +860,7 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, { "ModelMatrix", "TextureMatrix", "ambient" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "TextureMatrix", "ambient")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -708,7 +868,7 @@ namespace MeshShader } TU_Albedo = 3; - AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_Albedo, "Albedo" } }); + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo")); } ObjectRefPass2Shader *ObjectRefPass2ShaderInstance; @@ -719,10 +879,10 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/grass_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/grass_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, { "ModelMatrix", "windDir", "ambient" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "windDir", "ambient")); TU_Albedo = 3; - AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_Albedo, "Albedo" } }); + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo")); } GrassPass2Shader *GrassPass2ShaderInstance; @@ -734,11 +894,11 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_grass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/grass_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, { "windDir", "SunDir", "ambient" }); + AssignUniforms(Program, uniforms, Uniforms("windDir", "SunDir", "ambient")); TU_Albedo = 3; TU_dtex = 4; - AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_Albedo, "Albedo" }, { TU_dtex, "dtex" } }); + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo", TU_dtex, "dtex")); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); @@ -753,7 +913,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectpass_spheremap.frag").c_str()); - AssignUniforms(Program, uniforms, { "ModelMatrix", "InverseModelMatrix", "ambient" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "InverseModelMatrix", "ambient")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -761,7 +921,7 @@ namespace MeshShader } TU_tex = 3; - AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_tex, "tex")); } SphereMapShader *SphereMapShaderInstance; @@ -771,15 +931,15 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/splatting.frag").c_str()); - AssignUniforms(Program, uniforms, {"ModelMatrix", "ambient"}); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "ambient")); TU_tex_layout = 3; TU_tex_detail0 = 4; TU_tex_detail1 = 5; TU_tex_detail2 = 6; TU_tex_detail3 = 7; - AssignTextureUnit(Program, { { 0, "DiffuseMap" }, { 1, "SpecularMap" }, { 2, "SSAO" }, { TU_tex_layout, "tex_layout" }, - { TU_tex_detail0, "tex_detail0" }, { TU_tex_detail1, "tex_detail1" }, { TU_tex_detail2, "tex_detail2" }, { TU_tex_detail3, "tex_detail3" } }); + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_tex_layout, "tex_layout", + TU_tex_detail0, "tex_detail0", TU_tex_detail1, "tex_detail1", TU_tex_detail2, "tex_detail2", TU_tex_detail3, "tex_detail3")); } SplattingShader *SplattingShaderInstance; @@ -813,7 +973,7 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/transparent.frag").c_str()); - AssignUniforms(Program, uniforms, {"ModelMatrix", "TextureMatrix" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "TextureMatrix")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -821,7 +981,7 @@ namespace MeshShader } TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } TransparentShader *TransparentShaderInstance; @@ -831,7 +991,7 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/transparentfog.frag").c_str()); - AssignUniforms(Program, uniforms, { "ModelMatrix", "TextureMatrix", "fogmax", "startH", "endH", "start", "end", "col" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "TextureMatrix", "fogmax", "startH", "endH", "start", "end", "col")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -839,7 +999,7 @@ namespace MeshShader } TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } TransparentFogShader *TransparentFogShaderInstance; @@ -924,7 +1084,7 @@ namespace MeshShader GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/white.frag").c_str()); } - AssignUniforms(Program, uniforms, { "ModelMatrix" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix")); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } @@ -945,7 +1105,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/rsm.frag").c_str()); uniform_MM = glGetUniformLocation(Program, "ModelMatrix"); uniform_RSMMatrix = glGetUniformLocation(Program, "RSMMatrix"); - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } void RSMShader::setUniforms(const core::matrix4 &RSMMatrix, const core::matrix4 &ModelMatrix) @@ -998,12 +1158,12 @@ namespace MeshShader GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str()); } - AssignUniforms(Program, uniforms, { "ModelMatrix" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix")); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } RefShadowShader *RefShadowShaderInstance; @@ -1029,7 +1189,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str()); } TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } @@ -1054,12 +1214,12 @@ namespace MeshShader GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str()); } - AssignUniforms(Program, uniforms, { "ModelMatrix", "windDir" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "windDir")); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } GrassShadowShader *GrassShadowShaderInstance; @@ -1085,9 +1245,9 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str()); } TU_tex = 0; - AssignTextureUnit(Program, { { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); - AssignUniforms(Program, uniforms, { "windDir" }); + AssignUniforms(Program, uniforms, Uniforms("windDir")); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } @@ -1099,7 +1259,7 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/displace.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/white.frag").c_str()); - AssignUniforms(Program, uniforms, { "ModelMatrix"}); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -1115,12 +1275,13 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/displace.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/displace.frag").c_str()); - AssignUniforms(Program, uniforms, { "ModelMatrix", "dir", "dir2" }); + AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "dir", "dir2" )); TU_displacement_tex = 0; TU_color_tex = 1; TU_mask_tex = 2; TU_tex = 3; - AssignTextureUnit(Program, { { TU_displacement_tex, "displacement_tex" }, { TU_color_tex, "color_tex" }, { TU_mask_tex, "mask_tex" }, { TU_tex, "tex" } }); + AssignTextureUnit(Program, TexUnit(TU_displacement_tex, "displacement_tex", TU_color_tex, "color_tex", + TU_mask_tex, "mask_tex", TU_tex, "tex")); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } From e6fd365685db75cbce8f6e433e20914fdee95128 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Wed, 16 Jul 2014 20:02:52 -0400 Subject: [PATCH 38/93] Re-fix clang fixes so that it works on other compilers too --- src/graphics/render_geometry.cpp | 42 ++++++++++++++++---------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index ee678ba71..3d83b0e14 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -111,12 +111,12 @@ void IrrDriver::renderSolidFirstPass() { ScopedGPUTimer Timer(getGPUTimer(Q_SOLID_PASS1)); - renderMeshes1stPass(std::vector({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }), ListDefaultStandardG::Arguments); - renderMeshes1stPass(std::vector({ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }), ListDefault2TCoordG::Arguments); - renderMeshes1stPass(std::vector({ MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex }), ListAlphaRefG::Arguments); - renderMeshes1stPass(std::vector({ MeshShader::NormalMapShader::getInstance()->TU_glossy, - MeshShader::NormalMapShader::getInstance()->TU_normalmap }), ListNormalG::Arguments); - renderMeshes1stPass(std::vector({ MeshShader::GrassPass1Shader::getInstance()->TU_tex }), ListGrassG::Arguments); + renderMeshes1stPass(std::vector{ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListDefaultStandardG::Arguments); + renderMeshes1stPass(std::vector{ MeshShader::ObjectPass1Shader::getInstance()->TU_tex }, ListDefault2TCoordG::Arguments); + renderMeshes1stPass(std::vector{ MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex }, ListAlphaRefG::Arguments); + renderMeshes1stPass(std::vector{ MeshShader::NormalMapShader::getInstance()->TU_glossy, + MeshShader::NormalMapShader::getInstance()->TU_normalmap }, ListNormalG::Arguments); + renderMeshes1stPass(std::vector{ MeshShader::GrassPass1Shader::getInstance()->TU_tex }, ListGrassG::Arguments); } } @@ -196,12 +196,12 @@ void IrrDriver::renderSolidSecondPass() m_scene_manager->drawAll(scene::ESNRP_SOLID); - renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, std::vector({ MeshShader::ObjectPass2ShaderInstance->TU_Albedo }), ListDefaultStandardSM::Arguments); - renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, std::vector({ MeshShader::ObjectPass2ShaderInstance->TU_Albedo }), ListDefaultTangentSM::Arguments); - renderMeshes2ndPass(MeshShader::ObjectRefPass2ShaderInstance, std::vector({ MeshShader::ObjectRefPass2ShaderInstance->TU_Albedo }), ListAlphaRefSM::Arguments); - renderMeshes2ndPass(MeshShader::SphereMapShaderInstance, std::vector({ MeshShader::SphereMapShaderInstance->TU_tex }), ListSphereMapSM::Arguments); - renderMeshes2ndPass(MeshShader::ObjectUnlitShaderInstance, std::vector({ MeshShader::ObjectUnlitShaderInstance->TU_tex }), ListUnlitSM::Arguments); - renderMeshes2ndPass(MeshShader::DetailledObjectPass2ShaderInstance, std::vector({ MeshShader::DetailledObjectPass2ShaderInstance->TU_Albedo, MeshShader::DetailledObjectPass2ShaderInstance->TU_detail }), ListDetailSM::Arguments); + renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, std::vector{ MeshShader::ObjectPass2ShaderInstance->TU_Albedo }, ListDefaultStandardSM::Arguments); + renderMeshes2ndPass(MeshShader::ObjectPass2ShaderInstance, std::vector{ MeshShader::ObjectPass2ShaderInstance->TU_Albedo }, ListDefaultTangentSM::Arguments); + renderMeshes2ndPass(MeshShader::ObjectRefPass2ShaderInstance, std::vector{ MeshShader::ObjectRefPass2ShaderInstance->TU_Albedo }, ListAlphaRefSM::Arguments); + renderMeshes2ndPass(MeshShader::SphereMapShaderInstance, std::vector{ MeshShader::SphereMapShaderInstance->TU_tex }, ListSphereMapSM::Arguments); + renderMeshes2ndPass(MeshShader::ObjectUnlitShaderInstance, std::vector{ MeshShader::ObjectUnlitShaderInstance->TU_tex }, ListUnlitSM::Arguments); + renderMeshes2ndPass(MeshShader::DetailledObjectPass2ShaderInstance, std::vector{ MeshShader::DetailledObjectPass2ShaderInstance->TU_Albedo, MeshShader::DetailledObjectPass2ShaderInstance->TU_detail }, ListDetailSM::Arguments); std::vector v; v.push_back(8); v.push_back(MeshShader::SplattingShaderInstance->TU_tex_layout); @@ -211,7 +211,7 @@ void IrrDriver::renderSolidSecondPass() v.push_back(MeshShader::SplattingShaderInstance->TU_tex_detail3); renderMeshes2ndPass(MeshShader::SplattingShaderInstance, v, ListSplattingSM::Arguments); - renderMeshes2ndPass(MeshShader::GrassPass2ShaderInstance, std::vector({ MeshShader::GrassPass2ShaderInstance->TU_Albedo }), ListGrassSM::Arguments); + renderMeshes2ndPass(MeshShader::GrassPass2ShaderInstance, std::vector{ MeshShader::GrassPass2ShaderInstance->TU_Albedo }, ListGrassSM::Arguments); } } @@ -238,16 +238,16 @@ void IrrDriver::renderTransparent() if (World::getWorld() && World::getWorld()->isFogEnabled()) { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass(MeshShader::TransparentFogShaderInstance, std::vector({ MeshShader::TransparentFogShaderInstance->TU_tex }), ListBlendTransparentFog::Arguments); + renderMeshes2ndPass(MeshShader::TransparentFogShaderInstance, std::vector{ MeshShader::TransparentFogShaderInstance->TU_tex }, ListBlendTransparentFog::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass(MeshShader::TransparentFogShaderInstance, std::vector({ MeshShader::TransparentFogShaderInstance->TU_tex }), ListAdditiveTransparentFog::Arguments); + renderMeshes2ndPass(MeshShader::TransparentFogShaderInstance, std::vector{ MeshShader::TransparentFogShaderInstance->TU_tex }, ListAdditiveTransparentFog::Arguments); } else { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass(MeshShader::TransparentShaderInstance, std::vector({ MeshShader::TransparentShaderInstance->TU_tex }), ListBlendTransparent::Arguments); + renderMeshes2ndPass(MeshShader::TransparentShaderInstance, std::vector{ MeshShader::TransparentShaderInstance->TU_tex }, ListBlendTransparent::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass(MeshShader::TransparentShaderInstance, std::vector({ MeshShader::TransparentShaderInstance->TU_tex }), ListAdditiveTransparent::Arguments); + renderMeshes2ndPass(MeshShader::TransparentShaderInstance, std::vector{ MeshShader::TransparentShaderInstance->TU_tex }, ListAdditiveTransparent::Arguments); } if (!UserConfigParams::m_dynamic_lights) @@ -408,8 +408,8 @@ void IrrDriver::renderShadows() drawShadow(MeshShader::ShadowShaderInstance, std::vector(), ListDefaultStandardG::Arguments); drawShadow(MeshShader::ShadowShaderInstance, std::vector(), ListDefault2TCoordG::Arguments); drawShadow(MeshShader::ShadowShaderInstance, std::vector(), ListNormalG::Arguments); - drawShadow(MeshShader::RefShadowShaderInstance, std::vector({ MeshShader::RefShadowShaderInstance->TU_tex }), ListAlphaRefG::Arguments); - drawShadowGrass(std::vector({ MeshShader::GrassShadowShaderInstance->TU_tex }), ListGrassG::Arguments); + drawShadow(MeshShader::RefShadowShaderInstance, std::vector{ MeshShader::RefShadowShaderInstance->TU_tex }, ListAlphaRefG::Arguments); + drawShadowGrass(std::vector{ MeshShader::GrassShadowShaderInstance->TU_tex }, ListGrassG::Arguments); glDisable(GL_POLYGON_OFFSET_FILL); @@ -419,6 +419,6 @@ void IrrDriver::renderShadows() m_rtts->getRSM().Bind(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - drawRSM(rsm_matrix, std::vector({ MeshShader::RSMShader::TU_tex }), ListDefaultStandardG::Arguments); - drawRSM(rsm_matrix, std::vector({ MeshShader::RSMShader::TU_tex }), ListDefault2TCoordG::Arguments); + drawRSM(rsm_matrix, std::vector{ MeshShader::RSMShader::TU_tex }, ListDefaultStandardG::Arguments); + drawRSM(rsm_matrix, std::vector{ MeshShader::RSMShader::TU_tex }, ListDefault2TCoordG::Arguments); } \ No newline at end of file From 23bc1f934481606f86f9a0a8cd48f5cb02e3a42b Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 02:11:04 +0200 Subject: [PATCH 39/93] Remove use of texture2d in rh.frag --- data/shaders/rh.frag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/shaders/rh.frag b/data/shaders/rh.frag index 6b1a45c16..ed760b4ab 100644 --- a/data/shaders/rh.frag +++ b/data/shaders/rh.frag @@ -60,7 +60,7 @@ void main(void) vec2 uv = RHuv + offset * 0.01; // Get world position and normal from the RSM sample - float depth = texture2D(dtex, uv).z; + float depth = texture(dtex, uv).z; vec4 RSMPos = inverse(RSMMatrix) * (2. * vec4(uv, depth, 1.) - 1.); RSMPos /= RSMPos.w; vec3 RSMAlbedo = texture(ctex, uv).xyz; From 4e079b0e1468dadb6d7298dcf2497c93129c43e2 Mon Sep 17 00:00:00 2001 From: vlj Date: Thu, 17 Jul 2014 02:17:49 +0200 Subject: [PATCH 40/93] Fixes shader errors reported by Auria --- data/shaders/instanciedgrassshadow.vert | 1 + data/shaders/rsm.vert | 8 +++++++- data/shaders/shadow.vert | 5 +++++ data/shaders/shadow_grass.vert | 6 ++++++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/data/shaders/instanciedgrassshadow.vert b/data/shaders/instanciedgrassshadow.vert index f644039f9..92c21af65 100644 --- a/data/shaders/instanciedgrassshadow.vert +++ b/data/shaders/instanciedgrassshadow.vert @@ -17,6 +17,7 @@ layout(location = 8) in vec3 Orientation; layout(location = 9) in vec3 Scale; #else in vec3 Position; +in vec4 Color; in vec2 Texcoord; in vec3 Origin; diff --git a/data/shaders/rsm.vert b/data/shaders/rsm.vert index 5ed3b9ad4..69846d811 100644 --- a/data/shaders/rsm.vert +++ b/data/shaders/rsm.vert @@ -8,11 +8,17 @@ uniform mat4 TextureMatrix = 0., 0., 1., 0., 0., 0., 0., 1.); - +#if __VERSION__ >= 330 layout(location = 0) in vec3 Position; layout(location = 1) in vec3 Normal; layout(location = 2) in vec4 Color; layout(location = 3) in vec2 Texcoord; +#else +in vec3 Position; +in vec3 Normal; +in vec4 Color; +in vec2 Texcoord; +#endif out vec3 nor; out vec2 uv; diff --git a/data/shaders/shadow.vert b/data/shaders/shadow.vert index d1212e7ea..d7f6316e6 100644 --- a/data/shaders/shadow.vert +++ b/data/shaders/shadow.vert @@ -9,8 +9,13 @@ layout (std140) uniform MatrixesData uniform mat4 ModelMatrix; +#if __VERSION__ >= 330 layout(location = 0) in vec3 Position; layout(location = 3) in vec2 Texcoord; +#else +in vec3 Position; +in vec2 Texcoord; +#endif #ifdef VSLayer out vec2 uv; diff --git a/data/shaders/shadow_grass.vert b/data/shaders/shadow_grass.vert index 0e26cdb4f..7b1ce0caf 100644 --- a/data/shaders/shadow_grass.vert +++ b/data/shaders/shadow_grass.vert @@ -10,9 +10,15 @@ layout (std140) uniform MatrixesData uniform mat4 ModelMatrix; uniform vec3 windDir; +#if __VERSION__ >= 330 layout(location = 0) in vec3 Position; layout(location = 2) in vec4 Color; layout(location = 3) in vec2 Texcoord; +#else +in vec3 Position; +in vec4 Color; +in vec2 Texcoord; +#endif #ifdef VSLayer out vec2 uv; From 00ae12677a86ab308c84e35b4e238b5dc3bf57cf Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Thu, 17 Jul 2014 19:24:35 -0400 Subject: [PATCH 41/93] Fix GUI crashes when exiting STK by clicking the X button in the window titlebar --- src/graphics/irr_driver.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index b2418fa0e..fedc76f07 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -1931,8 +1931,9 @@ void IrrDriver::update(float dt) // ================================= if (!m_device->run()) { - GUIEngine::cleanUp(); - GUIEngine::deallocate(); + // Don't bother cleaning up GUI, has no use and may result in crashes + //GUIEngine::cleanUp(); + //GUIEngine::deallocate(); main_loop->abort(); return; } From 0a93b7a2d32712c5fd0f1ed819b6477593e00e22 Mon Sep 17 00:00:00 2001 From: konstin Date: Fri, 18 Jul 2014 15:58:34 +0200 Subject: [PATCH 42/93] fix #1410 --- .../dialogs/random_gp_dialog.cpp | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/states_screens/dialogs/random_gp_dialog.cpp b/src/states_screens/dialogs/random_gp_dialog.cpp index b63330712..dbb98f219 100644 --- a/src/states_screens/dialogs/random_gp_dialog.cpp +++ b/src/states_screens/dialogs/random_gp_dialog.cpp @@ -61,8 +61,18 @@ RandomGPInfoDialog::RandomGPInfoDialog() void RandomGPInfoDialog::addSpinners() { - const int trackgroup_width = 200, laps_with = 150, reverse_width = 200; - const int left = (m_area.getWidth() - trackgroup_width - 150 - 250)/2; + const int laps_width = 150; + // "20*4" because there a 4 separators between the spinners with 20px each + int label_spinner_width = m_area.getWidth() - laps_width - 20*4; + // This scaling ensures that the spinners are smaller than the available + // area, look well and are (hopefully) big enough for their labels + if (m_area.getWidth() < 700) + label_spinner_width /= 2; + else if (m_area.getWidth() < 1500) + label_spinner_width /= 3; + else + label_spinner_width /= 4; + const int left = (m_area.getWidth() - label_spinner_width*2 - laps_width)/2; // Trackgroup chooser Spinner* spinner = new Spinner(false); @@ -71,7 +81,7 @@ void RandomGPInfoDialog::addSpinners() spinner->setParent(m_irrlicht_window); m_widgets.push_back(spinner); spinner->add(); - spinner->move(left, m_under_title, trackgroup_width, SPINNER_HEIGHT); + spinner->move(left, m_under_title, label_spinner_width, SPINNER_HEIGHT); // Fill it with all the track group names spinner->addLabel("all"); int index_standard; @@ -100,7 +110,7 @@ void RandomGPInfoDialog::addSpinners() spinner->m_properties[GUIEngine::PROP_WRAP_AROUND] = "true"; m_widgets.push_back(spinner); spinner->add(); - spinner->move(left + trackgroup_width + 10, m_under_title, laps_with, SPINNER_HEIGHT); + spinner->move(left + label_spinner_width + 20/2, m_under_title, laps_width, SPINNER_HEIGHT); // reverse choose spinner = new Spinner(false); @@ -109,7 +119,7 @@ void RandomGPInfoDialog::addSpinners() spinner->m_properties[GUIEngine::PROP_WRAP_AROUND] = "true"; m_widgets.push_back(spinner); spinner->add(); - spinner->move(left + trackgroup_width + laps_with + 10, m_under_title, reverse_width, SPINNER_HEIGHT); + spinner->move(left + label_spinner_width + laps_width + 20/2, m_under_title, label_spinner_width, SPINNER_HEIGHT); spinner->addLabel("no reverse"); spinner->addLabel("all reverse"); spinner->addLabel("mixed"); From 7a8743fb65908dbb07572581d52881d3cb47f82b Mon Sep 17 00:00:00 2001 From: konstin Date: Fri, 18 Jul 2014 16:03:23 +0200 Subject: [PATCH 43/93] better text alingment in GP info dialog --- src/states_screens/dialogs/gp_info_dialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/states_screens/dialogs/gp_info_dialog.cpp b/src/states_screens/dialogs/gp_info_dialog.cpp index 7a98c531c..79ad221ca 100644 --- a/src/states_screens/dialogs/gp_info_dialog.cpp +++ b/src/states_screens/dialogs/gp_info_dialog.cpp @@ -119,7 +119,7 @@ void GPInfoDialog::addTracks() Label* widget = dynamic_cast(m_widgets.get(widgets_iter)); widget->setText(translations->fribidize(track->getName()), false); - widget->move(20, m_over_body + height_of_one_line*(i+1), + widget->move(20, m_over_body + height_of_one_line*i, m_area.getWidth()/2 - 20, height_of_one_line); widgets_iter++; @@ -141,7 +141,7 @@ void GPInfoDialog::addTracks() m_widgets.push_back(widget); widget->add(); - widget->move(20, m_over_body + height_of_one_line*(i+1), + widget->move(20, m_over_body + height_of_one_line*i, m_area.getWidth()/2 - 20, height_of_one_line); } } From 40851516ace9ca0046053648e2f8dcd181f9cda5 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Fri, 18 Jul 2014 19:22:20 -0400 Subject: [PATCH 44/93] continuing work --- src/graphics/shaders.cpp | 210 ++++++++++++++++++--------------------- 1 file changed, 96 insertions(+), 114 deletions(-) diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 85977e61a..b747c905d 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -431,14 +431,26 @@ namespace UtilShader } } +struct TexUnit +{ + GLuint m_index; + const char* m_uniform; + + TexUnit(GLuint index, const char* uniform) + { + m_index = index; + m_uniform = uniform; + } +}; + static void -AssignTextureUnit(GLuint Program, const std::vector > assoc) +AssignTextureUnit(GLuint Program, const std::vector assoc) { glUseProgram(Program); for (unsigned i = 0; i < assoc.size(); i++) { - GLuint uniform = glGetUniformLocation(Program, assoc[i].second); - glUniform1i(uniform, assoc[i].first); + GLuint uniform = glGetUniformLocation(Program, assoc[i].m_uniform); + glUniform1i(uniform, assoc[i].m_index); } glUseProgram(0); } @@ -474,90 +486,6 @@ void glUniform1fWrapper(GLuint a, float b) namespace MeshShader { - std::vector > TexUnit(GLuint tex, const char* n) - { - std::vector > v; - v.push_back(std::pair(tex, n)); - return v; - } - std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2) - { - std::vector > v; - v.push_back(std::pair(tex, n)); - v.push_back(std::pair(tex2, n2)); - return v; - } - std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, - GLuint tex3, const char* n3) - { - std::vector > v; - v.push_back(std::pair(tex, n)); - v.push_back(std::pair(tex2, n2)); - v.push_back(std::pair(tex3, n3)); - return v; - } - std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, - GLuint tex3, const char* n3, GLuint tex4, const char* n4) - { - std::vector > v; - v.push_back(std::pair(tex, n)); - v.push_back(std::pair(tex2, n2)); - v.push_back(std::pair(tex3, n3)); - v.push_back(std::pair(tex4, n4)); - return v; - } - std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, - GLuint tex3, const char* n3, GLuint tex4, const char* n4, GLuint tex5, const char* n5) - { - std::vector > v; - v.push_back(std::pair(tex, n)); - v.push_back(std::pair(tex2, n2)); - v.push_back(std::pair(tex3, n3)); - v.push_back(std::pair(tex4, n4)); - v.push_back(std::pair(tex5, n5)); - return v; - } - std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, - GLuint tex3, const char* n3, GLuint tex4, const char* n4, GLuint tex5, const char* n5, - GLuint tex6, const char* n6) - { - std::vector > v; - v.push_back(std::pair(tex, n)); - v.push_back(std::pair(tex2, n2)); - v.push_back(std::pair(tex3, n3)); - v.push_back(std::pair(tex4, n4)); - v.push_back(std::pair(tex5, n5)); - v.push_back(std::pair(tex6, n6)); - return v; - } - std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, - GLuint tex3, const char* n3, GLuint tex4, const char* n4, GLuint tex5, const char* n5, - GLuint tex6, const char* n6, GLuint tex7, const char* n7) - { - std::vector > v; - v.push_back(std::pair(tex, n)); - v.push_back(std::pair(tex2, n2)); - v.push_back(std::pair(tex3, n3)); - v.push_back(std::pair(tex4, n4)); - v.push_back(std::pair(tex5, n5)); - v.push_back(std::pair(tex6, n6)); - v.push_back(std::pair(tex7, n7)); - return v; - } - std::vector > TexUnit(GLuint tex, const char* n, GLuint tex2, const char* n2, - GLuint tex3, const char* n3, GLuint tex4, const char* n4, GLuint tex5, const char* n5, - GLuint tex6, const char* n6, GLuint tex7, const char* n7, GLuint tex8, const char* n8) - { - std::vector > v; - v.push_back(std::pair(tex, n)); - v.push_back(std::pair(tex2, n2)); - v.push_back(std::pair(tex3, n3)); - v.push_back(std::pair(tex4, n4)); - v.push_back(std::pair(tex5, n5)); - v.push_back(std::pair(tex6, n6)); - v.push_back(std::pair(tex8, n8)); - return v; - } std::vector Uniforms(const char* c1) { std::vector v; @@ -649,7 +577,7 @@ namespace MeshShader glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } TU_tex = 0; - AssignTextureUnit(Program, TexUnit( TU_tex, "tex" )); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex" ) }); } ObjectRefPass1Shader::ObjectRefPass1Shader() @@ -665,7 +593,7 @@ namespace MeshShader glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } TU_tex = 0; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); } GrassPass1Shader::GrassPass1Shader() @@ -676,7 +604,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str()); AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "InverseModelMatrix", "windDir")); TU_tex = 0; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); } NormalMapShader::NormalMapShader() @@ -693,7 +621,7 @@ namespace MeshShader } TU_normalmap = 1; TU_glossy = 0; - AssignTextureUnit(Program, TexUnit(TU_normalmap, "normalMap", TU_glossy, "DiffuseForAlpha")); + AssignTextureUnit(Program, { TexUnit(TU_normalmap, "normalMap"), TexUnit(TU_glossy, "DiffuseForAlpha") }); } InstancedObjectPass1Shader::InstancedObjectPass1Shader() @@ -704,7 +632,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass1.frag").c_str()); TU_tex = 0; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -722,7 +650,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str()); TU_tex = 0; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -741,7 +669,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str()); AssignUniforms(Program, uniforms, Uniforms("windDir")); TU_tex = 0; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -766,7 +694,12 @@ namespace MeshShader } TU_Albedo = 3; - AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo")); + AssignTextureUnit(Program, { + TexUnit(0, "DiffuseMap"), + TexUnit(1, "SpecularMap"), + TexUnit(2, "SSAO"), + TexUnit(TU_Albedo, "Albedo") + }); } ObjectPass2Shader *ObjectPass2ShaderInstance; @@ -781,7 +714,12 @@ namespace MeshShader AssignUniforms(Program, uniforms, Uniforms("ambient")); TU_Albedo = 3; - AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo")); + AssignTextureUnit(Program, { + TexUnit(0, "DiffuseMap"), + TexUnit(1, "SpecularMap"), + TexUnit(2, "SSAO"), + TexUnit(TU_Albedo, "Albedo") + }); if (!UserConfigParams::m_ubo_disabled) { @@ -802,7 +740,12 @@ namespace MeshShader AssignUniforms(Program, uniforms, Uniforms("ambient")); TU_Albedo = 3; - AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo")); + AssignTextureUnit(Program, { + TexUnit(0, "DiffuseMap"), + TexUnit(1, "SpecularMap"), + TexUnit(2, "SSAO"), + TexUnit(TU_Albedo, "Albedo") + }); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); @@ -822,7 +765,13 @@ namespace MeshShader TU_Albedo = 3; TU_detail = 4; - AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo", TU_detail, "Detail")); + AssignTextureUnit(Program, { + TexUnit(0, "DiffuseMap"), + TexUnit(1, "SpecularMap"), + TexUnit(2, "SSAO"), + TexUnit(TU_Albedo, "Albedo"), + TexUnit(TU_detail, "Detail") + }); } DetailledObjectPass2Shader *DetailledObjectPass2ShaderInstance; @@ -840,7 +789,7 @@ namespace MeshShader } TU_tex = 3; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); } ObjectUnlitShader *ObjectUnlitShaderInstance; @@ -859,7 +808,12 @@ namespace MeshShader } TU_Albedo = 3; - AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo")); + AssignTextureUnit(Program, { + TexUnit(0, "DiffuseMap"), + TexUnit(1, "SpecularMap"), + TexUnit(2, "SSAO"), + TexUnit(TU_Albedo, "Albedo") + }); } ObjectRefPass2Shader *ObjectRefPass2ShaderInstance; @@ -873,7 +827,12 @@ namespace MeshShader AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "windDir", "ambient")); TU_Albedo = 3; - AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo")); + AssignTextureUnit(Program, { + TexUnit(0, "DiffuseMap"), + TexUnit(1, "SpecularMap"), + TexUnit(2, "SSAO"), + TexUnit(TU_Albedo, "Albedo") + }); } GrassPass2Shader *GrassPass2ShaderInstance; @@ -889,7 +848,13 @@ namespace MeshShader TU_Albedo = 3; TU_dtex = 4; - AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_Albedo, "Albedo", TU_dtex, "dtex")); + AssignTextureUnit(Program, { + TexUnit(0, "DiffuseMap"), + TexUnit(1, "SpecularMap"), + TexUnit(2, "SSAO"), + TexUnit(TU_Albedo, "Albedo"), + TexUnit(TU_dtex, "dtex") + }); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); @@ -912,7 +877,12 @@ namespace MeshShader } TU_tex = 3; - AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_tex, "tex")); + AssignTextureUnit(Program, { + TexUnit(0, "DiffuseMap"), + TexUnit(1, "SpecularMap"), + TexUnit(2, "SSAO"), + TexUnit(TU_tex, "tex") + }); } SphereMapShader *SphereMapShaderInstance; @@ -929,8 +899,16 @@ namespace MeshShader TU_tex_detail2 = 6; TU_tex_detail3 = 7; - AssignTextureUnit(Program, TexUnit(0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", TU_tex_layout, "tex_layout", - TU_tex_detail0, "tex_detail0", TU_tex_detail1, "tex_detail1", TU_tex_detail2, "tex_detail2", TU_tex_detail3, "tex_detail3")); + AssignTextureUnit(Program, { + TexUnit(0, "DiffuseMap"), + TexUnit(1, "SpecularMap"), + TexUnit(2, "SSAO"), + TexUnit(TU_tex_layout, "tex_layout"), + TexUnit(TU_tex_detail0, "tex_detail0"), + TexUnit(TU_tex_detail1, "tex_detail1"), + TexUnit(TU_tex_detail2, "tex_detail2"), + TexUnit(TU_tex_detail3, "tex_detail3") + }); } SplattingShader *SplattingShaderInstance; @@ -972,7 +950,7 @@ namespace MeshShader } TU_tex = 0; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); } TransparentShader *TransparentShaderInstance; @@ -990,7 +968,7 @@ namespace MeshShader } TU_tex = 0; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); } TransparentFogShader *TransparentFogShaderInstance; @@ -1096,7 +1074,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/rsm.frag").c_str()); uniform_MM = glGetUniformLocation(Program, "ModelMatrix"); uniform_RSMMatrix = glGetUniformLocation(Program, "RSMMatrix"); - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); } void RSMShader::setUniforms(const core::matrix4 &RSMMatrix, const core::matrix4 &ModelMatrix) @@ -1154,7 +1132,7 @@ namespace MeshShader glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); TU_tex = 0; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); } RefShadowShader *RefShadowShaderInstance; @@ -1180,7 +1158,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str()); } TU_tex = 0; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } @@ -1210,7 +1188,7 @@ namespace MeshShader glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); TU_tex = 0; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); } GrassShadowShader *GrassShadowShaderInstance; @@ -1236,7 +1214,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str()); } TU_tex = 0; - AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); + AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); AssignUniforms(Program, uniforms, Uniforms("windDir")); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -1271,8 +1249,12 @@ namespace MeshShader TU_color_tex = 1; TU_mask_tex = 2; TU_tex = 3; - AssignTextureUnit(Program, TexUnit(TU_displacement_tex, "displacement_tex", TU_color_tex, "color_tex", - TU_mask_tex, "mask_tex", TU_tex, "tex")); + AssignTextureUnit(Program, { + TexUnit(TU_displacement_tex, "displacement_tex"), + TexUnit(TU_color_tex, "color_tex"), + TexUnit(TU_mask_tex, "mask_tex"), + TexUnit(TU_tex, "tex") + }); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } From 071270cb5edfced74f4d70c2a5531552d6c1124a Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Fri, 18 Jul 2014 20:02:10 -0400 Subject: [PATCH 45/93] more work --- src/graphics/render_geometry.cpp | 60 +++++-- src/graphics/shaders.cpp | 272 +++++++++++++------------------ src/graphics/shaders.hpp | 26 +++ 3 files changed, 190 insertions(+), 168 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index bbb73a4b8..28766c20b 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -32,17 +32,51 @@ #include -struct TexUnit +namespace RenderGeometry { - GLuint m_id; - bool m_premul_alpha; - - TexUnit(GLuint id, bool premul_alpha) + struct TexUnit { - m_id = id; - m_premul_alpha = premul_alpha; + GLuint m_id; + bool m_premul_alpha; + + TexUnit(GLuint id, bool premul_alpha) + { + m_id = id; + m_premul_alpha = premul_alpha; + } + }; + + template + std::vector TexUnits(T curr) // required on older clang versions + { + std::vector v; + v.push_back(curr); + return v; } -}; + + template + std::vector TexUnits(T curr, R... rest) // required on older clang versions + { + std::vector v; + v.push_back(curr); + VTexUnits(v, rest...); + return v; + } + + template + void VTexUnits(std::vector& v, T curr, R... rest) // required on older clang versions + { + v.push_back(curr); + VTexUnits(v, rest...); + } + + template + void VTexUnits(std::vector& v, T curr) + { + v.push_back(curr); + } +} +using namespace RenderGeometry; template void draw(const GLMesh *mesh, uniforms... Args) @@ -175,18 +209,18 @@ void IrrDriver::renderSolidFirstPass() { ScopedGPUTimer Timer(getGPUTimer(Q_SOLID_PASS1)); - std::vector object_pass1_texunits{ TexUnit(MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true) }; + std::vector object_pass1_texunits = TexUnits(TexUnit(MeshShader::ObjectPass1Shader::getInstance()->TU_tex, true) ); renderMeshes1stPass(object_pass1_texunits, ListMatDefault::Arguments); renderMeshes1stPass(object_pass1_texunits, ListMatSphereMap::Arguments); renderMeshes1stPass(object_pass1_texunits, ListMatUnlit::Arguments); renderMeshes1stPass(object_pass1_texunits, ListMatDetails::Arguments); renderMeshes1stPass(object_pass1_texunits, ListMatSplatting::Arguments); - renderMeshes1stPass(std::vector{ TexUnit(MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex, true) }, ListMatAlphaRef::Arguments); - renderMeshes1stPass(std::vector{ TexUnit(MeshShader::GrassPass1Shader::getInstance()->TU_tex, true) }, ListMatGrass::Arguments); - renderMeshes1stPass(std::vector{ + renderMeshes1stPass(TexUnits(TexUnit(MeshShader::ObjectRefPass1Shader::getInstance()->TU_tex, true)), ListMatAlphaRef::Arguments); + renderMeshes1stPass(TexUnits(TexUnit(MeshShader::GrassPass1Shader::getInstance()->TU_tex, true)), ListMatGrass::Arguments); + renderMeshes1stPass(TexUnits( TexUnit(MeshShader::NormalMapShader::getInstance()->TU_glossy, true), TexUnit(MeshShader::NormalMapShader::getInstance()->TU_normalmap, false) - }, ListMatNormalMap::Arguments); + ), ListMatNormalMap::Arguments); } } diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index b747c905d..e1a27476e 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -429,40 +429,79 @@ namespace UtilShader glUniform4i(uniform_color, col.getRed(), col.getGreen(), col.getBlue(), col.getAlpha()); glUniformMatrix4fv(glGetUniformLocation(Program, "ModelMatrix"), 1, GL_FALSE, core::IdentityMatrix.pointer()); } -} -struct TexUnit -{ - GLuint m_index; - const char* m_uniform; - - TexUnit(GLuint index, const char* uniform) + struct TexUnit { - m_index = index; - m_uniform = uniform; + GLuint m_index; + const char* m_uniform; + + TexUnit(GLuint index, const char* uniform) + { + m_index = index; + m_uniform = uniform; + } + }; + + template + std::vector TexUnits(T curr) // required on older clang versions + { + std::vector v; + v.push_back(curr); + return v; } -}; -static void -AssignTextureUnit(GLuint Program, const std::vector assoc) -{ - glUseProgram(Program); - for (unsigned i = 0; i < assoc.size(); i++) + template + std::vector TexUnits(T curr, R... rest) // required on older clang versions { - GLuint uniform = glGetUniformLocation(Program, assoc[i].m_uniform); - glUniform1i(uniform, assoc[i].m_index); + std::vector v; + v.push_back(curr); + VTexUnits(v, rest...); + return v; } - glUseProgram(0); -} -static void -AssignUniforms(GLuint Program, std::vector &uniforms, const std::vector &name) -{ - for (unsigned i = 0; i < name.size(); i++) + template + void VTexUnits(std::vector& v, T curr, R... rest) // required on older clang versions { - uniforms.push_back(glGetUniformLocation(Program, name[i])); + v.push_back(curr); + VTexUnits(v, rest...); + } + + template + void VTexUnits(std::vector& v, T curr) + { + v.push_back(curr); + } + + static void + AssignTextureUnit(GLuint Program, TexUnit texUnit) + { + glUseProgram(Program); + GLuint uniform = glGetUniformLocation(Program, texUnit.m_uniform); + glUniform1i(uniform, texUnit.m_index); + glUseProgram(0); + } + + template + static void AssignTextureUnit(GLuint Program, TexUnit texUnit, T... rest) + { + glUseProgram(Program); + GLuint uniform = glGetUniformLocation(Program, texUnit.m_uniform); + glUniform1i(uniform, texUnit.m_index); + AssignTextureUnit_Sub(Program, rest...); + glUseProgram(0); + } + + static void AssignTextureUnit_Sub(GLuint Program) {} + + template + static void AssignTextureUnit_Sub(GLuint Program, TexUnit texUnit, T... rest) + { + GLuint uniform = glGetUniformLocation(Program, texUnit.m_uniform); + glUniform1i(uniform, texUnit.m_index); + AssignTextureUnit_Sub(Program, rest...); } } +using namespace UtilShader; void glUniformMatrix4fvWraper(GLuint a, size_t b, unsigned c, const float *d) { @@ -486,83 +525,6 @@ void glUniform1fWrapper(GLuint a, float b) namespace MeshShader { - std::vector Uniforms(const char* c1) - { - std::vector v; - v.push_back(c1); - return v; - } - std::vector Uniforms(const char* c1, const char* c2) - { - std::vector v; - v.push_back(c1); - v.push_back(c2); - return v; - } - std::vector Uniforms(const char* c1, const char* c2, const char* c3) - { - std::vector v; - v.push_back(c1); - v.push_back(c2); - v.push_back(c3); - return v; - } - std::vector Uniforms(const char* c1, const char* c2, const char* c3, const char* c4) - { - std::vector v; - v.push_back(c1); - v.push_back(c2); - v.push_back(c3); - v.push_back(c4); - return v; - } - std::vector Uniforms(const char* c1, const char* c2, const char* c3, const char* c4, const char* c5) - { - std::vector v; - v.push_back(c1); - v.push_back(c2); - v.push_back(c3); - v.push_back(c4); - v.push_back(c5); - return v; - } - std::vector Uniforms(const char* c1, const char* c2, const char* c3, const char* c4, const char* c5, const char* c6) - { - std::vector v; - v.push_back(c1); - v.push_back(c2); - v.push_back(c3); - v.push_back(c4); - v.push_back(c5); - v.push_back(c6); - return v; - } - std::vector Uniforms(const char* c1, const char* c2, const char* c3, const char* c4, const char* c5, const char* c6, const char* c7) - { - std::vector v; - v.push_back(c1); - v.push_back(c2); - v.push_back(c3); - v.push_back(c4); - v.push_back(c5); - v.push_back(c6); - v.push_back(c7); - return v; - } - std::vector Uniforms(const char* c1, const char* c2, const char* c3, const char* c4, const char* c5, const char* c6, const char* c7, const char* c8) - { - std::vector v; - v.push_back(c1); - v.push_back(c2); - v.push_back(c3); - v.push_back(c4); - v.push_back(c5); - v.push_back(c6); - v.push_back(c7); - v.push_back(c8); - return v; - } - // Solid Normal and depth pass shaders ObjectPass1Shader::ObjectPass1Shader() { @@ -570,14 +532,14 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass1.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "InverseModelMatrix")); + AssignUniforms("ModelMatrix", "InverseModelMatrix"); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } TU_tex = 0; - AssignTextureUnit(Program, { TexUnit(TU_tex, "tex" ) }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } ObjectRefPass1Shader::ObjectRefPass1Shader() @@ -586,14 +548,14 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "InverseModelMatrix", "TextureMatrix")); + AssignUniforms("ModelMatrix", "InverseModelMatrix", "TextureMatrix"); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } TU_tex = 0; - AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } GrassPass1Shader::GrassPass1Shader() @@ -602,9 +564,9 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/grass_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "InverseModelMatrix", "windDir")); + AssignUniforms("ModelMatrix", "InverseModelMatrix", "windDir"); TU_tex = 0; - AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } NormalMapShader::NormalMapShader() @@ -613,7 +575,7 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/normalmap.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/normalmap.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "InverseModelMatrix")); + AssignUniforms("ModelMatrix", "InverseModelMatrix"); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -621,7 +583,7 @@ namespace MeshShader } TU_normalmap = 1; TU_glossy = 0; - AssignTextureUnit(Program, { TexUnit(TU_normalmap, "normalMap"), TexUnit(TU_glossy, "DiffuseForAlpha") }); + AssignTextureUnit(Program, TexUnit(TU_normalmap, "normalMap"), TexUnit(TU_glossy, "DiffuseForAlpha")); } InstancedObjectPass1Shader::InstancedObjectPass1Shader() @@ -632,7 +594,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass1.frag").c_str()); TU_tex = 0; - AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -650,7 +612,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str()); TU_tex = 0; - AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -667,9 +629,9 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_grass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass1.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("windDir")); + AssignUniforms("windDir"); TU_tex = 0; - AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -686,7 +648,7 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "TextureMatrix", "ambient")); + AssignUniforms("ModelMatrix", "TextureMatrix", "ambient"); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -694,12 +656,12 @@ namespace MeshShader } TU_Albedo = 3; - AssignTextureUnit(Program, { + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap"), TexUnit(1, "SpecularMap"), TexUnit(2, "SSAO"), TexUnit(TU_Albedo, "Albedo") - }); + ); } ObjectPass2Shader *ObjectPass2ShaderInstance; @@ -711,15 +673,15 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ambient")); + AssignUniforms("ambient"); TU_Albedo = 3; - AssignTextureUnit(Program, { + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap"), TexUnit(1, "SpecularMap"), TexUnit(2, "SSAO"), TexUnit(TU_Albedo, "Albedo") - }); + ); if (!UserConfigParams::m_ubo_disabled) { @@ -737,15 +699,15 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ambient")); + AssignUniforms("ambient"); TU_Albedo = 3; - AssignTextureUnit(Program, { + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap"), TexUnit(1, "SpecularMap"), TexUnit(2, "SSAO"), TexUnit(TU_Albedo, "Albedo") - }); + ); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); @@ -759,19 +721,19 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/detailledobject_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "ambient")); + AssignUniforms("ModelMatrix", "ambient"); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); TU_Albedo = 3; TU_detail = 4; - AssignTextureUnit(Program, { + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap"), TexUnit(1, "SpecularMap"), TexUnit(2, "SSAO"), TexUnit(TU_Albedo, "Albedo"), TexUnit(TU_detail, "Detail") - }); + ); } DetailledObjectPass2Shader *DetailledObjectPass2ShaderInstance; @@ -781,7 +743,7 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix")); + AssignUniforms("ModelMatrix"); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -789,7 +751,7 @@ namespace MeshShader } TU_tex = 3; - AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } ObjectUnlitShader *ObjectUnlitShaderInstance; @@ -800,7 +762,7 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectref_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "TextureMatrix", "ambient")); + AssignUniforms("ModelMatrix", "TextureMatrix", "ambient"); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -808,12 +770,12 @@ namespace MeshShader } TU_Albedo = 3; - AssignTextureUnit(Program, { + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap"), TexUnit(1, "SpecularMap"), TexUnit(2, "SSAO"), TexUnit(TU_Albedo, "Albedo") - }); + ); } ObjectRefPass2Shader *ObjectRefPass2ShaderInstance; @@ -824,15 +786,15 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/grass_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/grass_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "windDir", "ambient")); + AssignUniforms("ModelMatrix", "windDir", "ambient"); TU_Albedo = 3; - AssignTextureUnit(Program, { + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap"), TexUnit(1, "SpecularMap"), TexUnit(2, "SSAO"), TexUnit(TU_Albedo, "Albedo") - }); + ); } GrassPass2Shader *GrassPass2ShaderInstance; @@ -844,17 +806,17 @@ namespace MeshShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/instanced_grass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/grass_pass2.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("windDir", "SunDir", "ambient")); + AssignUniforms("windDir", "SunDir", "ambient"); TU_Albedo = 3; TU_dtex = 4; - AssignTextureUnit(Program, { + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap"), TexUnit(1, "SpecularMap"), TexUnit(2, "SSAO"), TexUnit(TU_Albedo, "Albedo"), TexUnit(TU_dtex, "dtex") - }); + ); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); @@ -869,7 +831,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getLightFactor.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/objectpass_spheremap.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "InverseModelMatrix", "ambient")); + AssignUniforms("ModelMatrix", "InverseModelMatrix", "ambient"); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -877,12 +839,12 @@ namespace MeshShader } TU_tex = 3; - AssignTextureUnit(Program, { + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap"), TexUnit(1, "SpecularMap"), TexUnit(2, "SSAO"), TexUnit(TU_tex, "tex") - }); + ); } SphereMapShader *SphereMapShaderInstance; @@ -892,14 +854,14 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/splatting.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "ambient")); + AssignUniforms("ModelMatrix", "ambient"); TU_tex_layout = 3; TU_tex_detail0 = 4; TU_tex_detail1 = 5; TU_tex_detail2 = 6; TU_tex_detail3 = 7; - AssignTextureUnit(Program, { + AssignTextureUnit(Program, TexUnit(0, "DiffuseMap"), TexUnit(1, "SpecularMap"), TexUnit(2, "SSAO"), @@ -908,7 +870,7 @@ namespace MeshShader TexUnit(TU_tex_detail1, "tex_detail1"), TexUnit(TU_tex_detail2, "tex_detail2"), TexUnit(TU_tex_detail3, "tex_detail3") - }); + ); } SplattingShader *SplattingShaderInstance; @@ -942,7 +904,7 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/transparent.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "TextureMatrix")); + AssignUniforms("ModelMatrix", "TextureMatrix"); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -950,7 +912,7 @@ namespace MeshShader } TU_tex = 0; - AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } TransparentShader *TransparentShaderInstance; @@ -960,7 +922,7 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/object_pass.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/transparentfog.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "TextureMatrix", "fogmax", "startH", "endH", "start", "end", "col")); + AssignUniforms("ModelMatrix", "TextureMatrix", "fogmax", "startH", "endH", "start", "end", "col"); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -968,7 +930,7 @@ namespace MeshShader } TU_tex = 0; - AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } TransparentFogShader *TransparentFogShaderInstance; @@ -1053,7 +1015,7 @@ namespace MeshShader GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/white.frag").c_str()); } - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix")); + AssignUniforms("ModelMatrix"); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } @@ -1127,7 +1089,7 @@ namespace MeshShader GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str()); } - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix")); + AssignUniforms("ModelMatrix"); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); TU_tex = 0; @@ -1183,7 +1145,7 @@ namespace MeshShader GL_GEOMETRY_SHADER, file_manager->getAsset("shaders/shadow.geom").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str()); } - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "windDir")); + AssignUniforms("ModelMatrix", "windDir"); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); TU_tex = 0; @@ -1214,9 +1176,9 @@ namespace MeshShader GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_unlit.frag").c_str()); } TU_tex = 0; - AssignTextureUnit(Program, { TexUnit(TU_tex, "tex") }); + AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); - AssignUniforms(Program, uniforms, Uniforms("windDir")); + AssignUniforms("windDir"); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } @@ -1228,7 +1190,7 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/displace.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/white.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix")); + AssignUniforms("ModelMatrix"); if (!UserConfigParams::m_ubo_disabled) { GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); @@ -1244,17 +1206,17 @@ namespace MeshShader Program = LoadProgram( GL_VERTEX_SHADER, file_manager->getAsset("shaders/displace.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/displace.frag").c_str()); - AssignUniforms(Program, uniforms, Uniforms("ModelMatrix", "dir", "dir2" )); + AssignUniforms("ModelMatrix", "dir", "dir2"); TU_displacement_tex = 0; TU_color_tex = 1; TU_mask_tex = 2; TU_tex = 3; - AssignTextureUnit(Program, { + AssignTextureUnit(Program, TexUnit(TU_displacement_tex, "displacement_tex"), TexUnit(TU_color_tex, "color_tex"), TexUnit(TU_mask_tex, "mask_tex"), TexUnit(TU_tex, "tex") - }); + ); GLuint uniform_ViewProjectionMatrixesUBO = glGetUniformBlockIndex(Program, "MatrixesData"); glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index e5d0eecd2..baf16361c 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -109,6 +109,19 @@ class ShaderHelper { protected: std::vector uniforms; + + void AssignUniforms(const char* name) + { + uniforms.push_back(glGetUniformLocation(Program, name)); + } + + template + void AssignUniforms(const char* name, T... rest) + { + uniforms.push_back(glGetUniformLocation(Program, name)); + AssignUniforms(rest...); + } + public: GLuint Program; @@ -125,6 +138,19 @@ class ShaderHelperSingleton : public Singleton { protected: std::vector uniforms; + + void AssignUniforms(const char* name) + { + uniforms.push_back(glGetUniformLocation(Program, name)); + } + + template + void AssignUniforms(const char* name, T... rest) + { + uniforms.push_back(glGetUniformLocation(Program, name)); + AssignUniforms(rest...); + } + public: friend class Singleton; GLuint Program; From 7e8fb6bc16a71e0c9c5ea7a61b7d6d2266f822c3 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Fri, 18 Jul 2014 20:11:40 -0400 Subject: [PATCH 46/93] Fix duplicated paramter name --- src/graphics/shaders.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index baf16361c..33b6be226 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -144,8 +144,8 @@ protected: uniforms.push_back(glGetUniformLocation(Program, name)); } - template - void AssignUniforms(const char* name, T... rest) + template + void AssignUniforms(const char* name, U... rest) { uniforms.push_back(glGetUniformLocation(Program, name)); AssignUniforms(rest...); From 01ed87ec1b7b9a683597af7a407c245868b915b1 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Fri, 18 Jul 2014 20:30:35 -0400 Subject: [PATCH 47/93] continue --- src/graphics/render_geometry.cpp | 45 ++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index 28766c20b..9f5b8ba86 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -292,14 +292,43 @@ void IrrDriver::renderSolidSecondPass() m_scene_manager->drawAll(scene::ESNRP_SOLID); - renderMeshes2ndPass({ { MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true } }, ListMatDefault::Arguments); - renderMeshes2ndPass({ { MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo, true } }, ListMatAlphaRef::Arguments); - renderMeshes2ndPass({ { MeshShader::SphereMapShader::getInstance()->TU_tex, true } }, ListMatSphereMap::Arguments); - renderMeshes2ndPass({ { MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, true }, { MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail, true } }, ListMatDetails::Arguments); - renderMeshes2ndPass({ { MeshShader::GrassPass2Shader::getInstance()->TU_Albedo, true } }, ListMatGrass::Arguments); - renderMeshes2ndPass({ { MeshShader::ObjectUnlitShader::getInstance()->TU_tex, true } }, ListMatUnlit::Arguments); - renderMeshes2ndPass({ { 8, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_layout, false }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail0, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail1, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail2, true }, { MeshShader::SplattingShader::getInstance()->TU_tex_detail3, true } }, ListMatSplatting::Arguments); - renderMeshes2ndPass({ { MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true } }, ListMatNormalMap::Arguments); + renderMeshes2ndPass(TexUnits( + TexUnit(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true) + ), ListMatDefault::Arguments); + + renderMeshes2ndPass(TexUnits( + TexUnit(MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo, true) + ), ListMatAlphaRef::Arguments); + + renderMeshes2ndPass(TexUnits( + TexUnit(MeshShader::SphereMapShader::getInstance()->TU_tex, true) + ), ListMatSphereMap::Arguments); + + renderMeshes2ndPass(TexUnits( + TexUnit(MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, true), + TexUnit(MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail, true) + ), ListMatDetails::Arguments); + + renderMeshes2ndPass(TexUnits( + TexUnit(MeshShader::GrassPass2Shader::getInstance()->TU_Albedo, true) + ), ListMatGrass::Arguments); + + renderMeshes2ndPass(TexUnits( + TexUnit(MeshShader::ObjectUnlitShader::getInstance()->TU_tex, true) + ), ListMatUnlit::Arguments); + + renderMeshes2ndPass(TexUnits( + TexUnit(8, true), + TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_layout, false), + TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_detail0, true), + TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_detail1, true), + TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_detail2, true), + TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_detail3, true) + ), ListMatSplatting::Arguments); + + renderMeshes2ndPass(TexUnits( + TexUnit(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true) + ), ListMatNormalMap::Arguments); } } From 476d6eda029e4db5b81e4a3d3573d23765d8b8c0 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Sun, 20 Jul 2014 18:10:48 -0400 Subject: [PATCH 48/93] almost there --- src/graphics/render_geometry.cpp | 43 +++++++++++++++++++------------- src/graphics/shaders.cpp | 5 ++++ src/graphics/shaders.hpp | 10 +++++--- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index 9f5b8ba86..7349b46cc 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -355,16 +355,24 @@ void IrrDriver::renderTransparent() if (World::getWorld() && World::getWorld()->isFogEnabled()) { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass({ { MeshShader::TransparentFogShader::getInstance()->TU_tex, true } }, ListBlendTransparentFog::Arguments); + renderMeshes2ndPass(TexUnits( + TexUnit(MeshShader::TransparentFogShader::getInstance()->TU_tex, true) + ), ListBlendTransparentFog::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass({ { MeshShader::TransparentFogShader::getInstance()->TU_tex, true } }, ListAdditiveTransparentFog::Arguments); + renderMeshes2ndPass(TexUnits( + TexUnit(MeshShader::TransparentFogShader::getInstance()->TU_tex, true) + ), ListAdditiveTransparentFog::Arguments); } else { glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - renderMeshes2ndPass({ { MeshShader::TransparentShader::getInstance()->TU_tex, true } }, ListBlendTransparent::Arguments); + renderMeshes2ndPass(TexUnits( + TexUnit(MeshShader::TransparentShader::getInstance()->TU_tex, true) + ), ListBlendTransparent::Arguments); glBlendFunc(GL_ONE, GL_ONE); - renderMeshes2ndPass({ { MeshShader::TransparentShader::getInstance()->TU_tex, true } }, ListAdditiveTransparent::Arguments); + renderMeshes2ndPass(TexUnits( + TexUnit(MeshShader::TransparentShader::getInstance()->TU_tex, true) + ), ListAdditiveTransparent::Arguments); } if (!UserConfigParams::m_dynamic_lights) @@ -542,14 +550,15 @@ void IrrDriver::renderShadows() ListMatSplatting::Arguments.clear(); m_scene_manager->drawAll(scene::ESNRP_SOLID); - renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatDefault::Arguments); - renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatSphereMap::Arguments); - renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatUnlit::Arguments); - renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatDetails::Arguments); - renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatSplatting::Arguments); - renderShadow(MeshShader::ShadowShaderInstance, {}, ListMatNormalMap::Arguments); - renderShadow(MeshShader::RefShadowShaderInstance, { MeshShader::RefShadowShaderInstance->TU_tex }, ListMatAlphaRef::Arguments); - renderShadow(MeshShader::GrassShadowShaderInstance, { MeshShader::GrassShadowShaderInstance->TU_tex }, ListMatGrass::Arguments); + std::vector noTexUnits; + renderShadow(MeshShader::ShadowShaderInstance, noTexUnits, ListMatDefault::Arguments); + renderShadow(MeshShader::ShadowShaderInstance, noTexUnits, ListMatSphereMap::Arguments); + renderShadow(MeshShader::ShadowShaderInstance, noTexUnits, ListMatUnlit::Arguments); + renderShadow(MeshShader::ShadowShaderInstance, noTexUnits, ListMatDetails::Arguments); + renderShadow(MeshShader::ShadowShaderInstance, noTexUnits, ListMatSplatting::Arguments); + renderShadow(MeshShader::ShadowShaderInstance, noTexUnits, ListMatNormalMap::Arguments); + renderShadow(MeshShader::RefShadowShaderInstance, std::vector{ MeshShader::RefShadowShaderInstance->TU_tex }, ListMatAlphaRef::Arguments); + renderShadow(MeshShader::GrassShadowShaderInstance, std::vector{ MeshShader::GrassShadowShaderInstance->TU_tex }, ListMatGrass::Arguments); glDisable(GL_POLYGON_OFFSET_FILL); @@ -559,9 +568,9 @@ void IrrDriver::renderShadows() m_rtts->getRSM().Bind(); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListMatDefault::Arguments); - drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListMatSphereMap::Arguments); - drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListMatUnlit::Arguments); - drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListMatDetails::Arguments); - drawRSM(rsm_matrix, { MeshShader::RSMShader::TU_tex }, ListMatSplatting::Arguments); + drawRSM(rsm_matrix, std::vector{ MeshShader::RSMShader::TU_tex }, ListMatDefault::Arguments); + drawRSM(rsm_matrix, std::vector{ MeshShader::RSMShader::TU_tex }, ListMatSphereMap::Arguments); + drawRSM(rsm_matrix, std::vector{ MeshShader::RSMShader::TU_tex }, ListMatUnlit::Arguments); + drawRSM(rsm_matrix, std::vector{ MeshShader::RSMShader::TU_tex }, ListMatDetails::Arguments); + drawRSM(rsm_matrix, std::vector{ MeshShader::RSMShader::TU_tex }, ListMatSplatting::Arguments); } diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index e1a27476e..782cf0163 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -28,6 +28,11 @@ using namespace video; +GLuint UniformHelper::getUniformLocation(GLuint program, const char* name) +{ + return glGetUniformLocation(program, name); +} + Shaders::Shaders() { // Callbacks diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index 33b6be226..f7246e2bf 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -56,6 +56,8 @@ void glUniform1fWrapper(GLuint, float); struct UniformHelper { + GLuint getUniformLocation(GLuint program, const char* name); + template static void setUniformsHelper(const std::vector &uniforms) { @@ -112,13 +114,13 @@ protected: void AssignUniforms(const char* name) { - uniforms.push_back(glGetUniformLocation(Program, name)); + uniforms.push_back(UniformHelper::getUniformLocation(Program, name)); } template void AssignUniforms(const char* name, T... rest) { - uniforms.push_back(glGetUniformLocation(Program, name)); + uniforms.push_back(UniformHelper::getUniformLocation(Program, name)); AssignUniforms(rest...); } @@ -141,13 +143,13 @@ protected: void AssignUniforms(const char* name) { - uniforms.push_back(glGetUniformLocation(Program, name)); + uniforms.push_back(UniformHelper::getUniformLocation(Program, name)); } template void AssignUniforms(const char* name, U... rest) { - uniforms.push_back(glGetUniformLocation(Program, name)); + uniforms.push_back(UniformHelper::getUniformLocation(Program, name)); AssignUniforms(rest...); } From 14080e602ad02605c97f8db71164b5c7aee8623c Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Sun, 20 Jul 2014 18:18:35 -0400 Subject: [PATCH 49/93] Code in previous commit was incorrect, no idea why it even compiled for me --- src/graphics/shaders.cpp | 2 +- src/graphics/shaders.hpp | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 782cf0163..b160b3d6b 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -28,7 +28,7 @@ using namespace video; -GLuint UniformHelper::getUniformLocation(GLuint program, const char* name) +GLuint getUniformLocation(GLuint program, const char* name) { return glGetUniformLocation(program, name); } diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index f7246e2bf..407643328 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -56,8 +56,6 @@ void glUniform1fWrapper(GLuint, float); struct UniformHelper { - GLuint getUniformLocation(GLuint program, const char* name); - template static void setUniformsHelper(const std::vector &uniforms) { @@ -105,6 +103,7 @@ struct UniformHelper }; void bypassUBO(GLuint Program); +GLuint getUniformLocation(GLuint program, const char* name); template class ShaderHelper @@ -114,13 +113,13 @@ protected: void AssignUniforms(const char* name) { - uniforms.push_back(UniformHelper::getUniformLocation(Program, name)); + uniforms.push_back(getUniformLocation(Program, name)); } template void AssignUniforms(const char* name, T... rest) { - uniforms.push_back(UniformHelper::getUniformLocation(Program, name)); + uniforms.push_back(getUniformLocation(Program, name)); AssignUniforms(rest...); } @@ -143,13 +142,13 @@ protected: void AssignUniforms(const char* name) { - uniforms.push_back(UniformHelper::getUniformLocation(Program, name)); + uniforms.push_back(getUniformLocation(Program, name)); } template void AssignUniforms(const char* name, U... rest) { - uniforms.push_back(UniformHelper::getUniformLocation(Program, name)); + uniforms.push_back(getUniformLocation(Program, name)); AssignUniforms(rest...); } From 939e5d9fff7d76e19cdbcabad7f77608f08079a8 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Mon, 21 Jul 2014 19:48:17 -0400 Subject: [PATCH 50/93] Rework graphics settings popup to make it clear which options require the advanced pipeline --- data/gui/custom_video_settings.stkgui | 44 +++++++++++++++------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/data/gui/custom_video_settings.stkgui b/data/gui/custom_video_settings.stkgui index 2942c4312..e5383347b 100644 --- a/data/gui/custom_video_settings.stkgui +++ b/data/gui/custom_video_settings.stkgui @@ -70,27 +70,11 @@ - - -
-
- - -
- - - -
- - -
-
-
+ +
@@ -105,7 +89,27 @@
+ + +
+ + +
+ + +
+ + + +
+ + +
+
+
@@ -136,9 +140,9 @@
- + -
From b2fab2ae6d01135c81cdfc1768deb7d3997ebb26 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Mon, 21 Jul 2014 19:55:02 -0400 Subject: [PATCH 51/93] Fix glitch where the irrlicht dialog close button would be slightly visible in the corner of a STK dialog, and a crash would ensue if you clicked it --- src/guiengine/modaldialog.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/guiengine/modaldialog.cpp b/src/guiengine/modaldialog.cpp index 56ab935ed..544f4c012 100644 --- a/src/guiengine/modaldialog.cpp +++ b/src/guiengine/modaldialog.cpp @@ -26,6 +26,7 @@ #include "utils/log.hpp" #include +#include using namespace irr; using namespace core; @@ -134,6 +135,8 @@ void ModalDialog::doInit() m_irrlicht_window = GUIEngine::getGUIEnv()->addWindow(m_area, true /* modal */); + m_irrlicht_window->setDrawTitlebar(false); + m_irrlicht_window->getCloseButton()->setVisible(false); GUIEngine::getSkin()->m_dialog = true; GUIEngine::getSkin()->m_dialog_size = 0.0f; From fff498b9fe0e47deca691c04b2e2db0e8b4280ce Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Mon, 21 Jul 2014 19:58:45 -0400 Subject: [PATCH 52/93] Improve graphics settings dialog to try to avoid mutually incompatible options --- .../dialogs/custom_video_settings.cpp | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/src/states_screens/dialogs/custom_video_settings.cpp b/src/states_screens/dialogs/custom_video_settings.cpp index f5c270d7c..2be8a7eb2 100644 --- a/src/states_screens/dialogs/custom_video_settings.cpp +++ b/src/states_screens/dialogs/custom_video_settings.cpp @@ -102,29 +102,19 @@ GUIEngine::EventPropagation CustomVideoSettingsDialog::processEvent(const std::s { if (eventSource == "close") { - bool dynamic_light = getWidget("dynamiclight")->getState(); - UserConfigParams::m_dynamic_lights = dynamic_light; + bool advanced_pipeline = getWidget("dynamiclight")->getState(); + UserConfigParams::m_dynamic_lights = advanced_pipeline; - UserConfigParams::m_graphical_effects = - getWidget("anim_gfx")->getState(); - UserConfigParams::m_weather_effects = - getWidget("weather_gfx")->getState(); - UserConfigParams::m_ubo_disabled = - !getWidget("ubo")->getState(); UserConfigParams::m_dof = - getWidget("dof")->getState(); - UserConfigParams::m_high_definition_textures = - getWidget("hd-textures")->getState(); - + advanced_pipeline && getWidget("dof")->getState(); + UserConfigParams::m_motionblur = - getWidget("motionblur")->getState(); - UserConfigParams::m_show_steering_animations = - getWidget("steering_animations")->getValue(); - - if (dynamic_light) + advanced_pipeline && getWidget("motionblur")->getState(); + + if (advanced_pipeline) { UserConfigParams::m_shadows = - getWidget("shadows")->getValue(); + advanced_pipeline && getWidget("shadows")->getValue(); } else { @@ -132,26 +122,41 @@ GUIEngine::EventPropagation CustomVideoSettingsDialog::processEvent(const std::s } UserConfigParams::m_mlaa = - getWidget("mlaa")->getState(); + advanced_pipeline && getWidget("mlaa")->getState(); UserConfigParams::m_ssao = - getWidget("ssao")->getState(); + advanced_pipeline && getWidget("ssao")->getState(); UserConfigParams::m_light_shaft = - getWidget("lightshaft")->getState(); + advanced_pipeline && getWidget("lightshaft")->getState(); UserConfigParams::m_gi = - getWidget("global_illumination")->getState(); + advanced_pipeline && getWidget("global_illumination")->getState(); UserConfigParams::m_glow = - getWidget("glow")->getState(); + advanced_pipeline && getWidget("glow")->getState(); UserConfigParams::m_bloom = - getWidget("bloom")->getState(); + advanced_pipeline && getWidget("bloom")->getState(); UserConfigParams::m_texture_compression = getWidget("texture_compression")->getState(); + UserConfigParams::m_graphical_effects = + getWidget("anim_gfx")->getState(); + + UserConfigParams::m_weather_effects = + getWidget("weather_gfx")->getState(); + + UserConfigParams::m_ubo_disabled = + !getWidget("ubo")->getState(); + + UserConfigParams::m_high_definition_textures = + getWidget("hd-textures")->getState(); + + UserConfigParams::m_show_steering_animations = + getWidget("steering_animations")->getValue(); + switch (getWidget("filtering")->getValue()) { case 0: From c322c507daf4998fa125b41b70f3c6d6e575aaec Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 22 Jul 2014 13:28:12 +1000 Subject: [PATCH 53/93] Fix shader error (vlj, please check). --- data/shaders/grass_pass2.frag | 1 + 1 file changed, 1 insertion(+) diff --git a/data/shaders/grass_pass2.frag b/data/shaders/grass_pass2.frag index 5d1b17101..55aeecf59 100644 --- a/data/shaders/grass_pass2.frag +++ b/data/shaders/grass_pass2.frag @@ -3,6 +3,7 @@ uniform mat4 ViewMatrix; uniform mat4 ProjectionMatrix; uniform mat4 InverseViewMatrix; uniform mat4 InverseProjectionMatrix; +uniform vec2 screen; #else layout (std140) uniform MatrixesData { From a9a46a2dd6039e88c9ed27fcbe008a75acf21c8a Mon Sep 17 00:00:00 2001 From: Flakebi Date: Tue, 15 Jul 2014 17:57:37 +0200 Subject: [PATCH 54/93] Some little fixes --- src/guiengine/event_handler.cpp | 2 +- src/guiengine/widget.hpp | 2 +- src/guiengine/widgets/label_widget.cpp | 2 ++ src/guiengine/widgets/progress_bar_widget.cpp | 1 + src/tracks/track_object_presentation.cpp | 2 +- 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/guiengine/event_handler.cpp b/src/guiengine/event_handler.cpp index 217641049..3546473e5 100644 --- a/src/guiengine/event_handler.cpp +++ b/src/guiengine/event_handler.cpp @@ -608,7 +608,7 @@ EventPropagation EventHandler::onGUIEvent(const SEvent& event) if (w == NULL) break; - if (!w->m_focusable) return GUIEngine::EVENT_BLOCK; + if (!w->isFocusable() || !w->isActivated()) return GUIEngine::EVENT_BLOCK; // When a modal dialog is shown, don't select widgets out of the dialog if (ModalDialog::isADialogActive() && !ModalDialog::getCurrent()->isMyChild(w)) diff --git a/src/guiengine/widget.hpp b/src/guiengine/widget.hpp index aa3dd5391..57eb8a1ed 100644 --- a/src/guiengine/widget.hpp +++ b/src/guiengine/widget.hpp @@ -71,7 +71,7 @@ namespace GUIEngine GAMEPAD_BADGE = 16, /** A keyboard icon */ KEYBOARD_BADGE = 32, - /** An hourglass badge to indocate loading */ + /** An hourglass badge to indicate loading */ LOADING_BADGE = 64 }; diff --git a/src/guiengine/widgets/label_widget.cpp b/src/guiengine/widgets/label_widget.cpp index f7c202014..c27ec1d22 100644 --- a/src/guiengine/widgets/label_widget.cpp +++ b/src/guiengine/widgets/label_widget.cpp @@ -50,6 +50,8 @@ LabelWidget::LabelWidget(bool title, bool bright) : Widget(WTYPE_LABEL) } else m_has_color = false; + + setFocusable(false); } // LabelWidget // ---------------------------------------------------------------------------- diff --git a/src/guiengine/widgets/progress_bar_widget.cpp b/src/guiengine/widgets/progress_bar_widget.cpp index 10c493b2b..55c65ac7c 100644 --- a/src/guiengine/widgets/progress_bar_widget.cpp +++ b/src/guiengine/widgets/progress_bar_widget.cpp @@ -34,6 +34,7 @@ ProgressBarWidget::ProgressBarWidget(bool show_label) : Widget(WTYPE_PROGRESS) { m_value = 0; m_show_label = show_label; + setFocusable(false); } // ----------------------------------------------------------------------------- diff --git a/src/tracks/track_object_presentation.cpp b/src/tracks/track_object_presentation.cpp index b62663cec..d3b53686d 100644 --- a/src/tracks/track_object_presentation.cpp +++ b/src/tracks/track_object_presentation.cpp @@ -387,7 +387,7 @@ void TrackObjectPresentationMesh::init(const XMLNode* xml_node, scene::ISceneNod m_frame_start = 0; m_frame_end = 0; - if (World::getWorld() != NULL && World::getWorld()->getTrack() != NULL) + if (World::getWorld() != NULL && World::getWorld()->getTrack() != NULL && xml_node != NULL) World::getWorld()->getTrack()->handleAnimatedTextures(m_node, *xml_node); } //#ifdef DEBUG From 53fd34f7b8e4883f26d7f11e1c09f182ecc50e3b Mon Sep 17 00:00:00 2001 From: Flakebi Date: Wed, 16 Jul 2014 03:11:46 +0200 Subject: [PATCH 55/93] Fix issues with in-game screens --- src/guiengine/abstract_state_manager.cpp | 3 ++ src/guiengine/abstract_state_manager.hpp | 6 ++- src/states_screens/help_screen_1.cpp | 18 ++++++--- src/states_screens/help_screen_2.cpp | 17 ++++++--- src/states_screens/help_screen_3.cpp | 18 ++++++--- src/states_screens/help_screen_4.cpp | 17 +++++++-- src/states_screens/options_screen_audio.cpp | 20 +++++++--- src/states_screens/options_screen_input.cpp | 29 +++++++++++--- src/states_screens/options_screen_input2.cpp | 30 ++++++++++----- src/states_screens/options_screen_ui.cpp | 19 +++++++--- src/states_screens/options_screen_video.cpp | 26 ++++++------- src/states_screens/user_screen.cpp | 40 +++++++++++++++----- 12 files changed, 171 insertions(+), 72 deletions(-) diff --git a/src/guiengine/abstract_state_manager.cpp b/src/guiengine/abstract_state_manager.cpp index 3b7989370..bafed2a3a 100644 --- a/src/guiengine/abstract_state_manager.cpp +++ b/src/guiengine/abstract_state_manager.cpp @@ -140,6 +140,9 @@ void AbstractStateManager::pushScreen(Screen* screen) void AbstractStateManager::replaceTopMostScreen(Screen* screen, GUIEngine::GameState gameState) { + if (gameState == GUIEngine::CURRENT) + gameState = getGameState(); + //assert(m_game_mode != GAME); // you need to close any dialog before calling this assert(!ModalDialog::isADialogActive()); diff --git a/src/guiengine/abstract_state_manager.hpp b/src/guiengine/abstract_state_manager.hpp index b8ace0901..07f8bf8fd 100644 --- a/src/guiengine/abstract_state_manager.hpp +++ b/src/guiengine/abstract_state_manager.hpp @@ -40,7 +40,9 @@ namespace GUIEngine { MENU, GAME, - INGAME_MENU + INGAME_MENU, + /** Dummy GameState e. g. for parameters. */ + CURRENT = MENU | GAME | INGAME_MENU }; // GameState /** @@ -82,7 +84,7 @@ namespace GUIEngine * without displaying the second-topmost menu of the stack * in-between) */ - void replaceTopMostScreen(Screen* screen, GUIEngine::GameState gameState = GUIEngine::MENU); + void replaceTopMostScreen(Screen* screen, GUIEngine::GameState gameState = GUIEngine::CURRENT); /** * \brief removes the menu at the top of the screens stack diff --git a/src/states_screens/help_screen_1.cpp b/src/states_screens/help_screen_1.cpp index 2323be697..380e342a5 100644 --- a/src/states_screens/help_screen_1.cpp +++ b/src/states_screens/help_screen_1.cpp @@ -89,13 +89,19 @@ void HelpScreen1::eventCallback(Widget* widget, const std::string& name, const i } else if (name == "category") { - std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER).c_str(); + std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); - //if (selection == "page1") StateManager::get()->replaceTopMostScreen(Help1Screen::getInstance()); - //else - if (selection == "page2") StateManager::get()->replaceTopMostScreen(HelpScreen2::getInstance()); - else if (selection == "page3") StateManager::get()->replaceTopMostScreen(HelpScreen3::getInstance()); - else if (selection == "page4") StateManager::get()->replaceTopMostScreen(HelpScreen4::getInstance()); + Screen *screen = NULL; + //if (selection == "page1") + // screen = HelpScreen1::getInstance(); + if (selection == "page2") + screen = HelpScreen2::getInstance(); + else if (selection == "page3") + screen = HelpScreen3::getInstance(); + else if (selection == "page4") + screen = HelpScreen4::getInstance(); + if(screen) + StateManager::get()->replaceTopMostScreen(screen); } else if (name == "back") { diff --git a/src/states_screens/help_screen_2.cpp b/src/states_screens/help_screen_2.cpp index f3c751474..b2b08a0a1 100644 --- a/src/states_screens/help_screen_2.cpp +++ b/src/states_screens/help_screen_2.cpp @@ -46,12 +46,19 @@ void HelpScreen2::eventCallback(Widget* widget, const std::string& name, const i { if (name == "category") { - std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER).c_str(); + std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); - if(selection == "page1") StateManager::get()->replaceTopMostScreen(HelpScreen1::getInstance()); - //else if(selection == "page2") StateManager::get()->replaceTopMostScreen(HelpScreen2::getInstance()); - else if(selection == "page3") StateManager::get()->replaceTopMostScreen(HelpScreen3::getInstance()); - else if(selection == "page4") StateManager::get()->replaceTopMostScreen(HelpScreen4::getInstance()); + Screen *screen = NULL; + if (selection == "page1") + screen = HelpScreen1::getInstance(); + //else if (selection == "page2") + // screen = HelpScreen2::getInstance(); + else if (selection == "page3") + screen = HelpScreen3::getInstance(); + else if (selection == "page4") + screen = HelpScreen4::getInstance(); + if(screen) + StateManager::get()->replaceTopMostScreen(screen); } else if (name == "back") { diff --git a/src/states_screens/help_screen_3.cpp b/src/states_screens/help_screen_3.cpp index 35693dd94..a8a7cb4f6 100644 --- a/src/states_screens/help_screen_3.cpp +++ b/src/states_screens/help_screen_3.cpp @@ -47,12 +47,20 @@ void HelpScreen3::eventCallback(Widget* widget, const std::string& name, const i { if (name == "category") { - std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER).c_str(); + + std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); - if (selection == "page1") StateManager::get()->replaceTopMostScreen(HelpScreen1::getInstance()); - else if (selection == "page2") StateManager::get()->replaceTopMostScreen(HelpScreen2::getInstance()); - //else if(selection == "page3") StateManager::get()->replaceTopMostScreen(Help3Screen::getInstance()); - else if(selection == "page4") StateManager::get()->replaceTopMostScreen(HelpScreen4::getInstance()); + Screen *screen = NULL; + if (selection == "page1") + screen = HelpScreen1::getInstance(); + else if (selection == "page2") + screen = HelpScreen2::getInstance(); + //else if (selection == "page3") + // screen = HelpScreen3::getInstance(); + else if (selection == "page4") + screen = HelpScreen4::getInstance(); + if(screen) + StateManager::get()->replaceTopMostScreen(screen); } else if (name == "back") { diff --git a/src/states_screens/help_screen_4.cpp b/src/states_screens/help_screen_4.cpp index 97ddf3809..c271467db 100644 --- a/src/states_screens/help_screen_4.cpp +++ b/src/states_screens/help_screen_4.cpp @@ -47,11 +47,20 @@ void HelpScreen4::eventCallback(Widget* widget, const std::string& name, const i { if (name == "category") { - std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER).c_str(); + + std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); - if (selection == "page1") StateManager::get()->replaceTopMostScreen(HelpScreen1::getInstance()); - else if (selection == "page2") StateManager::get()->replaceTopMostScreen(HelpScreen2::getInstance()); - else if(selection == "page3") StateManager::get()->replaceTopMostScreen(HelpScreen3::getInstance()); + Screen *screen = NULL; + if (selection == "page1") + screen = HelpScreen1::getInstance(); + else if (selection == "page2") + screen = HelpScreen2::getInstance(); + else if (selection == "page3") + screen = HelpScreen3::getInstance(); + //else if (selection == "page4") + // screen = HelpScreen4::getInstance(); + if(screen) + StateManager::get()->replaceTopMostScreen(screen); } else if (name == "back") { diff --git a/src/states_screens/options_screen_audio.cpp b/src/states_screens/options_screen_audio.cpp index 10df8ed22..1cad3443e 100644 --- a/src/states_screens/options_screen_audio.cpp +++ b/src/states_screens/options_screen_audio.cpp @@ -103,13 +103,21 @@ void OptionsScreenAudio::eventCallback(Widget* widget, const std::string& name, { if (name == "options_choice") { - std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER).c_str(); + std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); - if (selection == "tab_audio") StateManager::get()->replaceTopMostScreen(OptionsScreenAudio::getInstance()); - else if (selection == "tab_video") StateManager::get()->replaceTopMostScreen(OptionsScreenVideo::getInstance()); - else if (selection == "tab_players") StateManager::get()->replaceTopMostScreen(TabbedUserScreen::getInstance()); - else if (selection == "tab_controls") StateManager::get()->replaceTopMostScreen(OptionsScreenInput::getInstance()); - else if (selection == "tab_ui") StateManager::get()->replaceTopMostScreen(OptionsScreenUI::getInstance()); + Screen *screen = NULL; + //if (selection == "tab_audio") + // screen = OptionsScreenAudio::getInstance(); + if (selection == "tab_video") + screen = OptionsScreenVideo::getInstance(); + else if (selection == "tab_players") + screen = TabbedUserScreen::getInstance(); + else if (selection == "tab_controls") + screen = OptionsScreenInput::getInstance(); + else if (selection == "tab_ui") + screen = OptionsScreenUI::getInstance(); + if(screen) + StateManager::get()->replaceTopMostScreen(screen); } else if(name == "back") { diff --git a/src/states_screens/options_screen_input.cpp b/src/states_screens/options_screen_input.cpp index 2570d2d38..41b6396dc 100644 --- a/src/states_screens/options_screen_input.cpp +++ b/src/states_screens/options_screen_input.cpp @@ -154,6 +154,15 @@ void OptionsScreenInput::init() const std::string name2("devices"); eventCallback(devices, name2, PLAYER_ID_GAME_MASTER); */ + // Disable adding keyboard configurations + if (StateManager::get()->getGameState() == GUIEngine::INGAME_MENU) + { + getWidget("add_device")->setDeactivated(); + } + else + { + getWidget("add_device")->setActivated(); + } } // init // ----------------------------------------------------------------------------- @@ -184,13 +193,21 @@ void OptionsScreenInput::eventCallback(Widget* widget, const std::string& name, if (name == "options_choice") { - std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER).c_str(); + std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); - if (selection == "tab_audio") StateManager::get()->replaceTopMostScreen(OptionsScreenAudio::getInstance()); - else if (selection == "tab_video") StateManager::get()->replaceTopMostScreen(OptionsScreenVideo::getInstance()); - else if (selection == "tab_players") StateManager::get()->replaceTopMostScreen(TabbedUserScreen::getInstance()); - else if (selection == "tab_controls") StateManager::get()->replaceTopMostScreen(OptionsScreenInput::getInstance()); - else if (selection == "tab_ui") StateManager::get()->replaceTopMostScreen(OptionsScreenUI::getInstance()); + Screen *screen = NULL; + if (selection == "tab_audio") + screen = OptionsScreenAudio::getInstance(); + else if (selection == "tab_video") + screen = OptionsScreenVideo::getInstance(); + else if (selection == "tab_players") + screen = TabbedUserScreen::getInstance(); + //else if (selection == "tab_controls") + // screen = OptionsScreenInput::getInstance(); + else if (selection == "tab_ui") + screen = OptionsScreenUI::getInstance(); + if(screen) + StateManager::get()->replaceTopMostScreen(screen); } else if (name == "add_device") { diff --git a/src/states_screens/options_screen_input2.cpp b/src/states_screens/options_screen_input2.cpp index 6e941a2ae..0ed577dea 100644 --- a/src/states_screens/options_screen_input2.cpp +++ b/src/states_screens/options_screen_input2.cpp @@ -150,6 +150,15 @@ void OptionsScreenInput2::init() actions->addItem(KartActionStrings[PA_MENU_CANCEL], L"" ); updateInputButtons(); + + // Disable deletion keyboard configurations + if (StateManager::get()->getGameState() == GUIEngine::INGAME_MENU) + { + getWidget("delete")->setDeactivated(); + } else + { + getWidget("delete")->setActivated(); + } } // init // ----------------------------------------------------------------------------- @@ -443,18 +452,21 @@ void OptionsScreenInput2::eventCallback(Widget* widget, StateManager *sm = StateManager::get(); if (name == "options_choice") { - const std::string &selection = - ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); + std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); - if (selection == "tab_audio") - sm->replaceTopMostScreen(OptionsScreenAudio::getInstance()); - else if (selection == "tab_video") - sm->replaceTopMostScreen(OptionsScreenVideo::getInstance()); + Screen *screen = NULL; + if (selection == "tab_audio") + screen = OptionsScreenAudio::getInstance(); + //else if (selection == "tab_video") + // screen = OptionsScreenVideo::getInstance(); else if (selection == "tab_players") - sm->replaceTopMostScreen(TabbedUserScreen::getInstance()); + screen = TabbedUserScreen::getInstance(); + //else if (selection == "tab_controls") + // screen = OptionsScreenInput::getInstance(); else if (selection == "tab_ui") - sm->replaceTopMostScreen(OptionsScreenUI::getInstance()); - else if (selection == "tab_controls") {} + screen = OptionsScreenUI::getInstance(); + if(screen) + StateManager::get()->replaceTopMostScreen(screen); } else if (name == "back_to_device_list") { diff --git a/src/states_screens/options_screen_ui.cpp b/src/states_screens/options_screen_ui.cpp index 73ba03208..23d370022 100644 --- a/src/states_screens/options_screen_ui.cpp +++ b/src/states_screens/options_screen_ui.cpp @@ -206,12 +206,21 @@ void OptionsScreenUI::eventCallback(Widget* widget, const std::string& name, con { if (name == "options_choice") { - std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER).c_str(); + std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); - if (selection == "tab_audio") StateManager::get()->replaceTopMostScreen(OptionsScreenAudio::getInstance()); - else if (selection == "tab_video") StateManager::get()->replaceTopMostScreen(OptionsScreenVideo::getInstance()); - else if (selection == "tab_players") StateManager::get()->replaceTopMostScreen(TabbedUserScreen::getInstance()); - else if (selection == "tab_controls") StateManager::get()->replaceTopMostScreen(OptionsScreenInput::getInstance()); + Screen *screen = NULL; + if (selection == "tab_audio") + screen = OptionsScreenAudio::getInstance(); + else if (selection == "tab_video") + screen = OptionsScreenVideo::getInstance(); + else if (selection == "tab_players") + screen = TabbedUserScreen::getInstance(); + else if (selection == "tab_controls") + screen = OptionsScreenInput::getInstance(); + //else if (selection == "tab_ui") + // screen = OptionsScreenUI::getInstance(); + if(screen) + StateManager::get()->replaceTopMostScreen(screen); } else if(name == "back") { diff --git a/src/states_screens/options_screen_video.cpp b/src/states_screens/options_screen_video.cpp index 5c6a16a4c..c433c6a0c 100644 --- a/src/states_screens/options_screen_video.cpp +++ b/src/states_screens/options_screen_video.cpp @@ -167,15 +167,6 @@ void OptionsScreenVideo::init() if (UserConfigParams::m_fullscreen) rememberWinpos->setDeactivated(); else rememberWinpos->setActivated(); - // Enable back widgets if they were visited in-game previously - if (StateManager::get()->getGameState() != GUIEngine::INGAME_MENU) - { - res->setActivated(); - full->setActivated(); - applyBtn->setActivated(); - gfx->setActivated(); - getWidget("custom")->setActivated(); - } // --- get resolution list from irrlicht the first time if (!m_inited) @@ -342,6 +333,15 @@ void OptionsScreenVideo::init() gfx->setDeactivated(); getWidget("custom")->setDeactivated(); } + else + { + // Enable back widgets if they were visited in-game previously + res->setActivated(); + full->setActivated(); + applyBtn->setActivated(); + gfx->setActivated(); + getWidget("custom")->setActivated(); + } } // init // ---------------------------------------------------------------------------- @@ -469,15 +469,13 @@ void OptionsScreenVideo::eventCallback(Widget* widget, const std::string& name, { if (name == "options_choice") { - std::string selection = - ((RibbonWidget*)widget) - ->getSelectionIDString(PLAYER_ID_GAME_MASTER); + std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); Screen *screen = NULL; if (selection == "tab_audio") screen = OptionsScreenAudio::getInstance(); - else if (selection == "tab_video") - screen = OptionsScreenVideo::getInstance(); + //else if (selection == "tab_video") + // screen = OptionsScreenVideo::getInstance(); else if (selection == "tab_players") screen = TabbedUserScreen::getInstance(); else if (selection == "tab_controls") diff --git a/src/states_screens/user_screen.cpp b/src/states_screens/user_screen.cpp index de5b1fa72..64b93630c 100644 --- a/src/states_screens/user_screen.cpp +++ b/src/states_screens/user_screen.cpp @@ -108,6 +108,21 @@ void BaseUserScreen::init() else if (PlayerManager::get()->getNumPlayers() > 0) selectUser(0); + // Disable changing the user while in game + if (StateManager::get()->getGameState() == GUIEngine::INGAME_MENU) + { + getWidget("ok")->setDeactivated(); + getWidget("new_user")->setDeactivated(); + getWidget("rename")->setDeactivated(); + getWidget("delete")->setDeactivated(); + } + else + { + getWidget("ok")->setActivated(); + getWidget("new_user")->setActivated(); + getWidget("rename")->setActivated(); + getWidget("delete")->setActivated(); + } } // init // ---------------------------------------------------------------------------- @@ -572,16 +587,21 @@ void TabbedUserScreen::eventCallback(GUIEngine::Widget* widget, { if (name == "options_choice") { - const std::string &selection = - ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); - Screen *s; - if (selection=="tab_audio" ) s = OptionsScreenAudio::getInstance(); - else if (selection=="tab_video" ) s = OptionsScreenVideo::getInstance(); - else if (selection=="tab_players" ) s = TabbedUserScreen::getInstance(); - else if (selection=="tab_controls") s = OptionsScreenInput::getInstance(); - else if (selection=="tab_ui" ) s = OptionsScreenUI::getInstance(); - assert(s); - StateManager::get()->replaceTopMostScreen(s); + std::string selection = ((RibbonWidget*)widget)->getSelectionIDString(PLAYER_ID_GAME_MASTER); + + Screen *screen = NULL; + if (selection == "tab_audio") + screen = OptionsScreenAudio::getInstance(); + else if (selection == "tab_video") + screen = OptionsScreenVideo::getInstance(); + //else if (selection == "tab_players") + // screen = TabbedUserScreen::getInstance(); + else if (selection == "tab_controls") + screen = OptionsScreenInput::getInstance(); + else if (selection == "tab_ui") + screen = OptionsScreenUI::getInstance(); + if(screen) + StateManager::get()->replaceTopMostScreen(screen); } else BaseUserScreen::eventCallback(widget, name, player_id); From 55090a0566177ff1ce2ea42a3eced279f7af2754 Mon Sep 17 00:00:00 2001 From: Flakebi Date: Sat, 19 Jul 2014 20:43:19 +0200 Subject: [PATCH 56/93] Unify log output --- src/config/device_config.cpp | 17 +--- src/config/user_config.cpp | 4 +- src/graphics/camera.cpp | 4 +- src/graphics/camera.hpp | 7 +- src/graphics/material_manager.cpp | 4 +- src/graphics/particle_emitter.cpp | 2 +- src/graphics/particle_kind.cpp | 6 +- .../abstract_top_level_container.hpp | 9 +- src/guiengine/layout_manager.cpp | 16 ++-- src/guiengine/scalable_font.cpp | 11 +-- src/guiengine/screen.cpp | 8 +- .../widgets/dynamic_ribbon_widget.cpp | 4 +- src/guiengine/widgets/kart_stats_widget.cpp | 10 +- src/guiengine/widgets/ribbon_widget.cpp | 9 +- src/input/binding.cpp | 4 +- src/input/input_device.cpp | 2 +- src/network/protocols/get_public_address.cpp | 2 +- src/physics/physical_object.cpp | 12 +-- src/physics/triangle_mesh.cpp | 2 +- src/race/highscores.cpp | 8 +- src/race/history.cpp | 80 +++++----------- src/replay/replay_play.cpp | 95 +++++++------------ src/replay/replay_recorder.cpp | 12 ++- src/states_screens/credits.cpp | 16 ++-- src/states_screens/dialogs/addons_loading.cpp | 9 +- src/states_screens/grand_prix_lose.cpp | 4 +- src/states_screens/help_screen_1.cpp | 4 +- src/states_screens/kart_selection.cpp | 32 +++---- src/states_screens/main_menu_screen.cpp | 4 +- src/states_screens/options_screen_input2.cpp | 3 +- src/states_screens/race_gui_overworld.cpp | 20 ++-- src/states_screens/race_result_gui.cpp | 22 ++--- src/tracks/check_cannon.cpp | 8 +- src/tracks/check_goal.cpp | 4 +- src/tracks/check_lap.cpp | 9 +- src/tracks/check_line.cpp | 14 +-- src/tracks/check_manager.cpp | 11 +-- src/tracks/check_structure.cpp | 34 ++++--- src/tracks/graph_node.cpp | 12 +-- src/tracks/quad.cpp | 9 +- src/tracks/track.hpp | 5 +- src/tracks/track_manager.cpp | 30 +++--- src/tracks/track_object_presentation.cpp | 14 +-- src/utils/string_utils.cpp | 6 +- 44 files changed, 233 insertions(+), 365 deletions(-) diff --git a/src/config/device_config.cpp b/src/config/device_config.cpp index 32db91569..488550389 100644 --- a/src/config/device_config.cpp +++ b/src/config/device_config.cpp @@ -19,6 +19,7 @@ #include #include "config/device_config.hpp" +#include "utils/log.hpp" #include using namespace irr; @@ -226,7 +227,7 @@ bool DeviceConfig::deserializeAction(irr::io::IrrXMLReader* xml) // Never hurts to check ;) if (xml == NULL) { - fprintf(stderr, "Error: null pointer (DeviceConfig::deserializeAction)\n"); + Log::error("DeviceConfig", "Null pointer (DeviceConfig::deserializeAction)"); return false; } @@ -243,8 +244,8 @@ bool DeviceConfig::deserializeAction(irr::io::IrrXMLReader* xml) } if(binding_id==-1) { - printf("WARNING: DeviceConfig::deserializeAction : action '%s' is unknown\n", - name_string); + Log::warn("DeviceConfig", "DeviceConfig::deserializeAction : action '%s' is unknown.", + name_string); return false; } @@ -349,23 +350,15 @@ GamepadConfig::GamepadConfig(irr::io::IrrXMLReader* xml) : DeviceConfig( DEVICE_ { const char* name_string = xml->getAttributeValue("name"); if(name_string == NULL) - { - printf("ERROR: Unnamed joystick in config file\n"); - } + Log::error("DeviceConfig", "Unnamed joystick in config file."); else - { m_name = name_string; - } const char* enabled_string = xml->getAttributeValue("enabled"); if (enabled_string != NULL) - { m_enabled = (strcmp(enabled_string, "true") == 0); - } else - { m_enabled = true; - } m_plugged = 0; setDefaultBinds(); diff --git a/src/config/user_config.cpp b/src/config/user_config.cpp index 3cf9171cb..5294ef234 100644 --- a/src/config/user_config.cpp +++ b/src/config/user_config.cpp @@ -713,8 +713,8 @@ bool UserConfig::loadConfig() // add back the code previously there that upgraded the config file to the new // format instead of overwriting it. - GUIEngine::showMessage( _("Your config file was too old, so it was deleted and a new one will be created."), 10.0f); - printf("Your config file was too old, so it was deleted and a new one will be created."); + GUIEngine::showMessage(_("Your config file was too old, so it was deleted and a new one will be created."), 10.0f); + Log::info("UserConfig", "Your config file was too old, so it was deleted and a new one will be created."); delete root; return false; diff --git a/src/graphics/camera.cpp b/src/graphics/camera.cpp index 70a57c36f..2ebed145a 100644 --- a/src/graphics/camera.cpp +++ b/src/graphics/camera.cpp @@ -205,8 +205,8 @@ void Camera::setupCamera() break; default: if(UserConfigParams::logMisc()) - fprintf(stderr, "Incorrect number of players: '%d' - assuming 1.\n", - race_manager->getNumLocalPlayers()); + Log::warn("Camera", "Incorrect number of players: '%d' - assuming 1.", + race_manager->getNumLocalPlayers()); m_viewport = core::recti(0, 0, UserConfigParams::m_width, UserConfigParams::m_height); diff --git a/src/graphics/camera.hpp b/src/graphics/camera.hpp index e9555ea7f..125bc439f 100644 --- a/src/graphics/camera.hpp +++ b/src/graphics/camera.hpp @@ -155,10 +155,9 @@ private: m_type = EC_AHEAD_OF_KART; else { - fprintf(stderr, - "Invalid camera type '%s' - camera is ignored.\n", - s.c_str()); - return false; + Log::warn("Camera", "Invalid camera type '%s' - camera is ignored.", + s.c_str()); + return false; } node.get("xyz", &m_position); node.get("distance", &m_distance2); diff --git a/src/graphics/material_manager.cpp b/src/graphics/material_manager.cpp index a5fea5f95..544cf635a 100644 --- a/src/graphics/material_manager.cpp +++ b/src/graphics/material_manager.cpp @@ -239,7 +239,7 @@ bool MaterialManager::pushTempMaterial(const XMLNode *root, if(!node) { // We don't have access to the filename at this stage anymore :( - fprintf(stderr, "Unknown node in material.xml file\n"); + Log::warn("MaterialManager", "Unknown node in material.xml file."); continue; } try @@ -249,7 +249,7 @@ bool MaterialManager::pushTempMaterial(const XMLNode *root, catch(std::exception& e) { // The message contains a '%s' for the filename - fprintf(stderr, e.what(), filename.c_str()); + Log::warn("MaterialManager", e.what(), filename.c_str()); } } // for igetNumNodes)( return true; diff --git a/src/graphics/particle_emitter.cpp b/src/graphics/particle_emitter.cpp index bfc66d6b3..8bf4d0ada 100644 --- a/src/graphics/particle_emitter.cpp +++ b/src/graphics/particle_emitter.cpp @@ -581,7 +581,7 @@ void ParticleEmitter::setParticleType(const ParticleKind* type) } default: { - fprintf(stderr, "[ParticleEmitter] Unknown shape\n"); + Log::error("ParticleEmitter", "Unknown shape"); return; } } diff --git a/src/graphics/particle_kind.cpp b/src/graphics/particle_kind.cpp index e23b4e92e..d332ceacf 100644 --- a/src/graphics/particle_kind.cpp +++ b/src/graphics/particle_kind.cpp @@ -100,7 +100,7 @@ ParticleKind::ParticleKind(const std::string file) : m_min_start_color(255,255,2 } else { - fprintf(stderr, "[ParticleKind] main node has unknown value for attribute 'emitter'\n"); + Log::warn("ParticleKind", " main node has unknown value for attribute 'emitter'."); m_shape = EMITTER_POINT; } @@ -254,8 +254,8 @@ Material* ParticleKind::getMaterial() const } else { - fprintf(stderr, "[ParticleKind] WARNING: particle image '%s' does not appear in the list of " - "currently known materials\n", m_material_file.c_str()); + Log::warn("ParticleKind", "Particle image '%s' does not appear in the list of " + "currently known materials.", m_material_file.c_str()); return NULL; } } diff --git a/src/guiengine/abstract_top_level_container.hpp b/src/guiengine/abstract_top_level_container.hpp index 1f7bb874f..3387f51aa 100644 --- a/src/guiengine/abstract_top_level_container.hpp +++ b/src/guiengine/abstract_top_level_container.hpp @@ -87,12 +87,9 @@ namespace GUIEngine Widget* out = getWidget(name); T* outCasted = dynamic_cast( out ); if (out != NULL && outCasted == NULL) - { - fprintf(stderr, "Screen::getWidget : Widget '%s' of type '%s'" - "cannot be casted to requested type '%s'!\n", name, - typeid(*out).name(), typeid(T).name()); - abort(); - } + Log::fatal("Screen::getWidget", "Widget '%s' of type '%s'" + "cannot be casted to requested type '%s'!\n", name, + typeid(*out).name(), typeid(T).name()); return outCasted; } diff --git a/src/guiengine/layout_manager.cpp b/src/guiengine/layout_manager.cpp index 32643e221..268d45605 100644 --- a/src/guiengine/layout_manager.cpp +++ b/src/guiengine/layout_manager.cpp @@ -47,7 +47,7 @@ int atoi_p(const char* val) } else { - fprintf(stderr, "[LayoutManager] WARNING: Invalid value '%s' found in XML file where integer was expected\n", val); + Log::warn("LayoutManager", "Invalid value '%s' found in XML file where integer was expected.", val); return 0; } } @@ -461,7 +461,7 @@ void LayoutManager::doCalculateLayout(PtrVector& widgets, AbstractTopLev if (left_space < 0) { - fprintf(stderr, "[LayoutManager] WARNING: statically sized widgets took all the place!!\n"); + Log::warn("LayoutManager", "Statically sized widgets took all the place!!"); left_space = 0; } @@ -536,9 +536,9 @@ void LayoutManager::doCalculateLayout(PtrVector& widgets, AbstractTopLev if (widgets[n].m_w <= 0) { - fprintf(stderr, "WARNING: widget '%s' has a width of %i (left_space = %i, " - "fraction = %f, max_width = %s)\n", widgets[n].m_properties[PROP_ID].c_str(), - widgets[n].m_w, left_space, fraction, widgets[n].m_properties[PROP_MAX_WIDTH].c_str()); + Log::warn("LayoutManager", "Widget '%s' has a width of %i (left_space = %i, " + "fraction = %f, max_width = %s)", widgets[n].m_properties[PROP_ID].c_str(), + widgets[n].m_w, left_space, fraction, widgets[n].m_properties[PROP_MAX_WIDTH].c_str()); widgets[n].m_w = 1; } @@ -556,9 +556,9 @@ void LayoutManager::doCalculateLayout(PtrVector& widgets, AbstractTopLev if (widgets[n].m_h <= 0) { - fprintf(stderr, "WARNING: widget '%s' has a height of %i (left_space = %i, " - "fraction = %f, max_width = %s)\n", widgets[n].m_properties[PROP_ID].c_str(), - widgets[n].m_h, left_space, fraction, widgets[n].m_properties[PROP_MAX_WIDTH].c_str()); + Log::warn("LayoutManager", "Widget '%s' has a height of %i (left_space = %i, " + "fraction = %f, max_width = %s)\n", widgets[n].m_properties[PROP_ID].c_str(), + widgets[n].m_h, left_space, fraction, widgets[n].m_properties[PROP_MAX_WIDTH].c_str()); widgets[n].m_h = 1; } diff --git a/src/guiengine/scalable_font.cpp b/src/guiengine/scalable_font.cpp index f31a933fe..17cdcb78e 100644 --- a/src/guiengine/scalable_font.cpp +++ b/src/guiengine/scalable_font.cpp @@ -57,8 +57,7 @@ ScalableFont::ScalableFont(IGUIEnvironment *env, const std::string &filename) io::IXMLReader* reader = file_manager->createXMLReader(filename.c_str()); if (!load( reader )) { - fprintf(stderr, "[ScalableFont] Loading font failed\n"); - assert(false); + Log::fatal("ScalableFont", "Loading font failed"); } reader->drop(); @@ -157,7 +156,7 @@ void ScalableFont::doReadXmlFile(io::IXMLReader* xml) #ifdef DEBUG if (m_texture_files.find(i) != m_texture_files.end()) { - fprintf(stderr, "[ScalableFont] WARNING: Font conflict, two images have texture %i\n", i); + Log::warn("ScalableFont", "Font conflict, two images have texture %i.", i); } #endif @@ -258,7 +257,7 @@ bool ScalableFont::load(io::IXMLReader* xml) { if (!SpriteBank) { - fprintf(stderr, "[ScalableFont::load] SpriteBank is NULL!!\n"); + Log::error("ScalableFont::load", "SpriteBank is NULL!!"); return false; } @@ -633,7 +632,7 @@ void ScalableFont::draw(const core::stringw& text, if (texture == NULL) { - fprintf(stderr, "WARNING: character not found in current font\n"); + Log::warn("ScalableFont", "Character not found in current font"); continue; // no such character } } @@ -709,7 +708,7 @@ void ScalableFont::lazyLoadTexture(int texID) // couldn't load texture, abort. if (!SpriteBank->getTexture(texID)) { - fprintf(stderr, "!!!!! Unable to load all textures in the font\n"); + Log::error("ScalableFont::lazyLoadTexture", "Unable to load all textures in the font"); _IRR_IMPLEMENT_MANAGED_MARSHALLING_BUGFIX; return; } diff --git a/src/guiengine/screen.cpp b/src/guiengine/screen.cpp index 4bc8b4e07..7adc7cf90 100644 --- a/src/guiengine/screen.cpp +++ b/src/guiengine/screen.cpp @@ -184,7 +184,7 @@ void Screen::addWidgets() Widget* w = getFirstWidget(); //std::cout << "First widget is " << (w == NULL ? "null" : w->m_properties[PROP_ID].c_str()) << std::endl; if (w != NULL) w->setFocusForPlayer( PLAYER_ID_GAME_MASTER ); - else fprintf(stderr, "Couldn't select first widget, NULL was returned\n"); + else Log::warn("Screen::AddWidgets", "Couldn't select first widget, NULL was returned"); } // addWidgets // ----------------------------------------------------------------------------- @@ -206,9 +206,9 @@ void Screen::manualRemoveWidget(Widget* w) #ifdef DEBUG if(!m_widgets.contains(w)) { - fprintf(stderr, "Widget '%d' not found in screen when removing.\n", - w->m_id); - fprintf(stderr, "This can be ignored, but is probably wrong.\n"); + Log::info("Screen", "Widget '%d' not found in screen when removing.", + w->m_id); + Log::info("Screen", "This can be ignored, but is probably wrong."); } #endif m_widgets.remove(w); diff --git a/src/guiengine/widgets/dynamic_ribbon_widget.cpp b/src/guiengine/widgets/dynamic_ribbon_widget.cpp index aaab4685b..0ef2b97e0 100644 --- a/src/guiengine/widgets/dynamic_ribbon_widget.cpp +++ b/src/guiengine/widgets/dynamic_ribbon_widget.cpp @@ -189,7 +189,7 @@ void DynamicRibbonWidget::add() if (m_child_width <= 0 || m_child_height <= 0) { - std::cerr << "/!\\ Warning /!\\ : ribbon grid widgets require 'child_width' and 'child_height' arguments" << std::endl; + Log::warn("DynamicRibbonWidget", "Ribbon grid widgets require 'child_width' and 'child_height' arguments"); m_child_width = 256; m_child_height = 256; } @@ -206,7 +206,7 @@ void DynamicRibbonWidget::add() if (m_h - m_label_height < 0) { - fprintf(stderr, "[DynamicRibbonWidget] WARNING: the widget is too small for anything to fit in it!!\n"); + Log::warn("DynamicRibbonWidget", "The widget is too small for anything to fit in it!!"); m_row_amount = 1; } else diff --git a/src/guiengine/widgets/kart_stats_widget.cpp b/src/guiengine/widgets/kart_stats_widget.cpp index 55c40108c..fb96946ad 100644 --- a/src/guiengine/widgets/kart_stats_widget.cpp +++ b/src/guiengine/widgets/kart_stats_widget.cpp @@ -66,13 +66,9 @@ KartStatsWidget::KartStatsWidget(core::recti area, const int player_id, } if(!props) - { - fprintf(stderr, - "[KartSelectionScreen] WARNING: Can't find default " - "kart '%s' nor any other kart.\n", - default_kart.c_str()); - exit(-1); - } + Log::fatal("KartSelectionScreen", "Can't find default " + "kart '%s' nor any other kart.", + default_kart.c_str()); } diff --git a/src/guiengine/widgets/ribbon_widget.cpp b/src/guiengine/widgets/ribbon_widget.cpp index f73315ff4..3f3481288 100644 --- a/src/guiengine/widgets/ribbon_widget.cpp +++ b/src/guiengine/widgets/ribbon_widget.cpp @@ -115,8 +115,8 @@ void RibbonWidget::add() if (m_active_children[i].m_type != WTYPE_ICON_BUTTON && m_active_children[i].m_type != WTYPE_BUTTON) { - fprintf(stderr, "/!\\ Warning /!\\ : ribbon widgets can only have " - "(icon)button widgets as children\n"); + Log::warn("RiggonWidget", "Ribbon widgets can only have " + "(icon)button widgets as children"); continue; } @@ -275,7 +275,7 @@ void RibbonWidget::add() } else { - fprintf(stderr, "Invalid tab bar contents\n"); + Log::error("RibbonWidget", "Invalid tab bar contents"); } m_active_children[i].m_element = subbtn; @@ -375,8 +375,7 @@ void RibbonWidget::add() } else { - fprintf(stderr, - "/!\\ Warning /!\\ : Invalid contents type in ribbon\n"); + Log::warn("RiggonWidget", "Invalid contents type in ribbon"); } diff --git a/src/input/binding.cpp b/src/input/binding.cpp index dcac002ea..062f8172c 100644 --- a/src/input/binding.cpp +++ b/src/input/binding.cpp @@ -51,7 +51,7 @@ bool Binding::deserialize(irr::io::IrrXMLReader* xml) // Proceed only if neccesary tags were found if ((id_string == NULL) || (event_string == NULL)) { - printf("No id-string or event-string given - ignored.\n"); + Log::warn("Binding", "No id-string or event-string given - ignored."); return false; } @@ -66,7 +66,7 @@ bool Binding::deserialize(irr::io::IrrXMLReader* xml) // If the action is a stick motion & a direction is defined if (dir_string == NULL) { - printf("WARNING: IT_STICKMOTION without direction, ignoring.\n"); + Log::warn("Binding", "IT_STICKMOTION without direction, ignoring."); return false; } diff --git a/src/input/input_device.cpp b/src/input/input_device.cpp index 70278fdfe..368d71f1d 100644 --- a/src/input/input_device.cpp +++ b/src/input/input_device.cpp @@ -156,7 +156,7 @@ void GamePadDevice::resetAxisDirection(const int axis, AbstractKart* pk = player->getKart(); if (pk == NULL) { - fprintf(stderr, "Error, trying to reset axis for an unknown player\n"); + Log::error("Binding", "Trying to reset axis for an unknown player."); return; } diff --git a/src/network/protocols/get_public_address.cpp b/src/network/protocols/get_public_address.cpp index 3fe92501c..33379e71b 100644 --- a/src/network/protocols/get_public_address.cpp +++ b/src/network/protocols/get_public_address.cpp @@ -118,7 +118,7 @@ void GetPublicAddress::asynchronousUpdate() hints.ai_socktype = SOCK_STREAM; if ((status = getaddrinfo(stun_servers[rand_result].c_str(), NULL, &hints, &res)) != 0) { - fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status)); + Log::error("getaddrinfo", gai_strerror(status)); return; } for(p = res;p != NULL; p = p->ai_next) diff --git a/src/physics/physical_object.cpp b/src/physics/physical_object.cpp index f6a612336..57d2fa1c1 100644 --- a/src/physics/physical_object.cpp +++ b/src/physics/physical_object.cpp @@ -238,10 +238,7 @@ void PhysicalObject::init() } else { - fprintf(stderr, "[PhysicalObject] Unknown node type\n"); - max = 1.0f; - min = 0.0f; - assert(false); + Log::fatal("PhysicalObject", "Unknown node type"); } } else if (dynamic_cast(presentation) != NULL) @@ -256,10 +253,7 @@ void PhysicalObject::init() } else { - fprintf(stderr, "[PhysicalObject] Unknown node type\n"); - max = 1.0f; - min = 0.0f; - assert(false); + Log::fatal("PhysicalObject", "Unknown node type"); } Vec3 extend = max-min; // Adjust the mesth of the graphical object so that its center is where it @@ -453,7 +447,7 @@ void PhysicalObject::init() } case MP_NONE: default: - fprintf(stderr, "WARNING: Uninitialised moving shape\n"); + Log::warn("PhysicalObject", "Uninitialised moving shape"); // intended fall-through case MP_BOX: { diff --git a/src/physics/triangle_mesh.cpp b/src/physics/triangle_mesh.cpp index f8690b19c..e790950d0 100644 --- a/src/physics/triangle_mesh.cpp +++ b/src/physics/triangle_mesh.cpp @@ -112,7 +112,7 @@ void TriangleMesh::createCollisionShape(bool create_collision_object, const char btOptimizedBvh* bhv = btOptimizedBvh::deSerializeInPlace(bytes, pos, !IS_LITTLE_ENDIAN); if (bhv == NULL) { - fprintf(stderr, "[TriangleMesh] WARNING, failed to load serialized BHV\n"); + Log::warn("TriangleMesh", "Failed to load serialized BHV"); bhv_triangle_mesh = new btBvhTriangleMeshShape(&m_mesh, false /* useQuantizedAabbCompression */); } else diff --git a/src/race/highscores.cpp b/src/race/highscores.cpp index f00fd036a..4056730c3 100644 --- a/src/race/highscores.cpp +++ b/src/race/highscores.cpp @@ -212,10 +212,10 @@ void Highscores::getEntry(int number, std::string &kart_name, { if(number<0 || number>getNumberEntries()) { - fprintf(stderr, "Error, accessing undefined highscore entry:\n"); - fprintf(stderr,"number %d, but %d entries are defined\n",number, - getNumberEntries()); - fprintf(stderr, "This error can be ignored, but no highscores are available\n"); + Log::warn("Highscores", "Accessing undefined highscore entry:"); + Log::warn("Highscores", "Number %d, but %d entries are defined.", number, + getNumberEntries()); + Log::warn("Highscores", "This error can be ignored, but no highscores are available."); return; } kart_name = m_kart_name[number]; diff --git a/src/race/history.cpp b/src/race/history.cpp index f7c117f66..17cf3110e 100644 --- a/src/race/history.cpp +++ b/src/race/history.cpp @@ -127,7 +127,7 @@ void History::updateReplay(float dt) World *world = World::getWorld(); if(m_current>=(int)m_all_deltas.size()) { - printf("Replay finished.\n"); + Log::info("History", "Replay finished"); m_current = 0; // Note that for physics replay all physics parameters // need to be reset, e.g. velocity, ... @@ -158,20 +158,19 @@ void History::Save() { FILE *fd = fopen("history.dat","w"); if(fd) - printf("History saved in ./history.dat.\n"); + Log::info("History", "Saved in ./history.dat."); else { std::string fn = file_manager->getUserConfigFile("history.dat"); fd = fopen(fn.c_str(), "w"); if(fd) - printf("History saved in '%s'.\n",fn.c_str()); - + Log::info("History", "Saved in '%s'.", fn.c_str()); } if(!fd) { - printf("Can't open history.dat file for writing - can't save history.\n"); - printf("Make sure history.dat in the current directory or the config\n"); - printf("directory is writable.\n"); + Log::info("History", "Can't open history.dat file for writing - can't save history."); + Log::info("History", "Make sure history.dat in the current directory " + "or the config directory is writable."); return; } @@ -231,75 +230,46 @@ void History::Load() FILE *fd = fopen("history.dat","r"); if(fd) - printf("Reading ./history.dat\n"); + Log::info("History", "Reading ./history.dat"); else { std::string fn = file_manager->getUserConfigFile("history.dat"); fd = fopen(fn.c_str(), "r"); if(fd) - printf("Reading '%s'.\n", fn.c_str()); + Log::info("History", "Reading '%s'.", fn.c_str()); } if(!fd) - { - fprintf(stderr, "ERROR: could not open history.dat\n"); - exit(-2); - } + Log::fatal("History", "Could not open history.dat"); if (fgets(s, 1023, fd) == NULL) - { - fprintf(stderr, "ERROR: could not read history.dat\n"); - exit(-2); - } + Log::fatal("History", "Could not read history.dat."); if (sscanf(s,"Version: %1023s",s1)!=1) - { - fprintf(stderr, "ERROR: no Version information found in history file (bogus history file)\n"); - exit(-2); - } - else - { - if (strcmp(s1,STK_VERSION)) - { - fprintf(stderr, "WARNING: history is version '%s'\n",s1); - fprintf(stderr, " STK version is '%s'\n",STK_VERSION); - } - } + Log::fatal("History", "No Version information found in history file (bogus history file)."); + else if (strcmp(s1,STK_VERSION)) + Log::warn("History", "History is version '%s', STK version is '%s'.", s1, STK_VERSION); if (fgets(s, 1023, fd) == NULL) - { - fprintf(stderr, "ERROR: could not read history.dat\n"); - exit(-2); - } + Log::fatal("History", "Could not read history.dat."); unsigned int num_karts; if(sscanf(s, "numkarts: %d",&num_karts)!=1) - { - fprintf(stderr,"WARNING: No number of karts found in history file.\n"); - exit(-2); - } + Log::fatal("History", "No number of karts found in history file."); race_manager->setNumKarts(num_karts); fgets(s, 1023, fd); if(sscanf(s, "numplayers: %d",&n)!=1) - { - fprintf(stderr,"WARNING: No number of players found in history file.\n"); - exit(-2); - } + Log::fatal("History", "No number of players found in history file."); race_manager->setNumLocalPlayers(n); fgets(s, 1023, fd); if(sscanf(s, "difficulty: %d",&n)!=1) - { - fprintf(stderr,"WARNING: No difficulty found in history file.\n"); - exit(-2); - } + Log::fatal("History", "No difficulty found in history file."); race_manager->setDifficulty((RaceManager::Difficulty)n); fgets(s, 1023, fd); if(sscanf(s, "track: %1023s",s1)!=1) - { - fprintf(stderr,"WARNING: Track not found in history file.\n"); - } + Log::warn("History", "Track not found in history file."); race_manager->setTrack(s1); // This value doesn't really matter, but should be defined, otherwise // the racing phase can switch to 'ending' @@ -308,12 +278,8 @@ void History::Load() for(unsigned int i=0; igetNumPlayers()) { @@ -323,10 +289,8 @@ void History::Load() // FIXME: The model information is currently ignored fgets(s, 1023, fd); if(sscanf(s,"size: %d",&m_size)!=1) - { - fprintf(stderr,"WARNING: Number of records not found in history file.\n"); - exit(-2); - } + Log::fatal("History", "Number of records not found in history file."); + allocateMemory(m_size); m_current = -1; diff --git a/src/replay/replay_play.cpp b/src/replay/replay_play.cpp index ed3534023..a3af26002 100644 --- a/src/replay/replay_play.cpp +++ b/src/replay/replay_play.cpp @@ -88,70 +88,51 @@ void ReplayPlay::Load() FILE *fd = openReplayFile(/*writeable*/false); if(!fd) { - printf("Can't read '%s', ghost replay disabled.\n", + Log::error("Replay", "Can't read '%s', ghost replay disabled.", getReplayFilename().c_str()); destroy(); return; } - printf("Reading replay file '%s'.\n", getReplayFilename().c_str()); + Log::info("Replay", "Reading replay file '%s'.", getReplayFilename().c_str()); if (fgets(s, 1023, fd) == NULL) - { - fprintf(stderr, "ERROR: could not read '%s'.\n", - getReplayFilename().c_str()); - exit(-2); - } + Log::fatal("Replay", "Could not read '%s'.", getReplayFilename().c_str()); unsigned int version; - if (sscanf(s,"Version: %d", &version)!=1) - { - fprintf(stderr, "ERROR: no Version information found in replay file" - " (bogus replay file)\n"); - exit(-2); - } + if (sscanf(s,"Version: %d", &version) != 1) + Log::fatal("Replay", "No Version information found in replay file (bogus replay file)."); - if (version!=getReplayVersion()) + if (version != getReplayVersion()) { - fprintf(stderr, "WARNING: replay is version '%d'\n",version); - fprintf(stderr, " STK version is '%d'\n",getReplayVersion()); - fprintf(stderr, " We try to proceed, but it may fail.\n"); + Log::warn("Replay", "Replay is version '%d'",version); + Log::warn("Replay", "STK version is '%d'",getReplayVersion()); + Log::warn("Replay", "We try to proceed, but it may fail."); } if (fgets(s, 1023, fd) == NULL) - { - fprintf(stderr, "ERROR: could not read '%s'.\n", - getReplayFilename().c_str()); - exit(-2); - } + Log::fatal("Replay", "Could not read '%s'.", getReplayFilename().c_str()); int n; - if(sscanf(s, "difficulty: %d",&n)!=1) - { - fprintf(stderr,"WARNING: No difficulty found in replay file.\n"); - exit(-2); - } + if(sscanf(s, "difficulty: %d", &n) != 1) + Log::fatal("Replay", " No difficulty found in replay file."); if(race_manager->getDifficulty()!=(RaceManager::Difficulty)n) - printf("Warning, difficulty of replay is '%d', " - "while '%d' is selected.\n", - race_manager->getDifficulty(), n); + Log::warn("Replay", "Difficulty of replay is '%d', " + "while '%d' is selected.", + race_manager->getDifficulty(), n); fgets(s, 1023, fd); - if(sscanf(s, "track: %s",s1)!=1) - { - fprintf(stderr,"WARNING: Track not found in replay file.\n"); - } + if(sscanf(s, "track: %s", s1) != 1) + Log::warn("Replay", "Track not found in replay file."); assert(std::string(s1)==race_manager->getTrackName()); race_manager->setTrack(s1); unsigned int num_laps; fgets(s, 1023, fd); - if(sscanf(s, "Laps: %d",&num_laps)!=1) - { - fprintf(stderr,"WARNING: No number of laps found in replay file.\n"); - exit(-2); - } + if(sscanf(s, "Laps: %d", &num_laps) != 1) + Log::fatal("Replay", "No number of laps found in replay file."); + race_manager->setNumLaps(num_laps); // eof actually doesn't trigger here, since it requires first to try @@ -175,25 +156,18 @@ void ReplayPlay::readKartData(FILE *fd, char *next_line) { char s[1024]; if(sscanf(next_line, "model: %s", s)!=1) - { - fprintf(stderr, - "WARNING: No model information for kart %d found.\n", + Log::fatal("Replay", "No model information for kart %d found.", m_ghost_karts.size()); - exit(-2); - } + m_ghost_karts.push_back(new GhostKart(std::string(s))); m_ghost_karts[m_ghost_karts.size()-1].init(RaceManager::KT_GHOST); fgets(s, 1023, fd); unsigned int size; if(sscanf(s,"size: %d",&size)!=1) - { - fprintf(stderr, - "WARNING: Number of records not found in replay file " - "for kart %d.\n", + Log::fatal("Replay", "Number of records not found in replay file " + "for kart %d.", m_ghost_karts.size()-1); - exit(-2); - } for(unsigned int i=0; igetIdent().c_str()); + Log::warn("ReplayRecorder", buffer); + } continue; } TransformEvent *p = &(m_transform_events[i][m_count_transforms[i]-1]); @@ -153,12 +157,12 @@ void ReplayRecorder::Save() FILE *fd = openReplayFile(/*writeable*/true); if(!fd) { - printf("Can't open '%s' for writing - can't save replay data.\n", - getReplayFilename().c_str()); + Log::error("ReplayRecorder", "Can't open '%s' for writing - can't save replay data.", + getReplayFilename().c_str()); return; } - printf("Replay saved in '%s'.\n", getReplayFilename().c_str()); + Log::info("ReplayRecorder", "Replay saved in '%s'.\n", getReplayFilename().c_str()); World *world = World::getWorld(); unsigned int num_karts = world->getNumKarts(); diff --git a/src/states_screens/credits.cpp b/src/states_screens/credits.cpp index 4927175d9..019aa3476 100644 --- a/src/states_screens/credits.cpp +++ b/src/states_screens/credits.cpp @@ -85,7 +85,7 @@ bool CreditsScreen::getWideLine(std::ifstream& file, core::stringw* out) { if (!file.good()) { - fprintf(stderr, "getWideLine : File is not good!\n"); + Log::error("CreditsScreen", "getWideLine: File is not good!"); return false; } wchar_t wide_char; @@ -147,8 +147,8 @@ void CreditsScreen::loadedFromFile() if (file.fail() || !file.is_open() || file.eof()) { - fprintf(stderr, "\n/!\\ Failed to open file at '%s'\n\n", - creditsfile.c_str()); + Log::error("CreditsScreen", "Failed to open file at '%s'.", + creditsfile.c_str()); return; } @@ -160,10 +160,8 @@ void CreditsScreen::loadedFromFile() if (file.fail() || !file.is_open() || file.eof()) { - fprintf(stderr, - "\n/!\\ Failed to read file at '%s', unexpected EOF\n\n", - creditsfile.c_str()); - assert(false); + Log::error("CreditsScreen", "Failed to read file at '%s', unexpected EOF.", + creditsfile.c_str()); return; } @@ -203,9 +201,7 @@ void CreditsScreen::loadedFromFile() if (lineCount == 0) { - fprintf(stderr, - "\n/!\\ Could not read anything from CREDITS file!\n\n"); - assert(false); + Log::error("CreditsScreen", "Could not read anything from CREDITS file!"); return; } diff --git a/src/states_screens/dialogs/addons_loading.cpp b/src/states_screens/dialogs/addons_loading.cpp index 2d6f1ef2d..1d82e4b13 100644 --- a/src/states_screens/dialogs/addons_loading.cpp +++ b/src/states_screens/dialogs/addons_loading.cpp @@ -384,11 +384,10 @@ void AddonsLoading::doUninstall() error = !addons_manager->uninstall(m_addon); if(error) { - printf("[addons]Directory '%s' can not be removed.\n", - m_addon.getDataDir().c_str()); - printf("[addons]Please remove this directory manually.\n"); - core::stringw msg = StringUtils::insertValues( - _("Problems removing the addon '%s'."), + Log::warn("Addons", "Directory '%s' can not be removed.", + m_addon.getDataDir().c_str()); + Log::warn("Addons", "Please remove this directory manually."); + core::stringw msg = StringUtils::insertValues(_("Problems removing the addon '%s'."), core::stringw(m_addon.getName().c_str())); getWidget("description")->setText(msg.c_str()); } diff --git a/src/states_screens/grand_prix_lose.cpp b/src/states_screens/grand_prix_lose.cpp index f9bc459fd..27673542b 100644 --- a/src/states_screens/grand_prix_lose.cpp +++ b/src/states_screens/grand_prix_lose.cpp @@ -252,9 +252,9 @@ void GrandPrixLose::setKarts(std::vector ident_arg) } else { - fprintf(stderr, "[GrandPrixLose] WARNING: could not find a kart named '%s'\n", ident_arg[n].c_str()); + Log::warn("GrandPrixLose", "Could not find a kart named '%s'.", ident_arg[n].c_str()); m_kart_node[n] = NULL; - }// if kart !=NULL + } // if kart != NULL } } // setKarts diff --git a/src/states_screens/help_screen_1.cpp b/src/states_screens/help_screen_1.cpp index 380e342a5..6a4ae514c 100644 --- a/src/states_screens/help_screen_1.cpp +++ b/src/states_screens/help_screen_1.cpp @@ -71,8 +71,8 @@ void HelpScreen1::eventCallback(Widget* widget, const std::string& name, const i if (kart_properties_manager->getKart(UserConfigParams::m_default_kart) == NULL) { - fprintf(stderr, "[MainMenuScreen] WARNING: cannot find kart '%s', will revert to default\n", - UserConfigParams::m_default_kart.c_str()); + Log::warn("HelpScreen1", "Cannot find kart '%s', will revert to default", + UserConfigParams::m_default_kart.c_str()); UserConfigParams::m_default_kart.revertToDefaults(); } race_manager->setLocalKartInfo(0, UserConfigParams::m_default_kart); diff --git a/src/states_screens/kart_selection.cpp b/src/states_screens/kart_selection.cpp index 0195ee189..c32dc85ca 100644 --- a/src/states_screens/kart_selection.cpp +++ b/src/states_screens/kart_selection.cpp @@ -331,13 +331,9 @@ PlayerKartWidget::PlayerKartWidget(KartSelectionScreen* parent, } if(!props) - { - fprintf(stderr, - "[KartSelectionScreen] WARNING: Can't find default " - "kart '%s' nor any other kart.\n", - default_kart.c_str()); - exit(-1); - } + Log::fatal("KartSelectionScreen", "Can't find default " + "kart '%s' nor any other kart.", + default_kart.c_str()); } m_kartInternalName = props->getIdent(); @@ -423,14 +419,12 @@ void PlayerKartWidget::setPlayerID(const int newPlayerID) if (StateManager::get()->getActivePlayer(newPlayerID) != m_associated_player) { - Log::warn("[KartSelectionScreen]", "Internal " - "inconsistency, PlayerKartWidget has IDs and " - "pointers that do not correspond to one player"); - fprintf(stderr, - " Player: %p - Index: %d - m_associated_player: %p\n", - StateManager::get()->getActivePlayer(newPlayerID), - newPlayerID, m_associated_player); - assert(false); + Log::error("KartSelectionScreen", "Internal " + "inconsistency, PlayerKartWidget has IDs and " + "pointers that do not correspond to one player"); + Log::fatal("KartSelectionScreen", " Player: %p - Index: %d - m_associated_player: %p", + StateManager::get()->getActivePlayer(newPlayerID), + newPlayerID, m_associated_player); } // Remove current focus, but rembmer it @@ -1612,11 +1606,9 @@ void KartSelectionScreen::updateKartWidgetModel(uint8_t widget_id, ->setText( selectionText.c_str(), false ); } else - { - fprintf(stderr, "[KartSelectionScreen] WARNING: could not " - "find a kart named '%s'\n", - selection.c_str()); - } + Log::warn("KartSelectionScreen", "could not " + "find a kart named '%s'", + selection.c_str()); } } diff --git a/src/states_screens/main_menu_screen.cpp b/src/states_screens/main_menu_screen.cpp index 55938fb3f..45a038b11 100644 --- a/src/states_screens/main_menu_screen.cpp +++ b/src/states_screens/main_menu_screen.cpp @@ -380,8 +380,8 @@ void MainMenuScreen::eventCallback(Widget* widget, const std::string& name, if (kart_properties_manager->getKart(UserConfigParams::m_default_kart) == NULL) { - fprintf(stderr, "[MainMenuScreen] WARNING: cannot find kart '%s', will revert to default\n", - UserConfigParams::m_default_kart.c_str()); + Log::warn("MainMenuScreen", "Cannot find kart '%s', will revert to default", + UserConfigParams::m_default_kart.c_str()); UserConfigParams::m_default_kart.revertToDefaults(); } race_manager->setLocalKartInfo(0, UserConfigParams::m_default_kart); diff --git a/src/states_screens/options_screen_input2.cpp b/src/states_screens/options_screen_input2.cpp index 0ed577dea..c4d13f3eb 100644 --- a/src/states_screens/options_screen_input2.cpp +++ b/src/states_screens/options_screen_input2.cpp @@ -567,7 +567,8 @@ void OptionsScreenInput2::onConfirm() const bool success = input_manager->getDeviceList()->deleteConfig(m_config); assert(success); - if (!success) fprintf(stderr, "Failed to delete config!\n"); + if (!success) + Log::error("OptionsScreenInput2", "Failed to delete config!"); m_config = NULL; input_manager->getDeviceList()->serialize(); diff --git a/src/states_screens/race_gui_overworld.cpp b/src/states_screens/race_gui_overworld.cpp index f7cd19e05..cdef71b1e 100644 --- a/src/states_screens/race_gui_overworld.cpp +++ b/src/states_screens/race_gui_overworld.cpp @@ -471,8 +471,8 @@ void RaceGUIOverworld::drawGlobalMiniMap() if (challenge == NULL) { - fprintf(stderr, "[RaceGUIOverworld] ERROR: Cannot find challenge <%s>\n", - challenges[n].m_challenge_id.c_str()); + Log::error("RaceGUIOverworld", "Cannot find challenge <%s>.", + challenges[n].m_challenge_id.c_str()); break; } @@ -483,10 +483,10 @@ void RaceGUIOverworld::drawGlobalMiniMap() if (gp == NULL) { - fprintf(stderr, "[RaceGUIOverworld] ERROR: Cannot find GP <%s>, " - "referenced from challenge <%s>\n", - challenge->getGPId().c_str(), - challenges[n].m_challenge_id.c_str()); + Log::error("RaceGUIOverworld", "Cannot find GP <%s>, " + "referenced from challenge <%s>", + challenge->getGPId().c_str(), + challenges[n].m_challenge_id.c_str()); break; } @@ -508,10 +508,10 @@ void RaceGUIOverworld::drawGlobalMiniMap() Track* track = track_manager->getTrack(challenge->getTrackId()); if (track == NULL) { - fprintf(stderr, "[RaceGUIOverworld] ERROR: Cannot find track <%s>, " - "referenced from challenge <%s>\n", - challenge->getTrackId().c_str(), - challenges[n].m_challenge_id.c_str()); + Log::error("RaceGUIOverworld", "Cannot find track <%s>, " + "referenced from challenge <%s>", + challenge->getTrackId().c_str(), + challenges[n].m_challenge_id.c_str()); break; } diff --git a/src/states_screens/race_result_gui.cpp b/src/states_screens/race_result_gui.cpp index 9b5803421..73c7b3577 100644 --- a/src/states_screens/race_result_gui.cpp +++ b/src/states_screens/race_result_gui.cpp @@ -297,9 +297,8 @@ void RaceResultGUI::eventCallback(GUIEngine::Widget* widget, } return; } - fprintf(stderr, "Incorrect event '%s' when things are unlocked.\n", - name.c_str()); - assert(false); + Log::fatal("RaceResultGUI", "Incorrect event '%s' when things are unlocked.", + name.c_str()); } // If we're playing online : @@ -342,11 +341,8 @@ void RaceResultGUI::eventCallback(GUIEngine::Widget* widget, MessageDialog::MESSAGE_DIALOG_CONFIRM, this, false); } else if (!getWidget(name.c_str())->isVisible()) - { - fprintf(stderr, "Incorrect event '%s' when things are unlocked.\n", - name.c_str()); - assert(false); - } + Log::fatal("RaceResultGUI", "Incorrect event '%s' when things are unlocked.", + name.c_str()); return; } @@ -387,10 +383,8 @@ void RaceResultGUI::eventCallback(GUIEngine::Widget* widget, } } else - { - fprintf(stderr, "Incorrect event '%s' for normal race.\n", - name.c_str()); - } + Log::fatal("RaceResultGUI", "Incorrect event '%s' for normal race.", + name.c_str()); return; } // eventCallback @@ -615,8 +609,8 @@ void RaceResultGUI::onUpdate(float dt) } catch (std::exception& e) { - fprintf(stderr, "[RaceResultGUI] WARNING: exception caught when " - "trying to load music: %s\n", e.what()); + Log::error("RaceResultGUI", "Exception caught when " + "trying to load music: %s", e.what()); } } } // onUpdate diff --git a/src/tracks/check_cannon.cpp b/src/tracks/check_cannon.cpp index 4b0120e6b..7effbe71b 100644 --- a/src/tracks/check_cannon.cpp +++ b/src/tracks/check_cannon.cpp @@ -36,12 +36,8 @@ CheckCannon::CheckCannon(const XMLNode &node, unsigned int index) : CheckLine(node, index) { core::vector3df p1, p2; - if(!node.get("target-p1", &p1) || - !node.get("target-p2", &p2) ) - { - printf("CheckCannon has no target line specified.\n"); - exit(-1); - } + if(!node.get("target-p1", &p1) || !node.get("target-p2", &p2)) + Log::fatal("CheckCannon", "No target line specified."); m_target.setLine(p1, p2); m_curve = new Ipo(*(node.getNode("curve")), /*fps*/25, diff --git a/src/tracks/check_goal.cpp b/src/tracks/check_goal.cpp index 736859cbf..f582f182f 100644 --- a/src/tracks/check_goal.cpp +++ b/src/tracks/check_goal.cpp @@ -72,8 +72,8 @@ void CheckGoal::update(float dt) if(isTriggered(m_previous_position[ball_index], xyz, ball_index)) { if(UserConfigParams::m_check_debug) - printf("CHECK: Goal check structure %d triggered for object %s.\n", - m_index, obj->getPresentation()->getNode()->getDebugName()); + Log::info("CheckGoal", "Goal check structure %d triggered for object %s.", + m_index, obj->getPresentation()->getNode()->getDebugName()); trigger(ball_index); } m_previous_position[ball_index] = xyz; diff --git a/src/tracks/check_lap.cpp b/src/tracks/check_lap.cpp index 71f6591af..bf92b9b10 100644 --- a/src/tracks/check_lap.cpp +++ b/src/tracks/check_lap.cpp @@ -71,11 +71,10 @@ bool CheckLap::isTriggered(const Vec3 &old_pos, const Vec3 &new_pos, bool result =(m_previous_distance[indx]>0.95f*track_length && current_distance<7.0f); if(UserConfigParams::m_check_debug && result) - { - printf("CHECK: Kart %s crossed start line from %f to %f.\n", - World::getWorld()->getKart(indx)->getIdent().c_str(), - m_previous_distance[indx], current_distance); - } + Log::info("CheckLap", "Kart %s crossed start line from %f to %f.", + World::getWorld()->getKart(indx)->getIdent().c_str(), + m_previous_distance[indx], current_distance); + m_previous_distance[indx] = current_distance; return result; diff --git a/src/tracks/check_line.cpp b/src/tracks/check_line.cpp index 36015b334..f67c76b29 100644 --- a/src/tracks/check_line.cpp +++ b/src/tracks/check_line.cpp @@ -173,14 +173,14 @@ bool CheckLine::isTriggered(const Vec3 &old_pos, const Vec3 &new_pos, if(UserConfigParams::m_check_debug && !result) { if(World::getWorld()->getNumKarts()>0) - printf("CHECK: Kart %s crosses line, but wrong height " - "(%f vs %f).\n", - World::getWorld()->getKart(indx)->getIdent().c_str(), - new_pos.getY(), m_min_height); + Log::info("CheckLine", "Kart %s crosses line, but wrong height " + "(%f vs %f).", + World::getWorld()->getKart(indx)->getIdent().c_str(), + new_pos.getY(), m_min_height); else - printf("CHECK: Kart %d crosses line, but wrong height " - "(%f vs %f).\n", - indx, new_pos.getY(), m_min_height); + Log::info("CheckLine", "Kart %d crosses line, but wrong height " + "(%f vs %f).", + indx, new_pos.getY(), m_min_height); } } diff --git a/src/tracks/check_manager.cpp b/src/tracks/check_manager.cpp index f80b6be39..7ece0621e 100644 --- a/src/tracks/check_manager.cpp +++ b/src/tracks/check_manager.cpp @@ -64,7 +64,7 @@ void CheckManager::load(const XMLNode &node) m_all_checks.push_back(cs); } // checksphere else - printf("Unknown check structure '%s' - ignored.\n", type.c_str()); + Log::warn("CheckManager", "Unknown check structure '%s' - ignored.", type.c_str()); } // for i(c) != NULL) return i; } - fprintf(stderr, - "No check-lap structure found! This can cause incorrect kart\n"); - fprintf(stderr, - "ranking when crossing the line, but can otherwise be ignored.\n"); + Log::warn("CheckManager", "No check-lap structure found! This can cause incorrect kart"); + Log::warn("CheckManager", "ranking when crossing the line, but can otherwise be ignored."); for (unsigned int i=0; igetType()==CheckStructure::CT_NEW_LAP) return i; } - fprintf(stderr, "Error, no kind of lap line for track found, aborting.\n"); - exit(-1); + Log::fatal("CheckManager", "Error, no kind of lap line for track found, aborting."); } // getLapLineIndex // ---------------------------------------------------------------------------- diff --git a/src/tracks/check_structure.cpp b/src/tracks/check_structure.cpp index 5a3f8b05e..a99b19ca9 100644 --- a/src/tracks/check_structure.cpp +++ b/src/tracks/check_structure.cpp @@ -54,9 +54,7 @@ CheckStructure::CheckStructure(const XMLNode &node, unsigned int index) else if(node.getName()=="cannon") m_check_type = CT_CANNON; else - { - printf("Unknown check structure '%s' - ignored.\n", kind.c_str()); - } + Log::warn("CheckStructure", "Unknown check structure '%s' - ignored.", kind.c_str()); node.get("same-group", &m_same_group); // Make sure that the index of this check structure is included in @@ -108,8 +106,8 @@ void CheckStructure::update(float dt) if(m_is_active[i] && isTriggered(m_previous_position[i], xyz, i)) { if(UserConfigParams::m_check_debug) - printf("CHECK: Check structure %d triggered for kart %s.\n", - m_index, world->getKart(i)->getIdent().c_str()); + Log::info("CheckStructure", "Check structure %d triggered for kart %s.", + m_index, world->getKart(i)->getIdent().c_str()); trigger(i); } m_previous_position[i] = xyz; @@ -144,18 +142,18 @@ void CheckStructure::changeStatus(const std::vector indices, cs->m_is_active[kart_index] = false; if(UserConfigParams::m_check_debug) { - printf("CHECK: Deactivating %d for %s.\n", - indices[i], - World::getWorld()->getKart(kart_index)->getIdent().c_str()); + Log::info("CheckStructure", "Deactivating %d for %s.", + indices[i], + World::getWorld()->getKart(kart_index)->getIdent().c_str()); } break; case CS_ACTIVATE: cs->m_is_active[kart_index] = true; if(UserConfigParams::m_check_debug) { - printf("CHECK: Activating %d for %s.\n", - indices[i], - World::getWorld()->getKart(kart_index)->getIdent().c_str()); + Log::info("CheckStructure", "Activating %d for %s.", + indices[i], + World::getWorld()->getKart(kart_index)->getIdent().c_str()); } break; case CS_TOGGLE: @@ -166,10 +164,10 @@ void CheckStructure::changeStatus(const std::vector indices, // non-POD type 'struct std::_Bit_reference' through '...'; // call will abort at runtime"). So we use this somewhat // unusual but portable construct. - printf("CHECK: Toggling %d for %s from %d.\n", - indices[i], - World::getWorld()->getKart(kart_index)->getIdent().c_str(), - cs->m_is_active[kart_index]==true); + Log::info("CheckStructure", "Toggling %d for %s from %d.", + indices[i], + World::getWorld()->getKart(kart_index)->getIdent().c_str(), + cs->m_is_active[kart_index]==true); } cs->m_is_active[kart_index] = !cs->m_is_active[kart_index]; } // switch @@ -213,9 +211,9 @@ void CheckStructure::trigger(unsigned int kart_index) World::getWorld()->newLap(kart_index); if(UserConfigParams::m_check_debug) { - printf("CHECK: %s new lap %d triggered\n", - World::getWorld()->getKart(kart_index)->getIdent().c_str(), - m_index); + Log::info("CheckStructure", "%s new lap %d triggered", + World::getWorld()->getKart(kart_index)->getIdent().c_str(), + m_index); } changeStatus(m_check_structures_to_change_state, kart_index, CS_ACTIVATE); diff --git a/src/tracks/graph_node.cpp b/src/tracks/graph_node.cpp index e43eeb988..ac5967de5 100644 --- a/src/tracks/graph_node.cpp +++ b/src/tracks/graph_node.cpp @@ -30,10 +30,8 @@ GraphNode::GraphNode(unsigned int quad_index, unsigned int node_index) { if (quad_index >= QuadSet::get()->getNumberOfQuads()) - { - fprintf(stderr, "[GraphNode] ERROR: No driveline found, or empty driveline"); - abort(); - } + Log::fatal("GraphNode", "No driveline found, or empty driveline."); + m_quad_index = quad_index; m_node_index = node_index; m_distance_from_start = -1.0f; @@ -130,10 +128,10 @@ void GraphNode::setupPathsToNode() gn.markAllSuccessorsToUse(i, &m_path_to_node); } #ifdef DEBUG - for(unsigned int i=0; i #include @@ -31,10 +32,10 @@ Quad::Quad(const Vec3 &p0, const Vec3 &p1, const Vec3 &p2, const Vec3 &p3, if(p1.sideOfLine2D(p0, p2)>0 || p3.sideOfLine2D(p0, p2)<0) { - printf("Warning: quad has wrong orientation: p0=%f %f %f p1=%f %f %f\n", - p0.getX(), p0.getY(), p0.getZ(),p1.getX(), p1.getY(), p1.getZ()); - printf("The quad will be swapped, nevertheless test for correctness -\n"); - printf("quads must be counter-clockwise oriented.\n"); + Log::warn("Quad", "Quad has wrong orientation: p0=%f %f %f p1=%f %f %f", + p0.getX(), p0.getY(), p0.getZ(),p1.getX(), p1.getY(), p1.getZ()); + Log::warn("Quad", "The quad will be swapped, nevertheless test for correctness -"); + Log::warn("Quad", "quads must be counter-clockwise oriented."); m_p[0]=p1; m_p[1]=p0; m_p[2]=p3; m_p[3]=p2; } else diff --git a/src/tracks/track.hpp b/src/tracks/track.hpp index 1d7073569..6b715dac9 100644 --- a/src/tracks/track.hpp +++ b/src/tracks/track.hpp @@ -498,10 +498,7 @@ public: btTransform getStartTransform (unsigned int index) const { if (index >= m_start_transforms.size()) - { - fprintf(stderr, "No start position for kart %i\n", index); - abort(); - } + Log::fatal("Tracj", "No start position for kart %i.", index); return m_start_transforms[index]; } // ------------------------------------------------------------------------ diff --git a/src/tracks/track_manager.cpp b/src/tracks/track_manager.cpp index c987ec522..b2092b13e 100644 --- a/src/tracks/track_manager.cpp +++ b/src/tracks/track_manager.cpp @@ -98,9 +98,8 @@ void TrackManager::setUnavailableTracks(const std::vector &tracks) if (std::find(tracks.begin(), tracks.end(), id)==tracks.end()) { m_track_avail[i-m_tracks.begin()] = false; - fprintf(stderr, - "Track '%s' not available on all clients, disabled.\n", - id.c_str()); + Log::warn("TrackManager", "Track '%s' not available on all clients, disabled.", + id.c_str()); } // if id not in tracks } // for all available tracks in track manager @@ -174,7 +173,7 @@ bool TrackManager::loadTrack(const std::string& dirname) } catch (std::exception& e) { - fprintf(stderr, "[TrackManager] ERROR: Cannot load track <%s> : %s\n", + Log::error("TrackManager", "Cannot load track <%s> : %s\n", dirname.c_str(), e.what()); return false; } @@ -182,12 +181,12 @@ bool TrackManager::loadTrack(const std::string& dirname) if (track->getVersion()m_min_track_version || track->getVersion()>stk_config->m_max_track_version) { - fprintf(stderr, "[TrackManager] Warning: track '%s' is not supported " + Log::warn("TrackManager", "Track '%s' is not supported " "by this binary, ignored. (Track is version %i, this " - "executable supports from %i to %i)\n", - track->getIdent().c_str(), track->getVersion(), - stk_config->m_min_track_version, - stk_config->m_max_track_version); + "executable supports from %i to %i).", + track->getIdent().c_str(), track->getVersion(), + stk_config->m_min_track_version, + stk_config->m_max_track_version); delete track; return false; } @@ -206,22 +205,15 @@ void TrackManager::removeTrack(const std::string &ident) { Track *track = getTrack(ident); if (track == NULL) - { - fprintf(stderr, "[TrackManager] ERROR: There is no track named '%s'!!\n", ident.c_str()); - assert(false); - return; - } + Log::fatal("TrackManager", "There is no track named '%s'!!", ident.c_str()); if (track->isInternal()) return; std::vector::iterator it = std::find(m_tracks.begin(), m_tracks.end(), track); if (it == m_tracks.end()) - { - fprintf(stderr, "[TrackManager] INTERNAL ERROR: Cannot find track '%s' in map!!\n", ident.c_str()); - assert(false); - return; - } + Log::fatal("TrackManager", "Cannot find track '%s' in map!!", ident.c_str()); + int index = it - m_tracks.begin(); // Remove the track from all groups it belongs to diff --git a/src/tracks/track_object_presentation.cpp b/src/tracks/track_object_presentation.cpp index d3b53686d..6aef4dcc7 100644 --- a/src/tracks/track_object_presentation.cpp +++ b/src/tracks/track_object_presentation.cpp @@ -496,10 +496,7 @@ TrackObjectPresentationSound::TrackObjectPresentationSound(const XMLNode& xml_no } } else - { - fprintf(stderr, - "[TrackObject] Sound emitter object could not be created\n"); - } + Log::error("TrackObject", "Sound emitter object could not be created."); if (trigger_when_near) { @@ -753,9 +750,7 @@ TrackObjectPresentationActionTrigger::TrackObjectPresentationActionTrigger(const m_action_active = true; if (m_action.size() == 0) - { - fprintf(stderr, "[TrackObject] WARNING: action-trigger has no action defined\n"); - } + Log::warn("TrackObject", "Action-trigger has no action defined."); ItemManager::get()->newItem(m_init_xyz, trigger_distance, this); } @@ -891,10 +886,7 @@ void TrackObjectPresentationActionTrigger::onTriggerItemApproached(Item* who) return; } else - { - fprintf(stderr, "[TrackObject] WARNING: unknown action <%s>\n", - m_action.c_str()); - } + Log::warn("TrackObject", "Unknown action '%s'", m_action.c_str()); } diff --git a/src/utils/string_utils.cpp b/src/utils/string_utils.cpp index a096f88c5..091440a0c 100644 --- a/src/utils/string_utils.cpp +++ b/src/utils/string_utils.cpp @@ -520,7 +520,7 @@ namespace StringUtils // which admittedly only works for min < 100000 - which is about 68 // days - good enough. char s[12]; - sprintf ( s, "%02d:%02d:%02d", min, sec, hundredths) ; + sprintf(s, "%02d:%02d:%02d", min, sec, hundredths); return std::string(s); } // timeToString @@ -738,8 +738,8 @@ namespace StringUtils + 10*very_minor + release_candidate; - if(version<=0) - printf("Invalid version string '%s'.\n", s.c_str()); + if(version <= 0) + Log::error("StringUtils", "Invalid version string '%s'.", s.c_str()); return version; } // versionToInt From ba92e1ef6b1b6d0ba25ea3c6822c59aea3559084 Mon Sep 17 00:00:00 2001 From: konstin Date: Tue, 22 Jul 2014 17:45:35 +0200 Subject: [PATCH 57/93] make git ignore data/models and the track editor --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 845c64ce0..0dbc751f9 100644 --- a/.gitignore +++ b/.gitignore @@ -6,12 +6,15 @@ build-win/ cmake_build/ dependencies/ CMakeFiles/ +stk-editor/ .config/ supertuxkart-64 +data/editor data/karts data/library +data/models data/music data/sfx data/textures From 06e4cbb9bea1f49e116d7d9bae2dd4cc30941476 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Tue, 22 Jul 2014 20:09:38 -0400 Subject: [PATCH 58/93] Fix input config screen, since the list widget was improved it didn't display quite right --- src/guiengine/widgets/list_widget.cpp | 9 +- src/guiengine/widgets/list_widget.hpp | 4 + src/states_screens/options_screen_input2.cpp | 113 ++++++++++++------- src/states_screens/options_screen_input2.hpp | 15 ++- 4 files changed, 96 insertions(+), 45 deletions(-) diff --git a/src/guiengine/widgets/list_widget.cpp b/src/guiengine/widgets/list_widget.cpp index d8ed4da81..8f0afbeb2 100644 --- a/src/guiengine/widgets/list_widget.cpp +++ b/src/guiengine/widgets/list_widget.cpp @@ -43,6 +43,7 @@ ListWidget::ListWidget() : Widget(WTYPE_LIST) m_sort_desc = false; m_sort_default = true; m_sort_col = 0; + m_sortable = false; } // ----------------------------------------------------------------------------- @@ -270,9 +271,11 @@ std::string ListWidget::getSelectionInternalName() CGUISTKListBox* list = getIrrlichtElement(); assert(list != NULL); - if (getSelectionID() == -1 || (getSelectionID() >= (int)list->getItemCount())) + int selectionID = getSelectionID(); + if (selectionID == -1 || selectionID >= (int)list->getItemCount()) return ""; - return list->getItem(getSelectionID()).m_internal_name; + CGUISTKListBox::ListItem& item = list->getItem(selectionID); + return item.m_internal_name; } // ----------------------------------------------------------------------------- @@ -418,6 +421,8 @@ EventPropagation ListWidget::transmitEvent(Widget* w, if (originator.find(m_properties[PROP_ID] + "_column_") != std::string::npos) { + if (!m_sortable) return EVENT_BLOCK; + if (m_sort_col != originator[(m_properties[PROP_ID] + "_column_").size()] - '0') { m_sort_desc = false; diff --git a/src/guiengine/widgets/list_widget.hpp b/src/guiengine/widgets/list_widget.hpp index 434ac1175..720032736 100644 --- a/src/guiengine/widgets/list_widget.hpp +++ b/src/guiengine/widgets/list_widget.hpp @@ -87,6 +87,8 @@ namespace GUIEngine IListWidgetHeaderListener* m_listener; + bool m_sortable; + public: typedef irr::gui::CGUISTKListBox::ListItem ListItem; typedef ListItem::ListCell ListCell; @@ -240,6 +242,8 @@ namespace GUIEngine void addColumn(irr::core::stringw col, int proportion=1) { m_header.push_back( Column(col, proportion) ); } void clearColumns() { m_header.clear(); } + + void setSortable(bool sortable) { m_sortable = sortable; } }; } diff --git a/src/states_screens/options_screen_input2.cpp b/src/states_screens/options_screen_input2.cpp index c4d13f3eb..2f72ce1ed 100644 --- a/src/states_screens/options_screen_input2.cpp +++ b/src/states_screens/options_screen_input2.cpp @@ -61,6 +61,19 @@ void OptionsScreenInput2::loadedFromFile() // ---------------------------------------------------------------------------- +void OptionsScreenInput2::beforeAddingWidget() +{ + GUIEngine::ListWidget* w_list = + getWidget("actions"); + assert(w_list != NULL); + w_list->clearColumns(); + w_list->addColumn(_("Action"), 1); + w_list->addColumn(_("Key binding"), 1); + w_list->setSortable(false); +} + +// ---------------------------------------------------------------------------- + void OptionsScreenInput2::init() { Screen::init(); @@ -127,27 +140,27 @@ void OptionsScreenInput2::init() // their actualy contents will be adapted as needed after //I18N: Key binding section - actions->addItem("game_keys_section", _("Game Keys") ); - actions->addItem(KartActionStrings[PA_STEER_LEFT], L"" ); - actions->addItem(KartActionStrings[PA_STEER_RIGHT], L"" ); - actions->addItem(KartActionStrings[PA_ACCEL], L"" ); - actions->addItem(KartActionStrings[PA_BRAKE], L"" ); - actions->addItem(KartActionStrings[PA_FIRE], L"" ); - actions->addItem(KartActionStrings[PA_NITRO], L"" ); - actions->addItem(KartActionStrings[PA_DRIFT], L"" ); - actions->addItem(KartActionStrings[PA_LOOK_BACK], L"" ); - actions->addItem(KartActionStrings[PA_RESCUE], L"" ); - actions->addItem(KartActionStrings[PA_PAUSE_RACE], L"" ); + addListItemSubheader(actions, "game_keys_section", _("Game Keys")); + addListItem(actions, PA_STEER_LEFT); + addListItem(actions, PA_STEER_RIGHT); + addListItem(actions, PA_ACCEL); + addListItem(actions, PA_BRAKE); + addListItem(actions, PA_FIRE); + addListItem(actions, PA_NITRO); + addListItem(actions, PA_DRIFT); + addListItem(actions, PA_LOOK_BACK); + addListItem(actions, PA_RESCUE); + addListItem(actions, PA_PAUSE_RACE); //I18N: Key binding section - actions->addItem("menu_keys_section", _("Menu Keys") ); - actions->addItem(KartActionStrings[PA_MENU_UP], L"" ); - actions->addItem(KartActionStrings[PA_MENU_DOWN], L"" ); - actions->addItem(KartActionStrings[PA_MENU_LEFT], L"" ); - actions->addItem(KartActionStrings[PA_MENU_RIGHT], L"" ); - actions->addItem(KartActionStrings[PA_MENU_SELECT], L""); - actions->addItem(KartActionStrings[PA_MENU_CANCEL], L"" ); + addListItemSubheader(actions, "menu_keys_section", _("Menu Keys")); + addListItem(actions, PA_MENU_UP); + addListItem(actions, PA_MENU_DOWN); + addListItem(actions, PA_MENU_LEFT); + addListItem(actions, PA_MENU_RIGHT); + addListItem(actions, PA_MENU_SELECT); + addListItem(actions, PA_MENU_CANCEL); updateInputButtons(); @@ -163,16 +176,36 @@ void OptionsScreenInput2::init() // ----------------------------------------------------------------------------- -irr::core::stringw OptionsScreenInput2::makeLabel( +void OptionsScreenInput2::addListItemSubheader(GUIEngine::ListWidget* actions, + const char* id, + const core::stringw& text) +{ + std::vector row; + row.push_back(GUIEngine::ListWidget::ListCell(text, -1, 1, false)); + row.push_back(GUIEngine::ListWidget::ListCell(L"", -1, 1, false)); + actions->addItem(id, row); +} + +// ----------------------------------------------------------------------------- + +void OptionsScreenInput2::addListItem(GUIEngine::ListWidget* actions, PlayerAction pa) +{ + std::vector row; + row.push_back(GUIEngine::ListWidget::ListCell(core::stringw(KartActionStrings[pa].c_str()), -1, 1, false)); + row.push_back(GUIEngine::ListWidget::ListCell(L"", -1, 1, false)); + actions->addItem(KartActionStrings[pa], row); +} + +// ----------------------------------------------------------------------------- + +void OptionsScreenInput2::renameRow(GUIEngine::ListWidget* actions, + int idRow, const irr::core::stringw &translatedName, PlayerAction action) const { - //hack: one tab character is supported by out font object, it moves the - // cursor to the middle of the area - core::stringw out = irr::core::stringw(" ") + translatedName + L"\t"; + actions->renameCell(idRow, 0, core::stringw(" ") + translatedName); + actions->renameCell(idRow, 1, m_config->getBindingAsString(action)); - out += m_config->getBindingAsString(action); - return out; } // makeLabel // ----------------------------------------------------------------------------- @@ -191,54 +224,54 @@ void OptionsScreenInput2::updateInputButtons() i++; // section header //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Steer Left"), PA_STEER_LEFT) ); + renameRow(actions, i++, _("Steer Left"), PA_STEER_LEFT); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Steer Right"), PA_STEER_RIGHT) ); + renameRow(actions, i++, _("Steer Right"), PA_STEER_RIGHT); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Accelerate"), PA_ACCEL) ); + renameRow(actions, i++, _("Accelerate"), PA_ACCEL); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Brake"), PA_BRAKE) ); + renameRow(actions, i++, _("Brake"), PA_BRAKE); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Fire"), PA_FIRE) ); + renameRow(actions, i++, _("Fire"), PA_FIRE); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Nitro"), PA_NITRO) ); + renameRow(actions, i++, _("Nitro"), PA_NITRO); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Skidding"), PA_DRIFT) ); + renameRow(actions, i++, _("Skidding"), PA_DRIFT); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Look Back"), PA_LOOK_BACK) ); + renameRow(actions, i++, _("Look Back"), PA_LOOK_BACK); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Rescue"), PA_RESCUE) ); + renameRow(actions, i++, _("Rescue"), PA_RESCUE); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Pause Game"), PA_PAUSE_RACE) ); + renameRow(actions, i++, _("Pause Game"), PA_PAUSE_RACE); i++; // section header //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Up"), PA_MENU_UP) ); + renameRow(actions, i++, _("Up"), PA_MENU_UP); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Down"), PA_MENU_DOWN) ); + renameRow(actions, i++, _("Down"), PA_MENU_DOWN); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Left"), PA_MENU_LEFT) ); + renameRow(actions, i++, _("Left"), PA_MENU_LEFT); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Right"), PA_MENU_RIGHT) ); + renameRow(actions, i++, _("Right"), PA_MENU_RIGHT); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Select"), PA_MENU_SELECT) ); + renameRow(actions, i++, _("Select"), PA_MENU_SELECT); //I18N: Key binding name - actions->renameItem(i++, makeLabel( _("Cancel/Back"), PA_MENU_CANCEL) ); + renameRow(actions, i++, _("Cancel/Back"), PA_MENU_CANCEL); diff --git a/src/states_screens/options_screen_input2.hpp b/src/states_screens/options_screen_input2.hpp index 5bf3aeab1..1c273769f 100644 --- a/src/states_screens/options_screen_input2.hpp +++ b/src/states_screens/options_screen_input2.hpp @@ -25,7 +25,7 @@ #include "guiengine/screen.hpp" #include "states_screens/dialogs/message_dialog.hpp" -namespace GUIEngine { class Widget; } +namespace GUIEngine { class Widget; class ListWidget; } class DeviceConfig; namespace irr { namespace gui { class STKModifiedSpriteBank; } } @@ -50,8 +50,15 @@ class OptionsScreenInput2 : public GUIEngine::Screen, DeviceConfig* m_config; - irr::core::stringw makeLabel(const irr::core::stringw &translatedName, - PlayerAction action) const; + void renameRow(GUIEngine::ListWidget* actions, + int idRow, + const irr::core::stringw &translatedName, + PlayerAction action) const; + + void addListItem(GUIEngine::ListWidget* actions, PlayerAction pa); + void addListItemSubheader(GUIEngine::ListWidget* actions, + const char* id, + const core::stringw& text); public: friend class GUIEngine::ScreenSingleton; @@ -84,6 +91,8 @@ public: /** \brief Implement IConfirmDialogListener callback */ virtual void onConfirm() OVERRIDE; + + virtual void beforeAddingWidget() OVERRIDE; }; #endif From 9fa93d74d5f9a282d5ba6e116b871cfcb5633f0d Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 23 Jul 2014 22:11:37 +1000 Subject: [PATCH 59/93] Fixed linux compilation. --- src/guiengine/widgets/list_widget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/guiengine/widgets/list_widget.cpp b/src/guiengine/widgets/list_widget.cpp index 8f0afbeb2..8f920dd13 100644 --- a/src/guiengine/widgets/list_widget.cpp +++ b/src/guiengine/widgets/list_widget.cpp @@ -274,7 +274,7 @@ std::string ListWidget::getSelectionInternalName() int selectionID = getSelectionID(); if (selectionID == -1 || selectionID >= (int)list->getItemCount()) return ""; - CGUISTKListBox::ListItem& item = list->getItem(selectionID); + const CGUISTKListBox::ListItem& item = list->getItem(selectionID); return item.m_internal_name; } From 277aab1a0e5e298de914a1df4dcbb86323a1347a Mon Sep 17 00:00:00 2001 From: Flakebi Date: Wed, 23 Jul 2014 21:40:46 +0200 Subject: [PATCH 60/93] Fix compiling issues without debug mode in my log code --- src/graphics/camera.hpp | 1 + src/graphics/particle_kind.cpp | 1 + src/guiengine/abstract_top_level_container.hpp | 1 + src/tracks/graph_node.cpp | 1 + 4 files changed, 4 insertions(+) diff --git a/src/graphics/camera.hpp b/src/graphics/camera.hpp index 125bc439f..1113ebc60 100644 --- a/src/graphics/camera.hpp +++ b/src/graphics/camera.hpp @@ -25,6 +25,7 @@ #include "utils/no_copy.hpp" #include "utils/aligned_array.hpp" #include "utils/leak_check.hpp" +#include "utils/log.hpp" #include "utils/vec3.hpp" #include "SColor.h" diff --git a/src/graphics/particle_kind.cpp b/src/graphics/particle_kind.cpp index d332ceacf..b87703f7f 100644 --- a/src/graphics/particle_kind.cpp +++ b/src/graphics/particle_kind.cpp @@ -23,6 +23,7 @@ #include "io/file_manager.hpp" #include "io/xml_node.hpp" #include "utils/constants.hpp" +#include "utils/log.hpp" #include diff --git a/src/guiengine/abstract_top_level_container.hpp b/src/guiengine/abstract_top_level_container.hpp index 3387f51aa..15a278528 100644 --- a/src/guiengine/abstract_top_level_container.hpp +++ b/src/guiengine/abstract_top_level_container.hpp @@ -21,6 +21,7 @@ #include "guiengine/widget.hpp" +#include "utils/log.hpp" #include "utils/ptr_vector.hpp" #include // for NULL diff --git a/src/tracks/graph_node.cpp b/src/tracks/graph_node.cpp index ac5967de5..a48559830 100644 --- a/src/tracks/graph_node.cpp +++ b/src/tracks/graph_node.cpp @@ -22,6 +22,7 @@ #include "io/xml_node.hpp" #include "tracks/quad_graph.hpp" #include "tracks/quad_set.hpp" +#include "utils/log.hpp" // ---------------------------------------------------------------------------- /** Constructor. Saves the quad index which belongs to this graph node. From 7f56bf6946d166a6ac9c278f182d04cd783e2391 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Wed, 23 Jul 2014 18:43:12 -0400 Subject: [PATCH 61/93] Invalid defaut value for sortable was used in list widget --- src/guiengine/widgets/list_widget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/guiengine/widgets/list_widget.cpp b/src/guiengine/widgets/list_widget.cpp index 8f920dd13..f9900302d 100644 --- a/src/guiengine/widgets/list_widget.cpp +++ b/src/guiengine/widgets/list_widget.cpp @@ -43,7 +43,7 @@ ListWidget::ListWidget() : Widget(WTYPE_LIST) m_sort_desc = false; m_sort_default = true; m_sort_col = 0; - m_sortable = false; + m_sortable = true; } // ----------------------------------------------------------------------------- From 2896b47233a5c3f8f03ee5784b1b7701825c87c4 Mon Sep 17 00:00:00 2001 From: hiker Date: Thu, 24 Jul 2014 09:26:27 +1000 Subject: [PATCH 62/93] Try to let yavis compile both debug and release mode. --- .travis.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 06ef93281..db55853be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,11 +22,18 @@ before_install: - sudo apt-get update -qq - sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev script: - # Build commands - - mkdir build - - cd build + # First a debug build: + - mkdir build-debug + - cd build-debug - cmake .. -DCMAKE_BUILD_TYPE=Debug -DCHECK_ASSETS=off - make VERBOSE=1 -j 4 + + # Then a release build: + - mkdir ../build-release + - cd build-release + - cmake .. -DCMAKE_BUILD_TYPE=Release -DCHECK_ASSETS=off + - make VERBOSE=1 -j 4 + notifications: irc: channels: From 12259c6c48ede5e09d4a0d8013be246ca96bbf61 Mon Sep 17 00:00:00 2001 From: hiker Date: Thu, 24 Jul 2014 09:52:29 +1000 Subject: [PATCH 63/93] Try to fix travis building debug and release (cd failed before, causing travis to fail). --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index db55853be..a6bd4732b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -29,7 +29,8 @@ script: - make VERBOSE=1 -j 4 # Then a release build: - - mkdir ../build-release + - cd .. + - mkdir build-release - cd build-release - cmake .. -DCMAKE_BUILD_TYPE=Release -DCHECK_ASSETS=off - make VERBOSE=1 -j 4 From fbf5bf41665c48cf3c2148ad71adf5c26c545355 Mon Sep 17 00:00:00 2001 From: hiker Date: Thu, 24 Jul 2014 17:43:11 +1000 Subject: [PATCH 64/93] Changed default number of laps to be 3 (and not the number of laps used last time), which seems to be a better default. Some minor cosmetic changes. --- src/race/grand_prix_data.cpp | 5 +++-- src/tracks/track.cpp | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/race/grand_prix_data.cpp b/src/race/grand_prix_data.cpp index 96de89ba8..ff7cb8380 100644 --- a/src/race/grand_prix_data.cpp +++ b/src/race/grand_prix_data.cpp @@ -111,13 +111,14 @@ void GrandPrixData::changeTrackNumber(const unsigned int number_of_tracks, rand() % available_tracks : track_indices[rand() % available_tracks]; - std::string id = track_manager->getTrack(index)->getIdent(); + const Track *track = track_manager->getTrack(index); + std::string id = track->getIdent(); // Avoid duplicate tracks if (std::find(m_tracks.begin(), m_tracks.end(), id) != m_tracks.end()) continue; m_tracks.push_back(id); - m_laps.push_back(track_manager->getTrack(index)->getDefaultNumberOfLaps()); + m_laps.push_back(track->getDefaultNumberOfLaps()); m_reversed.push_back(false); // This will be changed later in the code } } diff --git a/src/tracks/track.cpp b/src/tracks/track.cpp index 7242d5419..90e7f74f1 100644 --- a/src/tracks/track.cpp +++ b/src/tracks/track.cpp @@ -135,7 +135,7 @@ Track::Track(const std::string &filename) m_ident=="overworld"; m_minimap_x_scale = 1.0f; m_minimap_y_scale = 1.0f; - m_default_number_of_laps= UserConfigParams::m_num_laps; + m_default_number_of_laps= 3; m_all_nodes.clear(); m_all_physics_only_nodes.clear(); m_all_cached_meshes.clear(); @@ -472,6 +472,7 @@ void Track::loadTrackInfo() root->get("groups", &m_groups); root->get("internal", &m_internal); root->get("reverse", &m_reverse_available); + root->get("default-number-of-laps",&m_default_number_of_laps); root->get("push-back", &m_enable_push_back); root->get("clouds", &m_clouds); root->get("bloom", &m_bloom); @@ -483,7 +484,6 @@ void Track::loadTrackInfo() root->get("caustics-speed", &m_caustics_speed); root->get("color-level-in", &m_color_inlevel); root->get("color-level-out", &m_color_outlevel); - root->get("default-number-of-laps",&m_default_number_of_laps); // Make the default for auto-rescue in battle mode and soccer mode to be false if(m_is_arena || m_is_soccer) From f3746c068c4e17c12f1a30fc49c623c010775849 Mon Sep 17 00:00:00 2001 From: deve Date: Fri, 25 Jul 2014 13:00:01 +0200 Subject: [PATCH 65/93] Some minor fixes for MinGW compiler --- src/io/file_manager.cpp | 2 +- src/utils/aligned_array.hpp | 2 +- src/utils/vs.hpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/io/file_manager.cpp b/src/io/file_manager.cpp index b5d203ef9..e4d0ff499 100644 --- a/src/io/file_manager.cpp +++ b/src/io/file_manager.cpp @@ -723,7 +723,7 @@ void FileManager::checkAndCreateConfigDir() if(!checkAndCreateDirectory(m_user_config_dir)) { Log::error("[FileManager]", "Can't create config dir '%s" - ", falling back to '.'.", m_user_config_dir); + ", falling back to '.'.", m_user_config_dir.c_str()); m_user_config_dir = "."; } } diff --git a/src/utils/aligned_array.hpp b/src/utils/aligned_array.hpp index 3f90608b8..a97e37ba3 100644 --- a/src/utils/aligned_array.hpp +++ b/src/utils/aligned_array.hpp @@ -24,7 +24,7 @@ // btAlignedObjectArray to enable bullet SSE optimisations. // On the other hand, std::vector gives much better debugging features. // So SSE is disabled in bullet on windows debug -#if !defined(DEBUG) && (WIN32) +#if !defined(DEBUG) && defined(WIN32) # undef USE_ALIGNED #else # undef USE_ALIGNED diff --git a/src/utils/vs.hpp b/src/utils/vs.hpp index 5937202c1..ffc47ba16 100644 --- a/src/utils/vs.hpp +++ b/src/utils/vs.hpp @@ -3,7 +3,7 @@ * so we define the work arounds only for compiler versions before 18.00 */ -#if defined(WIN32) && _MSC_VER < 1800 +#if defined(WIN32) && defined(_MSC_VER) && _MSC_VER < 1800 # include # define isnan _isnan From b9eb981fccfb7db9856afc014d81001aff83b708 Mon Sep 17 00:00:00 2001 From: Deve Date: Fri, 25 Jul 2014 19:23:32 +0200 Subject: [PATCH 66/93] Some cleanup with USE_XRANDR flag --- CMakeLists.txt | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 966c5efe6..23d20b86a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,6 @@ option(CHECK_ASSETS "Check if assets are installed in ../stk-assets" ON) if(UNIX) option(USE_CPP2011 "Activate C++ 2011 mode (GCC only)" OFF) - option(USE_XRANDR "Use xrandr instead of vidmode" OFF) endif() if(MSVC) # Normally hide the option to build wiiuse on VS, since it depends @@ -29,6 +28,10 @@ else() set(WIIUSE_BUILD ON) endif() +if(UNIX AND NOT APPLE) + option(USE_XRANDR "Use xrandr instead of vidmode" OFF) +endif() + set(STK_SOURCE_DIR "src") set(STK_DATA_DIR "${PROJECT_SOURCE_DIR}/data") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") @@ -118,10 +121,6 @@ if(USE_FRIBIDI) endif() endif() -# Xrandr -if(UNIX AND USE_XRANDR) - find_package(Xrandr REQUIRED) -endif() if(UNIX) # if(USE_CPP2011) @@ -134,13 +133,14 @@ find_package(OpenGL REQUIRED) include_directories(${OPENGL_INCLUDE_DIR}) if(UNIX AND NOT APPLE) - find_library(IRRLICHT_XF86VM_LIBRARY Xxf86vm) - mark_as_advanced(IRRLICHT_XF86VM_LIBRARY) -else() - set(IRRLICHT_XF86VM_LIBRARY "") + if(USE_XRANDR) + find_package(Xrandr REQUIRED) + else() + find_library(IRRLICHT_XF86VM_LIBRARY Xxf86vm) + mark_as_advanced(IRRLICHT_XF86VM_LIBRARY) + endif() endif() - # Set some compiler options if(UNIX) @@ -153,12 +153,12 @@ if(WIN32) # And shut up about unsafe stuff add_definitions(-D_CRT_SECURE_NO_WARNINGS) - # VS will automatically add NDEBUG for release mode, but only _DEBUG in debug mode. - # Since STK uses DEBUG, this is added for debug compilation only: + # VS will automatically add NDEBUG for release mode, but only _DEBUG in debug mode. + # Since STK uses DEBUG, this is added for debug compilation only: set_property(DIRECTORY PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUG) else() # All non VS generators used create only a single compile mode, so - # compile flags can be simplye be added + # compile flags can be simplye be added if(CMAKE_BUILD_TYPE MATCHES Debug) add_definitions(-DDEBUG) else() @@ -245,10 +245,16 @@ target_link_libraries(supertuxkart stkirrlicht ${CURL_LIBRARIES} ${OGGVORBIS_LIBRARIES} - ${IRRLICHT_XF86VM_LIBRARY} ${OPENAL_LIBRARY} ${OPENGL_LIBRARIES}) - + +if(UNIX AND NOT APPLE) + if(USE_XRANDR) + target_link_libraries(supertuxkart ${XRANDR_LIBRARIES}) + else() + target_link_libraries(supertuxkart ${IRRLICHT_XF86VM_LIBRARY}) + endif() +endif() if(APPLE) # In theory it would be cleaner to let CMake detect the right dependencies. In practice, this means that if a OSX user has @@ -284,11 +290,6 @@ if(USE_WIIUSE) endif() -# Xrandr -if(UNIX AND USE_XRANDR) - target_link_libraries(supertuxkart ${XRANDR_LIBRARIES}) -endif() - if(MSVC) target_link_libraries(supertuxkart iphlpapi.lib) add_custom_command(TARGET supertuxkart POST_BUILD From f87b4045617b58f2a60a1b0bcdcf18136a82e400 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sat, 26 Jul 2014 23:54:57 +0200 Subject: [PATCH 67/93] Add some doxygen on shader creation/usage --- src/graphics/shaders.cpp | 59 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index b160b3d6b..95dbe2bb0 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -14,6 +14,65 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** +\page shaders_overview Shaders Overview + + \section shader_declaration Shader declaration + You need to create a class for each shader in shaders.cpp + This class should inherit from the template ShaderHelper<>. + The template first parameter is the shader class being declared and the following ones are the types + of every uniform (except samplers) required by the shaders. + + The template inheritance will provide the shader with a setUniforms() variadic function which calls + the glUniform*() that pass uniforms value to the shader according to the type given as parameter + to the template. + + The class constructor is used to + \li \ref shader_declaration_compile + \li \ref shader_declaration_uniform_names + \li \ref shader_declaration_bind_texture_unit + + Of course it's possible to use the constructor to declare others things if needed. + + \subsection shader_declaration_compile Compile the shader + + The LoadProgram() function is provided to ease shader compilation and link. + + \subsection shader_declaration_uniform_names Declare uniforms + + \subsection shader_declaration_bind_texture_unit Bind texture unit and name + + \section shader_usage + + Shader's class are singleton that can be retrieved using ShaderClassName::getInstance() which automatically + creates an instance the first time it is called. + + As the program id of a shader instance is public it can be used to bind a program : + \code + glUseProgram(MyShaderClass::getInstance()->Program); + \endcode + + To set uniforms use the automatically generated function setUniforms: + + \code + MyShaderClass::getInstance()->setUniforms(Args...) + \endcode + + A Vertex Array must be bound (VAO creation process is currently left to the reader) : + + \code + glBindVertexAttrib(vao); + \endcode + + To actually perform the rendering you also need to call a glDraw* function (left to the reader as well) : + + \code + glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_SHORT); + \endcode + +*/ + #define SHADER_NAMES #include "graphics/callbacks.hpp" From 85dd8d11a9b838f49aefe13d7ecc3d7a1665aee3 Mon Sep 17 00:00:00 2001 From: Deve Date: Sun, 27 Jul 2014 00:47:21 +0200 Subject: [PATCH 68/93] Add experimental support for multi-monitor on linux using xrandr. Now you can play STK on one screen and watch TV on the second ;-) Currently I use first (main) screen. We can detect from which screen STK was executed using xinerama. Will be improved. --- .../source/Irrlicht/CIrrDeviceLinux.cpp | 167 ++++++++++++++---- .../source/Irrlicht/CIrrDeviceLinux.h | 4 +- 2 files changed, 134 insertions(+), 37 deletions(-) diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp index b9cd2505c..5b13418a9 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp @@ -234,7 +234,7 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) return true; if (reset) { -#ifdef _IRR_LINUX_X11_VIDMODE_ + #ifdef _IRR_LINUX_X11_VIDMODE_ if (UseXVidMode && CreationParams.Fullscreen) { XF86VidModeSwitchToMode(display, screennr, &oldVideoMode); @@ -244,9 +244,19 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) #ifdef _IRR_LINUX_X11_RANDR_ if (UseXRandR && CreationParams.Fullscreen) { - XRRScreenConfiguration *config=XRRGetScreenInfo(display,DefaultRootWindow(display)); - XRRSetScreenConfig(display,config,DefaultRootWindow(display),oldRandrMode,oldRandrRotation,CurrentTime); - XRRFreeScreenConfigInfo(config); + XRRScreenResources* res = XRRGetScreenResources (display, DefaultRootWindow(display)); + XRROutputInfo* output_info = XRRGetOutputInfo(display, res, res->outputs[xrandr_output]); + XRRCrtcInfo* crtc = XRRGetCrtcInfo(display, res, output_info->crtc); + + Status s = XRRSetCrtcConfig(display, res, output_info->crtc, CurrentTime, + crtc->x, crtc->y, old_mode, + crtc->rotation, &res->outputs[xrandr_output], 1); + + if (s != Success) + { + printf("XRRSetCrtcConfig failed\n"); + return 0; + } } #endif return true; @@ -318,31 +328,54 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) #endif #ifdef _IRR_LINUX_X11_RANDR_ if (XRRQueryExtension(display, &eventbase, &errorbase)) - { - s32 modeCount; - XRRScreenConfiguration *config=XRRGetScreenInfo(display,DefaultRootWindow(display)); - XRRScreenSize *modes=XRRConfigSizes(config,&modeCount); - for (s32 i = 0; inoutput %i \n", res->noutput); + printf("res->nmode %i \n", res->nmode); + + XRROutputInfo* output_info = XRRGetOutputInfo(display, res, res->outputs[xrandr_output]); + XRRCrtcInfo* crtc = XRRGetCrtcInfo(display, res, output_info->crtc); + + if (!res) { - if (bestMode==-1 && (u32)modes[i].width >= Width && (u32)modes[i].height >= Height) - bestMode = i; - else if (bestMode!=-1 && - (u32)modes[i].width >= Width && - (u32)modes[i].height >= Height && - modes[i].width <= modes[bestMode].width && - modes[i].height <= modes[bestMode].height) - bestMode = i; + printf("Couldn't get XRandR screen resources\n"); + return 0; } - if (bestMode != -1) - { - os::Printer::log("Starting randr fullscreen mode...", ELL_INFORMATION); - os::Printer::log("width: ", core::stringc(modes[bestMode].width).c_str(), ELL_INFORMATION); - os::Printer::log("height: ", core::stringc(modes[bestMode].height).c_str(), ELL_INFORMATION); - XRRSetScreenConfig(display,config,DefaultRootWindow(display),bestMode,oldRandrRotation,CurrentTime); - UseXRandR=true; + printf("wanted width: %i, wanted height: %i\n", Width, Height); + + for (int i = 0; i < res->nmode; i++) + { + const XRRModeInfo *info = &res->modes[i]; + printf("mode %i, width: %i, height: %i\n", i, info->width, info->height); + + if (bestMode == -1 && info->width == Width && info->height == Height) + { + printf("found info->width %i, info->height %i\n", info->width, info->height); + printf("output_info->nmode, %i\n", output_info->nmode); + + for (int j = 0; j < output_info->nmode; j++) + { + if (res->modes[i].id == output_info->modes[j]) + { + bestMode = i; + printf("Found best mode: %i, width: %i, height: %i\n", bestMode, info->width, info->height); + } + } + } } - XRRFreeScreenConfigInfo(config); + + Status s = XRRSetCrtcConfig(display, res, output_info->crtc, CurrentTime, + crtc->x, crtc->y, res->modes[bestMode].id, + crtc->rotation, &res->outputs[xrandr_output], 1); + + if (s != Success) + { + printf("XRRSetCrtcConfig failed\n"); + return 0; + } + + UseXRandR=true; } else #endif @@ -351,6 +384,7 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) "to switch to fullscreen mode. Running in windowed mode instead.", ELL_WARNING); CreationParams.Fullscreen = false; } + return CreationParams.Fullscreen; } @@ -1497,18 +1531,81 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() #ifdef _IRR_LINUX_X11_RANDR_ if (XRRQueryExtension(display, &eventbase, &errorbase)) { - int modeCount; - XRRScreenConfiguration *config=XRRGetScreenInfo(display,DefaultRootWindow(display)); - oldRandrMode=XRRConfigCurrentConfiguration(config,&oldRandrRotation); - XRRScreenSize *modes=XRRConfigSizes(config,&modeCount); - VideoModeList.setDesktop(defaultDepth, core::dimension2d( - modes[oldRandrMode].width, modes[oldRandrMode].height)); - for (int i = 0; inoutput %i \n", res->noutput); + printf("res->nmode %i \n", res->nmode); + + if (!res) { - VideoModeList.addMode(core::dimension2d( - modes[i].width, modes[i].height), defaultDepth); + printf("Couldn't get XRandR screen resources\n"); + return 0; } - XRRFreeScreenConfigInfo(config); + + for (int output = 0; output < res->noutput; output++) + { + output_info = XRRGetOutputInfo(display, res, res->outputs[output]); + + if (!output_info || !output_info->crtc || output_info->connection == RR_Disconnected) + { + XRRFreeOutputInfo(output_info); + printf("disconnected\n"); + continue; + } + + crtc = XRRGetCrtcInfo(display, res, output_info->crtc); + printf("crtc->x %i\n", crtc->x); + printf("crtc->y %i\n", crtc->y); + + if (!crtc || crtc->x != 0 || crtc->y != 0) + { + XRRFreeOutputInfo(output_info); + XRRFreeCrtcInfo(crtc); + printf("not crtc\n"); + continue; + } + + xrandr_output = output; + printf("found\n"); + break; + } + + if (output_info == NULL) + { + printf("error. output_info is null\n"); + return 0; + } + + printf("wanted width: %i, wanted height: %i\n", Width, Height); + + for (int i = 0; i < res->nmode; i++) + { + const XRRModeInfo *info = &res->modes[i]; + printf("mode %i, width: %i, height: %i\n", i, info->width, info->height); + + for (int j = 0; j < output_info->nmode; j++) + { + if (res->modes[i].id == output_info->modes[j]) + { + VideoModeList.addMode(core::dimension2d( + info->width, info->height), defaultDepth); + + printf("Found best mode: %i, width: %i, height: %i\n", i, info->width, info->height); + } + + if (res->modes[i].id == crtc->mode) + { + old_mode = crtc->mode; + + VideoModeList.setDesktop(defaultDepth, core::dimension2d(info->width, info->height)); + printf("current resolution, width: %i, height: %i\n", info->width, info->height); + } + } + } + + XRRFreeCrtcInfo(crtc); + XRRFreeOutputInfo(output_info); } else #endif diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h index bc4a99a6d..ac8951b1e 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h @@ -394,8 +394,8 @@ namespace irr XF86VidModeModeInfo oldVideoMode; #endif #ifdef _IRR_LINUX_X11_RANDR_ - SizeID oldRandrMode; - Rotation oldRandrRotation; + int xrandr_output; + RRMode old_mode; #endif #ifdef _IRR_COMPILE_WITH_OPENGL_ GLXWindow glxWin; From 068b88cb4b2a2d2f6c1677a060de5e80ae4d7b3c Mon Sep 17 00:00:00 2001 From: Deve Date: Sun, 27 Jul 2014 19:32:12 +0200 Subject: [PATCH 69/93] Rename some variables, free memory etc. --- .../source/Irrlicht/CIrrDeviceLinux.cpp | 137 ++++++++++-------- .../source/Irrlicht/CIrrDeviceLinux.h | 4 +- 2 files changed, 79 insertions(+), 62 deletions(-) diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp index 5b13418a9..ea59bdb86 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp @@ -1,4 +1,5 @@ // Copyright (C) 2002-2012 Nikolaus Gebhardt +// Copyright (C) 2014 Dawid Gan // This file is part of the "Irrlicht Engine". // For conditions of distribution and use, see copyright notice in irrlicht.h @@ -245,17 +246,21 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) if (UseXRandR && CreationParams.Fullscreen) { XRRScreenResources* res = XRRGetScreenResources (display, DefaultRootWindow(display)); - XRROutputInfo* output_info = XRRGetOutputInfo(display, res, res->outputs[xrandr_output]); - XRRCrtcInfo* crtc = XRRGetCrtcInfo(display, res, output_info->crtc); + XRROutputInfo* output = XRRGetOutputInfo(display, res, res->outputs[output_id]); + XRRCrtcInfo* crtc = XRRGetCrtcInfo(display, res, output->crtc); - Status s = XRRSetCrtcConfig(display, res, output_info->crtc, CurrentTime, - crtc->x, crtc->y, old_mode, - crtc->rotation, &res->outputs[xrandr_output], 1); + Status s = XRRSetCrtcConfig(display, res, output->crtc, CurrentTime, + crtc->x, crtc->y, res->modes[old_mode].id, + crtc->rotation, &res->outputs[output_id], 1); + + XRRFreeOutputInfo(output); + XRRFreeCrtcInfo(crtc); + XRRFreeScreenResources(res); if (s != Success) { printf("XRRSetCrtcConfig failed\n"); - return 0; + return false; } } #endif @@ -329,53 +334,62 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) #ifdef _IRR_LINUX_X11_RANDR_ if (XRRQueryExtension(display, &eventbase, &errorbase)) { - XRRScreenResources* res = XRRGetScreenResources (display, DefaultRootWindow(display)); - printf("res->noutput %i \n", res->noutput); - printf("res->nmode %i \n", res->nmode); - - XRROutputInfo* output_info = XRRGetOutputInfo(display, res, res->outputs[xrandr_output]); - XRRCrtcInfo* crtc = XRRGetCrtcInfo(display, res, output_info->crtc); - + XRRScreenResources* res = XRRGetScreenResources(display, DefaultRootWindow(display)); + if (!res) { printf("Couldn't get XRandR screen resources\n"); - return 0; + return false; } + + printf("res->noutput %i \n", res->noutput); + printf("res->nmode %i \n", res->nmode); + + XRROutputInfo* output = XRRGetOutputInfo(display, res, res->outputs[output_id]); + XRRCrtcInfo* crtc = XRRGetCrtcInfo(display, res, output->crtc); printf("wanted width: %i, wanted height: %i\n", Width, Height); for (int i = 0; i < res->nmode; i++) { - const XRRModeInfo *info = &res->modes[i]; + const XRRModeInfo* info = &res->modes[i]; printf("mode %i, width: %i, height: %i\n", i, info->width, info->height); if (bestMode == -1 && info->width == Width && info->height == Height) { printf("found info->width %i, info->height %i\n", info->width, info->height); - printf("output_info->nmode, %i\n", output_info->nmode); + printf("output->nmode, %i\n", output->nmode); - for (int j = 0; j < output_info->nmode; j++) + for (int j = 0; j < output->nmode; j++) { - if (res->modes[i].id == output_info->modes[j]) - { - bestMode = i; - printf("Found best mode: %i, width: %i, height: %i\n", bestMode, info->width, info->height); - } + if (res->modes[i].id != output->modes[j]) + continue; + + bestMode = i; + printf("Found best mode: %i, width: %i, height: %i\n", bestMode, info->width, info->height); + break; } } } - Status s = XRRSetCrtcConfig(display, res, output_info->crtc, CurrentTime, - crtc->x, crtc->y, res->modes[bestMode].id, - crtc->rotation, &res->outputs[xrandr_output], 1); - - if (s != Success) + if (bestMode != -1) { - printf("XRRSetCrtcConfig failed\n"); - return 0; + Status s = XRRSetCrtcConfig(display, res, output->crtc, CurrentTime, + crtc->x, crtc->y, res->modes[bestMode].id, + crtc->rotation, &res->outputs[output_id], 1); + + XRRFreeCrtcInfo(crtc); + XRRFreeOutputInfo(output); + XRRFreeScreenResources(res); + + if (s != Success) + { + printf("XRRSetCrtcConfig failed\n"); + return false; + } + + UseXRandR=true; } - - UseXRandR=true; } else #endif @@ -1531,81 +1545,84 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() #ifdef _IRR_LINUX_X11_RANDR_ if (XRRQueryExtension(display, &eventbase, &errorbase)) { - XRRScreenResources* res = XRRGetScreenResources (display, DefaultRootWindow(display)); - XRROutputInfo *output_info = NULL; - XRRCrtcInfo* crtc = NULL; - printf("res->noutput %i \n", res->noutput); - printf("res->nmode %i \n", res->nmode); + XRRScreenResources* res = XRRGetScreenResources(display, DefaultRootWindow(display)); if (!res) { printf("Couldn't get XRandR screen resources\n"); - return 0; + return NULL; } + + XRROutputInfo *output = NULL; + XRRCrtcInfo* crtc = NULL; + printf("res->noutput %i \n", res->noutput); + printf("res->nmode %i \n", res->nmode); - for (int output = 0; output < res->noutput; output++) + for (int i = 0; i < res->noutput; i++) { - output_info = XRRGetOutputInfo(display, res, res->outputs[output]); + output = XRRGetOutputInfo(display, res, res->outputs[i]); - if (!output_info || !output_info->crtc || output_info->connection == RR_Disconnected) + if (!output || !output->crtc || output->connection == RR_Disconnected) { - XRRFreeOutputInfo(output_info); + XRRFreeOutputInfo(output); printf("disconnected\n"); continue; } - crtc = XRRGetCrtcInfo(display, res, output_info->crtc); + crtc = XRRGetCrtcInfo(display, res, output->crtc); printf("crtc->x %i\n", crtc->x); printf("crtc->y %i\n", crtc->y); if (!crtc || crtc->x != 0 || crtc->y != 0) { - XRRFreeOutputInfo(output_info); XRRFreeCrtcInfo(crtc); + XRRFreeOutputInfo(output); printf("not crtc\n"); continue; } - xrandr_output = output; + output_id = i; printf("found\n"); break; } - if (output_info == NULL) + if (crtc == NULL) { - printf("error. output_info is null\n"); - return 0; + printf("error. crtc not found\n"); + XRRFreeCrtcInfo(crtc); + XRRFreeOutputInfo(output); + XRRFreeScreenResources(res); + return NULL; } - - printf("wanted width: %i, wanted height: %i\n", Width, Height); - + for (int i = 0; i < res->nmode; i++) { - const XRRModeInfo *info = &res->modes[i]; - printf("mode %i, width: %i, height: %i\n", i, info->width, info->height); + const XRRModeInfo *mode = &res->modes[i]; + printf("mode %i, width: %i, height: %i\n", i, mode->width, mode->height); - for (int j = 0; j < output_info->nmode; j++) + for (int j = 0; j < output->nmode; j++) { - if (res->modes[i].id == output_info->modes[j]) + if (res->modes[i].id == output->modes[j]) { VideoModeList.addMode(core::dimension2d( - info->width, info->height), defaultDepth); + mode->width, mode->height), defaultDepth); - printf("Found best mode: %i, width: %i, height: %i\n", i, info->width, info->height); + printf("Found mode: %i, width: %i, height: %i\n", i, mode->width, mode->height); } if (res->modes[i].id == crtc->mode) { - old_mode = crtc->mode; + old_mode = i; - VideoModeList.setDesktop(defaultDepth, core::dimension2d(info->width, info->height)); - printf("current resolution, width: %i, height: %i\n", info->width, info->height); + VideoModeList.setDesktop(defaultDepth, core::dimension2d(mode->width, mode->height)); + printf("current resolution, width: %i, height: %i\n", mode->width, mode->height); } } } XRRFreeCrtcInfo(crtc); - XRRFreeOutputInfo(output_info); + XRRFreeOutputInfo(output); + XRRFreeScreenResources(res); } else #endif diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h index ac8951b1e..364efd382 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h @@ -394,8 +394,8 @@ namespace irr XF86VidModeModeInfo oldVideoMode; #endif #ifdef _IRR_LINUX_X11_RANDR_ - int xrandr_output; - RRMode old_mode; + int output_id; + int old_mode; #endif #ifdef _IRR_COMPILE_WITH_OPENGL_ GLXWindow glxWin; From 0409a84fa0b3486a87990632154123032588ab60 Mon Sep 17 00:00:00 2001 From: Deve Date: Sun, 27 Jul 2014 19:36:40 +0200 Subject: [PATCH 70/93] Remove debug output --- .../source/Irrlicht/CIrrDeviceLinux.cpp | 31 ++----------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp index ea59bdb86..9b6f6efc2 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp @@ -259,7 +259,6 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) if (s != Success) { - printf("XRRSetCrtcConfig failed\n"); return false; } } @@ -338,35 +337,24 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) if (!res) { - printf("Couldn't get XRandR screen resources\n"); return false; } - - printf("res->noutput %i \n", res->noutput); - printf("res->nmode %i \n", res->nmode); - + XRROutputInfo* output = XRRGetOutputInfo(display, res, res->outputs[output_id]); XRRCrtcInfo* crtc = XRRGetCrtcInfo(display, res, output->crtc); - printf("wanted width: %i, wanted height: %i\n", Width, Height); - for (int i = 0; i < res->nmode; i++) { const XRRModeInfo* info = &res->modes[i]; - printf("mode %i, width: %i, height: %i\n", i, info->width, info->height); if (bestMode == -1 && info->width == Width && info->height == Height) { - printf("found info->width %i, info->height %i\n", info->width, info->height); - printf("output->nmode, %i\n", output->nmode); - for (int j = 0; j < output->nmode; j++) { if (res->modes[i].id != output->modes[j]) continue; bestMode = i; - printf("Found best mode: %i, width: %i, height: %i\n", bestMode, info->width, info->height); break; } } @@ -384,7 +372,6 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) if (s != Success) { - printf("XRRSetCrtcConfig failed\n"); return false; } @@ -1549,14 +1536,11 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() if (!res) { - printf("Couldn't get XRandR screen resources\n"); return NULL; } XRROutputInfo *output = NULL; XRRCrtcInfo* crtc = NULL; - printf("res->noutput %i \n", res->noutput); - printf("res->nmode %i \n", res->nmode); for (int i = 0; i < res->noutput; i++) { @@ -1565,30 +1549,24 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() if (!output || !output->crtc || output->connection == RR_Disconnected) { XRRFreeOutputInfo(output); - printf("disconnected\n"); continue; } crtc = XRRGetCrtcInfo(display, res, output->crtc); - printf("crtc->x %i\n", crtc->x); - printf("crtc->y %i\n", crtc->y); if (!crtc || crtc->x != 0 || crtc->y != 0) { XRRFreeCrtcInfo(crtc); XRRFreeOutputInfo(output); - printf("not crtc\n"); continue; } output_id = i; - printf("found\n"); break; } if (crtc == NULL) { - printf("error. crtc not found\n"); XRRFreeCrtcInfo(crtc); XRRFreeOutputInfo(output); XRRFreeScreenResources(res); @@ -1598,24 +1576,19 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() for (int i = 0; i < res->nmode; i++) { const XRRModeInfo *mode = &res->modes[i]; - printf("mode %i, width: %i, height: %i\n", i, mode->width, mode->height); for (int j = 0; j < output->nmode; j++) { if (res->modes[i].id == output->modes[j]) { VideoModeList.addMode(core::dimension2d( - mode->width, mode->height), defaultDepth); - - printf("Found mode: %i, width: %i, height: %i\n", i, mode->width, mode->height); + mode->width, mode->height), defaultDepth); } if (res->modes[i].id == crtc->mode) { old_mode = i; - VideoModeList.setDesktop(defaultDepth, core::dimension2d(mode->width, mode->height)); - printf("current resolution, width: %i, height: %i\n", mode->width, mode->height); } } } From 992c97258f8f411b10468e1036691de29f30ab97 Mon Sep 17 00:00:00 2001 From: Deve Date: Sun, 27 Jul 2014 20:00:04 +0200 Subject: [PATCH 71/93] Few more checks --- lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp index 9b6f6efc2..26c847f01 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp @@ -245,6 +245,9 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) #ifdef _IRR_LINUX_X11_RANDR_ if (UseXRandR && CreationParams.Fullscreen) { + if (old_mode == -1 || output_id == -1) + return false; + XRRScreenResources* res = XRRGetScreenResources (display, DefaultRootWindow(display)); XRROutputInfo* output = XRRGetOutputInfo(display, res, res->outputs[output_id]); XRRCrtcInfo* crtc = XRRGetCrtcInfo(display, res, output->crtc); @@ -332,7 +335,10 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) #endif #ifdef _IRR_LINUX_X11_RANDR_ if (XRRQueryExtension(display, &eventbase, &errorbase)) - { + { + if (output_id == -1) + return false; + XRRScreenResources* res = XRRGetScreenResources(display, DefaultRootWindow(display)); if (!res) @@ -1532,6 +1538,9 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() #ifdef _IRR_LINUX_X11_RANDR_ if (XRRQueryExtension(display, &eventbase, &errorbase)) { + old_mode = -1; + output_id = -1; + XRRScreenResources* res = XRRGetScreenResources(display, DefaultRootWindow(display)); if (!res) From 425675bdacba9c64afda49bbed78766807d8d195 Mon Sep 17 00:00:00 2001 From: hiker Date: Mon, 28 Jul 2014 09:52:44 +1000 Subject: [PATCH 72/93] Moved check_structure detection from center of kart to the front of the kart (which will work better for a photo finish). Hopefully no other side effect. --- src/karts/abstract_kart.hpp | 4 ++++ src/karts/kart.cpp | 5 +++++ src/karts/kart.hpp | 8 ++++++++ src/modes/linear_world.cpp | 2 +- src/tracks/check_structure.cpp | 2 +- 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/karts/abstract_kart.hpp b/src/karts/abstract_kart.hpp index af67b278b..7e681e418 100644 --- a/src/karts/abstract_kart.hpp +++ b/src/karts/abstract_kart.hpp @@ -157,6 +157,10 @@ public: /** Returns true if this kart has no wheels. */ bool isWheeless() const; // ------------------------------------------------------------------------ + /** Returns the coordinates of the front of the kart. This is used for + * determining when the lap line is crossed. */ + virtual const Vec3& getFrontXYZ() const = 0; + // ------------------------------------------------------------------------ /** Returns the position of a wheel relative to the kart. * \param i Index of the wheel: 0=front right, 1 = front left, 2 = rear * right, 3 = rear left. */ diff --git a/src/karts/kart.cpp b/src/karts/kart.cpp index 23f5dba20..5fad412f3 100644 --- a/src/karts/kart.cpp +++ b/src/karts/kart.cpp @@ -408,6 +408,8 @@ void Kart::reset() m_skidmarks->adjustFog(track->isFogEnabled() ); } + Vec3 front(0, 0, getKartLength()*0.5f); + m_xyz_front = getTrans()(front); m_terrain_info->update(getTrans()); @@ -1190,6 +1192,9 @@ void Kart::update(float dt) m_body->getBroadphaseHandle()->m_collisionFilterGroup = 0; } + Vec3 front(0, 0, getKartLength()*0.5f); + m_xyz_front = getTrans()(front); + m_terrain_info->update(getTrans(), epsilon); if(m_body->getBroadphaseHandle()) { diff --git a/src/karts/kart.hpp b/src/karts/kart.hpp index 8ce5ea519..35a145a36 100644 --- a/src/karts/kart.hpp +++ b/src/karts/kart.hpp @@ -102,6 +102,10 @@ private: /** Current race position (1-num_karts). */ int m_race_position; + /** The coordinates of the front of the kart, used to determine when a + * new lap is triggered. */ + Vec3 m_xyz_front; + /** True if the kart is eliminated. */ bool m_eliminated; @@ -292,6 +296,10 @@ public: /** Returns the current position of this kart in the race. */ virtual int getPosition () const { return m_race_position; } // ------------------------------------------------------------------------ + /** Returns the coordinates of the front of the kart. This is used for + * determining when the lap line is crossed. */ + virtual const Vec3& getFrontXYZ() const { return m_xyz_front; } + // ------------------------------------------------------------------------ /** Returns the initial position of this kart. */ virtual int getInitialPosition () const { return m_initial_position; } // ------------------------------------------------------------------------ diff --git a/src/modes/linear_world.cpp b/src/modes/linear_world.cpp index a7df70add..1883224b5 100644 --- a/src/modes/linear_world.cpp +++ b/src/modes/linear_world.cpp @@ -174,7 +174,7 @@ void LinearWorld::update(float dt) // rescued or eliminated if(kart->getKartAnimation()) continue; - kart_info.getTrackSector()->update(kart->getXYZ()); + kart_info.getTrackSector()->update(kart->getFrontXYZ()); kart_info.m_overall_distance = kart_info.m_race_lap * m_track->getTrackLength() + getDistanceDownTrackForKart(kart->getWorldKartId()); diff --git a/src/tracks/check_structure.cpp b/src/tracks/check_structure.cpp index a99b19ca9..6a905e7b3 100644 --- a/src/tracks/check_structure.cpp +++ b/src/tracks/check_structure.cpp @@ -100,7 +100,7 @@ void CheckStructure::update(float dt) World *world = World::getWorld(); for(unsigned int i=0; igetNumKarts(); i++) { - const Vec3 &xyz = world->getKart(i)->getXYZ(); + const Vec3 &xyz = world->getKart(i)->getFrontXYZ(); if(world->getKart(i)->getKartAnimation()) continue; // Only check active checklines. if(m_is_active[i] && isTriggered(m_previous_position[i], xyz, i)) From d3dbc4217442d23a4f0c1bdf47d5148f70a1b284 Mon Sep 17 00:00:00 2001 From: hiker Date: Mon, 28 Jul 2014 16:53:08 +1000 Subject: [PATCH 73/93] Fix #1429 (physical objects do not reset when restarting a race). --- src/tracks/track_object.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tracks/track_object.cpp b/src/tracks/track_object.cpp index f7cefd16e..8c5fd40af 100644 --- a/src/tracks/track_object.cpp +++ b/src/tracks/track_object.cpp @@ -243,9 +243,9 @@ TrackObject::~TrackObject() */ void TrackObject::reset() { - if (m_presentation != NULL) m_presentation->reset(); - - if (m_animator != NULL) m_animator->reset(); + if (m_presentation ) m_presentation->reset(); + if (m_animator ) m_animator->reset(); + if(m_physical_object) m_physical_object->reset(); } // reset // ---------------------------------------------------------------------------- From f6fcb9d8dad55462bf6011d375fa7434cd301fd7 Mon Sep 17 00:00:00 2001 From: hiker Date: Mon, 28 Jul 2014 21:07:03 +1000 Subject: [PATCH 74/93] Changed return type of getIconBasename() to be a reference. --- src/addons/addon.hpp | 2 +- src/addons/addons_manager.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/addons/addon.hpp b/src/addons/addon.hpp index 4afdf27e4..b834b6b4c 100644 --- a/src/addons/addon.hpp +++ b/src/addons/addon.hpp @@ -164,7 +164,7 @@ public: const std::string& getIconURL() const { return m_icon_url; } // ------------------------------------------------------------------------ /** Returns the name of the icon (i.e. the basename of the url). */ - const std::string getIconBasename() const { return m_icon_basename; } + const std::string& getIconBasename() const { return m_icon_basename; } // ------------------------------------------------------------------------ /** Returns the name of the addon. */ const core::stringw& getDescription() const { return m_description; } diff --git a/src/addons/addons_manager.cpp b/src/addons/addons_manager.cpp index 2c9249322..e4d24e11f 100644 --- a/src/addons/addons_manager.cpp +++ b/src/addons/addons_manager.cpp @@ -256,7 +256,7 @@ void AddonsManager::initAddons(const XMLNode *xml) Log::warn( "[AddonsManager] Removing '%s' which is not on the server anymore.\n", m_addons_list.getData()[i].getId().c_str() ); - std::string icon = m_addons_list.getData()[i].getIconBasename(); + const std::string &icon = m_addons_list.getData()[i].getIconBasename(); std::string icon_file =file_manager->getAddonsFile("icons/"+icon); if(file_manager->fileExists(icon_file)) { From dbe722316a82ba965c20b6afceff4ad751594511 Mon Sep 17 00:00:00 2001 From: hiker Date: Mon, 28 Jul 2014 21:07:39 +1000 Subject: [PATCH 75/93] If an addon icon can not be shown, delete the image file (which will trigger a re-download on the next start). --- src/addons/addon.cpp | 12 ++++++++++++ src/addons/addon.hpp | 2 ++ src/guiengine/widgets/icon_button_widget.hpp | 9 ++++++++- src/states_screens/dialogs/addons_loading.cpp | 7 +++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/addons/addon.cpp b/src/addons/addon.cpp index 96523a32b..052d532a1 100644 --- a/src/addons/addon.cpp +++ b/src/addons/addon.cpp @@ -216,3 +216,15 @@ bool Addon::filterByWords(const core::stringw words) const return false; } // filterByWords + +// ---------------------------------------------------------------------------- +/** Deletes the icon file of this addon, and marks it to be re-downloaded (next + * time AddonsManager::downloadIcons() is called. + */ +void Addon::deleteInvalidIconFile() +{ + m_icon_ready = false; + std::string icon = file_manager->getAddonsFile("icons/"+m_icon_basename); + file_manager->removeFile(icon); + m_installed = false; +} // redownloadIcon diff --git a/src/addons/addon.hpp b/src/addons/addon.hpp index b834b6b4c..4a8b166e8 100644 --- a/src/addons/addon.hpp +++ b/src/addons/addon.hpp @@ -130,6 +130,8 @@ public: Addon() {}; /** Initialises the object from an XML node. */ Addon(const XMLNode &xml); + + void deleteInvalidIconFile(); // ------------------------------------------------------------------------ /** Sets the sort order used in the comparison function. It is static, so * that each instance can access the sort order. */ diff --git a/src/guiengine/widgets/icon_button_widget.hpp b/src/guiengine/widgets/icon_button_widget.hpp index 6a429d105..b64375a34 100644 --- a/src/guiengine/widgets/icon_button_widget.hpp +++ b/src/guiengine/widgets/icon_button_widget.hpp @@ -109,7 +109,7 @@ namespace GUIEngine */ void setImage(const char* path_to_texture, IconPathType path_type=ICON_PATH_TYPE_NO_CHANGE); - + // -------------------------------------------------------------------- /** Convenience function taking std::string. */ void setImage(const std::string &path_to_texture, IconPathType path_type=ICON_PATH_TYPE_NO_CHANGE) @@ -117,6 +117,7 @@ namespace GUIEngine setImage(path_to_texture.c_str(), path_type); } + // -------------------------------------------------------------------- /** * Change the texture used for this icon. * \pre At the moment, the new texture must have the same aspct ratio @@ -126,16 +127,22 @@ namespace GUIEngine */ void setImage(irr::video::ITexture* texture); + // -------------------------------------------------------------------- void setHighlightedImage(irr::video::ITexture* texture) { m_highlight_texture = texture; } + // -------------------------------------------------------------------- /** \brief override from base class */ virtual EventPropagation focused(const int playerID); + // -------------------------------------------------------------------- /** \brief override from base class */ virtual void unfocused(const int playerID, Widget* new_focus); + // -------------------------------------------------------------------- + /** Returns the texture of this button. */ + const video::ITexture* getTexture() const { return m_texture; } }; } diff --git a/src/states_screens/dialogs/addons_loading.cpp b/src/states_screens/dialogs/addons_loading.cpp index 1d82e4b13..1ebf2f3ad 100644 --- a/src/states_screens/dialogs/addons_loading.cpp +++ b/src/states_screens/dialogs/addons_loading.cpp @@ -294,6 +294,13 @@ void AddonsLoading::onUpdate(float delta) const std::string icon = "icons/"+m_addon.getIconBasename(); m_icon->setImage( file_manager->getAddonsFile(icon).c_str(), IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE ); + // Check if there was an error displaying the icon. If so, the icon + // file is (likely) corrupt, and the file needs to be downloaded again. + std::string s = m_icon->getTexture()->getName().getPath().c_str(); + if(StringUtils::getBasename(s)!=StringUtils::getBasename(icon)) + { + m_addon.deleteInvalidIconFile(); + } m_icon_shown = true; } } // onUpdate From 46f73e8ecc1429d3786ff4eb02e6799761f12a14 Mon Sep 17 00:00:00 2001 From: Deve Date: Mon, 28 Jul 2014 19:20:46 +0200 Subject: [PATCH 76/93] Some improvements for xrandr - choose best available refresh rate - if resolution doesn't exist, choose first available - other minor changes. Works fine with Gnome, but I notices some issues on Openbox and Unity. --- .../source/Irrlicht/CIrrDeviceLinux.cpp | 151 ++++++++++-------- .../source/Irrlicht/CIrrDeviceLinux.h | 4 +- 2 files changed, 84 insertions(+), 71 deletions(-) diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp index 26c847f01..44c1bb895 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp @@ -245,25 +245,20 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) #ifdef _IRR_LINUX_X11_RANDR_ if (UseXRandR && CreationParams.Fullscreen) { - if (old_mode == -1 || output_id == -1) - return false; + XRRScreenResources* res = XRRGetScreenResources(display, DefaultRootWindow(display)); + XRROutputInfo* output = XRRGetOutputInfo(display, res, output_id); + XRRCrtcInfo* crtc = XRRGetCrtcInfo(display, res, output->crtc); + + Status s = XRRSetCrtcConfig(display, res, output->crtc, CurrentTime, + crtc->x, crtc->y, old_mode, + crtc->rotation, &output_id, 1); - XRRScreenResources* res = XRRGetScreenResources (display, DefaultRootWindow(display)); - XRROutputInfo* output = XRRGetOutputInfo(display, res, res->outputs[output_id]); - XRRCrtcInfo* crtc = XRRGetCrtcInfo(display, res, output->crtc); - - Status s = XRRSetCrtcConfig(display, res, output->crtc, CurrentTime, - crtc->x, crtc->y, res->modes[old_mode].id, - crtc->rotation, &res->outputs[output_id], 1); - XRRFreeOutputInfo(output); XRRFreeCrtcInfo(crtc); XRRFreeScreenResources(res); - - if (s != Success) - { + + if (s != Success) return false; - } } #endif return true; @@ -336,53 +331,74 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) #ifdef _IRR_LINUX_X11_RANDR_ if (XRRQueryExtension(display, &eventbase, &errorbase)) { - if (output_id == -1) - return false; - XRRScreenResources* res = XRRGetScreenResources(display, DefaultRootWindow(display)); - if (!res) + if (!res) { - return false; + CreationParams.Fullscreen = false; + return CreationParams.Fullscreen; } - XRROutputInfo* output = XRRGetOutputInfo(display, res, res->outputs[output_id]); + XRROutputInfo* output = XRRGetOutputInfo(display, res, output_id); XRRCrtcInfo* crtc = XRRGetCrtcInfo(display, res, output->crtc); + float refresh_rate, refresh_rate_new; - for (int i = 0; i < res->nmode; i++) + for (int i = 0; i < res->nmode; i++) { - const XRRModeInfo* info = &res->modes[i]; + const XRRModeInfo* mode = &res->modes[i]; - if (bestMode == -1 && info->width == Width && info->height == Height) + if (bestMode == -1 && mode->width == Width && mode->height == Height) { - for (int j = 0; j < output->nmode; j++) + for (int j = 0; j < output->nmode; j++) { - if (res->modes[i].id != output->modes[j]) - continue; - - bestMode = i; + if (mode->id == output->modes[j]) + { + bestMode = j; + refresh_rate = (mode->dotClock * 1000.0) / (mode->hTotal * mode->vTotal); + break; + } + } + } + else if (bestMode != -1 && mode->width == Width && mode->height == Height) + { + refresh_rate_new = (mode->dotClock * 1000.0) / (mode->hTotal * mode->vTotal); + + if (refresh_rate_new <= refresh_rate) break; + + for (int j = 0; j < output->nmode; j++) + { + if (mode->id == output->modes[j]) + { + bestMode = j; + refresh_rate = refresh_rate_new; + break; + } } } } - if (bestMode != -1) + // If video mode not found, try to use first available + if (bestMode == -1) { - Status s = XRRSetCrtcConfig(display, res, output->crtc, CurrentTime, - crtc->x, crtc->y, res->modes[bestMode].id, - crtc->rotation, &res->outputs[output_id], 1); - - XRRFreeCrtcInfo(crtc); - XRRFreeOutputInfo(output); - XRRFreeScreenResources(res); - - if (s != Success) - { - return false; - } - - UseXRandR=true; + bestMode = 0; } + + Status s = XRRSetCrtcConfig(display, res, output->crtc, CurrentTime, + crtc->x, crtc->y, output->modes[bestMode], + crtc->rotation, &output_id, 1); + + XRRFreeCrtcInfo(crtc); + XRRFreeOutputInfo(output); + XRRFreeScreenResources(res); + + if (s != Success) + { + CreationParams.Fullscreen = false; + return CreationParams.Fullscreen; + } + + UseXRandR=true; } else #endif @@ -1538,16 +1554,11 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() #ifdef _IRR_LINUX_X11_RANDR_ if (XRRQueryExtension(display, &eventbase, &errorbase)) { - old_mode = -1; - output_id = -1; - XRRScreenResources* res = XRRGetScreenResources(display, DefaultRootWindow(display)); - - if (!res) - { + + if (!res) return NULL; - } - + XRROutputInfo *output = NULL; XRRCrtcInfo* crtc = NULL; @@ -1570,41 +1581,43 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() continue; } - output_id = i; + output_id = res->outputs[i]; break; } - + if (crtc == NULL) { XRRFreeCrtcInfo(crtc); - XRRFreeOutputInfo(output); + XRRFreeOutputInfo(output); XRRFreeScreenResources(res); return NULL; } - for (int i = 0; i < res->nmode; i++) + for (int i = 0; i < res->nmode; i++) { - const XRRModeInfo *mode = &res->modes[i]; - - for (int j = 0; j < output->nmode; j++) + const XRRModeInfo* mode = &res->modes[i]; + + for (int j = 0; j < output->nmode; j++) { - if (res->modes[i].id == output->modes[j]) + if (mode->id == output->modes[j]) { VideoModeList.addMode(core::dimension2d( mode->width, mode->height), defaultDepth); - } - - if (res->modes[i].id == crtc->mode) - { - old_mode = i; - VideoModeList.setDesktop(defaultDepth, core::dimension2d(mode->width, mode->height)); + break; } } - } - + + if (mode->id == crtc->mode) + { + old_mode = crtc->mode; + VideoModeList.setDesktop(defaultDepth, + core::dimension2d(mode->width, mode->height)); + } + } + XRRFreeCrtcInfo(crtc); - XRRFreeOutputInfo(output); - XRRFreeScreenResources(res); + XRRFreeOutputInfo(output); + XRRFreeScreenResources(res); } else #endif diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h index 364efd382..1ed59e72e 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h @@ -394,8 +394,8 @@ namespace irr XF86VidModeModeInfo oldVideoMode; #endif #ifdef _IRR_LINUX_X11_RANDR_ - int output_id; - int old_mode; + RROutput output_id; + RRMode old_mode; #endif #ifdef _IRR_COMPILE_WITH_OPENGL_ GLXWindow glxWin; From b9e56303c1f7b83383e3f90e645761603820a31e Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Mon, 28 Jul 2014 23:41:01 +0200 Subject: [PATCH 77/93] Try to replace emplace_back() call. Only on some part of the code, need confirmation it works before propagating. --- src/graphics/stkmeshscenenode.cpp | 38 ++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index f09781067..fcd291063 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -189,6 +189,18 @@ void STKMeshSceneNode::OnRegisterSceneNode() CMeshSceneNode::OnRegisterSceneNode(); } +template +static void +pushVector(std::vector &vec, Args ...args) +{ + +#if __cplusplus >= 201103 || _MSC_VER >=1800 + vec.emplace_back(args...); +#else + vec.push_back(T(args...)); +#endif +} + void STKMeshSceneNode::render() { irr::video::IVideoDriver* driver = irr_driver->getVideoDriver(); @@ -246,29 +258,29 @@ void STKMeshSceneNode::render() GLMesh* mesh; for_in(mesh, MeshSolidMaterials[MAT_DEFAULT]) - ListMatDefault::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatDefault::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterials[MAT_ALPHA_REF]) - ListMatAlphaRef::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatAlphaRef::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterials[MAT_SPHEREMAP]) - ListMatSphereMap::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatSphereMap::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterials[MAT_DETAIL]) - ListMatDetails::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatDetails::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); windDir = getWind(); for_in(mesh, MeshSolidMaterials[MAT_GRASS]) - ListMatGrass::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, windDir, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatGrass::Arguments, mesh, AbsoluteTransformation, invmodel, windDir, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterials[MAT_UNLIT]) - ListMatUnlit::Arguments.emplace_back(mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY); + pushVector(ListMatUnlit::Arguments, mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY); for_in(mesh, MeshSolidMaterials[MAT_SPLATTING]) - ListMatSplatting::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatSplatting::Arguments, mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterials[MAT_NORMAL_MAP]) - ListMatNormalMap::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, core::matrix4::EM4CONST_IDENTITY, irr_driver->getSceneManager()->getAmbientLight()); + pushVector( ListMatNormalMap::Arguments, mesh, AbsoluteTransformation, invmodel, core::matrix4::EM4CONST_IDENTITY, irr_driver->getSceneManager()->getAmbientLight()); return; } @@ -408,23 +420,23 @@ void STKMeshSceneNode::render() tmpcol.getBlue() / 255.0f); for_in(mesh, TransparentMesh[TM_DEFAULT]) - ListBlendTransparentFog::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix, + pushVector(ListBlendTransparentFog::Arguments, mesh, AbsoluteTransformation, mesh->TextureMatrix, fogmax, startH, endH, start, end, col); for_in(mesh, TransparentMesh[TM_ADDITIVE]) - ListAdditiveTransparentFog::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix, + pushVector(ListAdditiveTransparentFog::Arguments, mesh, AbsoluteTransformation, mesh->TextureMatrix, fogmax, startH, endH, start, end, col); } else { for_in(mesh, TransparentMesh[TM_DEFAULT]) - ListBlendTransparent::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix); + pushVector(ListBlendTransparent::Arguments, mesh, AbsoluteTransformation, mesh->TextureMatrix); for_in(mesh, TransparentMesh[TM_ADDITIVE]) - ListAdditiveTransparent::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix); + pushVector(ListAdditiveTransparent::Arguments, mesh, AbsoluteTransformation, mesh->TextureMatrix); } for_in(mesh, TransparentMesh[TM_DISPLACEMENT]) - ListDisplacement::Arguments.emplace_back(mesh, AbsoluteTransformation); + pushVector(ListDisplacement::Arguments, mesh, AbsoluteTransformation); if (!TransparentMesh[TM_BUBBLE].empty()) glUseProgram(MeshShader::BubbleShader::Program); From 13f22ab1cd20ea035de7f360b01c8d17be596ff7 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Tue, 29 Jul 2014 00:19:50 +0200 Subject: [PATCH 78/93] If there is a sphericalHarmonicsTexture, kill ambient. --- src/graphics/render.cpp | 3 +++ src/graphics/render_lighting.cpp | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index 90bf81d42..8709247f4 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -141,6 +141,9 @@ void IrrDriver::renderGLSL(float dt) const core::recti &viewport = camera->getViewport(); + if (World::getWorld() && World::getWorld()->getTrack()->hasShadows() && !SphericalHarmonicsTextures.empty()) + irr_driver->getSceneManager()->setAmbientLight(SColor(0, 0, 0, 0)); + unsigned plc = UpdateLightsInfo(camnode, dt); computeCameraMatrix(camnode, viewport.LowerRightCorner.X - viewport.UpperLeftCorner.X, viewport.LowerRightCorner.Y - viewport.UpperLeftCorner.Y); renderScene(camnode, plc, glows, dt, track->hasShadows(), false); diff --git a/src/graphics/render_lighting.cpp b/src/graphics/render_lighting.cpp index c74e57a2b..ea7f588e0 100644 --- a/src/graphics/render_lighting.cpp +++ b/src/graphics/render_lighting.cpp @@ -168,9 +168,6 @@ void IrrDriver::renderLights(unsigned pointlightcount) } m_rtts->getFBO(FBO_COMBINED_TMP1_TMP2).Bind(); - if (World::getWorld() && World::getWorld()->getTrack()->hasShadows() && SkyboxCubeMap) - irr_driver->getSceneManager()->setAmbientLight(SColor(0, 0, 0, 0)); - // Render sunlight if and only if track supports shadow if (!World::getWorld() || World::getWorld()->getTrack()->hasShadows()) { From 6d100a23d89a7d88de1465cd7ceb4cc41e6466a8 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Mon, 28 Jul 2014 18:29:10 -0400 Subject: [PATCH 79/93] Force billboard to render in transparent phase, won't work otherwise --- src/graphics/stkbillboard.cpp | 12 ++++++++++++ src/graphics/stkbillboard.hpp | 5 ++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/graphics/stkbillboard.cpp b/src/graphics/stkbillboard.cpp index 710dec32d..d654463bd 100644 --- a/src/graphics/stkbillboard.cpp +++ b/src/graphics/stkbillboard.cpp @@ -2,6 +2,7 @@ #include "graphics/glwrap.hpp" #include "graphics/shaders.hpp" #include "graphics/irr_driver.hpp" +#include using namespace irr; @@ -28,6 +29,17 @@ STKBillboard::STKBillboard(irr::scene::ISceneNode* parent, irr::scene::ISceneMan createbillboardvao(); } +void STKBillboard::OnRegisterSceneNode() +{ + if (IsVisible) + { + SceneManager->registerNodeForRendering(this, scene::ESNRP_TRANSPARENT); + } + + ISceneNode::OnRegisterSceneNode(); +} + + void STKBillboard::render() { if (irr_driver->getPhase() != TRANSPARENT_PASS) diff --git a/src/graphics/stkbillboard.hpp b/src/graphics/stkbillboard.hpp index 19788f53d..d2855b4c1 100644 --- a/src/graphics/stkbillboard.hpp +++ b/src/graphics/stkbillboard.hpp @@ -4,6 +4,7 @@ #include "../lib/irrlicht/source/Irrlicht/CBillboardSceneNode.h" #include #include +#include "utils/cpp2011.h" class STKBillboard : public irr::scene::CBillboardSceneNode { @@ -13,7 +14,9 @@ public: irr::video::SColor colorTop = irr::video::SColor(0xFFFFFFFF), irr::video::SColor colorBottom = irr::video::SColor(0xFFFFFFFF)); - virtual void render(); + virtual void OnRegisterSceneNode() OVERRIDE; + + virtual void render() OVERRIDE; }; #endif From bd7babe11fcc7d09c5fac98268e42064d98bb45c Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Tue, 29 Jul 2014 00:35:39 +0200 Subject: [PATCH 80/93] Rename cpp2011.h --- src/graphics/light.hpp | 2 +- src/graphics/sun.hpp | 2 +- src/graphics/water.hpp | 2 +- src/guiengine/screen.hpp | 2 +- src/modes/world_status.hpp | 2 +- src/online/http_request.hpp | 2 +- src/online/request.hpp | 2 +- src/online/xml_request.hpp | 2 +- src/states_screens/cutscene_gui.hpp | 2 +- src/states_screens/dialogs/add_device_dialog.cpp | 2 +- src/states_screens/dialogs/debug_slider.hpp | 2 +- src/states_screens/dialogs/tutorial_message_dialog.hpp | 2 +- src/tracks/check_goal.hpp | 2 +- src/tracks/track_object.hpp | 2 +- src/tracks/track_object_presentation.hpp | 2 +- src/utils/{cpp2011.h => cpp2011.hpp} | 0 16 files changed, 15 insertions(+), 15 deletions(-) rename src/utils/{cpp2011.h => cpp2011.hpp} (100%) diff --git a/src/graphics/light.hpp b/src/graphics/light.hpp index 62b3bd44f..8af5d7009 100644 --- a/src/graphics/light.hpp +++ b/src/graphics/light.hpp @@ -20,7 +20,7 @@ #define HEADER_LIGHT_HPP #include -#include +#include #include using namespace irr; diff --git a/src/graphics/sun.hpp b/src/graphics/sun.hpp index ff719084c..bac4a570f 100644 --- a/src/graphics/sun.hpp +++ b/src/graphics/sun.hpp @@ -20,7 +20,7 @@ #define HEADER_SUN_HPP #include "graphics/light.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" class ScreenQuad; diff --git a/src/graphics/water.hpp b/src/graphics/water.hpp index 15acacb6f..75beb1c3f 100644 --- a/src/graphics/water.hpp +++ b/src/graphics/water.hpp @@ -20,7 +20,7 @@ #define HEADER_WATER_HPP #include -#include +#include using namespace irr; diff --git a/src/guiengine/screen.hpp b/src/guiengine/screen.hpp index f55398c3d..8d7365433 100644 --- a/src/guiengine/screen.hpp +++ b/src/guiengine/screen.hpp @@ -22,7 +22,7 @@ #include #include #include -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" #include #include diff --git a/src/modes/world_status.hpp b/src/modes/world_status.hpp index bfdf30aa9..ccc2ac866 100644 --- a/src/modes/world_status.hpp +++ b/src/modes/world_status.hpp @@ -18,7 +18,7 @@ #ifndef HEADER_WORLD_STATUS_HPP #define HEADER_WORLD_STATUS_HPP -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" class SFXBase; diff --git a/src/online/http_request.hpp b/src/online/http_request.hpp index e60b66851..114487c95 100644 --- a/src/online/http_request.hpp +++ b/src/online/http_request.hpp @@ -21,7 +21,7 @@ #include "io/file_manager.hpp" #include "online/request.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" #include "utils/string_utils.hpp" #include "utils/synchronised.hpp" diff --git a/src/online/request.hpp b/src/online/request.hpp index 743126abd..4c29f457a 100644 --- a/src/online/request.hpp +++ b/src/online/request.hpp @@ -20,7 +20,7 @@ #define HEADER_ONLINE_REQUEST_HPP #include "io/file_manager.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" #include "utils/leak_check.hpp" #include "utils/no_copy.hpp" #include "utils/string_utils.hpp" diff --git a/src/online/xml_request.hpp b/src/online/xml_request.hpp index 5fbfb961e..0ddc0ef63 100644 --- a/src/online/xml_request.hpp +++ b/src/online/xml_request.hpp @@ -21,7 +21,7 @@ #include "io/file_manager.hpp" #include "online/http_request.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" #include "utils/string_utils.hpp" #include "utils/synchronised.hpp" diff --git a/src/states_screens/cutscene_gui.hpp b/src/states_screens/cutscene_gui.hpp index 6a9703bc5..2b166a812 100644 --- a/src/states_screens/cutscene_gui.hpp +++ b/src/states_screens/cutscene_gui.hpp @@ -26,7 +26,7 @@ using namespace irr; #include "states_screens/race_gui_base.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" class AbstractKart; class InputMap; diff --git a/src/states_screens/dialogs/add_device_dialog.cpp b/src/states_screens/dialogs/add_device_dialog.cpp index 2a1fbe3fe..36ba311ce 100644 --- a/src/states_screens/dialogs/add_device_dialog.cpp +++ b/src/states_screens/dialogs/add_device_dialog.cpp @@ -26,7 +26,7 @@ #include "states_screens/dialogs/message_dialog.hpp" #include "states_screens/options_screen_input.hpp" #include "states_screens/state_manager.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" #include "utils/string_utils.hpp" #include "utils/translation.hpp" #include "input/wiimote_manager.hpp" diff --git a/src/states_screens/dialogs/debug_slider.hpp b/src/states_screens/dialogs/debug_slider.hpp index 8efa03858..53107f8aa 100644 --- a/src/states_screens/dialogs/debug_slider.hpp +++ b/src/states_screens/dialogs/debug_slider.hpp @@ -20,7 +20,7 @@ #define HEADER_DEBUG_SLIDER_DIALOG_HPP #include "guiengine/modaldialog.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" #include "utils/leak_check.hpp" /** diff --git a/src/states_screens/dialogs/tutorial_message_dialog.hpp b/src/states_screens/dialogs/tutorial_message_dialog.hpp index d8468788c..6bfcfdfb7 100644 --- a/src/states_screens/dialogs/tutorial_message_dialog.hpp +++ b/src/states_screens/dialogs/tutorial_message_dialog.hpp @@ -20,7 +20,7 @@ #define HEADER_TUTORIAL_DIALOG_HPP #include "guiengine/modaldialog.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" #include "utils/leak_check.hpp" /** diff --git a/src/tracks/check_goal.hpp b/src/tracks/check_goal.hpp index 3a4b5c012..966ab3a69 100644 --- a/src/tracks/check_goal.hpp +++ b/src/tracks/check_goal.hpp @@ -20,7 +20,7 @@ #define HEADER_CHECK_GOAL_HPP #include "tracks/check_structure.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" #include using namespace irr; diff --git a/src/tracks/track_object.hpp b/src/tracks/track_object.hpp index 49c305f6a..1478dc34a 100644 --- a/src/tracks/track_object.hpp +++ b/src/tracks/track_object.hpp @@ -24,7 +24,7 @@ #include "items/item.hpp" #include "physics/physical_object.hpp" #include "tracks/track_object_presentation.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" #include "utils/no_copy.hpp" #include "utils/vec3.hpp" #include diff --git a/src/tracks/track_object_presentation.hpp b/src/tracks/track_object_presentation.hpp index 4c133c290..ff43d850c 100644 --- a/src/tracks/track_object_presentation.hpp +++ b/src/tracks/track_object_presentation.hpp @@ -30,7 +30,7 @@ using namespace irr; #include "graphics/lod_node.hpp" #include "items/item.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" #include "utils/no_copy.hpp" #include "utils/vec3.hpp" #include diff --git a/src/utils/cpp2011.h b/src/utils/cpp2011.hpp similarity index 100% rename from src/utils/cpp2011.h rename to src/utils/cpp2011.hpp From f31013b4afb66f7b12253eedb18f5e5c0dbfb5b0 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Tue, 29 Jul 2014 00:40:37 +0200 Subject: [PATCH 81/93] Fix include in stkbillboard --- src/graphics/stkbillboard.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphics/stkbillboard.hpp b/src/graphics/stkbillboard.hpp index d2855b4c1..294bc2625 100644 --- a/src/graphics/stkbillboard.hpp +++ b/src/graphics/stkbillboard.hpp @@ -4,7 +4,7 @@ #include "../lib/irrlicht/source/Irrlicht/CBillboardSceneNode.h" #include #include -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" class STKBillboard : public irr::scene::CBillboardSceneNode { From fca54c8f745ef98797a94d0281920978e1f402d2 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Tue, 29 Jul 2014 00:48:14 +0200 Subject: [PATCH 82/93] Remove some other emplace_back. --- src/graphics/stkanimatedmesh.cpp | 13 +++++++------ src/graphics/stkmeshscenenode.cpp | 13 +------------ src/utils/cpp2011.hpp | 20 +++++++++++++++++++- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/graphics/stkanimatedmesh.cpp b/src/graphics/stkanimatedmesh.cpp index fb3b25e73..316ae6553 100644 --- a/src/graphics/stkanimatedmesh.cpp +++ b/src/graphics/stkanimatedmesh.cpp @@ -8,6 +8,7 @@ #include "tracks/track.hpp" #include "graphics/camera.hpp" #include "utils/profiler.hpp" +#include "utils/cpp2011.hpp" using namespace irr; @@ -141,16 +142,16 @@ void STKAnimatedMesh::render() GLMesh* mesh; for_in(mesh, MeshSolidMaterial[MAT_DEFAULT]) - ListMatDefault::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatDefault::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterial[MAT_ALPHA_REF]) - ListMatAlphaRef::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatAlphaRef::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterial[MAT_DETAIL]) - ListMatDetails::Arguments.emplace_back(mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatDetails::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); for_in(mesh, MeshSolidMaterial[MAT_UNLIT]) - ListMatUnlit::Arguments.emplace_back(mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY); + pushVector(ListMatUnlit::Arguments, mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY); return; } @@ -191,10 +192,10 @@ void STKAnimatedMesh::render() else { for_in(mesh, TransparentMesh[TM_DEFAULT]) - ListBlendTransparent::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix); + pushVector(ListBlendTransparent::Arguments, mesh, AbsoluteTransformation, mesh->TextureMatrix); for_in(mesh, TransparentMesh[TM_ADDITIVE]) - ListAdditiveTransparent::Arguments.emplace_back(mesh, AbsoluteTransformation, mesh->TextureMatrix); + pushVector(ListAdditiveTransparent::Arguments, mesh, AbsoluteTransformation, mesh->TextureMatrix); } return; } diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index fcd291063..9ce0b94be 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -10,6 +10,7 @@ #include "modes/world.hpp" #include "utils/helpers.hpp" #include "utils/tuple.hpp" +#include "utils/cpp2011.hpp" STKMeshSceneNode::STKMeshSceneNode(irr::scene::IMesh* mesh, ISceneNode* parent, irr::scene::ISceneManager* mgr, irr::s32 id, const irr::core::vector3df& position, @@ -189,18 +190,6 @@ void STKMeshSceneNode::OnRegisterSceneNode() CMeshSceneNode::OnRegisterSceneNode(); } -template -static void -pushVector(std::vector &vec, Args ...args) -{ - -#if __cplusplus >= 201103 || _MSC_VER >=1800 - vec.emplace_back(args...); -#else - vec.push_back(T(args...)); -#endif -} - void STKMeshSceneNode::render() { irr::video::IVideoDriver* driver = irr_driver->getVideoDriver(); diff --git a/src/utils/cpp2011.hpp b/src/utils/cpp2011.hpp index add6075f6..3f49839ff 100644 --- a/src/utils/cpp2011.hpp +++ b/src/utils/cpp2011.hpp @@ -1,4 +1,6 @@ - +#ifndef CPP2011_HPP +#define CPP2011_HPP +#include #if __cplusplus >= 201103 || _MSC_VER >=1800 #define OVERRIDE override @@ -8,3 +10,19 @@ #define OVERRIDE #endif + +#if (__cplusplus >= 201103 || _MSC_VER >=1800) && !(defined(__clang__) && defined(__APPLE__)) +#define STDCPP2003 +#endif + + +template +void pushVector(std::vector &vec, Args ...args) +{ +#ifdef STDCPP2003 + vec.push_back(T(args...)); +#else + vec.emplace_back(args...); +#endif +} +#endif \ No newline at end of file From ff5e4578698b7b609e51004d6601d4304d7e4aa2 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Tue, 29 Jul 2014 00:50:40 +0200 Subject: [PATCH 83/93] Fix include in wiimote_manager.hpp --- src/input/wiimote_manager.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/input/wiimote_manager.hpp b/src/input/wiimote_manager.hpp index e701472ec..2a53d4d6d 100644 --- a/src/input/wiimote_manager.hpp +++ b/src/input/wiimote_manager.hpp @@ -23,7 +23,7 @@ #include "input/wiimote.hpp" #include "states_screens/dialogs/message_dialog.hpp" -#include "utils/cpp2011.h" +#include "utils/cpp2011.hpp" #include "IEventReceiver.h" From c2cd32d4de7487b64682f713fdaee0b1b513318b Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Mon, 28 Jul 2014 19:01:53 -0400 Subject: [PATCH 84/93] Fix c++2011 logic from previous commit. STK now builds again on my mac, finally! --- src/utils/cpp2011.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/utils/cpp2011.hpp b/src/utils/cpp2011.hpp index 3f49839ff..5d1ddaefb 100644 --- a/src/utils/cpp2011.hpp +++ b/src/utils/cpp2011.hpp @@ -12,6 +12,8 @@ #endif #if (__cplusplus >= 201103 || _MSC_VER >=1800) && !(defined(__clang__) && defined(__APPLE__)) +#define STDCPP2011 +#else #define STDCPP2003 #endif From 3db9b867a6051c4a0f33d10931cc8d723c76ec8a Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Mon, 28 Jul 2014 19:16:32 -0400 Subject: [PATCH 85/93] In artist debug mode, fast-track race start even more, tired of waiting after thunderbird to test --- src/modes/world_status.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/modes/world_status.cpp b/src/modes/world_status.cpp index f15c69a85..29775834e 100644 --- a/src/modes/world_status.cpp +++ b/src/modes/world_status.cpp @@ -137,6 +137,12 @@ void WorldStatus::update(const float dt) return; case TRACK_INTRO_PHASE: m_auxiliary_timer += dt; + + if (UserConfigParams::m_artist_debug_mode && + race_manager->getNumberOfKarts() == 1 && + race_manager->getTrackName() != "tutorial") + m_auxiliary_timer += dt * 6; + // Work around a bug that occurred on linux once: // the sfx_manager kept on reporting that it is playing, // while it was not - so STK would never reach the ready From a35c33e4f618347dc8fa87a92fd369131fad5011 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Tue, 29 Jul 2014 23:56:48 +0200 Subject: [PATCH 86/93] Remove ambient It's already added in the diffuse env pass --- data/shaders/utils/getLightFactor.frag | 3 +-- src/graphics/render_geometry.cpp | 14 +++++++------- src/graphics/shaders.hpp | 14 +++++++------- src/graphics/stkanimatedmesh.cpp | 6 +++--- src/graphics/stkinstancedscenenode.cpp | 2 +- src/graphics/stkmesh.cpp | 14 +++++++------- src/graphics/stkmesh.hpp | 14 +++++++------- src/graphics/stkmeshscenenode.cpp | 16 ++++++++-------- 8 files changed, 41 insertions(+), 42 deletions(-) diff --git a/data/shaders/utils/getLightFactor.frag b/data/shaders/utils/getLightFactor.frag index 44222ed20..bfc325170 100644 --- a/data/shaders/utils/getLightFactor.frag +++ b/data/shaders/utils/getLightFactor.frag @@ -1,7 +1,6 @@ uniform sampler2D DiffuseMap; uniform sampler2D SpecularMap; uniform sampler2D SSAO; -uniform vec3 ambient; layout (std140) uniform MatrixesData { @@ -19,6 +18,6 @@ vec3 getLightFactor(float specMapValue) vec3 DiffuseComponent = texture(DiffuseMap, tc).xyz; vec3 SpecularComponent = texture(SpecularMap, tc).xyz; float ao = texture(SSAO, tc).x; - vec3 tmp = ao * ambient + DiffuseComponent + SpecularComponent * specMapValue; + vec3 tmp = DiffuseComponent + SpecularComponent * specMapValue; return tmp * ao; } \ No newline at end of file diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index 7349b46cc..914278bb1 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -292,24 +292,24 @@ void IrrDriver::renderSolidSecondPass() m_scene_manager->drawAll(scene::ESNRP_SOLID); - renderMeshes2ndPass(TexUnits( + renderMeshes2ndPass(TexUnits( TexUnit(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true) ), ListMatDefault::Arguments); - renderMeshes2ndPass(TexUnits( + renderMeshes2ndPass(TexUnits( TexUnit(MeshShader::ObjectRefPass2Shader::getInstance()->TU_Albedo, true) ), ListMatAlphaRef::Arguments); - renderMeshes2ndPass(TexUnits( + renderMeshes2ndPass(TexUnits( TexUnit(MeshShader::SphereMapShader::getInstance()->TU_tex, true) ), ListMatSphereMap::Arguments); - renderMeshes2ndPass(TexUnits( + renderMeshes2ndPass(TexUnits( TexUnit(MeshShader::DetailledObjectPass2Shader::getInstance()->TU_Albedo, true), TexUnit(MeshShader::DetailledObjectPass2Shader::getInstance()->TU_detail, true) ), ListMatDetails::Arguments); - renderMeshes2ndPass(TexUnits( + renderMeshes2ndPass(TexUnits( TexUnit(MeshShader::GrassPass2Shader::getInstance()->TU_Albedo, true) ), ListMatGrass::Arguments); @@ -317,7 +317,7 @@ void IrrDriver::renderSolidSecondPass() TexUnit(MeshShader::ObjectUnlitShader::getInstance()->TU_tex, true) ), ListMatUnlit::Arguments); - renderMeshes2ndPass(TexUnits( + renderMeshes2ndPass(TexUnits( TexUnit(8, true), TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_layout, false), TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_detail0, true), @@ -326,7 +326,7 @@ void IrrDriver::renderSolidSecondPass() TexUnit(MeshShader::SplattingShader::getInstance()->TU_tex_detail3, true) ), ListMatSplatting::Arguments); - renderMeshes2ndPass(TexUnits( + renderMeshes2ndPass(TexUnits( TexUnit(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, true) ), ListMatNormalMap::Arguments); } diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index 407643328..7ff7cf8f9 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -225,7 +225,7 @@ public: extern InstancedGrassPass1Shader *InstancedGrassPass1ShaderInstance; -class ObjectPass2Shader : public ShaderHelperSingleton +class ObjectPass2Shader : public ShaderHelperSingleton { public: GLuint TU_Albedo; @@ -253,7 +253,7 @@ public: extern InstancedObjectRefPass2Shader *InstancedObjectRefPass2ShaderInstance; -class DetailledObjectPass2Shader : public ShaderHelperSingleton +class DetailledObjectPass2Shader : public ShaderHelperSingleton { public: GLuint TU_Albedo, TU_detail; @@ -269,7 +269,7 @@ public: ObjectUnlitShader(); }; -class ObjectRefPass2Shader : public ShaderHelperSingleton +class ObjectRefPass2Shader : public ShaderHelperSingleton { public: GLuint TU_Albedo; @@ -277,7 +277,7 @@ public: ObjectRefPass2Shader(); }; -class GrassPass2Shader : public ShaderHelperSingleton +class GrassPass2Shader : public ShaderHelperSingleton { public: GLuint TU_Albedo; @@ -285,7 +285,7 @@ public: GrassPass2Shader(); }; -class InstancedGrassPass2Shader : public ShaderHelper +class InstancedGrassPass2Shader : public ShaderHelper { public: GLuint TU_Albedo, TU_dtex; @@ -295,7 +295,7 @@ public: extern InstancedGrassPass2Shader *InstancedGrassPass2ShaderInstance; -class SphereMapShader : public ShaderHelperSingleton +class SphereMapShader : public ShaderHelperSingleton { public: GLuint TU_tex; @@ -303,7 +303,7 @@ public: SphereMapShader(); }; -class SplattingShader : public ShaderHelperSingleton +class SplattingShader : public ShaderHelperSingleton { public: GLuint TU_tex_layout, TU_tex_detail0, TU_tex_detail1, TU_tex_detail2, TU_tex_detail3; diff --git a/src/graphics/stkanimatedmesh.cpp b/src/graphics/stkanimatedmesh.cpp index 316ae6553..c331311c1 100644 --- a/src/graphics/stkanimatedmesh.cpp +++ b/src/graphics/stkanimatedmesh.cpp @@ -142,13 +142,13 @@ void STKAnimatedMesh::render() GLMesh* mesh; for_in(mesh, MeshSolidMaterial[MAT_DEFAULT]) - pushVector(ListMatDefault::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatDefault::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix); for_in(mesh, MeshSolidMaterial[MAT_ALPHA_REF]) - pushVector(ListMatAlphaRef::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatAlphaRef::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix); for_in(mesh, MeshSolidMaterial[MAT_DETAIL]) - pushVector(ListMatDetails::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatDetails::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix); for_in(mesh, MeshSolidMaterial[MAT_UNLIT]) pushVector(ListMatUnlit::Arguments, mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY); diff --git a/src/graphics/stkinstancedscenenode.cpp b/src/graphics/stkinstancedscenenode.cpp index 27ae172df..7f092838b 100644 --- a/src/graphics/stkinstancedscenenode.cpp +++ b/src/graphics/stkinstancedscenenode.cpp @@ -295,7 +295,7 @@ static void drawSMGrass(GLMesh &mesh, const core::vector3df &windDir, size_t ins setTexture(MeshShader::InstancedGrassPass2ShaderInstance->TU_dtex, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST); SunLightProvider * const cb = (SunLightProvider *)irr_driver->getCallback(ES_SUNLIGHT); - MeshShader::InstancedGrassPass2ShaderInstance->setUniforms(windDir, cb->getPosition(), irr_driver->getSceneManager()->getAmbientLight()); + MeshShader::InstancedGrassPass2ShaderInstance->setUniforms(windDir, cb->getPosition()); glBindVertexArray(mesh.vao); glDrawElementsInstanced(ptype, count, itype, 0, instance_count); diff --git a/src/graphics/stkmesh.cpp b/src/graphics/stkmesh.cpp index 17b33e481..9b9fe2f91 100644 --- a/src/graphics/stkmesh.cpp +++ b/src/graphics/stkmesh.cpp @@ -293,14 +293,14 @@ bool isObject(video::E_MATERIAL_TYPE type) return false; } -std::vector > ListMatDefault::Arguments; -std::vector > ListMatAlphaRef::Arguments; -std::vector > ListMatSphereMap::Arguments; -std::vector > ListMatDetails::Arguments; -std::vector > ListMatGrass::Arguments; +std::vector > ListMatDefault::Arguments; +std::vector > ListMatAlphaRef::Arguments; +std::vector > ListMatSphereMap::Arguments; +std::vector > ListMatDetails::Arguments; +std::vector > ListMatGrass::Arguments; std::vector > ListMatUnlit::Arguments; -std::vector > ListMatSplatting::Arguments; -std::vector > ListMatNormalMap::Arguments; +std::vector > ListMatSplatting::Arguments; +std::vector > ListMatNormalMap::Arguments; std::vector > ListBlendTransparent::Arguments; std::vector > ListAdditiveTransparent::Arguments; diff --git a/src/graphics/stkmesh.hpp b/src/graphics/stkmesh.hpp index ea5ca1fe6..af22ac89e 100644 --- a/src/graphics/stkmesh.hpp +++ b/src/graphics/stkmesh.hpp @@ -62,37 +62,37 @@ core::vector3df getWind(); class ListMatDefault { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListMatAlphaRef { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListMatNormalMap { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListMatGrass { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListMatSphereMap { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListMatSplatting { public: - static std::vector > Arguments; + static std::vector > Arguments; }; class ListMatUnlit @@ -104,7 +104,7 @@ public: class ListMatDetails { public: - static std::vector > Arguments; + static std::vector > Arguments; }; diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index 9ce0b94be..e1836e91b 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -247,29 +247,29 @@ void STKMeshSceneNode::render() GLMesh* mesh; for_in(mesh, MeshSolidMaterials[MAT_DEFAULT]) - pushVector(ListMatDefault::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatDefault::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix); for_in(mesh, MeshSolidMaterials[MAT_ALPHA_REF]) - pushVector(ListMatAlphaRef::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatAlphaRef::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix); for_in(mesh, MeshSolidMaterials[MAT_SPHEREMAP]) - pushVector(ListMatSphereMap::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatSphereMap::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix); for_in(mesh, MeshSolidMaterials[MAT_DETAIL]) - pushVector(ListMatDetails::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatDetails::Arguments, mesh, AbsoluteTransformation, invmodel, mesh->TextureMatrix); windDir = getWind(); for_in(mesh, MeshSolidMaterials[MAT_GRASS]) - pushVector(ListMatGrass::Arguments, mesh, AbsoluteTransformation, invmodel, windDir, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatGrass::Arguments, mesh, AbsoluteTransformation, invmodel, windDir); for_in(mesh, MeshSolidMaterials[MAT_UNLIT]) pushVector(ListMatUnlit::Arguments, mesh, AbsoluteTransformation, core::matrix4::EM4CONST_IDENTITY); for_in(mesh, MeshSolidMaterials[MAT_SPLATTING]) - pushVector(ListMatSplatting::Arguments, mesh, AbsoluteTransformation, invmodel, irr_driver->getSceneManager()->getAmbientLight()); + pushVector(ListMatSplatting::Arguments, mesh, AbsoluteTransformation, invmodel); for_in(mesh, MeshSolidMaterials[MAT_NORMAL_MAP]) - pushVector( ListMatNormalMap::Arguments, mesh, AbsoluteTransformation, invmodel, core::matrix4::EM4CONST_IDENTITY, irr_driver->getSceneManager()->getAmbientLight()); + pushVector( ListMatNormalMap::Arguments, mesh, AbsoluteTransformation, invmodel, core::matrix4::EM4CONST_IDENTITY); return; } @@ -295,7 +295,7 @@ void STKMeshSceneNode::render() size_t count = mesh.IndexCount; setTexture(MeshShader::ObjectPass2Shader::getInstance()->TU_Albedo, getTextureGLuint(spareWhiteTex), GL_NEAREST, GL_NEAREST, false); - MeshShader::ObjectPass2Shader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, irr_driver->getSceneManager()->getAmbientLight()); + MeshShader::ObjectPass2Shader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix); assert(mesh.vao); glBindVertexArray(mesh.vao); glDrawElements(ptype, count, itype, 0); From b935e9316aa9a7a597150ac661539b2682bd3a7a Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Wed, 30 Jul 2014 00:10:00 +0200 Subject: [PATCH 87/93] Update doxygen comment. --- src/graphics/shaders.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 95dbe2bb0..70dc36cf8 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -38,11 +38,27 @@ \subsection shader_declaration_compile Compile the shader The LoadProgram() function is provided to ease shader compilation and link. + It takes a flat sequence of SHADER_TYPE, filename pairs that will be linked together. + This way you can add any shader stage you want (geometry, domain/hull shader) + + It is highly recommended to use explicit attribute location for a program input. + However as not all hardware support this extension, default location are provided for + input whose name is either Position (location 0) or Normal (location 1) or + Texcoord (location 3) or Color (location 2) or SecondTexcoord (location 4). + You can use these predefined name and location in your vao for shader + that needs GL pre 3.3 support. \subsection shader_declaration_uniform_names Declare uniforms + Use the AssignUniforms() function to pass name of the uniforms in the program. + The order of name declaration is the same as the argument passed to setUniforms function. + \subsection shader_declaration_bind_texture_unit Bind texture unit and name + Texture are optional but if you have one, you must give them determined texture unit (up to 32). + You can do this using the AssignTextureUnit function that takes pair of texture unit and sampler name + as argument. + \section shader_usage Shader's class are singleton that can be retrieved using ShaderClassName::getInstance() which automatically From f1c29ad26ff7ba9ca5abde39cbbcf6410aaf32f2 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Wed, 30 Jul 2014 00:34:00 +0200 Subject: [PATCH 88/93] Port instancing shaders to singleton. --- src/graphics/shaders.cpp | 36 ----------------------- src/graphics/shaders.hpp | 24 ++++------------ src/graphics/stkinstancedscenenode.cpp | 40 +++++++++++++------------- 3 files changed, 26 insertions(+), 74 deletions(-) diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 70dc36cf8..643c9cdbf 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -405,12 +405,6 @@ void Shaders::loadShaders() FullScreenShader::MLAABlendWeightSHader::init(); FullScreenShader::MLAAGatherSHader::init(); MeshShader::ColorizeShader::init(); - MeshShader::InstancedObjectPass1ShaderInstance = new MeshShader::InstancedObjectPass1Shader(); - MeshShader::InstancedObjectRefPass1ShaderInstance = new MeshShader::InstancedObjectRefPass1Shader(); - MeshShader::InstancedGrassPass1ShaderInstance = new MeshShader::InstancedGrassPass1Shader(); - MeshShader::InstancedObjectPass2ShaderInstance = new MeshShader::InstancedObjectPass2Shader(); - MeshShader::InstancedObjectRefPass2ShaderInstance = new MeshShader::InstancedObjectRefPass2Shader(); - MeshShader::InstancedGrassPass2ShaderInstance = new MeshShader::InstancedGrassPass2Shader(); MeshShader::BubbleShader::init(); MeshShader::BillboardShader::init(); LightShader::PointLightShader::init(); @@ -682,8 +676,6 @@ namespace MeshShader } } - InstancedObjectPass1Shader *InstancedObjectPass1ShaderInstance; - InstancedObjectRefPass1Shader::InstancedObjectRefPass1Shader() { Program = LoadProgram( @@ -700,8 +692,6 @@ namespace MeshShader } } - InstancedObjectRefPass1Shader *InstancedObjectRefPass1ShaderInstance; - InstancedGrassPass1Shader::InstancedGrassPass1Shader() { Program = LoadProgram( @@ -719,8 +709,6 @@ namespace MeshShader } } - InstancedGrassPass1Shader *InstancedGrassPass1ShaderInstance; - // Solid Lit pass shaders ObjectPass2Shader::ObjectPass2Shader() { @@ -744,8 +732,6 @@ namespace MeshShader ); } - ObjectPass2Shader *ObjectPass2ShaderInstance; - InstancedObjectPass2Shader::InstancedObjectPass2Shader() { Program = LoadProgram( @@ -770,8 +756,6 @@ namespace MeshShader } } - InstancedObjectPass2Shader *InstancedObjectPass2ShaderInstance; - InstancedObjectRefPass2Shader::InstancedObjectRefPass2Shader() { Program = LoadProgram( @@ -793,8 +777,6 @@ namespace MeshShader glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } - InstancedObjectRefPass2Shader *InstancedObjectRefPass2ShaderInstance; - DetailledObjectPass2Shader::DetailledObjectPass2Shader() { Program = LoadProgram( @@ -816,8 +798,6 @@ namespace MeshShader ); } - DetailledObjectPass2Shader *DetailledObjectPass2ShaderInstance; - ObjectUnlitShader::ObjectUnlitShader() { Program = LoadProgram( @@ -834,8 +814,6 @@ namespace MeshShader AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } - ObjectUnlitShader *ObjectUnlitShaderInstance; - ObjectRefPass2Shader::ObjectRefPass2Shader() { Program = LoadProgram( @@ -858,8 +836,6 @@ namespace MeshShader ); } - ObjectRefPass2Shader *ObjectRefPass2ShaderInstance; - GrassPass2Shader::GrassPass2Shader() { Program = LoadProgram( @@ -877,8 +853,6 @@ namespace MeshShader ); } - GrassPass2Shader *GrassPass2ShaderInstance; - InstancedGrassPass2Shader::InstancedGrassPass2Shader() { Program = LoadProgram( @@ -902,8 +876,6 @@ namespace MeshShader glUniformBlockBinding(Program, uniform_ViewProjectionMatrixesUBO, 0); } - InstancedGrassPass2Shader *InstancedGrassPass2ShaderInstance; - SphereMapShader::SphereMapShader() { Program = LoadProgram( @@ -927,8 +899,6 @@ namespace MeshShader ); } - SphereMapShader *SphereMapShaderInstance; - SplattingShader::SplattingShader() { Program = LoadProgram( @@ -953,8 +923,6 @@ namespace MeshShader ); } - SplattingShader *SplattingShaderInstance; - GLuint BubbleShader::Program; GLuint BubbleShader::uniform_MVP; GLuint BubbleShader::uniform_tex; @@ -995,8 +963,6 @@ namespace MeshShader AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } - TransparentShader *TransparentShaderInstance; - TransparentFogShader::TransparentFogShader() { Program = LoadProgram( @@ -1013,8 +979,6 @@ namespace MeshShader AssignTextureUnit(Program, TexUnit(TU_tex, "tex")); } - TransparentFogShader *TransparentFogShaderInstance; - GLuint BillboardShader::Program; GLuint BillboardShader::attrib_corner; GLuint BillboardShader::attrib_texcoord; diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index 7ff7cf8f9..631abf54e 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -195,7 +195,7 @@ public: NormalMapShader(); }; -class InstancedObjectPass1Shader : public ShaderHelper<> +class InstancedObjectPass1Shader : public ShaderHelperSingleton { public: GLuint TU_tex; @@ -203,9 +203,7 @@ public: InstancedObjectPass1Shader(); }; -extern InstancedObjectPass1Shader *InstancedObjectPass1ShaderInstance; - -class InstancedObjectRefPass1Shader : public ShaderHelper<> +class InstancedObjectRefPass1Shader : public ShaderHelperSingleton { public: GLuint TU_tex; @@ -213,9 +211,7 @@ public: InstancedObjectRefPass1Shader(); }; -extern InstancedObjectRefPass1Shader *InstancedObjectRefPass1ShaderInstance; - -class InstancedGrassPass1Shader : public ShaderHelper +class InstancedGrassPass1Shader : public ShaderHelperSingleton { public: GLuint TU_tex; @@ -223,8 +219,6 @@ public: InstancedGrassPass1Shader(); }; -extern InstancedGrassPass1Shader *InstancedGrassPass1ShaderInstance; - class ObjectPass2Shader : public ShaderHelperSingleton { public: @@ -233,7 +227,7 @@ public: ObjectPass2Shader(); }; -class InstancedObjectPass2Shader : public ShaderHelper +class InstancedObjectPass2Shader : public ShaderHelperSingleton { public: GLuint TU_Albedo; @@ -241,9 +235,7 @@ public: InstancedObjectPass2Shader(); }; -extern InstancedObjectPass2Shader *InstancedObjectPass2ShaderInstance; - -class InstancedObjectRefPass2Shader : public ShaderHelper +class InstancedObjectRefPass2Shader : public ShaderHelperSingleton { public: GLuint TU_Albedo; @@ -251,8 +243,6 @@ public: InstancedObjectRefPass2Shader(); }; -extern InstancedObjectRefPass2Shader *InstancedObjectRefPass2ShaderInstance; - class DetailledObjectPass2Shader : public ShaderHelperSingleton { public: @@ -285,7 +275,7 @@ public: GrassPass2Shader(); }; -class InstancedGrassPass2Shader : public ShaderHelper +class InstancedGrassPass2Shader : public ShaderHelperSingleton { public: GLuint TU_Albedo, TU_dtex; @@ -293,8 +283,6 @@ public: InstancedGrassPass2Shader(); }; -extern InstancedGrassPass2Shader *InstancedGrassPass2ShaderInstance; - class SphereMapShader : public ShaderHelperSingleton { public: diff --git a/src/graphics/stkinstancedscenenode.cpp b/src/graphics/stkinstancedscenenode.cpp index 7f092838b..e1c6f543f 100644 --- a/src/graphics/stkinstancedscenenode.cpp +++ b/src/graphics/stkinstancedscenenode.cpp @@ -129,15 +129,15 @@ static void drawFSPMDefault(GLMesh &mesh, size_t instance_count) if (mesh.textures[0]) { compressTexture(mesh.textures[0], true); - setTexture(MeshShader::InstancedObjectPass1ShaderInstance->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); + setTexture(MeshShader::InstancedObjectPass1Shader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); } else { - setTexture(MeshShader::InstancedObjectPass1ShaderInstance->TU_tex, 0, GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, false); + setTexture(MeshShader::InstancedObjectPass1Shader::getInstance()->TU_tex, 0, GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, false); GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ONE }; glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); } - MeshShader::InstancedObjectPass1ShaderInstance->setUniforms(); + MeshShader::InstancedObjectPass1Shader::getInstance()->setUniforms(); glBindVertexArray(mesh.vao); glDrawElementsInstanced(ptype, count, itype, 0, instance_count); @@ -170,8 +170,8 @@ static void drawFSPMAlphaRefTexture(GLMesh &mesh, size_t instance_count) size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); - setTexture(MeshShader::InstancedObjectRefPass1ShaderInstance->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - MeshShader::InstancedObjectRefPass1ShaderInstance->setUniforms(); + setTexture(MeshShader::InstancedObjectRefPass1Shader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); + MeshShader::InstancedObjectRefPass1Shader::getInstance()->setUniforms(); glBindVertexArray(mesh.vao); glDrawElementsInstanced(ptype, count, itype, 0, instance_count); @@ -215,8 +215,8 @@ static void drawFSPMGrass(GLMesh &mesh, const core::vector3df &windDir, size_t i size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); - setTexture(MeshShader::InstancedGrassPass1ShaderInstance->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); - MeshShader::InstancedGrassPass1ShaderInstance->setUniforms(windDir); + setTexture(MeshShader::InstancedGrassPass1Shader::getInstance()->TU_tex, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); + MeshShader::InstancedGrassPass1Shader::getInstance()->setUniforms(windDir); glBindVertexArray(mesh.vao); glDrawElementsInstanced(ptype, count, itype, 0, instance_count); @@ -229,7 +229,7 @@ static void drawSMDefault(GLMesh &mesh, size_t instance_count) GLenum itype = mesh.IndexType; size_t count = mesh.IndexCount; - setTexture(MeshShader::InstancedObjectPass2ShaderInstance->TU_Albedo, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); + setTexture(MeshShader::InstancedObjectPass2Shader::getInstance()->TU_Albedo, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); if (irr_driver->getLightViz()) { GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA }; @@ -241,7 +241,7 @@ static void drawSMDefault(GLMesh &mesh, size_t instance_count) glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); } - MeshShader::InstancedObjectPass2ShaderInstance->setUniforms(irr_driver->getSceneManager()->getAmbientLight()); + MeshShader::InstancedObjectPass2Shader::getInstance()->setUniforms(); glBindVertexArray(mesh.vao); glDrawElementsInstanced(ptype, count, itype, 0, instance_count); @@ -255,7 +255,7 @@ static void drawSMAlphaRefTexture(GLMesh &mesh, size_t instance_count) size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); - setTexture(MeshShader::InstancedObjectRefPass2ShaderInstance->TU_Albedo, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); + setTexture(MeshShader::InstancedObjectRefPass2Shader::getInstance()->TU_Albedo, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); if (irr_driver->getLightViz()) { GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA }; @@ -267,7 +267,7 @@ static void drawSMAlphaRefTexture(GLMesh &mesh, size_t instance_count) glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); } - MeshShader::InstancedObjectRefPass2ShaderInstance->setUniforms(irr_driver->getSceneManager()->getAmbientLight()); + MeshShader::InstancedObjectRefPass2Shader::getInstance()->setUniforms(); glBindVertexArray(mesh.vao); glDrawElementsInstanced(ptype, count, itype, 0, instance_count); @@ -281,7 +281,7 @@ static void drawSMGrass(GLMesh &mesh, const core::vector3df &windDir, size_t ins size_t count = mesh.IndexCount; compressTexture(mesh.textures[0], true); - setTexture(MeshShader::InstancedGrassPass2ShaderInstance->TU_Albedo, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); + setTexture(MeshShader::InstancedGrassPass2Shader::getInstance()->TU_Albedo, getTextureGLuint(mesh.textures[0]), GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR, true); if (irr_driver->getLightViz()) { GLint swizzleMask[] = { GL_ONE, GL_ONE, GL_ONE, GL_ALPHA }; @@ -292,10 +292,10 @@ static void drawSMGrass(GLMesh &mesh, const core::vector3df &windDir, size_t ins GLint swizzleMask[] = { GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA }; glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); } - setTexture(MeshShader::InstancedGrassPass2ShaderInstance->TU_dtex, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST); + setTexture(MeshShader::InstancedGrassPass2Shader::getInstance()->TU_dtex, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST); SunLightProvider * const cb = (SunLightProvider *)irr_driver->getCallback(ES_SUNLIGHT); - MeshShader::InstancedGrassPass2ShaderInstance->setUniforms(windDir, cb->getPosition()); + MeshShader::InstancedGrassPass2Shader::getInstance()->setUniforms(windDir, cb->getPosition()); glBindVertexArray(mesh.vao); glDrawElementsInstanced(ptype, count, itype, 0, instance_count); @@ -317,18 +317,18 @@ void STKInstancedSceneNode::render() ModelViewProjectionMatrix *= irr_driver->getViewMatrix(); if (!MeshSolidMaterial[MAT_DEFAULT].empty()) - glUseProgram(MeshShader::InstancedObjectPass1ShaderInstance->Program); + glUseProgram(MeshShader::InstancedObjectPass1Shader::getInstance()->Program); for (unsigned i = 0; i < MeshSolidMaterial[MAT_DEFAULT].size(); i++) drawFSPMDefault(*MeshSolidMaterial[MAT_DEFAULT][i], instance_pos.size() / 9); if (!MeshSolidMaterial[MAT_ALPHA_REF].empty()) - glUseProgram(MeshShader::InstancedObjectRefPass1ShaderInstance->Program); + glUseProgram(MeshShader::InstancedObjectRefPass1Shader::getInstance()->Program); for (unsigned i = 0; i < MeshSolidMaterial[MAT_ALPHA_REF].size(); i++) drawFSPMAlphaRefTexture(*MeshSolidMaterial[MAT_ALPHA_REF][i], instance_pos.size() / 9); windDir = getWind(); if (!MeshSolidMaterial[MAT_GRASS].empty()) - glUseProgram(MeshShader::InstancedGrassPass1ShaderInstance->Program); + glUseProgram(MeshShader::InstancedGrassPass1Shader::getInstance()->Program); for (unsigned i = 0; i < MeshSolidMaterial[MAT_GRASS].size(); i++) drawFSPMGrass(*MeshSolidMaterial[MAT_GRASS][i], windDir, instance_pos.size() / 9); return; @@ -337,17 +337,17 @@ void STKInstancedSceneNode::render() if (irr_driver->getPhase() == SOLID_LIT_PASS) { if (!MeshSolidMaterial[MAT_DEFAULT].empty()) - glUseProgram(MeshShader::InstancedObjectPass2ShaderInstance->Program); + glUseProgram(MeshShader::InstancedObjectPass2Shader::getInstance()->Program); for (unsigned i = 0; i < MeshSolidMaterial[MAT_DEFAULT].size(); i++) drawSMDefault(*MeshSolidMaterial[MAT_DEFAULT][i], instance_pos.size() / 9); if (!MeshSolidMaterial[MAT_ALPHA_REF].empty()) - glUseProgram(MeshShader::InstancedObjectRefPass2ShaderInstance->Program); + glUseProgram(MeshShader::InstancedObjectRefPass2Shader::getInstance()->Program); for (unsigned i = 0; i < MeshSolidMaterial[MAT_ALPHA_REF].size(); i++) drawSMAlphaRefTexture(*MeshSolidMaterial[MAT_ALPHA_REF][i], instance_pos.size() / 9); if (!MeshSolidMaterial[MAT_GRASS].empty()) - glUseProgram(MeshShader::InstancedGrassPass2ShaderInstance->Program); + glUseProgram(MeshShader::InstancedGrassPass2Shader::getInstance()->Program); for (unsigned i = 0; i < MeshSolidMaterial[MAT_GRASS].size(); i++) drawSMGrass(*MeshSolidMaterial[MAT_GRASS][i], windDir, instance_pos.size() / 9); return; From f9c7c3db5ebadba8f2c3a6bc16aaf5f096081ad2 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Wed, 30 Jul 2014 01:25:27 +0200 Subject: [PATCH 89/93] Try a fix for intel and kart selection screen. --- data/shaders/utils/getLightFactor.frag | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/data/shaders/utils/getLightFactor.frag b/data/shaders/utils/getLightFactor.frag index bfc325170..a906544a5 100644 --- a/data/shaders/utils/getLightFactor.frag +++ b/data/shaders/utils/getLightFactor.frag @@ -2,6 +2,13 @@ uniform sampler2D DiffuseMap; uniform sampler2D SpecularMap; uniform sampler2D SSAO; +#ifdef UBO_DISABLED +uniform mat4 ViewMatrix; +uniform mat4 ProjectionMatrix; +uniform mat4 InverseViewMatrix; +uniform mat4 InverseProjectionMatrix; +uniform vec2 screen; +#else layout (std140) uniform MatrixesData { mat4 ViewMatrix; @@ -11,6 +18,7 @@ layout (std140) uniform MatrixesData mat4 ShadowViewProjMatrixes[4]; vec2 screen; }; +#endif vec3 getLightFactor(float specMapValue) { From 73b45e71c7e870dddc6955797b989ac965b6ced4 Mon Sep 17 00:00:00 2001 From: Deve Date: Wed, 30 Jul 2014 21:12:12 +0200 Subject: [PATCH 90/93] xrandr: fixed issue with fullscreen window which was placed in wrong screen in some window managers. In some cases main screen may have other position than (0, 0) - fixed it. --- .../source/Irrlicht/CIrrDeviceLinux.cpp | 48 +++++++++++++++---- .../source/Irrlicht/CIrrDeviceLinux.h | 2 + 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp index 44c1bb895..16275eb6f 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp @@ -826,6 +826,17 @@ bool CIrrDeviceLinux::createWindow() { if (netWM) { + // Some window managers don't respect values from XCreateWindow and + // place window in random position. This may cause that fullscreen + // window is showed in wrong screen. It doesn't matter for vidmode + // which displays cloned image in all devices. + #ifdef _IRR_LINUX_X11_RANDR_ + XResizeWindow(display, window, Width, Height); + XMoveWindow(display, window, crtc_x, crtc_y); + XRaiseWindow(display, window); + XFlush(display); + #endif + // Workaround for Gnome which sometimes creates window smaller than display XSizeHints *hints = XAllocSizeHints(); hints->flags=PMinSize; @@ -839,7 +850,8 @@ bool CIrrDeviceLinux::createWindow() Atom WMStateAtom = XInternAtom(display, "_NET_WM_STATE", true); Atom WMFullscreenAtom = XInternAtom(display, "_NET_WM_STATE_FULLSCREEN", true); // Set the fullscreen property - XChangeProperty(display, window, WMStateAtom, XA_ATOM, 32, PropModeReplace, reinterpret_cast(& WMFullscreenAtom), 1); + XChangeProperty(display, window, WMStateAtom, XA_ATOM, 32, PropModeReplace, + reinterpret_cast(&WMFullscreenAtom), 1); // Notify the root window XEvent xev = {0}; // The event should be filled with zeros before setting its attributes @@ -850,7 +862,10 @@ bool CIrrDeviceLinux::createWindow() xev.xclient.format = 32; xev.xclient.data.l[0] = 1; xev.xclient.data.l[1] = WMFullscreenAtom; - XSendEvent(display, DefaultRootWindow(display), false, SubstructureRedirectMask | SubstructureNotifyMask, &xev); + XSendEvent(display, RootWindow(display, visual->screen), false, + SubstructureRedirectMask | SubstructureNotifyMask, &xev); + + XFlush(display); } else { @@ -1557,10 +1572,11 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() XRRScreenResources* res = XRRGetScreenResources(display, DefaultRootWindow(display)); if (!res) - return NULL; + return &VideoModeList; XRROutputInfo *output = NULL; XRRCrtcInfo* crtc = NULL; + crtc_x = crtc_y = -1; for (int i = 0; i < res->noutput; i++) { @@ -1574,23 +1590,39 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() crtc = XRRGetCrtcInfo(display, res, output->crtc); - if (!crtc || crtc->x != 0 || crtc->y != 0) + if (!crtc) { XRRFreeCrtcInfo(crtc); XRRFreeOutputInfo(output); continue; } - - output_id = res->outputs[i]; - break; + + if (crtc_x == -1 || crtc->x < crtc_x) + { + crtc_x = crtc->x; + crtc_y = crtc->y; + output_id = res->outputs[i]; + } + else if (crtc_x == crtc->x && crtc->y < crtc_y) + { + crtc_x = crtc->x; + crtc_y = crtc->y; + output_id = res->outputs[i]; + } + + XRRFreeCrtcInfo(crtc); + XRRFreeOutputInfo(output); } + + output = XRRGetOutputInfo(display, res, output_id); + crtc = XRRGetCrtcInfo(display, res, output->crtc); if (crtc == NULL) { XRRFreeCrtcInfo(crtc); XRRFreeOutputInfo(output); XRRFreeScreenResources(res); - return NULL; + return &VideoModeList; } for (int i = 0; i < res->nmode; i++) diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h index 1ed59e72e..e071724de 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.h @@ -396,6 +396,8 @@ namespace irr #ifdef _IRR_LINUX_X11_RANDR_ RROutput output_id; RRMode old_mode; + int crtc_x; + int crtc_y; #endif #ifdef _IRR_COMPILE_WITH_OPENGL_ GLXWindow glxWin; From b11fd2aaf69867734268ed1ebbc58625baea00f1 Mon Sep 17 00:00:00 2001 From: Deve Date: Wed, 30 Jul 2014 21:29:15 +0200 Subject: [PATCH 91/93] xrandr: now it seems to work fine. I enable it for testing. This should be useful for people which have two or more display devices. It changes resolution only on main screen and leaves other screens untouched. Currently I use screen which is the most on left (or on top). Ideally we should be able to choose in settings which screen we want to use. But support it on all platforms is rather too much of work. We could also detect from which screen STK was executed. This can be done differently on different window managers, but nothing impossible. Maybe in future. Perhaps we should add fallback using old xrandr method. BTW. in some specific cases it works better than SDL2 ;-) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 23d20b86a..82ea054d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,7 +29,7 @@ else() endif() if(UNIX AND NOT APPLE) - option(USE_XRANDR "Use xrandr instead of vidmode" OFF) + option(USE_XRANDR "Use xrandr instead of vidmode" ON) endif() set(STK_SOURCE_DIR "src") From a81f21a27a7ae278c87c2b4f15efb1afef308898 Mon Sep 17 00:00:00 2001 From: hiker Date: Thu, 31 Jul 2014 09:28:42 +1000 Subject: [PATCH 92/93] Applied konstin's bugfix for an editor crash. --- src/race/grand_prix_data.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/race/grand_prix_data.cpp b/src/race/grand_prix_data.cpp index ff7cb8380..b4d058e15 100644 --- a/src/race/grand_prix_data.cpp +++ b/src/race/grand_prix_data.cpp @@ -553,7 +553,7 @@ void GrandPrixData::editTrack(unsigned int index, Track* track, // ---------------------------------------------------------------------------- void GrandPrixData::remove(const unsigned int track) { - assert (0 < track && track < getNumberOfTracks(true)); + assert (0 <= track && track < getNumberOfTracks(true)); m_tracks.erase(m_tracks.begin() + track); m_laps.erase(m_laps.begin() + track); From 67948dfe28adf4d2a91649f5a37e9ca23f75f07c Mon Sep 17 00:00:00 2001 From: Deve Date: Thu, 31 Jul 2014 23:12:40 +0200 Subject: [PATCH 93/93] xrandr: add support for rotated screens --- .../source/Irrlicht/CIrrDeviceLinux.cpp | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp index 16275eb6f..39cc7556f 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceLinux.cpp @@ -49,6 +49,9 @@ #endif // _IRR_COMPILE_WITH_JOYSTICK_EVENTS_ +#define XRANDR_ROTATION_LEFT (1 << 1) +#define XRANDR_ROTATION_RIGHT (1 << 3) + namespace irr { namespace video @@ -346,8 +349,20 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) for (int i = 0; i < res->nmode; i++) { const XRRModeInfo* mode = &res->modes[i]; + unsigned int w, h; + + if (crtc->rotation & (XRANDR_ROTATION_LEFT|XRANDR_ROTATION_RIGHT)) + { + w = mode->height; + h = mode->width; + } + else + { + w = mode->width; + h = mode->height; + } - if (bestMode == -1 && mode->width == Width && mode->height == Height) + if (bestMode == -1 && w == Width && h == Height) { for (int j = 0; j < output->nmode; j++) { @@ -359,7 +374,7 @@ bool CIrrDeviceLinux::switchToFullscreen(bool reset) } } } - else if (bestMode != -1 && mode->width == Width && mode->height == Height) + else if (bestMode != -1 && w == Width && h == Height) { refresh_rate_new = (mode->dotClock * 1000.0) / (mode->hTotal * mode->vTotal); @@ -1628,13 +1643,25 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() for (int i = 0; i < res->nmode; i++) { const XRRModeInfo* mode = &res->modes[i]; + unsigned int w, h; + + if (crtc->rotation & (XRANDR_ROTATION_LEFT|XRANDR_ROTATION_RIGHT)) + { + w = mode->height; + h = mode->width; + } + else + { + w = mode->width; + h = mode->height; + } for (int j = 0; j < output->nmode; j++) - { + { if (mode->id == output->modes[j]) { VideoModeList.addMode(core::dimension2d( - mode->width, mode->height), defaultDepth); + w, h), defaultDepth); break; } } @@ -1643,7 +1670,7 @@ video::IVideoModeList* CIrrDeviceLinux::getVideoModeList() { old_mode = crtc->mode; VideoModeList.setDesktop(defaultDepth, - core::dimension2d(mode->width, mode->height)); + core::dimension2d(w, h)); } }