From 354dad7392110b768dac7311527bb2f3428abfbd Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Mon, 1 Dec 2014 01:46:50 +0100 Subject: [PATCH 01/49] Fix an error when indirect instancing is not supported --- data/shaders/instanced_object_pass.vert | 1 + 1 file changed, 1 insertion(+) diff --git a/data/shaders/instanced_object_pass.vert b/data/shaders/instanced_object_pass.vert index 3fb5e19e2..50b1ad36e 100644 --- a/data/shaders/instanced_object_pass.vert +++ b/data/shaders/instanced_object_pass.vert @@ -21,6 +21,7 @@ in vec3 Position; in vec3 Normal; in vec4 Color; in vec2 Texcoord; +in vec2 SecondTexcoord; in vec3 Tangent; in vec3 Bitangent; From 006a7f95c9b5a98badef883c3906735bf47bb7a2 Mon Sep 17 00:00:00 2001 From: hiker Date: Mon, 1 Dec 2014 15:14:27 +1100 Subject: [PATCH 02/49] Cherrypicked pull request #1743 (cppcheck performance fixes). --- src/addons/addons_manager.cpp | 3 +- src/graphics/glwrap.cpp | 12 +- src/graphics/particle_kind.cpp | 7 +- src/graphics/particle_kind.hpp | 4 +- src/graphics/skid_marks.cpp | 3 +- src/guiengine/message_queue.cpp | 8 +- src/guiengine/widgets/list_widget.cpp | 11 +- src/guiengine/widgets/list_widget.hpp | 19 +- src/guiengine/widgets/ribbon_widget.cpp | 2 +- src/guiengine/widgets/ribbon_widget.hpp | 2 +- src/guiengine/xx | 199 ++++++++++++++++++ src/io/xml_node.cpp | 4 +- src/network/stk_host.cpp | 2 +- src/network/stk_host.hpp | 2 +- src/physics/btKart.cpp | 8 +- src/physics/physics.hpp | 2 +- src/race/highscore_manager.cpp | 4 +- src/race/highscore_manager.hpp | 4 +- src/race/highscores.cpp | 16 +- src/race/highscores.hpp | 12 +- src/race/race_manager.cpp | 2 +- src/replay/replay_base.cpp | 2 +- src/states_screens/dialogs/addons_loading.cpp | 7 +- src/states_screens/race_gui.cpp | 3 +- src/states_screens/race_gui_overworld.cpp | 4 +- src/tinygettext/dictionary_manager.cpp | 2 +- src/tinygettext/po_parser.cpp | 2 +- src/tracks/check_structure.cpp | 2 +- src/tracks/check_structure.hpp | 2 +- src/tracks/quad_graph.cpp | 2 +- src/tracks/quad_graph.hpp | 4 +- src/utils/profiler.cpp | 2 +- src/utils/string_utils.cpp | 2 +- src/utils/string_utils.hpp | 2 +- 34 files changed, 280 insertions(+), 82 deletions(-) create mode 100644 src/guiengine/xx diff --git a/src/addons/addons_manager.cpp b/src/addons/addons_manager.cpp index 86b089047..3fe7ff51f 100644 --- a/src/addons/addons_manager.cpp +++ b/src/addons/addons_manager.cpp @@ -466,7 +466,6 @@ bool AddonsManager::anyAddonsInstalled() const */ bool AddonsManager::install(const Addon &addon) { - bool success=true; file_manager->checkAndCreateDirForAddons(addon.getDataDir()); //extract the zip in the addons folder called like the addons name @@ -474,7 +473,7 @@ bool AddonsManager::install(const Addon &addon) std::string from = file_manager->getAddonsFile("tmp/"+base_name); std::string to = addon.getDataDir(); - success = extract_zip(from, to); + bool success = extract_zip(from, to); if (!success) { // TODO: show a message in the interface diff --git a/src/graphics/glwrap.cpp b/src/graphics/glwrap.cpp index 7a77a1c54..c86f005f2 100644 --- a/src/graphics/glwrap.cpp +++ b/src/graphics/glwrap.cpp @@ -182,8 +182,10 @@ unsigned GPUTimer::elapsedTimeus() FrameBuffer::FrameBuffer() {} -FrameBuffer::FrameBuffer(const std::vector &RTTs, size_t w, size_t h, bool layered) : -RenderTargets(RTTs), DepthTexture(0), width(w), height(h), fbolayer(0) +FrameBuffer::FrameBuffer(const std::vector &RTTs, size_t w, size_t h, + bool layered) + : fbolayer(0), RenderTargets(RTTs), DepthTexture(0), + width(w), height(h) { glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); @@ -201,8 +203,10 @@ RenderTargets(RTTs), DepthTexture(0), width(w), height(h), fbolayer(0) assert(result == GL_FRAMEBUFFER_COMPLETE_EXT); } -FrameBuffer::FrameBuffer(const std::vector &RTTs, GLuint DS, size_t w, size_t h, bool layered) : -RenderTargets(RTTs), DepthTexture(DS), width(w), height(h), fbolayer(0) +FrameBuffer::FrameBuffer(const std::vector &RTTs, GLuint DS, size_t w, + size_t h, bool layered) + : fbolayer(0), RenderTargets(RTTs), DepthTexture(DS), width(w), + height(h) { glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); diff --git a/src/graphics/particle_kind.cpp b/src/graphics/particle_kind.cpp index 8feff73c1..a6f90301d 100644 --- a/src/graphics/particle_kind.cpp +++ b/src/graphics/particle_kind.cpp @@ -27,8 +27,9 @@ #include -ParticleKind::ParticleKind(const std::string file) : m_min_start_color(255,255,255,255), - m_max_start_color(255,255,255,255), m_name(file) +ParticleKind::ParticleKind(const std::string &file) + : m_min_start_color(255,255,255,255), + m_max_start_color(255,255,255,255), m_name(file) { // ---- Initial values to prevent readin uninitialized values m_max_size = 0.5f; @@ -52,7 +53,7 @@ ParticleKind::ParticleKind(const std::string file) : m_min_start_color(255,255,2 m_fade_away_end = -1.0f; m_force_lost_to_gravity_time = 1000; m_emission_decay_rate = 0; - m_has_scale_affector = NULL; + m_has_scale_affector = false; m_scale_affector_factor_x = 0.0f; m_scale_affector_factor_y = 0.0f; m_wind_speed = 0; diff --git a/src/graphics/particle_kind.hpp b/src/graphics/particle_kind.hpp index 0546ff102..796d1b885 100644 --- a/src/graphics/particle_kind.hpp +++ b/src/graphics/particle_kind.hpp @@ -113,7 +113,7 @@ public: * @param file Name of the file to load (no full path) * @throw std::runtime_error If the file cannot be found or is heavily malformed */ - ParticleKind(const std::string file); + ParticleKind(const std::string &file); virtual ~ParticleKind() {} @@ -172,7 +172,7 @@ public: bool randomizeInitialY() const { return m_randomize_initial_y; } - std::string getName() const { return m_name; } + const std::string& getName() const { return m_name; } }; #endif diff --git a/src/graphics/skid_marks.cpp b/src/graphics/skid_marks.cpp index 17eb3e111..d6c7d602d 100644 --- a/src/graphics/skid_marks.cpp +++ b/src/graphics/skid_marks.cpp @@ -146,12 +146,11 @@ void SkidMarks::update(float dt, bool force_skid_marks, delta.normalize(); delta *= m_width*0.5f; - float distance = 0.0f; Vec3 start = m_left[m_current]->getCenterStart(); Vec3 newPoint = (raycast_left + raycast_right)/2; // this linear distance does not account for the kart turning, it's true, // but it produces good enough results - distance = (newPoint - start).length(); + float distance = (newPoint - start).length(); m_left [m_current]->add(raycast_left-delta, raycast_left+delta, distance); diff --git a/src/guiengine/message_queue.cpp b/src/guiengine/message_queue.cpp index 5b0444cfc..dbea7a2d5 100755 --- a/src/guiengine/message_queue.cpp +++ b/src/guiengine/message_queue.cpp @@ -126,7 +126,7 @@ void createLabel(const Message *message) * position of the message. */ void updatePosition() { - if (g_all_messages.size() == 0) return; + if (g_all_messages.empty()) return; Message *last = g_all_messages.top(); createLabel(last); } // updatePosition @@ -139,7 +139,7 @@ void updatePosition() void add(MessageType mt, const irr::core::stringw &message) { Message *m = new Message(mt, message); - if(g_all_messages.size()==0) + if(g_all_messages.empty()) { // Indicate that there is a new message, which should // which needs a new label etc. to be computed. @@ -157,7 +157,7 @@ void add(MessageType mt, const irr::core::stringw &message) */ void update(float dt) { - if(g_all_messages.size()==0) return; + if(g_all_messages.empty()) return; g_current_display_time += dt; if(g_current_display_time > g_max_display_time) @@ -165,7 +165,7 @@ void update(float dt) Message *last = g_all_messages.top(); g_all_messages.pop(); delete last; - if(g_all_messages.size()==0) return; + if(g_all_messages.empty()) return; g_current_display_time = -1.0f; } diff --git a/src/guiengine/widgets/list_widget.cpp b/src/guiengine/widgets/list_widget.cpp index f9900302d..81f5df6c6 100644 --- a/src/guiengine/widgets/list_widget.cpp +++ b/src/guiengine/widgets/list_widget.cpp @@ -236,7 +236,8 @@ void ListWidget::addItem(const std::string& internal_name, } // ----------------------------------------------------------------------------- -void ListWidget::renameCell(const int row_index, const int col_index, const irr::core::stringw newName, const int icon) +void ListWidget::renameCell(const int row_index, const int col_index, + const irr::core::stringw &newName, const int icon) { // May only be called AFTER this widget has been add()ed assert(m_element != NULL); @@ -251,13 +252,15 @@ void ListWidget::renameCell(const int row_index, const int col_index, const irr: } // ----------------------------------------------------------------------------- -void ListWidget::renameItem(const int row_index, const irr::core::stringw newName, const int icon) +void ListWidget::renameItem(const int row_index, + const irr::core::stringw &newName, const int icon) { renameCell(row_index, 0, newName, icon); } // ----------------------------------------------------------------------------- -void ListWidget::renameItem(const std::string & internal_name, const irr::core::stringw newName, const int icon) +void ListWidget::renameItem(const std::string &internal_name, + const irr::core::stringw &newName, const int icon) { CGUISTKListBox* list = getIrrlichtElement(); assert(list != NULL); @@ -456,7 +459,7 @@ EventPropagation ListWidget::transmitEvent(Widget* w, } // ----------------------------------------------------------------------------- -int ListWidget::getItemID(const std::string internalName) const +int ListWidget::getItemID(const std::string &internalName) const { const CGUISTKListBox* list = getIrrlichtElement(); assert(list != NULL); diff --git a/src/guiengine/widgets/list_widget.hpp b/src/guiengine/widgets/list_widget.hpp index 720032736..0c0ebeb17 100644 --- a/src/guiengine/widgets/list_widget.hpp +++ b/src/guiengine/widgets/list_widget.hpp @@ -167,7 +167,7 @@ namespace GUIEngine /** * \brief Finds the ID of the item that has a given internal name */ - int getItemID(const std::string internalName) const; + int getItemID(const std::string &internalName) const; /** * \brief change the selected item @@ -180,20 +180,23 @@ namespace GUIEngine * \brief rename an item and/or change its icon based on its ID * \pre may only be called after the widget has been added to the screen with add() */ - void renameCell(const int row_num, const int col_num, const irr::core::stringw newName, const int icon=-1); + void renameCell(const int row_num, const int col_num, + const irr::core::stringw &newName, const int icon=-1); /** * renames first cell only */ - void renameItem(const int row_num, const irr::core::stringw newName, const int icon=-1); - void renameItem(const std::string & internal_name, const irr::core::stringw newName, const int icon=-1); + void renameItem(const int row_num, + const irr::core::stringw &newName, const int icon=-1); + void renameItem(const std::string & internal_name, + const irr::core::stringw &newName, const int icon=-1); /** * \brief rename an item and/or change its icon based on its internal name * \pre may only be called after the widget has been added to the screen with add() */ - void renameCell(const std::string internalName, const int col_num, const irr::core::stringw newName, - const int icon=-1) + void renameCell(const std::string internalName, const int col_num, + const irr::core::stringw &newName, const int icon=-1) { const int id = getItemID(internalName); assert(id != -1); @@ -211,14 +214,14 @@ namespace GUIEngine * \brief Make an item red to mark an error, for instance * \pre may only be called after the widget has been added to the screen with add() */ - void markItemRed(const std::string internalName, bool red=true) + void markItemRed(const std::string &internalName, bool red=true) { const int id = getItemID(internalName); assert(id != -1); markItemRed( id, red ); } - void markItemBlue(const std::string internalName, bool blue=true) + void markItemBlue(const std::string &internalName, bool blue=true) { const int id = getItemID(internalName); assert(id != -1); diff --git a/src/guiengine/widgets/ribbon_widget.cpp b/src/guiengine/widgets/ribbon_widget.cpp index 54683e18e..fe7397682 100644 --- a/src/guiengine/widgets/ribbon_widget.cpp +++ b/src/guiengine/widgets/ribbon_widget.cpp @@ -373,7 +373,7 @@ void RibbonWidget::add() // ---------------------------------------------------------------------------- -void RibbonWidget::addTextChild(const wchar_t* text, const std::string id) +void RibbonWidget::addTextChild(const wchar_t* text, const std::string &id) { // This method should only be called BEFORE a widget is added assert(m_element == NULL); diff --git a/src/guiengine/widgets/ribbon_widget.hpp b/src/guiengine/widgets/ribbon_widget.hpp index f14558250..8e37403f0 100644 --- a/src/guiengine/widgets/ribbon_widget.hpp +++ b/src/guiengine/widgets/ribbon_widget.hpp @@ -166,7 +166,7 @@ namespace GUIEngine * \pre only valid for ribbons that take text-only contents * (e.g. tab bars) */ - void addTextChild(const wchar_t* text, const std::string id); + void addTextChild(const wchar_t* text, const std::string &id); /** \brief Dynamically (at runtime) add an icon item to this ribbon. diff --git a/src/guiengine/xx b/src/guiengine/xx new file mode 100644 index 000000000..d3db4cb94 --- /dev/null +++ b/src/guiengine/xx @@ -0,0 +1,199 @@ +bced8cdb src/guiengine/scalable_font.hpp (hikerstk 2013-12-02 04:27:55 +0000 1) // Copyright (C) 2002-2013 Nikolaus Gebhardt +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 2) // This file is part of the "Irrlicht Engine". +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 3) // For conditions of distribution and use, see copyright notice in irrlicht.h +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 4) +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 5) #ifndef __C_GUI_FONT_H_INCLUDED__ +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 6) #define __C_GUI_FONT_H_INCLUDED__ +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 7) +e1a75067 src/guiengine/scalable_font.hpp (hiker 2014-06-15 22:01:52 +1000 8) #include "utils/leak_check.hpp" +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 9) +e1a75067 src/guiengine/scalable_font.hpp (hiker 2014-06-15 22:01:52 +1000 10) #include "IrrCompileConfig.h" +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 11) #include "IGUIFontBitmap.h" +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 12) #include "irrString.h" +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 13) #include "irrMap.h" +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 14) #include "IXMLReader.h" +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 15) #include "IReadFile.h" +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 16) #include "irrArray.h" +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 17) +e1a75067 src/guiengine/scalable_font.hpp (hiker 2014-06-15 22:01:52 +1000 18) +e1a75067 src/guiengine/scalable_font.hpp (hiker 2014-06-15 22:01:52 +1000 19) #include +e1a75067 src/guiengine/scalable_font.hpp (hiker 2014-06-15 22:01:52 +1000 20) #include +978bb546 src/guiengine/scalable_font.hpp (auria 2011-09-22 18:24:28 +0000 21) +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 22) namespace irr +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 23) { +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 24) +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 25) namespace video +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 26) { +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 27) class IVideoDriver; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 28) class IImage; +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 29) class ITexture; +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 30) } +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 31) +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 32) namespace gui +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 33) { +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 34) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 35) class IGUIEnvironment; +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 36) +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 37) class FontCharCollector +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 38) { +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 39) public: +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 40) +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 41) virtual void collectChar(video::ITexture* texture, const core::rect& destRect, +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 42) const core::rect& sourceRect, const video::SColor* const colors) = 0; +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 43) }; +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 44) +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 45) class ScalableFont : public IGUIFontBitmap +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 46) { +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 47) float m_scale; +f3f98293 src/guiengine/CGUIFont.h (auria 2009-12-05 23:47:33 +0000 48) bool m_shadow; +8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 49) /** True if digits should be mono spaced. */ +8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 50) +8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 51) bool m_mono_space_digits; +f3f98293 src/guiengine/CGUIFont.h (auria 2009-12-05 23:47:33 +0000 52) irr::video::SColor m_shadow_color; +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 53) +11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 54) struct TextureInfo +11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 55) { +11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 56) irr::core::stringc m_file_name; +11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 57) bool m_has_alpha; +b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 58) float m_scale; +47b5a604 src/guiengine/scalable_font.hpp (auria 2013-01-06 00:36:20 +0000 59) bool m_exclude_from_max_height_calculation; +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 60) +b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 61) TextureInfo() +b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 62) { +b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 63) m_has_alpha = false; +b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 64) m_scale = 1.0f; +b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 65) } +11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 66) }; +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 67) +11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 68) std::map m_texture_files; +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 69) +e79025b0 src/guiengine/scalable_font.hpp (auria 2010-08-29 19:28:57 +0000 70) void doReadXmlFile(io::IXMLReader* xml); +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 71) +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 72) bool m_is_hollow_copy; +a2825c4b src/guiengine/CGUIFont.h (auria 2010-05-30 19:11:39 +0000 73) bool m_rtl; +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 74) +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 75) public: +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 76) +978bb546 src/guiengine/scalable_font.hpp (auria 2011-09-22 18:24:28 +0000 77) LEAK_CHECK() +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 78) +3920dfe1 src/guiengine/CGUIFont.h (auria 2010-01-24 16:48:13 +0000 79) bool m_black_border; +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 80) +f2e2a374 src/guiengine/CGUIFont.h (auria 2010-01-24 16:26:31 +0000 81) ScalableFont* m_fallback_font; +f2e2a374 src/guiengine/CGUIFont.h (auria 2010-01-24 16:26:31 +0000 82) float m_fallback_font_scale; +f2e2a374 src/guiengine/CGUIFont.h (auria 2010-01-24 16:26:31 +0000 83) int m_fallback_kerning_width; +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 84) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 85) //! constructor +02b0cfd0 src/guiengine/scalable_font.hpp (hiker 2014-06-09 22:38:19 +1000 86) ScalableFont(IGUIEnvironment* env, const std::string &filename); +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 87) +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 88) /** Creates a hollow copy of this font; i.e. the underlying font data is the *same* for +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 89) * both fonts. The advantage of doing this is that you can change "view" parameters +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 90) * in the copy, for example kerning or scale. +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 91) * The object returned by this method is 'new'ed and must be deleted. Deleting it will +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 92) * not delete the data of the original. Do *not* delete the original as long as this +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 93) * hollow copy is still used, since they share their data (and the original is the one +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 94) * that "owns" it). +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 95) */ +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 96) ScalableFont* getHollowCopy() const +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 97) { +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 98) ScalableFont* out = new ScalableFont(*this); +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 99) out->m_is_hollow_copy = true; +7c7fb68e src/guiengine/scalable_font.hpp (hiker 2014-11-26 23:40:50 +1100 100) //FIXME: test only. Reset the reference counter of the copy to 1 +7c7fb68e src/guiengine/scalable_font.hpp (hiker 2014-11-26 23:40:50 +1100 101) while (out->getReferenceCount() > 1) +7c7fb68e src/guiengine/scalable_font.hpp (hiker 2014-11-26 23:40:50 +1100 102) out->drop(); +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 103) return out; +4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 104) } +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 105) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 106) //! destructor +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 107) virtual ~ScalableFont(); +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 108) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 109) //! loads a font from an XML file +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 110) bool load(io::IXMLReader* xml); +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 111) +973a7cd4 src/guiengine/scalable_font.hpp (auria 2012-01-30 00:27:53 +0000 112) void lazyLoadTexture(int texID); +973a7cd4 src/guiengine/scalable_font.hpp (auria 2012-01-30 00:27:53 +0000 113) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 114) //! draws an text and clips it to the specified rectangle if wanted +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 115) virtual void draw(const core::stringw& text, const core::rect& position, +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 116) video::SColor color, bool hcenter = false, +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 117) bool vcenter = false, const core::rect* clip = 0); +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 118) +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 119) void draw(const core::stringw& text, const core::rect& position, +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 120) video::SColor color, bool hcenter, +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 121) bool vcenter, const core::rect* clip, bool ignoreRTL); +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 122) +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 123) void doDraw(const core::stringw& text, const core::rect& position, +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 124) video::SColor color, bool hcenter, +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 125) bool vcenter, const core::rect* clip, +f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 126) FontCharCollector* charCollector = NULL); +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 127) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 128) //! returns the dimension of a text +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 129) virtual core::dimension2d getDimension(const wchar_t* text) const; +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 130) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 131) //! Calculates the index of the character in the text which is on a specific position. +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 132) virtual s32 getCharacterFromPos(const wchar_t* text, s32 pixel_x) const; +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 133) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 134) //! Returns the type of this font +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 135) virtual EGUI_FONT_TYPE getType() const { return EGFT_BITMAP; } +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 136) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 137) //! set an Pixel Offset on Drawing ( scale position on width ) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 138) virtual void setKerningWidth (s32 kerning); +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 139) virtual void setKerningHeight (s32 kerning); +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 140) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 141) //! set an Pixel Offset on Drawing ( scale position on width ) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 142) virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 143) virtual s32 getKerningHeight() const; +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 144) +8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 145) /** Sets if digits are to be mono-spaced. */ +8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 146) void setMonospaceDigits(bool mono) {m_mono_space_digits = mono; } +8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 147) bool getMonospaceDigits() const { return m_mono_space_digits; } +d00f587d src/guiengine/scalable_font.hpp (hikerstk 2011-03-29 22:59:32 +0000 148) void setShadow(const irr::video::SColor &col); +d00f587d src/guiengine/scalable_font.hpp (hikerstk 2011-03-29 22:59:32 +0000 149) void disableShadow() {m_shadow = false;} +f3f98293 src/guiengine/CGUIFont.h (auria 2009-12-05 23:47:33 +0000 150) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 151) //! gets the sprite bank +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 152) virtual IGUISpriteBank* getSpriteBank() const; +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 153) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 154) //! returns the sprite number from a given character +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 155) virtual u32 getSpriteNoFromChar(const wchar_t *c) const; +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 156) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 157) virtual void setInvisibleCharacters( const wchar_t *s ); +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 158) +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 159) void setScale(const float scale); +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 160) float getScale() const { return m_scale; } +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 161) +8b9a9677 src/guiengine/scalable_font.hpp (auria 2011-02-06 02:11:57 +0000 162) void updateRTL(); +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 163) +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 164) private: +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 165) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 166) struct SFontArea +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 167) { +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 168) SFontArea() : underhang(0), overhang(0), width(0), spriteno(0) {} +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 169) s32 underhang; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 170) s32 overhang; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 171) s32 width; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 172) u32 spriteno; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 173) }; +57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 174) +b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 175) int getCharWidth(const SFontArea& area, const bool fallback) const; +8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 176) s32 getAreaIDFromCharacter(const wchar_t c, bool* fallback_font) const; +8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 177) const SFontArea &getAreaFromCharacter(const wchar_t c, bool* fallback_font) const; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 178) void setMaxHeight(); +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 179) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 180) core::array Areas; +8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 181) /** The maximum values of all digits, used in monospace_digits. */ +8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 182) mutable SFontArea m_max_digit_area; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 183) std::map CharacterMap; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 184) video::IVideoDriver* Driver; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 185) IGUISpriteBank* SpriteBank; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 186) IGUIEnvironment* Environment; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 187) u32 WrongCharacter; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 188) s32 MaxHeight; +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 189) s32 GlobalKerningWidth, GlobalKerningHeight; +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 190) +03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 191) core::stringw Invisible; +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 192) }; +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 193) +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 194) } // end namespace gui +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 195) } // end namespace irr +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 196) +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 197) +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 198) #endif // __C_GUI_FONT_H_INCLUDED__ +d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 199) diff --git a/src/io/xml_node.cpp b/src/io/xml_node.cpp index 5ffc8e0a6..b9df3cf30 100644 --- a/src/io/xml_node.cpp +++ b/src/io/xml_node.cpp @@ -174,7 +174,7 @@ const void XMLNode::getNodes(const std::string &s, std::vector& out) c */ int XMLNode::get(const std::string &attribute, std::string *value) const { - if(m_attributes.size()==0) return 0; + if(m_attributes.empty()) return 0; std::map::const_iterator o; o = m_attributes.find(attribute); if(o==m_attributes.end()) return 0; @@ -184,7 +184,7 @@ int XMLNode::get(const std::string &attribute, std::string *value) const // ---------------------------------------------------------------------------- int XMLNode::get(const std::string &attribute, core::stringw *value) const { - if(m_attributes.size()==0) return 0; + if(m_attributes.empty()) return 0; std::map::const_iterator o; o = m_attributes.find(attribute); if(o==m_attributes.end()) return 0; diff --git a/src/network/stk_host.cpp b/src/network/stk_host.cpp index 23569e766..081fbcc73 100644 --- a/src/network/stk_host.cpp +++ b/src/network/stk_host.cpp @@ -57,7 +57,7 @@ const char* inet_ntop(int af, const void* src, char* dst, int cnt) FILE* STKHost::m_log_file = NULL; pthread_mutex_t STKHost::m_log_mutex; -void STKHost::logPacket(const NetworkString ns, bool incoming) +void STKHost::logPacket(const NetworkString &ns, bool incoming) { if (m_log_file == NULL) return; diff --git a/src/network/stk_host.hpp b/src/network/stk_host.hpp index 97cc96dad..788aa6717 100644 --- a/src/network/stk_host.hpp +++ b/src/network/stk_host.hpp @@ -69,7 +69,7 @@ class STKHost * \param incoming : True if the packet comes from a peer. * False if it's sent to a peer. */ - static void logPacket(const NetworkString ns, bool incoming); + static void logPacket(const NetworkString &ns, bool incoming); /*! \brief Thread function checking if data is received. * This function tries to get data from network low-level functions as diff --git a/src/physics/btKart.cpp b/src/physics/btKart.cpp index 7afd4c198..02d2c98d5 100644 --- a/src/physics/btKart.cpp +++ b/src/physics/btKart.cpp @@ -232,8 +232,6 @@ btScalar btKart::rayCast(unsigned int index) updateWheelTransformsWS( wheel,false); - btScalar depth = -1; - btScalar max_susp_len = wheel.getSuspensionRestLength()+wheel.m_wheelsRadius + wheel.m_maxSuspensionTravelCm*0.01f; @@ -255,7 +253,7 @@ btScalar btKart::rayCast(unsigned int index) wheel.m_raycastInfo.m_groundObject = 0; - depth = raylen * rayResults.m_distFraction; + btScalar depth = raylen * rayResults.m_distFraction; if (object && depth < max_susp_len) { wheel.m_raycastInfo.m_contactNormalWS = rayResults.m_hitNormalInWorld; @@ -719,8 +717,6 @@ struct btWheelContactPoint btScalar btKart::calcRollingFriction(btWheelContactPoint& contactPoint) { - btScalar j1=0.f; - const btVector3& contactPosWorld = contactPoint.m_frictionPositionWorld; btVector3 rel_pos1 = contactPosWorld @@ -737,7 +733,7 @@ btScalar btKart::calcRollingFriction(btWheelContactPoint& contactPoint) btScalar vrel = contactPoint.m_frictionDirectionWorld.dot(vel); // calculate j that moves us to zero relative velocity - j1 = -vrel * contactPoint.m_jacDiagABInv; + btScalar j1 = -vrel * contactPoint.m_jacDiagABInv; btSetMin(j1, maxImpulse); btSetMax(j1, -maxImpulse); diff --git a/src/physics/physics.hpp b/src/physics/physics.hpp index 96f5fc1b6..cd8b54e5e 100644 --- a/src/physics/physics.hpp +++ b/src/physics/physics.hpp @@ -80,7 +80,7 @@ private: /** Tests if two collision pairs involve the same objects. This test * is simplified (i.e. no test if p.b==a and p.a==b) since the * elements are sorted. */ - bool operator==(const CollisionPair p) + bool operator==(const CollisionPair &p) { return (p.m_up[0]==m_up[0] && p.m_up[1]==m_up[1]); } // operator== diff --git a/src/race/highscore_manager.cpp b/src/race/highscore_manager.cpp index b652f60ce..0d38d91ed 100644 --- a/src/race/highscore_manager.cpp +++ b/src/race/highscore_manager.cpp @@ -175,10 +175,10 @@ void HighscoreManager::saveHighscores() * Returns the high scores entry for a specific type of race. * Creates one if none exists yet. */ -Highscores* HighscoreManager::getHighscores(const Highscores::HighscoreType highscore_type, +Highscores* HighscoreManager::getHighscores(const Highscores::HighscoreType &highscore_type, int num_karts, const RaceManager::Difficulty difficulty, - const std::string trackName, + const std::string &trackName, const int number_of_laps, const bool reverse) { diff --git a/src/race/highscore_manager.hpp b/src/race/highscore_manager.hpp index 72dad36d8..a87b00a31 100644 --- a/src/race/highscore_manager.hpp +++ b/src/race/highscore_manager.hpp @@ -49,10 +49,10 @@ public: HighscoreManager(); ~HighscoreManager(); void saveHighscores(); - Highscores *getHighscores(const Highscores::HighscoreType highscore_type, + Highscores *getHighscores(const Highscores::HighscoreType &highscore_type, int num_karts, const RaceManager::Difficulty difficulty, - const std::string trackName, + const std::string &trackName, const int number_of_laps, const bool reverse); }; // HighscoreManager diff --git a/src/race/highscores.cpp b/src/race/highscores.cpp index 4056730c3..00fdcf623 100644 --- a/src/race/highscores.cpp +++ b/src/race/highscores.cpp @@ -26,14 +26,14 @@ #include // ----------------------------------------------------------------------------- -Highscores::Highscores(const HighscoreType highscore_type, +Highscores::Highscores(const HighscoreType &highscore_type, int num_karts, - const RaceManager::Difficulty difficulty, - const std::string trackName, + const RaceManager::Difficulty &difficulty, + const std::string &track_name, const int number_of_laps, const bool reverse) { - m_track = trackName; + m_track = track_name; m_highscore_type = highscore_type; m_number_of_karts = num_karts; m_difficulty = difficulty; @@ -135,10 +135,10 @@ void Highscores::writeEntry(UTFWriter &writer) } // writeEntry // ----------------------------------------------------------------------------- -int Highscores::matches(HighscoreType highscore_type, - int num_karts, RaceManager::Difficulty difficulty, - const std::string track, const int number_of_laps, - const bool reverse) +int Highscores::matches(const HighscoreType &highscore_type, + int num_karts, const RaceManager::Difficulty &difficulty, + const std::string &track, const int number_of_laps, + const bool reverse) { return (m_highscore_type == highscore_type && m_track == track && diff --git a/src/race/highscores.hpp b/src/race/highscores.hpp index a321f9d9e..02bb2412f 100644 --- a/src/race/highscores.hpp +++ b/src/race/highscores.hpp @@ -53,9 +53,9 @@ private: public: /** Creates a new entry */ - Highscores (const Highscores::HighscoreType highscore_type, - int num_karts, const RaceManager::Difficulty difficulty, - const std::string trackName, const int number_of_laps, + Highscores (const Highscores::HighscoreType &highscore_type, + int num_karts, const RaceManager::Difficulty &difficulty, + const std::string &trackName, const int number_of_laps, const bool reverse); /** Creates an entry from a file */ @@ -63,9 +63,9 @@ public: void readEntry (const XMLNode &node); void writeEntry(UTFWriter &writer); - int matches (HighscoreType highscore_type, int num_karts, - const RaceManager::Difficulty difficulty, - const std::string track, const int number_of_laps, + int matches (const HighscoreType &highscore_type, int num_karts, + const RaceManager::Difficulty &difficulty, + const std::string &track, const int number_of_laps, const bool reverse); int addData (const std::string& kart_name, const irr::core::stringw& name, const float time); diff --git a/src/race/race_manager.cpp b/src/race/race_manager.cpp index 2a476fef5..e41122432 100644 --- a/src/race/race_manager.cpp +++ b/src/race/race_manager.cpp @@ -798,7 +798,7 @@ void RaceManager::startSingleRace(const std::string &track_ident, bool from_overworld) { StateManager::get()->enterGameState(); - setTrack(track_ident.c_str()); + setTrack(track_ident); if (num_laps != -1) setNumLaps( num_laps ); diff --git a/src/replay/replay_base.cpp b/src/replay/replay_base.cpp index b1bd1ab70..b92fd034f 100644 --- a/src/replay/replay_base.cpp +++ b/src/replay/replay_base.cpp @@ -43,4 +43,4 @@ FILE* ReplayBase::openReplayFile(bool writeable) } return fd; -} // openReplayFilen +} // openReplayFile diff --git a/src/states_screens/dialogs/addons_loading.cpp b/src/states_screens/dialogs/addons_loading.cpp index a4959aafe..9b7269d5c 100644 --- a/src/states_screens/dialogs/addons_loading.cpp +++ b/src/states_screens/dialogs/addons_loading.cpp @@ -348,10 +348,9 @@ void AddonsLoading::doInstall() { delete m_download_request; m_download_request = NULL; - bool error=false; assert(!m_addon.isInstalled() || m_addon.needsUpdate()); - error = !addons_manager->install(m_addon); + bool error = !addons_manager->install(m_addon); if(error) { core::stringw msg = StringUtils::insertValues( @@ -386,9 +385,7 @@ void AddonsLoading::doUninstall() { delete m_download_request; m_download_request = NULL; - bool error=false; - - error = !addons_manager->uninstall(m_addon); + bool error = !addons_manager->uninstall(m_addon); if(error) { Log::warn("Addons", "Directory '%s' can not be removed.", diff --git a/src/states_screens/race_gui.cpp b/src/states_screens/race_gui.cpp index de3cb84d7..e3514511b 100644 --- a/src/states_screens/race_gui.cpp +++ b/src/states_screens/race_gui.cpp @@ -837,12 +837,11 @@ void RaceGUI::drawLap(const AbstractKart* kart, - m_lap_width - 10; pos.LowerRightCorner.X = viewport.LowerRightCorner.X; - gui::ScalableFont* font = GUIEngine::getHighresDigitFont(); static video::SColor color = video::SColor(255, 255, 255, 255); std::ostringstream out; out << lap + 1 << "/" << race_manager->getNumLaps(); - font = GUIEngine::getHighresDigitFont(); + gui::ScalableFont* font = GUIEngine::getHighresDigitFont(); font->setScale(scaling.Y < 1.0f ? 0.5f: 1.0f); font->draw(out.str().c_str(), pos, color); font->setScale(1.0f); diff --git a/src/states_screens/race_gui_overworld.cpp b/src/states_screens/race_gui_overworld.cpp index 78ccbd861..c0cc5a82d 100644 --- a/src/states_screens/race_gui_overworld.cpp +++ b/src/states_screens/race_gui_overworld.cpp @@ -219,11 +219,9 @@ void RaceGUIOverworld::drawTrophyPoints() core::rect pos(UserConfigParams::m_width - dist_from_right, 10, UserConfigParams::m_width , 50); - bool vcenter = false; - gui::ScalableFont* font = GUIEngine::getFont(); - vcenter = true; + bool vcenter = true; const int size = UserConfigParams::m_width/20; core::rect dest(size, pos.UpperLeftCorner.Y, diff --git a/src/tinygettext/dictionary_manager.cpp b/src/tinygettext/dictionary_manager.cpp index e0a054933..83defce0c 100644 --- a/src/tinygettext/dictionary_manager.cpp +++ b/src/tinygettext/dictionary_manager.cpp @@ -30,7 +30,7 @@ namespace tinygettext { -static bool has_suffix(const std::string& lhs, const std::string rhs) +static bool has_suffix(const std::string& lhs, const std::string &rhs) { if (lhs.length() < rhs.length()) return false; diff --git a/src/tinygettext/po_parser.cpp b/src/tinygettext/po_parser.cpp index bb8ddbb4e..f63157d0c 100644 --- a/src/tinygettext/po_parser.cpp +++ b/src/tinygettext/po_parser.cpp @@ -223,7 +223,7 @@ next: return out.str(); } -static bool has_prefix(const std::string& lhs, const std::string rhs) +static bool has_prefix(const std::string& lhs, const std::string &rhs) { if (lhs.length() < rhs.length()) return false; diff --git a/src/tracks/check_structure.cpp b/src/tracks/check_structure.cpp index 6a905e7b3..e33179d17 100644 --- a/src/tracks/check_structure.cpp +++ b/src/tracks/check_structure.cpp @@ -122,7 +122,7 @@ void CheckStructure::update(float dt) * \param int kart_index For which the status should be changed. * \param change_state How to change the state (active, deactivate, toggle). */ -void CheckStructure::changeStatus(const std::vector indices, +void CheckStructure::changeStatus(const std::vector &indices, int kart_index, ChangeState change_state) { diff --git a/src/tracks/check_structure.hpp b/src/tracks/check_structure.hpp index e9da8b307..07382e2b2 100644 --- a/src/tracks/check_structure.hpp +++ b/src/tracks/check_structure.hpp @@ -98,7 +98,7 @@ private: enum ChangeState {CS_DEACTIVATE, CS_ACTIVATE, CS_TOGGLE}; - void changeStatus(const std::vector indices, int kart_index, + void changeStatus(const std::vector &indices, int kart_index, ChangeState change_state); public: diff --git a/src/tracks/quad_graph.cpp b/src/tracks/quad_graph.cpp index 996b92a2f..8687c50df 100644 --- a/src/tracks/quad_graph.cpp +++ b/src/tracks/quad_graph.cpp @@ -48,7 +48,7 @@ QuadGraph *QuadGraph::m_quad_graph = NULL; * \param graph_file_name Name of the file describing the actual graph */ QuadGraph::QuadGraph(const std::string &quad_file_name, - const std::string graph_file_name, + const std::string &graph_file_name, const bool reverse) : m_reverse(reverse) { m_node = NULL; diff --git a/src/tracks/quad_graph.hpp b/src/tracks/quad_graph.hpp index d9d51abab..fd1331451 100644 --- a/src/tracks/quad_graph.hpp +++ b/src/tracks/quad_graph.hpp @@ -94,7 +94,7 @@ private: const video::SColor *lap_color=NULL); unsigned int getStartNode() const; QuadGraph (const std::string &quad_file_name, - const std::string graph_file_name, + const std::string &graph_file_name, const bool reverse); ~QuadGraph (); public: @@ -139,7 +139,7 @@ public: // ----------------------------------------------------------------------== /** Creates a QuadGraph instance. */ static void create(const std::string &quad_file_name, - const std::string graph_file_name, + const std::string &graph_file_name, const bool reverse) { assert(m_quad_graph==NULL); diff --git a/src/utils/profiler.cpp b/src/utils/profiler.cpp index e811cb4f6..259ef77c5 100644 --- a/src/utils/profiler.cpp +++ b/src/utils/profiler.cpp @@ -382,7 +382,7 @@ void Profiler::draw() video::SColor(255, 0, 255, 255) }; - if (hovered_markers.size() == 0) + if (hovered_markers.empty()) { float curr_val = 0; for (unsigned i = 0; i < Q_LAST; i++) diff --git a/src/utils/string_utils.cpp b/src/utils/string_utils.cpp index fbbaba2b3..eab3747ee 100644 --- a/src/utils/string_utils.cpp +++ b/src/utils/string_utils.cpp @@ -34,7 +34,7 @@ namespace StringUtils { - bool hasSuffix(const std::string& lhs, const std::string rhs) + bool hasSuffix(const std::string& lhs, const std::string &rhs) { if (lhs.length() < rhs.length()) return false; diff --git a/src/utils/string_utils.hpp b/src/utils/string_utils.hpp index 423fcd9dd..fdda86855 100644 --- a/src/utils/string_utils.hpp +++ b/src/utils/string_utils.hpp @@ -32,7 +32,7 @@ namespace StringUtils { int versionToInt(const std::string &s); - bool hasSuffix(const std::string& lhs, const std::string rhs); + bool hasSuffix(const std::string& lhs, const std::string &rhs); bool startsWith(const std::string& str, const std::string& prefix); /** Return the filename part of a path */ From b0dbacc386c6974d24bb9846063b57721dd72a0d Mon Sep 17 00:00:00 2001 From: Timothy Hamlett Date: Sun, 30 Nov 2014 22:26:36 -0600 Subject: [PATCH 03/49] Fix #1754 --- src/states_screens/arenas_screen.cpp | 4 ++-- src/states_screens/easter_egg_screen.cpp | 4 ++-- src/states_screens/kart_selection.cpp | 6 ++---- src/states_screens/race_setup_screen.cpp | 2 +- src/states_screens/tracks_screen.cpp | 2 +- 5 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/states_screens/arenas_screen.cpp b/src/states_screens/arenas_screen.cpp index 10a3dc412..594317330 100644 --- a/src/states_screens/arenas_screen.cpp +++ b/src/states_screens/arenas_screen.cpp @@ -234,7 +234,7 @@ void ArenasScreen::buildTrackList() if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { - w->addItem( _("Locked : solve active challenges to gain access to more!"), + w->addItem( _("Solve Challenges to unlock"), "locked", curr->getScreenshotFile(), LOCKED_BADGE ); } else @@ -264,7 +264,7 @@ void ArenasScreen::buildTrackList() if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { - w->addItem( _("Locked : solve active challenges to gain access to more!"), + w->addItem( _("Solve challenges to unlock"), "locked", curr->getScreenshotFile(), LOCKED_BADGE ); } else diff --git a/src/states_screens/easter_egg_screen.cpp b/src/states_screens/easter_egg_screen.cpp index 2a593d2cf..270223217 100644 --- a/src/states_screens/easter_egg_screen.cpp +++ b/src/states_screens/easter_egg_screen.cpp @@ -222,7 +222,7 @@ void EasterEggScreen::buildTrackList() if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { - tracks_widget->addItem( _("Locked : solve active challenges to gain access to more!"), + tracks_widget->addItem( _("Solve challenges to unlock"), "locked", curr->getScreenshotFile(), LOCKED_BADGE, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); } @@ -253,7 +253,7 @@ void EasterEggScreen::buildTrackList() if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { - tracks_widget->addItem( _("Locked : solve active challenges to gain access to more!"), + tracks_widget->addItem( _("Solve challenges to unlock"), "locked", curr->getScreenshotFile(), LOCKED_BADGE, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); } diff --git a/src/states_screens/kart_selection.cpp b/src/states_screens/kart_selection.cpp index 3dda75eff..5303e7f25 100644 --- a/src/states_screens/kart_selection.cpp +++ b/src/states_screens/kart_selection.cpp @@ -854,8 +854,7 @@ void KartSelectionScreen::updateKartWidgetModel(uint8_t widget_id, else { m_kart_widgets[widget_id].m_kart_name - ->setText(_("Locked : solve active challenges to gain " - "access to more!"), false ); + ->setText(_("Solve challenges to unlock"), false ); } } else @@ -1446,8 +1445,7 @@ void KartSelectionScreen::setKartsFromCurrentGroup() const KartProperties* prop = karts.get(i); if (PlayerManager::getCurrentPlayer()->isLocked(prop->getIdent())) { - w->addItem(_("Locked : solve active challenges to gain access " - "to more!"), + w->addItem(_("Solve challenges to unlock"), ID_LOCKED + prop->getIdent(), prop->getAbsoluteIconFile(), LOCKED_BADGE, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); diff --git a/src/states_screens/race_setup_screen.cpp b/src/states_screens/race_setup_screen.cpp index bef5316c2..18dd618a0 100644 --- a/src/states_screens/race_setup_screen.cpp +++ b/src/states_screens/race_setup_screen.cpp @@ -211,7 +211,7 @@ void RaceSetupScreen::init() if (PlayerManager::getCurrentPlayer()->isLocked(IDENT_FTL)) { - w2->addItem( _("Locked : solve active challenges to gain access to more!"), + w2->addItem( _("Solve challenges to unlock"), "locked", RaceManager::getIconOf(RaceManager::MINOR_MODE_FOLLOW_LEADER), true); } else diff --git a/src/states_screens/tracks_screen.cpp b/src/states_screens/tracks_screen.cpp index 793834c54..d98eb58b9 100644 --- a/src/states_screens/tracks_screen.cpp +++ b/src/states_screens/tracks_screen.cpp @@ -279,7 +279,7 @@ void TracksScreen::buildTrackList() if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { tracks_widget->addItem( - _("Locked : solve active challenges to gain access to more!"), + _("Solve challenges to unlock"), "locked", curr->getScreenshotFile(), LOCKED_BADGE, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); } From 0a3d71aead34a4f82e0862f2c44bb830cbf6bf30 Mon Sep 17 00:00:00 2001 From: Timothy Hamlett Date: Sun, 30 Nov 2014 22:27:39 -0600 Subject: [PATCH 04/49] Add Windows 8.1 to the hardware reports --- src/config/hardware_stats.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config/hardware_stats.cpp b/src/config/hardware_stats.cpp index ace905536..b254cbf55 100644 --- a/src/config/hardware_stats.cpp +++ b/src/config/hardware_stats.cpp @@ -235,6 +235,7 @@ void determineOSVersion() case 0x0600: m_os_version="Windows Vista"; break; case 0x0601: m_os_version="Windows 7"; break; case 0x0602: m_os_version="Windows 8"; break; + case 0x0603: m_os_version="Windows 8_1"; break; default: { m_os_version = StringUtils::insertValues("Windows %d", windows_version); From 211e698a291dda08ac5ff4556022ed0e3cf1dbfa Mon Sep 17 00:00:00 2001 From: Timothy Hamlett Date: Sun, 30 Nov 2014 22:29:28 -0600 Subject: [PATCH 05/49] Add some strings for Windows 8 and 8.1 And server '12 and server '12 R2 --- .../source/Irrlicht/CIrrDeviceWin32.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp index e0a602583..b4cbda6f6 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp @@ -1574,13 +1574,30 @@ void CIrrDeviceWin32::getWindowsVersion(core::stringc& out) else out.append("Microsoft Windows Server 2008 "); } - else if (osvi.dwMinorVersion == 1) + else + if (osvi.dwMinorVersion == 1) { if (osvi.wProductType == VER_NT_WORKSTATION) out.append("Microsoft Windows 7 "); else out.append("Microsoft Windows Server 2008 R2 "); } + else + if (osvi.dwMinorVersion == 2) + { + if (osvi.wProductType == VER_NT_WORKSTATION) + out.append("Microsoft Windows 8 "); + else + out.append("Microsoft Windows Server 2012 "); + } + else + if (osvi.dwMinorVersion == 3) + { + if (osvi.wProductType == VER_NT_WORKSTATION) + out.append("Microsoft Windows 8.1 "); + else + out.append("Microsoft Windows Server 2012 R2 "); + } } if (bOsVersionInfoEx) From d95f7835fdc36b2cb62fa532723dc83afd77fe76 Mon Sep 17 00:00:00 2001 From: Timothy Hamlett Date: Sun, 30 Nov 2014 22:29:52 -0600 Subject: [PATCH 06/49] Fix some compiler warnings in Irrlicht --- lib/irrlicht/source/Irrlicht/zlib/gzlib.c | 2 +- lib/irrlicht/source/Irrlicht/zlib/gzread.c | 4 ++-- lib/irrlicht/source/Irrlicht/zlib/gzwrite.c | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/irrlicht/source/Irrlicht/zlib/gzlib.c b/lib/irrlicht/source/Irrlicht/zlib/gzlib.c index ca55c6ea9..fbd5faea8 100644 --- a/lib/irrlicht/source/Irrlicht/zlib/gzlib.c +++ b/lib/irrlicht/source/Irrlicht/zlib/gzlib.c @@ -236,7 +236,7 @@ local gzFile gz_open(path, fd, mode) #ifdef _WIN32 fd == -2 ? _wopen(path, oflag, 0666) : #endif - open(path, oflag, 0666)); + _open(path, oflag, 0666)); if (state->fd == -1) { free(state->path); free(state); diff --git a/lib/irrlicht/source/Irrlicht/zlib/gzread.c b/lib/irrlicht/source/Irrlicht/zlib/gzread.c index 3493d34d4..c0a179437 100644 --- a/lib/irrlicht/source/Irrlicht/zlib/gzread.c +++ b/lib/irrlicht/source/Irrlicht/zlib/gzread.c @@ -27,7 +27,7 @@ local int gz_load(state, buf, len, have) *have = 0; do { - ret = read(state->fd, buf + *have, len - *have); + ret = _read(state->fd, buf + *have, len - *have); if (ret <= 0) break; *have += ret; @@ -583,7 +583,7 @@ int ZEXPORT gzclose_r(file) err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK; gz_error(state, Z_OK, NULL); free(state->path); - ret = close(state->fd); + ret = _close(state->fd); free(state); return ret ? Z_ERRNO : err; } diff --git a/lib/irrlicht/source/Irrlicht/zlib/gzwrite.c b/lib/irrlicht/source/Irrlicht/zlib/gzwrite.c index 27cb3428e..50c9311c4 100644 --- a/lib/irrlicht/source/Irrlicht/zlib/gzwrite.c +++ b/lib/irrlicht/source/Irrlicht/zlib/gzwrite.c @@ -81,7 +81,7 @@ local int gz_comp(state, flush) /* write directly if requested */ if (state->direct) { - got = write(state->fd, strm->next_in, strm->avail_in); + got = _write(state->fd, strm->next_in, strm->avail_in); if (got < 0 || (unsigned)got != strm->avail_in) { gz_error(state, Z_ERRNO, zstrerror()); return -1; @@ -98,7 +98,7 @@ local int gz_comp(state, flush) if (strm->avail_out == 0 || (flush != Z_NO_FLUSH && (flush != Z_FINISH || ret == Z_STREAM_END))) { have = (unsigned)(strm->next_out - state->x.next); - if (have && ((got = write(state->fd, state->x.next, have)) < 0 || + if (have && ((got = _write(state->fd, state->x.next, have)) < 0 || (unsigned)got != have)) { gz_error(state, Z_ERRNO, zstrerror()); return -1; @@ -558,7 +558,7 @@ int ZEXPORT gzclose_w(file) } gz_error(state, Z_OK, NULL); free(state->path); - if (close(state->fd) == -1) + if (_close(state->fd) == -1) ret = Z_ERRNO; free(state); return ret; From 24e850db797f981cad21b75866262cd152c98aee Mon Sep 17 00:00:00 2001 From: Deve Date: Mon, 1 Dec 2014 08:10:12 +0100 Subject: [PATCH 07/49] Delete xx I simply try to delete it directly on github ;) --- src/guiengine/xx | 199 ----------------------------------------------- 1 file changed, 199 deletions(-) delete mode 100644 src/guiengine/xx diff --git a/src/guiengine/xx b/src/guiengine/xx deleted file mode 100644 index d3db4cb94..000000000 --- a/src/guiengine/xx +++ /dev/null @@ -1,199 +0,0 @@ -bced8cdb src/guiengine/scalable_font.hpp (hikerstk 2013-12-02 04:27:55 +0000 1) // Copyright (C) 2002-2013 Nikolaus Gebhardt -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 2) // This file is part of the "Irrlicht Engine". -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 3) // For conditions of distribution and use, see copyright notice in irrlicht.h -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 4) -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 5) #ifndef __C_GUI_FONT_H_INCLUDED__ -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 6) #define __C_GUI_FONT_H_INCLUDED__ -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 7) -e1a75067 src/guiengine/scalable_font.hpp (hiker 2014-06-15 22:01:52 +1000 8) #include "utils/leak_check.hpp" -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 9) -e1a75067 src/guiengine/scalable_font.hpp (hiker 2014-06-15 22:01:52 +1000 10) #include "IrrCompileConfig.h" -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 11) #include "IGUIFontBitmap.h" -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 12) #include "irrString.h" -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 13) #include "irrMap.h" -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 14) #include "IXMLReader.h" -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 15) #include "IReadFile.h" -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 16) #include "irrArray.h" -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 17) -e1a75067 src/guiengine/scalable_font.hpp (hiker 2014-06-15 22:01:52 +1000 18) -e1a75067 src/guiengine/scalable_font.hpp (hiker 2014-06-15 22:01:52 +1000 19) #include -e1a75067 src/guiengine/scalable_font.hpp (hiker 2014-06-15 22:01:52 +1000 20) #include -978bb546 src/guiengine/scalable_font.hpp (auria 2011-09-22 18:24:28 +0000 21) -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 22) namespace irr -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 23) { -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 24) -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 25) namespace video -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 26) { -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 27) class IVideoDriver; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 28) class IImage; -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 29) class ITexture; -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 30) } -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 31) -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 32) namespace gui -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 33) { -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 34) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 35) class IGUIEnvironment; -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 36) -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 37) class FontCharCollector -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 38) { -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 39) public: -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 40) -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 41) virtual void collectChar(video::ITexture* texture, const core::rect& destRect, -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 42) const core::rect& sourceRect, const video::SColor* const colors) = 0; -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 43) }; -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 44) -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 45) class ScalableFont : public IGUIFontBitmap -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 46) { -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 47) float m_scale; -f3f98293 src/guiengine/CGUIFont.h (auria 2009-12-05 23:47:33 +0000 48) bool m_shadow; -8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 49) /** True if digits should be mono spaced. */ -8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 50) -8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 51) bool m_mono_space_digits; -f3f98293 src/guiengine/CGUIFont.h (auria 2009-12-05 23:47:33 +0000 52) irr::video::SColor m_shadow_color; -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 53) -11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 54) struct TextureInfo -11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 55) { -11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 56) irr::core::stringc m_file_name; -11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 57) bool m_has_alpha; -b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 58) float m_scale; -47b5a604 src/guiengine/scalable_font.hpp (auria 2013-01-06 00:36:20 +0000 59) bool m_exclude_from_max_height_calculation; -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 60) -b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 61) TextureInfo() -b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 62) { -b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 63) m_has_alpha = false; -b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 64) m_scale = 1.0f; -b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 65) } -11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 66) }; -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 67) -11d999f8 src/guiengine/CGUIFont.h (auria 2010-01-23 19:55:19 +0000 68) std::map m_texture_files; -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 69) -e79025b0 src/guiengine/scalable_font.hpp (auria 2010-08-29 19:28:57 +0000 70) void doReadXmlFile(io::IXMLReader* xml); -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 71) -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 72) bool m_is_hollow_copy; -a2825c4b src/guiengine/CGUIFont.h (auria 2010-05-30 19:11:39 +0000 73) bool m_rtl; -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 74) -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 75) public: -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 76) -978bb546 src/guiengine/scalable_font.hpp (auria 2011-09-22 18:24:28 +0000 77) LEAK_CHECK() -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 78) -3920dfe1 src/guiengine/CGUIFont.h (auria 2010-01-24 16:48:13 +0000 79) bool m_black_border; -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 80) -f2e2a374 src/guiengine/CGUIFont.h (auria 2010-01-24 16:26:31 +0000 81) ScalableFont* m_fallback_font; -f2e2a374 src/guiengine/CGUIFont.h (auria 2010-01-24 16:26:31 +0000 82) float m_fallback_font_scale; -f2e2a374 src/guiengine/CGUIFont.h (auria 2010-01-24 16:26:31 +0000 83) int m_fallback_kerning_width; -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 84) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 85) //! constructor -02b0cfd0 src/guiengine/scalable_font.hpp (hiker 2014-06-09 22:38:19 +1000 86) ScalableFont(IGUIEnvironment* env, const std::string &filename); -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 87) -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 88) /** Creates a hollow copy of this font; i.e. the underlying font data is the *same* for -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 89) * both fonts. The advantage of doing this is that you can change "view" parameters -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 90) * in the copy, for example kerning or scale. -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 91) * The object returned by this method is 'new'ed and must be deleted. Deleting it will -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 92) * not delete the data of the original. Do *not* delete the original as long as this -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 93) * hollow copy is still used, since they share their data (and the original is the one -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 94) * that "owns" it). -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 95) */ -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 96) ScalableFont* getHollowCopy() const -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 97) { -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 98) ScalableFont* out = new ScalableFont(*this); -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 99) out->m_is_hollow_copy = true; -7c7fb68e src/guiengine/scalable_font.hpp (hiker 2014-11-26 23:40:50 +1100 100) //FIXME: test only. Reset the reference counter of the copy to 1 -7c7fb68e src/guiengine/scalable_font.hpp (hiker 2014-11-26 23:40:50 +1100 101) while (out->getReferenceCount() > 1) -7c7fb68e src/guiengine/scalable_font.hpp (hiker 2014-11-26 23:40:50 +1100 102) out->drop(); -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 103) return out; -4340cccd src/guiengine/CGUIFont.h (auria 2010-03-07 02:03:39 +0000 104) } -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 105) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 106) //! destructor -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 107) virtual ~ScalableFont(); -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 108) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 109) //! loads a font from an XML file -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 110) bool load(io::IXMLReader* xml); -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 111) -973a7cd4 src/guiengine/scalable_font.hpp (auria 2012-01-30 00:27:53 +0000 112) void lazyLoadTexture(int texID); -973a7cd4 src/guiengine/scalable_font.hpp (auria 2012-01-30 00:27:53 +0000 113) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 114) //! draws an text and clips it to the specified rectangle if wanted -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 115) virtual void draw(const core::stringw& text, const core::rect& position, -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 116) video::SColor color, bool hcenter = false, -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 117) bool vcenter = false, const core::rect* clip = 0); -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 118) -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 119) void draw(const core::stringw& text, const core::rect& position, -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 120) video::SColor color, bool hcenter, -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 121) bool vcenter, const core::rect* clip, bool ignoreRTL); -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 122) -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 123) void doDraw(const core::stringw& text, const core::rect& position, -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 124) video::SColor color, bool hcenter, -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 125) bool vcenter, const core::rect* clip, -f803b01d src/guiengine/scalable_font.hpp (Marianne Gagnon 2014-07-28 19:17:59 -0400 126) FontCharCollector* charCollector = NULL); -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 127) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 128) //! returns the dimension of a text -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 129) virtual core::dimension2d getDimension(const wchar_t* text) const; -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 130) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 131) //! Calculates the index of the character in the text which is on a specific position. -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 132) virtual s32 getCharacterFromPos(const wchar_t* text, s32 pixel_x) const; -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 133) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 134) //! Returns the type of this font -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 135) virtual EGUI_FONT_TYPE getType() const { return EGFT_BITMAP; } -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 136) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 137) //! set an Pixel Offset on Drawing ( scale position on width ) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 138) virtual void setKerningWidth (s32 kerning); -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 139) virtual void setKerningHeight (s32 kerning); -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 140) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 141) //! set an Pixel Offset on Drawing ( scale position on width ) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 142) virtual s32 getKerningWidth(const wchar_t* thisLetter=0, const wchar_t* previousLetter=0) const; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 143) virtual s32 getKerningHeight() const; -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 144) -8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 145) /** Sets if digits are to be mono-spaced. */ -8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 146) void setMonospaceDigits(bool mono) {m_mono_space_digits = mono; } -8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 147) bool getMonospaceDigits() const { return m_mono_space_digits; } -d00f587d src/guiengine/scalable_font.hpp (hikerstk 2011-03-29 22:59:32 +0000 148) void setShadow(const irr::video::SColor &col); -d00f587d src/guiengine/scalable_font.hpp (hikerstk 2011-03-29 22:59:32 +0000 149) void disableShadow() {m_shadow = false;} -f3f98293 src/guiengine/CGUIFont.h (auria 2009-12-05 23:47:33 +0000 150) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 151) //! gets the sprite bank -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 152) virtual IGUISpriteBank* getSpriteBank() const; -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 153) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 154) //! returns the sprite number from a given character -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 155) virtual u32 getSpriteNoFromChar(const wchar_t *c) const; -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 156) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 157) virtual void setInvisibleCharacters( const wchar_t *s ); -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 158) -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 159) void setScale(const float scale); -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 160) float getScale() const { return m_scale; } -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 161) -8b9a9677 src/guiengine/scalable_font.hpp (auria 2011-02-06 02:11:57 +0000 162) void updateRTL(); -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 163) -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 164) private: -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 165) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 166) struct SFontArea -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 167) { -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 168) SFontArea() : underhang(0), overhang(0), width(0), spriteno(0) {} -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 169) s32 underhang; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 170) s32 overhang; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 171) s32 width; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 172) u32 spriteno; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 173) }; -57c3cbae src/guiengine/scalable_font.hpp (curaga 2013-05-30 19:47:39 +0000 174) -b256e43a src/guiengine/CGUIFont.h (auria 2010-01-29 00:19:17 +0000 175) int getCharWidth(const SFontArea& area, const bool fallback) const; -8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 176) s32 getAreaIDFromCharacter(const wchar_t c, bool* fallback_font) const; -8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 177) const SFontArea &getAreaFromCharacter(const wchar_t c, bool* fallback_font) const; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 178) void setMaxHeight(); -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 179) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 180) core::array Areas; -8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 181) /** The maximum values of all digits, used in monospace_digits. */ -8e48d227 src/guiengine/CGUIFont.h (hikerstk 2010-07-20 22:39:54 +0000 182) mutable SFontArea m_max_digit_area; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 183) std::map CharacterMap; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 184) video::IVideoDriver* Driver; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 185) IGUISpriteBank* SpriteBank; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 186) IGUIEnvironment* Environment; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 187) u32 WrongCharacter; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 188) s32 MaxHeight; -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 189) s32 GlobalKerningWidth, GlobalKerningHeight; -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 190) -03c65002 src/guiengine/CGUIFont.h (hikerstk 2010-07-19 03:36:59 +0000 191) core::stringw Invisible; -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 192) }; -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 193) -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 194) } // end namespace gui -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 195) } // end namespace irr -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 196) -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 197) -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 198) #endif // __C_GUI_FONT_H_INCLUDED__ -d9f6abd5 src/guiengine/CGUIFont.h (auria 2009-12-05 23:15:15 +0000 199) From 263d072c98b4464c37504d90ad5c0ea1d0e8934e Mon Sep 17 00:00:00 2001 From: Timothy Hamlett Date: Mon, 1 Dec 2014 12:49:15 -0600 Subject: [PATCH 08/49] Fix some coding conventions Thanks to hiker for the info --- lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp | 3 +-- src/config/hardware_stats.cpp | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp index b4cbda6f6..1cb4147c8 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp @@ -1582,8 +1582,7 @@ void CIrrDeviceWin32::getWindowsVersion(core::stringc& out) else out.append("Microsoft Windows Server 2008 R2 "); } - else - if (osvi.dwMinorVersion == 2) + else if (osvi.dwMinorVersion == 2) { if (osvi.wProductType == VER_NT_WORKSTATION) out.append("Microsoft Windows 8 "); diff --git a/src/config/hardware_stats.cpp b/src/config/hardware_stats.cpp index b254cbf55..dd910090c 100644 --- a/src/config/hardware_stats.cpp +++ b/src/config/hardware_stats.cpp @@ -235,7 +235,7 @@ void determineOSVersion() case 0x0600: m_os_version="Windows Vista"; break; case 0x0601: m_os_version="Windows 7"; break; case 0x0602: m_os_version="Windows 8"; break; - case 0x0603: m_os_version="Windows 8_1"; break; + case 0x0603: m_os_version="Windows 8_1"; break; default: { m_os_version = StringUtils::insertValues("Windows %d", windows_version); From 4db0f8ebf6702c408408e88ef7348080b51a987c Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Mon, 1 Dec 2014 21:00:28 +0100 Subject: [PATCH 09/49] Do not reorient shadow cam It didnt really improve shadows resolution --- src/graphics/render.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index debd9f35a..e63426302 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -836,13 +836,6 @@ void IrrDriver::computeCameraMatrix(scene::ICameraSceneNode * const camnode, siz memcpy(&tmp[64], irr_driver->getProjViewMatrix().pointer(), 16 * sizeof(float)); m_suncam->render(); - const core::vector3df &camdir = (camnode->getTarget() - camnode->getAbsolutePosition()).normalize(); - const core::vector3df &sundir = (m_suncam->getTarget() - m_suncam->getAbsolutePosition()).normalize(); - const core::vector3df &up = camdir.crossProduct(sundir).normalize(); - if (up.getLength()) - m_suncam->setUpVector(up); - m_suncam->render(); - for (unsigned i = 0; i < 4; i++) { if (m_shadow_camnodes[i]) From 7e2add8c538b7d04657fd10c53b6259502a3b0f3 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Mon, 1 Dec 2014 21:07:29 +0100 Subject: [PATCH 10/49] Clean lensflare related file A new method is used now. --- src/graphics/irr_driver.cpp | 13 ------------- src/graphics/irr_driver.hpp | 3 --- src/graphics/post_processing.hpp | 4 ---- src/graphics/render.cpp | 23 ----------------------- 4 files changed, 43 deletions(-) diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index ffeb1f93c..df502a7e3 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -609,9 +609,6 @@ void IrrDriver::initDevice() m_mrt.clear(); m_mrt.reallocate(2); - glGenQueries(1, &m_lensflare_query); - m_query_issued = false; - scene::IMesh * sphere = m_scene_manager->getGeometryCreator()->createSphereMesh(1, 16, 16); for (unsigned i = 0; i < sphere->getMeshBufferCount(); ++i) { @@ -634,13 +631,6 @@ void IrrDriver::initDevice() sphere->drop(); - m_lensflare = new scene::CLensFlareSceneNode(NULL, m_scene_manager, -1); - video::ITexture * const tex = getTexture(FileManager::TEXTURE, - "lensflare.png" ); - if (!tex) Log::fatal("irr_driver", "Cannot find lens flare texture"); - m_lensflare->setMaterialTexture(0, tex); - m_lensflare->setAutomaticCulling(scene::EAC_OFF); - m_suncam = m_scene_manager->addCameraSceneNode(0, vector3df(0), vector3df(0), -1, false); m_suncam->grab(); m_suncam->setParent(NULL); @@ -2547,9 +2537,6 @@ scene::ISceneNode *IrrDriver::addLight(const core::vector3df &pos, float energy, //m_sun_interposer->setPosition(pos); //m_sun_interposer->updateAbsolutePosition(); - m_lensflare->setPosition(pos); - m_lensflare->updateAbsolutePosition(); - m_suncam->setPosition(pos); m_suncam->updateAbsolutePosition(); diff --git a/src/graphics/irr_driver.hpp b/src/graphics/irr_driver.hpp index 8af86672b..843b43cd0 100644 --- a/src/graphics/irr_driver.hpp +++ b/src/graphics/irr_driver.hpp @@ -386,10 +386,7 @@ private: unsigned object_count[PASS_COUNT]; unsigned poly_count[PASS_COUNT]; u32 m_renderpass; - u32 m_lensflare_query; - bool m_query_issued; class STKMeshSceneNode *m_sun_interposer; - scene::CLensFlareSceneNode *m_lensflare; scene::ICameraSceneNode *m_suncam; core::vector3df m_sundirection; video::SColorf m_suncolor; diff --git a/src/graphics/post_processing.hpp b/src/graphics/post_processing.hpp index 81f16b428..1fea5e9c6 100644 --- a/src/graphics/post_processing.hpp +++ b/src/graphics/post_processing.hpp @@ -62,8 +62,6 @@ private: video::ITexture *m_areamap; - u32 m_sunpixels; - void setMotionBlurCenterY(const u32 num, const float y); public: @@ -107,8 +105,6 @@ public: /** Use motion blur for a short time */ void giveBoost(unsigned int cam_index); - - void setSunPixels(const u32 in) { m_sunpixels = in; } }; #endif // HEADER_POST_PROCESSING_HPP diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index e63426302..2ce4f441d 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -576,29 +576,6 @@ void IrrDriver::computeSunVisibility() { hasgodrays = World::getWorld()->getTrack()->hasGodRays(); } - - if (UserConfigParams::m_light_shaft && hasgodrays) - { - GLuint res = 0; - if (m_query_issued) - glGetQueryObjectuiv(m_lensflare_query, GL_QUERY_RESULT, &res); - m_post_processing->setSunPixels(res); - - // Prepare the query for the next frame. - glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); - glBeginQuery(GL_SAMPLES_PASSED_ARB, m_lensflare_query); - m_scene_manager->setCurrentRendertime(scene::ESNRP_SOLID); - m_scene_manager->drawAll(scene::ESNRP_CAMERA); - irr_driver->setPhase(GLOW_PASS); - m_sun_interposer->render(); - glEndQuery(GL_SAMPLES_PASSED_ARB); - m_query_issued = true; - - m_lensflare->setStrength(res / 4000.0f); - - // Make sure the color mask is reset - glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); - } } void IrrDriver::renderParticles() From 3627719440394dbccdba88f8464736c1e3a6ed51 Mon Sep 17 00:00:00 2001 From: samuncle Date: Mon, 1 Dec 2014 23:54:34 +0100 Subject: [PATCH 11/49] min max where inverted --- data/gfx/gfx_mudPot_a.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/gfx/gfx_mudPot_a.xml b/data/gfx/gfx_mudPot_a.xml index cc6ead88f..f3faa886f 100644 --- a/data/gfx/gfx_mudPot_a.xml +++ b/data/gfx/gfx_mudPot_a.xml @@ -20,8 +20,8 @@ max="1000" /> - From 35f55c19a1997ff4488ee3ad3aa46c847fcbd2db Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Mon, 1 Dec 2014 18:42:46 -0500 Subject: [PATCH 12/49] Tweak jungle challenge to use Cocoa Temple and a slightly adjusted time --- data/challenges/jungle.challenge | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/data/challenges/jungle.challenge b/data/challenges/jungle.challenge index 0be9826b6..3c7fbb76e 100644 --- a/data/challenges/jungle.challenge +++ b/data/challenges/jungle.challenge @@ -1,19 +1,19 @@ - + - + - + - + From 42d6f0480c8dd049d584199c5bf9fd46bb666ed1 Mon Sep 17 00:00:00 2001 From: Timothy Hamlett Date: Mon, 1 Dec 2014 21:48:12 -0600 Subject: [PATCH 13/49] Actually fix #1754 Thanks to Hiker for the help! --- src/guiengine/widgets/player_kart_widget.cpp | 2 +- src/states_screens/arenas_screen.cpp | 4 ++-- src/states_screens/easter_egg_screen.cpp | 4 ++-- src/states_screens/kart_selection.cpp | 4 ++-- src/states_screens/race_setup_screen.cpp | 2 +- src/states_screens/tracks_screen.cpp | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/guiengine/widgets/player_kart_widget.cpp b/src/guiengine/widgets/player_kart_widget.cpp index 77f138661..f603b859e 100644 --- a/src/guiengine/widgets/player_kart_widget.cpp +++ b/src/guiengine/widgets/player_kart_widget.cpp @@ -212,7 +212,7 @@ PlayerKartWidget::PlayerKartWidget(KartSelectionScreen* parent, m_model_view->setRotateContinuously( 35.0f ); // ---- Kart name label - m_kart_name = new LabelWidget(true, true); + m_kart_name = new LabelWidget(false, true); m_kart_name->setText(props->getName(), false); m_kart_name->m_properties[PROP_TEXT_ALIGN] = "center"; m_kart_name->m_properties[PROP_ID] = diff --git a/src/states_screens/arenas_screen.cpp b/src/states_screens/arenas_screen.cpp index 594317330..10a3dc412 100644 --- a/src/states_screens/arenas_screen.cpp +++ b/src/states_screens/arenas_screen.cpp @@ -234,7 +234,7 @@ void ArenasScreen::buildTrackList() if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { - w->addItem( _("Solve Challenges to unlock"), + w->addItem( _("Locked : solve active challenges to gain access to more!"), "locked", curr->getScreenshotFile(), LOCKED_BADGE ); } else @@ -264,7 +264,7 @@ void ArenasScreen::buildTrackList() if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { - w->addItem( _("Solve challenges to unlock"), + w->addItem( _("Locked : solve active challenges to gain access to more!"), "locked", curr->getScreenshotFile(), LOCKED_BADGE ); } else diff --git a/src/states_screens/easter_egg_screen.cpp b/src/states_screens/easter_egg_screen.cpp index 270223217..2a593d2cf 100644 --- a/src/states_screens/easter_egg_screen.cpp +++ b/src/states_screens/easter_egg_screen.cpp @@ -222,7 +222,7 @@ void EasterEggScreen::buildTrackList() if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { - tracks_widget->addItem( _("Solve challenges to unlock"), + tracks_widget->addItem( _("Locked : solve active challenges to gain access to more!"), "locked", curr->getScreenshotFile(), LOCKED_BADGE, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); } @@ -253,7 +253,7 @@ void EasterEggScreen::buildTrackList() if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { - tracks_widget->addItem( _("Solve challenges to unlock"), + tracks_widget->addItem( _("Locked : solve active challenges to gain access to more!"), "locked", curr->getScreenshotFile(), LOCKED_BADGE, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); } diff --git a/src/states_screens/kart_selection.cpp b/src/states_screens/kart_selection.cpp index 5303e7f25..fe49213aa 100644 --- a/src/states_screens/kart_selection.cpp +++ b/src/states_screens/kart_selection.cpp @@ -854,7 +854,7 @@ void KartSelectionScreen::updateKartWidgetModel(uint8_t widget_id, else { m_kart_widgets[widget_id].m_kart_name - ->setText(_("Solve challenges to unlock"), false ); + ->setText(_("Locked : solve active challenges to gain access to more!"), false ); } } else @@ -1445,7 +1445,7 @@ void KartSelectionScreen::setKartsFromCurrentGroup() const KartProperties* prop = karts.get(i); if (PlayerManager::getCurrentPlayer()->isLocked(prop->getIdent())) { - w->addItem(_("Solve challenges to unlock"), + w->addItem(_("Locked : solve active challenges to gain access to more!"), ID_LOCKED + prop->getIdent(), prop->getAbsoluteIconFile(), LOCKED_BADGE, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); diff --git a/src/states_screens/race_setup_screen.cpp b/src/states_screens/race_setup_screen.cpp index 18dd618a0..bef5316c2 100644 --- a/src/states_screens/race_setup_screen.cpp +++ b/src/states_screens/race_setup_screen.cpp @@ -211,7 +211,7 @@ void RaceSetupScreen::init() if (PlayerManager::getCurrentPlayer()->isLocked(IDENT_FTL)) { - w2->addItem( _("Solve challenges to unlock"), + w2->addItem( _("Locked : solve active challenges to gain access to more!"), "locked", RaceManager::getIconOf(RaceManager::MINOR_MODE_FOLLOW_LEADER), true); } else diff --git a/src/states_screens/tracks_screen.cpp b/src/states_screens/tracks_screen.cpp index d98eb58b9..793834c54 100644 --- a/src/states_screens/tracks_screen.cpp +++ b/src/states_screens/tracks_screen.cpp @@ -279,7 +279,7 @@ void TracksScreen::buildTrackList() if (PlayerManager::getCurrentPlayer()->isLocked(curr->getIdent())) { tracks_widget->addItem( - _("Solve challenges to unlock"), + _("Locked : solve active challenges to gain access to more!"), "locked", curr->getScreenshotFile(), LOCKED_BADGE, IconButtonWidget::ICON_PATH_TYPE_ABSOLUTE); } From 3ba2470619ef1f640003981b081ff4ebfc783c9a Mon Sep 17 00:00:00 2001 From: hiker Date: Tue, 2 Dec 2014 17:11:29 +1100 Subject: [PATCH 14/49] Added support to detect version numbers on nvidia. --- src/graphics/graphics_restrictions.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/graphics/graphics_restrictions.cpp b/src/graphics/graphics_restrictions.cpp index 55d652d78..7dfc222fc 100644 --- a/src/graphics/graphics_restrictions.cpp +++ b/src/graphics/graphics_restrictions.cpp @@ -84,7 +84,9 @@ public: Version(const std::string &driver_version, const std::string &card_name) { m_version.clear(); + // Intel card: driver version = "3.1.0 - Build 9.17.10.3517" + // --------------------------------------------------------- if (StringUtils::startsWith(card_name, "Intel")) { std::vector s = StringUtils::split(driver_version, '-'); @@ -95,6 +97,19 @@ public: } } + // Nvidia: driver_version = "4.3.0 NVIDIA 340.58" + // ---------------------------------------------- + if (driver_version.find("NVIDIA") != std::string::npos) + { + std::vector s = StringUtils::split(driver_version, ' '); + if (s.size() == 3) + { + convertVersionString(s[2]); + return; + } + + } + Log::warn("Graphics", "Can not find version for '%s' '%s' - ignored.", driver_version.c_str(), card_name.c_str()); From d725d97314405309c6791d521dfbbca2e907922b Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 3 Dec 2014 08:19:13 +1100 Subject: [PATCH 15/49] Fixed coding style. --- lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp b/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp index 1cb4147c8..432e1e640 100644 --- a/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp +++ b/lib/irrlicht/source/Irrlicht/CIrrDeviceWin32.cpp @@ -1574,8 +1574,7 @@ void CIrrDeviceWin32::getWindowsVersion(core::stringc& out) else out.append("Microsoft Windows Server 2008 "); } - else - if (osvi.dwMinorVersion == 1) + else if (osvi.dwMinorVersion == 1) { if (osvi.wProductType == VER_NT_WORKSTATION) out.append("Microsoft Windows 7 "); @@ -1589,8 +1588,7 @@ void CIrrDeviceWin32::getWindowsVersion(core::stringc& out) else out.append("Microsoft Windows Server 2012 "); } - else - if (osvi.dwMinorVersion == 3) + else if (osvi.dwMinorVersion == 3) { if (osvi.wProductType == VER_NT_WORKSTATION) out.append("Microsoft Windows 8.1 "); From d38b7ca080488157ec0629d928bb9997f86f5470 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Tue, 2 Dec 2014 18:38:54 -0500 Subject: [PATCH 16/49] Fix a few strings --- src/states_screens/create_server_screen.cpp | 2 +- src/states_screens/dialogs/user_info_dialog.cpp | 2 +- src/tracks/track_object_presentation.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/states_screens/create_server_screen.cpp b/src/states_screens/create_server_screen.cpp index 032559902..408bc0ba8 100644 --- a/src/states_screens/create_server_screen.cpp +++ b/src/states_screens/create_server_screen.cpp @@ -57,7 +57,7 @@ void CreateServerScreen::loadedFromFile() m_name_widget = getWidget("name"); assert(m_name_widget != NULL); - m_name_widget->setText(PlayerManager::getCurrentOnlineUserName() + _("'s server")); + m_name_widget->setText(_("%s's server", PlayerManager::getCurrentOnlineUserName())); m_max_players_widget = getWidget("max_players"); assert(m_max_players_widget != NULL); m_max_players_widget->setValue(8); diff --git a/src/states_screens/dialogs/user_info_dialog.cpp b/src/states_screens/dialogs/user_info_dialog.cpp index 698e396ce..fd828eb66 100644 --- a/src/states_screens/dialogs/user_info_dialog.cpp +++ b/src/states_screens/dialogs/user_info_dialog.cpp @@ -155,7 +155,7 @@ void UserInfoDialog::sendFriendRequest() true, false); ProfileManager::get()->getProfileByID(id)->setRelationInfo(info); OnlineProfileFriends::getInstance()->refreshFriendsList(); - info_text = _("Friend request send!"); + info_text = _("Friend request sent!"); } else { diff --git a/src/tracks/track_object_presentation.cpp b/src/tracks/track_object_presentation.cpp index 094667fdb..e3401868f 100644 --- a/src/tracks/track_object_presentation.cpp +++ b/src/tracks/track_object_presentation.cpp @@ -899,7 +899,7 @@ void TrackObjectPresentationActionTrigger::onTriggerItemApproached(Item* who) DeviceConfig* config = device->getConfiguration(); irr::core::stringw fire = config->getBindingAsString(PA_FIRE); - new TutorialMessageDialog(_("Press to look behind, to fire the weapon with <%s> while pressing to to fire behind!", fire), + new TutorialMessageDialog(_("Press to look behind, and fire the weapon with <%s> while pressing to fire behind!", fire), true); } else if (m_action == "tutorial_nitro_collect") From 34f3755976a8711557979da41e462911a33376f4 Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 3 Dec 2014 10:40:19 +1100 Subject: [PATCH 17/49] Added comments for translators. --- src/input/gamepad_config.cpp | 44 ++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/input/gamepad_config.cpp b/src/input/gamepad_config.cpp index d47d2f646..751158145 100644 --- a/src/input/gamepad_config.cpp +++ b/src/input/gamepad_config.cpp @@ -163,11 +163,11 @@ core::stringw GamepadConfig::getBindingAsString(const PlayerAction action) const { switch(id) { - // I18N: Name of the black button on xbox controller + // I18N: Name of the black button on xbox controller case 2: return _("Black"); case 3: return "X"; case 4: return "Y"; - // I18N: Name of the white button on xbox controller + // I18N: Name of the white button on xbox controller case 5: return _("White"); } } @@ -175,15 +175,25 @@ core::stringw GamepadConfig::getBindingAsString(const PlayerAction action) const { switch(id) { + // I18N: name of buttons on gamepads case 2: return _("Left trigger"); - case 3: return (ad==Input::AD_POSITIVE) ? _("Right thumb right") - : _("Right thumb left"); - case 4: return (ad==Input::AD_POSITIVE) ? _("Right thumb down") - : _("Right thumb up"); + // I18N: name of buttons on gamepads + case 3: return (ad == Input::AD_POSITIVE) ? _("Right thumb right") + // I18N: name of buttons on gamepads + : _("Right thumb left"); + case // I18N: name of buttons on gamepads + 4: return (ad == Input::AD_POSITIVE) ? _("Right thumb down") + // I18N: name of buttons on gamepads + : _("Right thumb up"); + // I18N: name of buttons on gamepads case 5: return _("Right trigger"); - case 6: return (ad == Input::AD_POSITIVE) ? _("DPad right") + // I18N: name of buttons on gamepads + case 6: return (ad == Input::AD_POSITIVE) ? _("DPad right") + // I18N: name of buttons on gamepads : _("DPad left"); + // I18N: name of buttons on gamepads case 7: return (ad == Input::AD_POSITIVE) ? _("DPad down") + // I18N: name of buttons on gamepads : _("DPad up"); } // switch } // stickmotion @@ -198,11 +208,17 @@ core::stringw GamepadConfig::getBindingAsString(const PlayerAction action) const case 1: return "B"; case 2: return "X"; case 3: return "Y"; + // I18N: name of buttons on gamepads case 4: return _("Left bumper"); + // I18N: name of buttons on gamepads case 5: return _("Right bumper"); + // I18N: name of buttons on gamepads case 6: return _("Back"); + // I18N: name of buttons on gamepads case 7: return _("Start"); + // I18N: name of buttons on gamepads case 8: return _("Left thumb button"); + // I18N: name of buttons on gamepads case 9: return _("Right thumb button"); default: return DeviceConfig::getBindingAsString(action); } // switch @@ -211,19 +227,33 @@ core::stringw GamepadConfig::getBindingAsString(const PlayerAction action) const { switch(id) { + // I18N: name of stick on gamepads case 0: return (ad==Input::AD_POSITIVE) ? _("Left thumb right") + // I18N: name of stick on gamepads : _("Left thumb left"); + // I18N: name of stick on gamepads case 1: return (ad==Input::AD_POSITIVE) ? _("Left thumb down") + // I18N: name of stick on gamepads : _("Left thumb up"); + // I18N: name of stick on gamepads case 2: return (ad==Input::AD_POSITIVE) ? _("Left trigger") + // I18N: name of stick on gamepads : _("Right trigger"); + // I18N: name of stick on gamepads case 3: return (ad==Input::AD_POSITIVE) ? _("Right thumb down") + // I18N: name of stick on gamepads : _("Right thumb up"); + // I18N: name of stick on gamepads case 4: return (ad==Input::AD_POSITIVE) ? _("Right thumb right") + // I18N: name of stick on gamepads : _("Right thumb left"); + // I18N: name of buttons on gamepads case Input::HAT_H_ID: return (ad == Input::AD_POSITIVE) ? _("DPad up") + // I18N: name of buttons on gamepads : _("DPad down"); + // I18N: name of buttons on gamepads case Input::HAT_V_ID: return (ad == Input::AD_POSITIVE) ? _("DPad right") + // I18N: name of buttons on gamepads : _("DPad left"); } // switch } From 59540abb59b6b9fce60a9fccd83e17e94a97c08b Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 3 Dec 2014 11:39:39 +1100 Subject: [PATCH 18/49] Removed hard coded for backwards (though that message is not even shown atm). --- src/tracks/track_object_presentation.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/tracks/track_object_presentation.cpp b/src/tracks/track_object_presentation.cpp index e3401868f..5f0b025e1 100644 --- a/src/tracks/track_object_presentation.cpp +++ b/src/tracks/track_object_presentation.cpp @@ -898,8 +898,11 @@ void TrackObjectPresentationActionTrigger::onTriggerItemApproached(Item* who) InputDevice* device = input_manager->getDeviceManager()->getLatestUsedDevice(); DeviceConfig* config = device->getConfiguration(); irr::core::stringw fire = config->getBindingAsString(PA_FIRE); + irr::core::stringw back = config->getBindingAsString(PA_LOOK_BACK); - new TutorialMessageDialog(_("Press to look behind, and fire the weapon with <%s> while pressing to fire behind!", fire), + new TutorialMessageDialog( + _("Press <%s> to look behind, and fire the weapon with <%s> while " + "pressing <%s> to fire behind!", back, fire, back), true); } else if (m_action == "tutorial_nitro_collect") From 4d3bbd2c787f7506c0b88d694a6a86707bc95015 Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 3 Dec 2014 11:40:04 +1100 Subject: [PATCH 19/49] Fixed translation support. --- src/states_screens/online_profile_base.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/states_screens/online_profile_base.cpp b/src/states_screens/online_profile_base.cpp index 8f350df93..67960e5f6 100644 --- a/src/states_screens/online_profile_base.cpp +++ b/src/states_screens/online_profile_base.cpp @@ -105,7 +105,7 @@ void OnlineProfileBase::init() m_header->setText(_("Your profile"), false); else if (m_visiting_profile) { - m_header->setText(m_visiting_profile->getUserName() + _("'s profile"), false); + m_header->setText(_("%s's profile", m_visiting_profile->getUserName()), false); } else Log::error("OnlineProfileBase", "No visting profile"); From 544433641012ac98c49a01db17e994a0580ac814 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Tue, 2 Dec 2014 20:12:11 -0500 Subject: [PATCH 20/49] Cleanup slipstream code to use the new material manager properly. This is unfortunately non fonctional (nothing visible on screen) and I have absolutely no clue why. Still this cleanup is necessary... --- src/graphics/slip_stream.cpp | 36 ++++++++++++++++++++++-------------- src/graphics/slip_stream.hpp | 3 ++- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/graphics/slip_stream.cpp b/src/graphics/slip_stream.cpp index a76fcd351..b07d154aa 100644 --- a/src/graphics/slip_stream.cpp +++ b/src/graphics/slip_stream.cpp @@ -23,6 +23,7 @@ #include "graphics/irr_driver.hpp" #include "graphics/material.hpp" #include "graphics/material_manager.hpp" +#include "graphics/stkmeshscenenode.hpp" #include "io/file_manager.hpp" #include "karts/controller/controller.hpp" #include "karts/abstract_kart.hpp" @@ -42,21 +43,28 @@ */ SlipStream::SlipStream(AbstractKart* kart) : MovingTexture(0, 0), m_kart(kart) { - video::SMaterial m; - m.BackfaceCulling = false; - m.MaterialType = video::EMT_SOLID; - Material *material = material_manager->getMaterial("slipstream.png"); - m.setTexture(0, material->getTexture()); - m.setFlag(video::EMF_BACK_FACE_CULLING, false); - m.setFlag(video::EMF_COLOR_MATERIAL, true); - m.ColorMaterial = video::ECM_DIFFUSE_AND_AMBIENT; - - m.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; - - createMesh(m); + createMesh(material); m_node = irr_driver->addMesh(m_mesh, "splistream"); + + scene::IMeshBuffer* buffer = m_mesh->getMeshBuffer(0); + material->setMaterialProperties(&buffer->getMaterial(), buffer); + material->setMaterialProperties(&m_node->getMaterial(0), buffer); + + buffer->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false); + buffer->getMaterial().setFlag(video::EMF_COLOR_MATERIAL, true); + buffer->getMaterial().ColorMaterial = video::ECM_DIFFUSE_AND_AMBIENT; + buffer->getMaterial().MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; + + m_node->getMaterial(0).setFlag(video::EMF_BACK_FACE_CULLING, false); + m_node->getMaterial(0).setFlag(video::EMF_COLOR_MATERIAL, true); + m_node->getMaterial(0).ColorMaterial = video::ECM_DIFFUSE_AND_AMBIENT; + m_node->getMaterial(0).MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; + + STKMeshSceneNode* stk_node = dynamic_cast(m_node); + if (stk_node != NULL) + stk_node->setReloadEachFrame(true); m_mesh->drop(); #ifdef DEBUG @@ -155,7 +163,7 @@ void SlipStream::reset() * texture coordniates. * \param material The material to use. */ -void SlipStream::createMesh(const video::SMaterial &material) +void SlipStream::createMesh(Material* material) { // All radius, starting with the one closest to the kart (and // widest) to the one furthest away. A 0 indicates the end of the list @@ -200,7 +208,7 @@ void SlipStream::createMesh(const video::SMaterial &material) const unsigned int last_segment = 14; const float f = 2*M_PI/float(num_segments); scene::SMeshBuffer *buffer = new scene::SMeshBuffer(); - buffer->Material = material; + for(unsigned int j=0; j Date: Tue, 2 Dec 2014 20:21:11 -0500 Subject: [PATCH 21/49] Continue slipstream cleanup, still doesn't work --- src/graphics/slip_stream.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/graphics/slip_stream.cpp b/src/graphics/slip_stream.cpp index b07d154aa..3564cc6bc 100644 --- a/src/graphics/slip_stream.cpp +++ b/src/graphics/slip_stream.cpp @@ -50,17 +50,6 @@ SlipStream::SlipStream(AbstractKart* kart) : MovingTexture(0, 0), m_kart(kart) scene::IMeshBuffer* buffer = m_mesh->getMeshBuffer(0); material->setMaterialProperties(&buffer->getMaterial(), buffer); - material->setMaterialProperties(&m_node->getMaterial(0), buffer); - - buffer->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false); - buffer->getMaterial().setFlag(video::EMF_COLOR_MATERIAL, true); - buffer->getMaterial().ColorMaterial = video::ECM_DIFFUSE_AND_AMBIENT; - buffer->getMaterial().MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; - - m_node->getMaterial(0).setFlag(video::EMF_BACK_FACE_CULLING, false); - m_node->getMaterial(0).setFlag(video::EMF_COLOR_MATERIAL, true); - m_node->getMaterial(0).ColorMaterial = video::ECM_DIFFUSE_AND_AMBIENT; - m_node->getMaterial(0).MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; STKMeshSceneNode* stk_node = dynamic_cast(m_node); if (stk_node != NULL) @@ -208,7 +197,7 @@ void SlipStream::createMesh(Material* material) const unsigned int last_segment = 14; const float f = 2*M_PI/float(num_segments); scene::SMeshBuffer *buffer = new scene::SMeshBuffer(); - + buffer->getMaterial().TextureLayer[0].Texture = material->getTexture(); for(unsigned int j=0; jsetMaterialProperties(&buffer->getMaterial(), buffer); + if (!irr_driver->isGLSL()) + { + buffer->Material.setFlag(video::EMF_BACK_FACE_CULLING, false); + buffer->Material.setFlag(video::EMF_COLOR_MATERIAL, true); + buffer->Material.ColorMaterial = video::ECM_DIFFUSE_AND_AMBIENT; + //buffer->Material.MaterialType = video::EMT_TRANSPARENT_ADD_COLOR; + } + scene::SMesh *mesh = new scene::SMesh(); mesh->addMeshBuffer(buffer); mesh->recalculateBoundingBox(); From 5cb3e90dfcd3bf5d8f587715f807354a8c51fccb Mon Sep 17 00:00:00 2001 From: hiker Date: Wed, 3 Dec 2014 12:24:30 +1100 Subject: [PATCH 22/49] Fixed displaying online friend achievements. --- src/states_screens/dialogs/user_info_dialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/states_screens/dialogs/user_info_dialog.cpp b/src/states_screens/dialogs/user_info_dialog.cpp index fd828eb66..dceb5b177 100644 --- a/src/states_screens/dialogs/user_info_dialog.cpp +++ b/src/states_screens/dialogs/user_info_dialog.cpp @@ -482,7 +482,7 @@ void UserInfoDialog::onUpdate(float dt) bool enter_profile = m_enter_profile; ModalDialog::dismiss(); if (enter_profile) - StateManager::get()->replaceTopMostScreen(OnlineProfileAchievements::getInstance()); + StateManager::get()->replaceTopMostScreen(TabOnlineProfileAchievements::getInstance()); return; } } // onUpdate From 1032506adf28acdd83bd64f58658b5b4f1d03894 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Tue, 2 Dec 2014 20:36:27 -0500 Subject: [PATCH 23/49] Make it (IMHO) clearer how to enable the splistream debug define. Now I see things! --- src/graphics/slip_stream.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/graphics/slip_stream.cpp b/src/graphics/slip_stream.cpp index 3564cc6bc..64eb94853 100644 --- a/src/graphics/slip_stream.cpp +++ b/src/graphics/slip_stream.cpp @@ -392,7 +392,7 @@ void SlipStream::update(float dt) // -------------------------------------------------------------------- // Define this to get slipstream effect shown even when the karts are // not moving. This is useful for debugging the graphics of SS-ing. -#undef DISPLAY_SLIPSTREAM_WITH_0_SPEED_FOR_DEBUGGING +//#define DISPLAY_SLIPSTREAM_WITH_0_SPEED_FOR_DEBUGGING #ifndef DISPLAY_SLIPSTREAM_WITH_0_SPEED_FOR_DEBUGGING if(m_kart->getSpeed()getKartProperties()->getSlipstreamMinSpeed() * m_kart->getPlayerDifficulty()->getSlipstreamMinSpeed()) From d1fc8d53f447596183fee96e3c71236164ba6d1e Mon Sep 17 00:00:00 2001 From: hiker Date: Thu, 4 Dec 2014 11:39:56 +1100 Subject: [PATCH 24/49] Added error checking when setting the certificate to connect to our server. --- src/online/http_request.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/online/http_request.cpp b/src/online/http_request.cpp index 038d410b2..ee2040889 100644 --- a/src/online/http_request.cpp +++ b/src/online/http_request.cpp @@ -177,8 +177,15 @@ namespace Online struct curl_slist *chunk = NULL; chunk = curl_slist_append(chunk, "Host: api.stkaddons.net"); curl_easy_setopt(m_curl_session, CURLOPT_HTTPHEADER, chunk); - curl_easy_setopt(m_curl_session, CURLOPT_CAINFO, - file_manager->getAsset("web.tuxfamily.org.pem").c_str()); + CURLcode error = curl_easy_setopt(m_curl_session, CURLOPT_CAINFO, + file_manager->getAsset("web.tuxfamily.org.pem").c_str()); + if (error != CURLE_OK) + { + Log::error("HTTPRequest", "Error setting CAINFO to '%s'", + file_manager->getAsset("web.tuxfamily.org.pem").c_str()); + Log::error("HTTPRequest", "Error %d: '%s'.", error, + curl_easy_strerror(error)); + } curl_easy_setopt(m_curl_session, CURLOPT_SSL_VERIFYPEER, 1L); curl_easy_setopt(m_curl_session, CURLOPT_SSL_VERIFYHOST, 0L); } From 60cde7e63dfa9d81d3ac1fc7aa8f38a68162713a Mon Sep 17 00:00:00 2001 From: hiker Date: Thu, 4 Dec 2014 16:43:57 +1100 Subject: [PATCH 25/49] Added option to disable peer verification in curl. This might help on some platforms (osx) with authentication problems. --- src/config/user_config.hpp | 9 ++++++++- src/online/http_request.cpp | 10 +++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index 4a6f0b16f..15d9fe2d7 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -749,8 +749,9 @@ namespace UserConfigParams PARAM_PREFIX BoolUserConfigParam m_always_show_login_screen PARAM_DEFAULT( BoolUserConfigParam(false, "always_show_login_screen", "Always show the login screen even if last player's session was saved.")); - // ---- Online gameplay related + + // ---- Online gameplay related PARAM_PREFIX GroupUserConfigParam m_online_group PARAM_DEFAULT( GroupUserConfigParam("OnlinePlay", "Everything related to online play.") ); @@ -767,6 +768,12 @@ namespace UserConfigParams &m_online_group, "Version of the server API to use.")); + PARAM_PREFIX BoolUserConfigParam m_verify_peer + PARAM_DEFAULT(BoolUserConfigParam(1, "verify-peer", &m_online_group, + "If curl should check peer address. Should always be enabled," + "unless there are authentication problems.")); + + // ---- Addon server related entries PARAM_PREFIX GroupUserConfigParam m_addon_group PARAM_DEFAULT( GroupUserConfigParam("AddonAndNews", diff --git a/src/online/http_request.cpp b/src/online/http_request.cpp index ee2040889..2c4a3de27 100644 --- a/src/online/http_request.cpp +++ b/src/online/http_request.cpp @@ -186,7 +186,15 @@ namespace Online Log::error("HTTPRequest", "Error %d: '%s'.", error, curl_easy_strerror(error)); } - curl_easy_setopt(m_curl_session, CURLOPT_SSL_VERIFYPEER, 1L); + + // In case that there are authentication problems (e.g. on osx) + // disable peer verification. Not ideal, but still better than + // no encryption. + if (UserConfigParams::m_verify_peer) + curl_easy_setopt(m_curl_session, CURLOPT_SSL_VERIFYPEER, 1L); + else + curl_easy_setopt(m_curl_session, CURLOPT_SSL_VERIFYPEER, 0L); + curl_easy_setopt(m_curl_session, CURLOPT_SSL_VERIFYHOST, 0L); } } // prepareOperation From 23b781e7dd735256ed8824e503e496fdca56ca93 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Fri, 5 Dec 2014 00:09:15 +0100 Subject: [PATCH 26/49] Move glossmap formula to getspecular shader --- data/shaders/diffuseenvmap.frag | 2 +- data/shaders/instanced_normalmap.frag | 2 +- data/shaders/instanced_object_pass1.frag | 2 +- data/shaders/instanced_objectref_pass1.frag | 2 +- data/shaders/normalmap.frag | 2 +- data/shaders/object_pass1.frag | 2 +- data/shaders/objectref_pass1.frag | 2 +- data/shaders/utils/getSpecular.frag | 5 +++-- 8 files changed, 10 insertions(+), 9 deletions(-) diff --git a/data/shaders/diffuseenvmap.frag b/data/shaders/diffuseenvmap.frag index 037071648..2bee625db 100644 --- a/data/shaders/diffuseenvmap.frag +++ b/data/shaders/diffuseenvmap.frag @@ -52,7 +52,7 @@ void main(void) float specval = texture(ntex, uv).z; // From http://graphics.cs.williams.edu/papers/EnvMipReport2013/ int texSize = textureSize(tex, 0).x; - float lodval = clamp(log2(texSize * sqrt(3.)) - .5 * log2(specval + 1.), 0., 10.); + float lodval = clamp(log2(texSize * sqrt(3.)) - (5. * specval + 1.), 0., 10.); vec4 specular = textureLod(tex, sampleDirection, lodval); Spec = max(specular, vec4(0.)); } diff --git a/data/shaders/instanced_normalmap.frag b/data/shaders/instanced_normalmap.frag index e5181a28d..41be51f59 100644 --- a/data/shaders/instanced_normalmap.frag +++ b/data/shaders/instanced_normalmap.frag @@ -31,5 +31,5 @@ void main() vec3 FragmentNormal = TS_normal.x * Frag_tangent + TS_normal.y * Frag_bitangent - TS_normal.z * Frag_normal; EncodedNormal.xy = 0.5 * EncodeNormal(normalize(FragmentNormal)) + 0.5; - EncodedNormal.z = exp2(10. * gloss + 1.); + EncodedNormal.z = gloss; } diff --git a/data/shaders/instanced_object_pass1.frag b/data/shaders/instanced_object_pass1.frag index bf76fbf22..1eb768038 100644 --- a/data/shaders/instanced_object_pass1.frag +++ b/data/shaders/instanced_object_pass1.frag @@ -19,5 +19,5 @@ void main(void) float glossmap = texture(glosstex, uv).x; #endif EncodedNormal.xy = 0.5 * EncodeNormal(normalize(nor)) + 0.5; - EncodedNormal.z = exp2(10. * glossmap + 1.); + EncodedNormal.z = glossmap; } diff --git a/data/shaders/instanced_objectref_pass1.frag b/data/shaders/instanced_objectref_pass1.frag index ef1d5fd5f..da7c3b2a6 100644 --- a/data/shaders/instanced_objectref_pass1.frag +++ b/data/shaders/instanced_objectref_pass1.frag @@ -24,6 +24,6 @@ void main() { if (col.a < 0.5) discard; EncodedNormal.xy = 0.5 * EncodeNormal(normalize(nor)) + 0.5; - EncodedNormal.z = exp2(10. * glossmap + 1.); + EncodedNormal.z = glossmap; } diff --git a/data/shaders/normalmap.frag b/data/shaders/normalmap.frag index e7ba8efe4..5430a9617 100644 --- a/data/shaders/normalmap.frag +++ b/data/shaders/normalmap.frag @@ -25,5 +25,5 @@ void main() vec3 FragmentNormal = TS_normal.x * Frag_tangent + TS_normal.y * Frag_bitangent - TS_normal.z * Frag_normal; EncodedNormal.xy = 0.5 * EncodeNormal(normalize(FragmentNormal)) + 0.5; - EncodedNormal.z = exp2(10. * (1. - alpha) + 1.); + EncodedNormal.z = 1. - alpha; } diff --git a/data/shaders/object_pass1.frag b/data/shaders/object_pass1.frag index d593b8d2d..172c8484b 100644 --- a/data/shaders/object_pass1.frag +++ b/data/shaders/object_pass1.frag @@ -19,5 +19,5 @@ void main(void) { float glossmap = texture(tex, uv).x; EncodedNormal.xy = 0.5 * EncodeNormal(normalize(nor)) + 0.5; - EncodedNormal.z = exp2(10. * glossmap + 1.); + EncodedNormal.z = glossmap; } diff --git a/data/shaders/objectref_pass1.frag b/data/shaders/objectref_pass1.frag index 882752f07..bf6da0bf6 100644 --- a/data/shaders/objectref_pass1.frag +++ b/data/shaders/objectref_pass1.frag @@ -24,6 +24,6 @@ void main() { discard; float glossmap = texture(glosstex, uv).x; EncodedNormal.xy = 0.5 * EncodeNormal(normalize(nor)) + 0.5; - EncodedNormal.z = exp2(10. * glossmap + 1.); + EncodedNormal.z = glossmap; } diff --git a/data/shaders/utils/getSpecular.frag b/data/shaders/utils/getSpecular.frag index 629cec7b8..85ed5e761 100644 --- a/data/shaders/utils/getSpecular.frag +++ b/data/shaders/utils/getSpecular.frag @@ -2,10 +2,11 @@ vec3 getSpecular(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness) { + float exponentroughness = exp2(10. * roughness + 1.); // Half Light View direction vec3 H = normalize(eyedir + lightdir); float NdotH = max(0., dot(normal, H)); - float normalisationFactor = (roughness + 2.) / 8.; + float normalisationFactor = (exponentroughness + 2.) / 8.; vec3 FresnelSchlick = color + (1.0f - color) * pow(1.0f - max(0., (dot(eyedir, H))), 5); - return max(pow(NdotH, roughness) * FresnelSchlick * normalisationFactor, vec3(0.)); + return max(pow(NdotH, exponentroughness) * FresnelSchlick * normalisationFactor, vec3(0.)); } \ No newline at end of file From fd2da4085b93386d2abc9a68a63fe51f8f1508d7 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Fri, 5 Dec 2014 00:20:16 +0100 Subject: [PATCH 27/49] Rename some shader to improve their meaning --- data/shaders/{diffuseenvmap.frag => IBL.frag} | 0 data/shaders/gi.frag | 1 - data/shaders/pointlight.frag | 4 ++-- data/shaders/sunlight.frag | 4 ++-- data/shaders/sunlightshadow.frag | 4 ++-- .../utils/{getSpecular.frag => SpecularBRDF.frag} | 5 ++--- src/graphics/post_processing.cpp | 6 +++--- src/graphics/shaders.cpp | 10 +++++----- src/graphics/shaders.hpp | 4 ++-- 9 files changed, 18 insertions(+), 20 deletions(-) rename data/shaders/{diffuseenvmap.frag => IBL.frag} (100%) rename data/shaders/utils/{getSpecular.frag => SpecularBRDF.frag} (76%) diff --git a/data/shaders/diffuseenvmap.frag b/data/shaders/IBL.frag similarity index 100% rename from data/shaders/diffuseenvmap.frag rename to data/shaders/IBL.frag diff --git a/data/shaders/gi.frag b/data/shaders/gi.frag index e90f88d92..9ab0f9dfd 100644 --- a/data/shaders/gi.frag +++ b/data/shaders/gi.frag @@ -9,7 +9,6 @@ uniform sampler3D SHR; uniform sampler3D SHG; uniform sampler3D SHB; -uniform float R_wcs = 10.; uniform vec3 extents; uniform mat4 RHMatrix; uniform mat4 InvRHMatrix; diff --git a/data/shaders/pointlight.frag b/data/shaders/pointlight.frag index c479ec7ce..cabadc0b5 100644 --- a/data/shaders/pointlight.frag +++ b/data/shaders/pointlight.frag @@ -10,7 +10,7 @@ out vec4 Diffuse; out vec4 Specular; vec3 DecodeNormal(vec2 n); -vec3 getSpecular(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness); +vec3 SpecularBRDF(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness); vec4 getPosFromUVDepth(vec3 uvDepth, mat4 InverseProjectionMatrix); void main() @@ -38,5 +38,5 @@ void main() float NdotL = max(0., dot(norm, L)); Diffuse = vec4(NdotL * light_col * att, 1.); - Specular = vec4(getSpecular(norm, eyedir, L, light_col, roughness) * NdotL * att, 1.); + Specular = vec4(SpecularBRDF(norm, eyedir, L, light_col, roughness) * NdotL * att, 1.); } diff --git a/data/shaders/sunlight.frag b/data/shaders/sunlight.frag index e3bcc8942..e7503241e 100644 --- a/data/shaders/sunlight.frag +++ b/data/shaders/sunlight.frag @@ -13,7 +13,7 @@ out vec4 Diff; out vec4 Spec; vec3 DecodeNormal(vec2 n); -vec3 getSpecular(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness); +vec3 SpecularBRDF(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness); vec4 getPosFromUVDepth(vec3 uvDepth, mat4 InverseProjectionMatrix); vec3 getMostRepresentativePoint(vec3 direction, vec3 R, float angularRadius) @@ -52,7 +52,7 @@ void main() { vec3 R = reflect(-eyedir, norm); vec3 Lightdir = getMostRepresentativePoint(direction, R, angle); - vec3 Specular = getSpecular(norm, eyedir, Lightdir, col, roughness) * NdotL; + vec3 Specular = SpecularBRDF(norm, eyedir, Lightdir, col, roughness) * NdotL; vec3 outcol = NdotL * col; diff --git a/data/shaders/sunlightshadow.frag b/data/shaders/sunlightshadow.frag index f903148c2..c60665e63 100644 --- a/data/shaders/sunlightshadow.frag +++ b/data/shaders/sunlightshadow.frag @@ -16,7 +16,7 @@ out vec4 Diff; out vec4 Spec; vec3 DecodeNormal(vec2 n); -vec3 getSpecular(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness); +vec3 SpecularBRDF(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness); vec4 getPosFromUVDepth(vec3 uvDepth, mat4 InverseProjectionMatrix); vec3 getMostRepresentativePoint(vec3 direction, vec3 R, float angularRadius) @@ -66,7 +66,7 @@ void main() { vec3 R = reflect(-eyedir, norm); vec3 Lightdir = getMostRepresentativePoint(direction, R, angle); - vec3 Specular = getSpecular(norm, eyedir, Lightdir, col, roughness) * NdotL; + vec3 Specular = SpecularBRDF(norm, eyedir, Lightdir, col, roughness) * NdotL; vec3 outcol = NdotL * col; diff --git a/data/shaders/utils/getSpecular.frag b/data/shaders/utils/SpecularBRDF.frag similarity index 76% rename from data/shaders/utils/getSpecular.frag rename to data/shaders/utils/SpecularBRDF.frag index 85ed5e761..2795b3f48 100644 --- a/data/shaders/utils/getSpecular.frag +++ b/data/shaders/utils/SpecularBRDF.frag @@ -1,6 +1,5 @@ - - -vec3 getSpecular(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness) +// Blinn Phong with emulated fresnel factor +vec3 SpecularBRDF(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness) { float exponentroughness = exp2(10. * roughness + 1.); // Half Light View direction diff --git a/src/graphics/post_processing.cpp b/src/graphics/post_processing.cpp index 123da79ba..9d8dcf0b0 100644 --- a/src/graphics/post_processing.cpp +++ b/src/graphics/post_processing.cpp @@ -228,12 +228,12 @@ void PostProcessing::renderEnvMap(const float *bSHCoeff, const float *gSHCoeff, glBlendEquation(GL_FUNC_ADD); glBlendFunc(GL_ONE, GL_ONE); - glUseProgram(FullScreenShader::EnvMapShader::getInstance()->Program); + glUseProgram(FullScreenShader::IBLShader::getInstance()->Program); glBindVertexArray(SharedObject::FullScreenQuadVAO); - FullScreenShader::EnvMapShader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), skybox); + FullScreenShader::IBLShader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), skybox); core::matrix4 TVM = irr_driver->getViewMatrix().getTransposed(); - FullScreenShader::EnvMapShader::getInstance()->setUniforms(TVM, std::vector(bSHCoeff, bSHCoeff + 9), std::vector(gSHCoeff, gSHCoeff + 9), std::vector(rSHCoeff, rSHCoeff + 9)); + FullScreenShader::IBLShader::getInstance()->setUniforms(TVM, std::vector(bSHCoeff, bSHCoeff + 9), std::vector(gSHCoeff, gSHCoeff + 9), std::vector(rSHCoeff, rSHCoeff + 9)); glDrawArrays(GL_TRIANGLES, 0, 3); glBindVertexArray(0); diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index f7c8b8e24..3706f140e 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -1426,7 +1426,7 @@ namespace LightShader Program = LoadProgram(OBJECT, GL_VERTEX_SHADER, file_manager->getAsset("shaders/pointlight.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/decodeNormal.frag").c_str(), - GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getSpecular.frag").c_str(), + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/SpecularBRDF.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/pointlight.frag").c_str()); @@ -1625,7 +1625,7 @@ namespace FullScreenShader Program = LoadProgram(OBJECT, GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/decodeNormal.frag").c_str(), - GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getSpecular.frag").c_str(), + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/SpecularBRDF.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/sunlight.frag").c_str()); @@ -1633,13 +1633,13 @@ namespace FullScreenShader AssignUniforms("direction", "col"); } - EnvMapShader::EnvMapShader() + IBLShader::IBLShader() { Program = LoadProgram(OBJECT, GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/decodeNormal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(), - GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/diffuseenvmap.frag").c_str()); + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/IBL.frag").c_str()); AssignUniforms("TransposeViewMatrix", "blueLmn[0]", "greenLmn[0]", "redLmn[0]"); AssignSamplerNames(Program, 0, "ntex", 1, "dtex", 2, "tex"); } @@ -1649,7 +1649,7 @@ namespace FullScreenShader Program = LoadProgram(OBJECT, GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/decodeNormal.frag").c_str(), - GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getSpecular.frag").c_str(), + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/SpecularBRDF.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/sunlightshadow.frag").c_str()); diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index 518f7fad0..2251cbb65 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -411,10 +411,10 @@ public: SunLightShader(); }; -class EnvMapShader : public ShaderHelperSingleton, std::vector, std::vector >, public TextureRead +class IBLShader : public ShaderHelperSingleton, std::vector, std::vector >, public TextureRead { public: - EnvMapShader(); + IBLShader(); }; class ShadowedSunLightShader : public ShaderHelperSingleton, public TextureRead From 4079c18050482f48f024eec01f0443cd124e7bf3 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Fri, 5 Dec 2014 01:38:54 +0100 Subject: [PATCH 28/49] Update graphic restriction This should fix bug #1519 --- data/graphical_restrictions.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/data/graphical_restrictions.xml b/data/graphical_restrictions.xml index 47a63b0cc..54dcd4198 100644 --- a/data/graphical_restrictions.xml +++ b/data/graphical_restrictions.xml @@ -3,6 +3,7 @@ + From c2d7356d05e4227d059cba58c520e5e2109caac8 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Tue, 2 Dec 2014 00:26:37 +0100 Subject: [PATCH 29/49] Refactor IBL gen code --- src/graphics/IBL.cpp | 206 +++++++++++++++++++++++++++++++ src/graphics/IBL.hpp | 17 +++ src/graphics/render_skybox.cpp | 214 ++++++--------------------------- 3 files changed, 258 insertions(+), 179 deletions(-) create mode 100644 src/graphics/IBL.cpp create mode 100644 src/graphics/IBL.hpp diff --git a/src/graphics/IBL.cpp b/src/graphics/IBL.cpp new file mode 100644 index 000000000..ac354d11b --- /dev/null +++ b/src/graphics/IBL.cpp @@ -0,0 +1,206 @@ +#include "IBL.hpp" +#include "gl_headers.hpp" +#include + +static void getXYZ(GLenum face, float i, float j, float &x, float &y, float &z) +{ + switch (face) + { + case GL_TEXTURE_CUBE_MAP_POSITIVE_X: + x = 1.; + y = -i; + z = -j; + break; + case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: + x = -1.; + y = -i; + z = j; + break; + case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: + x = j; + y = 1.; + z = i; + break; + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: + x = j; + y = -1; + z = -i; + break; + case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: + x = j; + y = -i; + z = 1; + break; + case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: + x = -j; + y = -i; + z = -1; + break; + } + + float norm = sqrt(x * x + y * y + z * z); + x /= norm, y /= norm, z /= norm; + return; +} + + +static void getYml(GLenum face, size_t width, size_t height, + float *Y00, + float *Y1minus1, float *Y10, float *Y11, + float *Y2minus2, float *Y2minus1, float *Y20, float *Y21, float *Y22) +{ + for (unsigned i = 0; i < width; i++) + { + for (unsigned j = 0; j < height; j++) + { + float x, y, z; + float fi = float(i), fj = float(j); + fi /= width, fj /= height; + fi = 2 * fi - 1, fj = 2 * fj - 1; + getXYZ(face, fi, fj, x, y, z); + + // constant part of Ylm + float c00 = 0.282095f; + float c1minus1 = 0.488603f; + float c10 = 0.488603f; + float c11 = 0.488603f; + float c2minus2 = 1.092548f; + float c2minus1 = 1.092548f; + float c21 = 1.092548f; + float c20 = 0.315392f; + float c22 = 0.546274f; + + size_t idx = i * height + j; + + Y00[idx] = c00; + Y1minus1[idx] = c1minus1 * y; + Y10[idx] = c10 * z; + Y11[idx] = c11 * x; + Y2minus2[idx] = c2minus2 * x * y; + Y2minus1[idx] = c2minus1 * y * z; + Y21[idx] = c21 * x * z; + Y20[idx] = c20 * (3 * z * z - 1); + Y22[idx] = c22 * (x * x - y * y); + } + } +} + + +static void projectSH(Color *CubemapFace[6], size_t edge_size, + float *Y00[], + float *Y1minus1[], float *Y10[], float *Y11[], + float *Y2minus2[], float *Y2minus1[], float * Y20[], float *Y21[], float *Y22[], + float *blueSHCoeff, float *greenSHCoeff, float *redSHCoeff + ) +{ + for (unsigned i = 0; i < 9; i++) + { + blueSHCoeff[i] = 0; + greenSHCoeff[i] = 0; + redSHCoeff[i] = 0; + } + + float wh = float(edge_size * edge_size); + for (unsigned face = 0; face < 6; face++) + { + for (unsigned i = 0; i < edge_size; i++) + { + for (unsigned j = 0; j < edge_size; j++) + { + size_t idx = i * edge_size + j; + float fi = float(i), fj = float(j); + fi /= edge_size, fj /= edge_size; + fi = 2 * fi - 1, fj = 2 * fj - 1; + + + float d = sqrt(fi * fi + fj * fj + 1); + + // Constant obtained by projecting unprojected ref values + float solidangle = 2.75f / (wh * pow(d, 1.5f)); + // pow(., 2.2) to convert from srgb + float b = CubemapFace[face][edge_size * i + j].Blue; + float g = CubemapFace[face][edge_size * i + j].Green; + float r = CubemapFace[face][edge_size * i + j].Red; + + blueSHCoeff[0] += b * Y00[face][idx] * solidangle; + blueSHCoeff[1] += b * Y1minus1[face][idx] * solidangle; + blueSHCoeff[2] += b * Y10[face][idx] * solidangle; + blueSHCoeff[3] += b * Y11[face][idx] * solidangle; + blueSHCoeff[4] += b * Y2minus2[face][idx] * solidangle; + blueSHCoeff[5] += b * Y2minus1[face][idx] * solidangle; + blueSHCoeff[6] += b * Y20[face][idx] * solidangle; + blueSHCoeff[7] += b * Y21[face][idx] * solidangle; + blueSHCoeff[8] += b * Y22[face][idx] * solidangle; + + greenSHCoeff[0] += g * Y00[face][idx] * solidangle; + greenSHCoeff[1] += g * Y1minus1[face][idx] * solidangle; + greenSHCoeff[2] += g * Y10[face][idx] * solidangle; + greenSHCoeff[3] += g * Y11[face][idx] * solidangle; + greenSHCoeff[4] += g * Y2minus2[face][idx] * solidangle; + greenSHCoeff[5] += g * Y2minus1[face][idx] * solidangle; + greenSHCoeff[6] += g * Y20[face][idx] * solidangle; + greenSHCoeff[7] += g * Y21[face][idx] * solidangle; + greenSHCoeff[8] += g * Y22[face][idx] * solidangle; + + + redSHCoeff[0] += r * Y00[face][idx] * solidangle; + redSHCoeff[1] += r * Y1minus1[face][idx] * solidangle; + redSHCoeff[2] += r * Y10[face][idx] * solidangle; + redSHCoeff[3] += r * Y11[face][idx] * solidangle; + redSHCoeff[4] += r * Y2minus2[face][idx] * solidangle; + redSHCoeff[5] += r * Y2minus1[face][idx] * solidangle; + redSHCoeff[6] += r * Y20[face][idx] * solidangle; + redSHCoeff[7] += r * Y21[face][idx] * solidangle; + redSHCoeff[8] += r * Y22[face][idx] * solidangle; + } + } + } +} + +void SphericalHarmonics(Color *CubemapFace[6], size_t edge_size, float *blueSHCoeff, float *greenSHCoeff, float *redSHCoeff) +{ + float *Y00[6]; + float *Y1minus1[6]; + float *Y10[6]; + float *Y11[6]; + float *Y2minus2[6]; + float *Y2minus1[6]; + float *Y20[6]; + float *Y21[6]; + float *Y22[6]; + + for (unsigned face = 0; face < 6; face++) + { + Y00[face] = new float[edge_size * edge_size]; + Y1minus1[face] = new float[edge_size * edge_size]; + Y10[face] = new float[edge_size * edge_size]; + Y11[face] = new float[edge_size * edge_size]; + Y2minus2[face] = new float[edge_size * edge_size]; + Y2minus1[face] = new float[edge_size * edge_size]; + Y20[face] = new float[edge_size * edge_size]; + Y21[face] = new float[edge_size * edge_size]; + Y22[face] = new float[edge_size * edge_size]; + + getYml(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, edge_size, edge_size, Y00[face], Y1minus1[face], Y10[face], Y11[face], Y2minus2[face], Y2minus1[face], Y20[face], Y21[face], Y22[face]); + } + + projectSH(CubemapFace, edge_size, + Y00, + Y1minus1, Y10, Y11, + Y2minus2, Y2minus1, Y20, Y21, Y22, + blueSHCoeff, greenSHCoeff, redSHCoeff + ); + + for (unsigned face = 0; face < 6; face++) + { + delete[] Y00[face]; + delete[] Y1minus1[face]; + delete[] Y10[face]; + delete[] Y11[face]; + delete[] Y2minus2[face]; + delete[] Y2minus1[face]; + delete[] Y20[face]; + delete[] Y21[face]; + delete[] Y22[face]; + } +} \ No newline at end of file diff --git a/src/graphics/IBL.hpp b/src/graphics/IBL.hpp new file mode 100644 index 000000000..09ddd7d35 --- /dev/null +++ b/src/graphics/IBL.hpp @@ -0,0 +1,17 @@ +#ifndef IBL_HPP +#define IBL_HPP + +struct Color +{ + float Red; + float Green; + float Blue; +}; + +/** Generate the 9 first SH coefficients for each color channel +using the cubemap provided by CubemapFace. +* \param textures sequence of 6 square textures. +* \param row/columns count of textures. +*/ +void SphericalHarmonics(Color *CubemapFace[6], size_t edge_size, float *blueSHCoeff, float *greenSHCoeff, float *redSHCoeff); +#endif \ No newline at end of file diff --git a/src/graphics/render_skybox.cpp b/src/graphics/render_skybox.cpp index 5adc255b0..2a9fc4412 100644 --- a/src/graphics/render_skybox.cpp +++ b/src/graphics/render_skybox.cpp @@ -1,3 +1,4 @@ +#include "graphics/IBL.hpp" #include "graphics/irr_driver.hpp" #include "graphics/shaders.hpp" #include "modes/world.hpp" @@ -6,88 +7,6 @@ #define MAX2(a, b) ((a) > (b) ? (a) : (b)) #define MIN2(a, b) ((a) > (b) ? (b) : (a)) -static void getXYZ(GLenum face, float i, float j, float &x, float &y, float &z) -{ - switch (face) - { - case GL_TEXTURE_CUBE_MAP_POSITIVE_X: - x = 1.; - y = -i; - z = -j; - break; - case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: - x = -1.; - y = -i; - z = j; - break; - case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: - x = j; - y = 1.; - z = i; - break; - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: - x = j; - y = -1; - z = -i; - break; - case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: - x = j; - y = -i; - z = 1; - break; - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: - x = -j; - y = -i; - z = -1; - break; - } - - float norm = sqrt(x * x + y * y + z * z); - x /= norm, y /= norm, z /= norm; - return; -} - -static void getYml(GLenum face, size_t width, size_t height, - float *Y00, - float *Y1minus1, float *Y10, float *Y11, - float *Y2minus2, float *Y2minus1, float *Y20, float *Y21, float *Y22) -{ - for (unsigned i = 0; i < width; i++) - { - for (unsigned j = 0; j < height; j++) - { - float x, y, z; - float fi = float(i), fj = float(j); - fi /= width, fj /= height; - fi = 2 * fi - 1, fj = 2 * fj - 1; - getXYZ(face, fi, fj, x, y, z); - - // constant part of Ylm - float c00 = 0.282095f; - float c1minus1 = 0.488603f; - float c10 = 0.488603f; - float c11 = 0.488603f; - float c2minus2 = 1.092548f; - float c2minus1 = 1.092548f; - float c21 = 1.092548f; - float c20 = 0.315392f; - float c22 = 0.546274f; - - size_t idx = i * height + j; - - Y00[idx] = c00; - Y1minus1[idx] = c1minus1 * y; - Y10[idx] = c10 * z; - Y11[idx] = c11 * x; - Y2minus2[idx] = c2minus2 * x * y; - Y2minus1[idx] = c2minus1 * y * z; - Y21[idx] = c21 * x * z; - Y20[idx] = c20 * (3 * z * z - 1); - Y22[idx] = c22 * (x * x - y * y); - } - } -} - static float getTexelValue(unsigned i, unsigned j, size_t width, size_t height, float *Coeff, float *Y00, float *Y1minus1, float *Y10, float *Y11, float *Y2minus2, float * Y2minus1, float * Y20, float *Y21, float *Y22) { @@ -130,77 +49,6 @@ static void unprojectSH(float *output[], size_t width, size_t height, } } -static void projectSH(float *color[], size_t width, size_t height, - float *Y00[], - float *Y1minus1[], float *Y10[], float *Y11[], - float *Y2minus2[], float *Y2minus1[], float * Y20[], float *Y21[], float *Y22[], - float *blueSHCoeff, float *greenSHCoeff, float *redSHCoeff - ) -{ - for (unsigned i = 0; i < 9; i++) - { - blueSHCoeff[i] = 0; - greenSHCoeff[i] = 0; - redSHCoeff[i] = 0; - } - float wh = float(width * height); - for (unsigned face = 0; face < 6; face++) - { - for (unsigned i = 0; i < width; i++) - { - for (unsigned j = 0; j < height; j++) - { - size_t idx = i * height + j; - float fi = float(i), fj = float(j); - fi /= width, fj /= height; - fi = 2 * fi - 1, fj = 2 * fj - 1; - - - float d = sqrt(fi * fi + fj * fj + 1); - - // Constant obtained by projecting unprojected ref values - float solidangle = 2.75f / (wh * pow(d, 1.5f)); - // pow(., 2.2) to convert from srgb - float b = pow(color[face][4 * height * i + 4 * j] / 255.f, 2.2f); - float g = pow(color[face][4 * height * i + 4 * j + 1] / 255.f, 2.2f); - float r = pow(color[face][4 * height * i + 4 * j + 2] / 255.f, 2.2f); - - assert(b >= 0.); - - blueSHCoeff[0] += b * Y00[face][idx] * solidangle; - blueSHCoeff[1] += b * Y1minus1[face][idx] * solidangle; - blueSHCoeff[2] += b * Y10[face][idx] * solidangle; - blueSHCoeff[3] += b * Y11[face][idx] * solidangle; - blueSHCoeff[4] += b * Y2minus2[face][idx] * solidangle; - blueSHCoeff[5] += b * Y2minus1[face][idx] * solidangle; - blueSHCoeff[6] += b * Y20[face][idx] * solidangle; - blueSHCoeff[7] += b * Y21[face][idx] * solidangle; - blueSHCoeff[8] += b * Y22[face][idx] * solidangle; - - greenSHCoeff[0] += g * Y00[face][idx] * solidangle; - greenSHCoeff[1] += g * Y1minus1[face][idx] * solidangle; - greenSHCoeff[2] += g * Y10[face][idx] * solidangle; - greenSHCoeff[3] += g * Y11[face][idx] * solidangle; - greenSHCoeff[4] += g * Y2minus2[face][idx] * solidangle; - greenSHCoeff[5] += g * Y2minus1[face][idx] * solidangle; - greenSHCoeff[6] += g * Y20[face][idx] * solidangle; - greenSHCoeff[7] += g * Y21[face][idx] * solidangle; - greenSHCoeff[8] += g * Y22[face][idx] * solidangle; - - - redSHCoeff[0] += r * Y00[face][idx] * solidangle; - redSHCoeff[1] += r * Y1minus1[face][idx] * solidangle; - redSHCoeff[2] += r * Y10[face][idx] * solidangle; - redSHCoeff[3] += r * Y11[face][idx] * solidangle; - redSHCoeff[4] += r * Y2minus2[face][idx] * solidangle; - redSHCoeff[5] += r * Y2minus1[face][idx] * solidangle; - redSHCoeff[6] += r * Y20[face][idx] * solidangle; - redSHCoeff[7] += r * Y21[face][idx] * solidangle; - redSHCoeff[8] += r * Y22[face][idx] * solidangle; - } - } - } -} static void displayCoeff(float *SHCoeff) { @@ -210,7 +58,7 @@ static void displayCoeff(float *SHCoeff) } // Only for 9 coefficients -static void testSH(unsigned char *color[6], size_t width, size_t height, +/*static void testSH(unsigned char *color[6], size_t width, size_t height, float *blueSHCoeff, float *greenSHCoeff, float *redSHCoeff) { float *Y00[6]; @@ -250,7 +98,7 @@ static void testSH(unsigned char *color[6], size_t width, size_t height, getYml(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, width, height, Y00[face], Y1minus1[face], Y10[face], Y11[face], Y2minus2[face], Y2minus1[face], Y20[face], Y21[face], Y22[face]); } - /* blueSHCoeff[0] = 0.54, + blueSHCoeff[0] = 0.54, blueSHCoeff[1] = .6, blueSHCoeff[2] = -.27, blueSHCoeff[3] = .01, blueSHCoeff[4] = -.12, blueSHCoeff[5] = -.47, blueSHCoeff[6] = -.15, blueSHCoeff[7] = .14, blueSHCoeff[8] = -.3; greenSHCoeff[0] = .44, @@ -267,12 +115,12 @@ static void testSH(unsigned char *color[6], size_t width, size_t height, printf("Red:\n"); displayCoeff(redSHCoeff);*/ - projectSH(testoutput, width, height, +/* projectSH(testoutput, width, height, Y00, Y1minus1, Y10, Y11, Y2minus2, Y2minus1, Y20, Y21, Y22, blueSHCoeff, greenSHCoeff, redSHCoeff - ); + );*/ //printf("Blue:\n"); //displayCoeff(blueSHCoeff); @@ -319,7 +167,7 @@ static void testSH(unsigned char *color[6], size_t width, size_t height, printf("Red:\n"); displayCoeff(redSHCoeff); - printf("\nAfter projection\n\n");*/ + printf("\nAfter projection\n\n"); @@ -346,7 +194,7 @@ static void testSH(unsigned char *color[6], size_t width, size_t height, delete[] Y21[face]; delete[] Y22[face]; } -} +}*/ void swapPixels(char *old_img, char *new_img, unsigned stride, unsigned old_i, unsigned old_j, unsigned new_i, unsigned new_j) { @@ -356,6 +204,7 @@ void swapPixels(char *old_img, char *new_img, unsigned stride, unsigned old_i, u new_img[4 * (stride * new_i + new_j) + 3] = old_img[4 * (stride * old_i + old_j) + 3]; } + /** Generate an opengl cubemap texture from 6 2d textures. Out of legacy the sequence of textures maps to : - 1st texture maps to GL_TEXTURE_CUBE_MAP_POSITIVE_Y @@ -440,16 +289,18 @@ void IrrDriver::generateDiffuseCoefficients() m_SH_dirty = false; const unsigned texture_permutation[] = { 2, 3, 0, 1, 5, 4 }; + unsigned sh_w = 0, sh_h = 0; + unsigned char *sh_rgba[6]; + if (SphericalHarmonicsTextures.size() == 6) { - unsigned sh_w = 0, sh_h = 0; + for (unsigned i = 0; i < 6; i++) { sh_w = MAX2(sh_w, SphericalHarmonicsTextures[i]->getOriginalSize().Width); sh_h = MAX2(sh_h, SphericalHarmonicsTextures[i]->getOriginalSize().Height); } - unsigned char *sh_rgba[6]; for (unsigned i = 0; i < 6; i++) sh_rgba[i] = new unsigned char[sh_w * sh_h * 4]; for (unsigned i = 0; i < 6; i++) @@ -468,10 +319,6 @@ void IrrDriver::generateDiffuseCoefficients() delete image; } - testSH(sh_rgba, sh_w, sh_h, blueSHCoeff, greenSHCoeff, redSHCoeff); - - for (unsigned i = 0; i < 6; i++) - delete[] sh_rgba[i]; } else { @@ -480,7 +327,6 @@ void IrrDriver::generateDiffuseCoefficients() video::SColor ambient = m_scene_manager->getAmbientLight().toSColor(); - unsigned char *sh_rgba[6]; for (unsigned i = 0; i < 6; i++) { sh_rgba[i] = new unsigned char[sh_w * sh_h * 4]; @@ -493,9 +339,31 @@ void IrrDriver::generateDiffuseCoefficients() sh_rgba[i][j + 3] = 255; } } + } - testSH(sh_rgba, sh_w, sh_h, blueSHCoeff, greenSHCoeff, redSHCoeff); + // Convert to float texture + Color *FloatTexCube[6]; + for (unsigned i = 0; i < 6; i++) + { + FloatTexCube[i] = new Color[sh_w * sh_h]; + for (unsigned j = 0; j < sh_w * sh_h; j++) + { + FloatTexCube[i][j].Blue = powf(float(0xFF & sh_rgba[i][4 * j]) / 255.f, 2.2f); + FloatTexCube[i][j].Green = powf(float(0xFF & sh_rgba[i][4 * j + 1]) / 255.f, 2.2f); + FloatTexCube[i][j].Red = powf(float(0xFF & sh_rgba[i][4 * j + 2]) / 255.f, 2.2f); + } + } + SphericalHarmonics(FloatTexCube, sh_w, blueSHCoeff, greenSHCoeff, redSHCoeff); + + for (unsigned i = 0; i < 6; i++) + { + delete[] sh_rgba[i]; + delete[] FloatTexCube[i]; + } + + if (SphericalHarmonicsTextures.size() != 6) + { // Diffuse env map is x 0.25, compensate for (unsigned i = 0; i < 9; i++) { @@ -503,19 +371,7 @@ void IrrDriver::generateDiffuseCoefficients() greenSHCoeff[i] *= 4; redSHCoeff[i] *= 4; } - - for (unsigned i = 0; i < 6; i++) - delete[] sh_rgba[i]; } - - /*for (unsigned i = 0; i < 6; i++) - { - glBindTexture(GL_TEXTURE_CUBE_MAP, ConvolutedSkyboxCubeMap); - glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_SRGB_ALPHA, w, h, 0, GL_BGRA, GL_UNSIGNED_BYTE, (GLvoid*)rgba[i]); - } - - glBindTexture(GL_TEXTURE_CUBE_MAP, 0);*/ - } void IrrDriver::renderSkybox(const scene::ICameraSceneNode *camera) From 8f3b8cf4482cec4350d4eaf477c665431b83e909 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Tue, 2 Dec 2014 17:38:21 +0100 Subject: [PATCH 30/49] Implement specular IBL properly --- data/shaders/IBL.frag | 5 +- .../shaders/importance_sampling_specular.frag | 30 +++++ src/graphics/IBL.cpp | 106 ++++++++++++++++++ src/graphics/IBL.hpp | 4 + src/graphics/irr_driver.cpp | 5 + src/graphics/irr_driver.hpp | 1 + src/graphics/render_lighting.cpp | 2 +- src/graphics/render_skybox.cpp | 5 +- src/graphics/shaders.cpp | 12 ++ src/graphics/shaders.hpp | 6 + 10 files changed, 170 insertions(+), 6 deletions(-) create mode 100644 data/shaders/importance_sampling_specular.frag diff --git a/data/shaders/IBL.frag b/data/shaders/IBL.frag index 2bee625db..a638c3629 100644 --- a/data/shaders/IBL.frag +++ b/data/shaders/IBL.frag @@ -50,9 +50,8 @@ void main(void) sampleDirection = (InverseViewMatrix * vec4(sampleDirection, 0.)).xyz; float specval = texture(ntex, uv).z; - // From http://graphics.cs.williams.edu/papers/EnvMipReport2013/ - int texSize = textureSize(tex, 0).x; - float lodval = clamp(log2(texSize * sqrt(3.)) - (5. * specval + 1.), 0., 10.); + // Assume 8 level of lod (ie 256x256 texture) + float lodval = 8. * (1. - specval); vec4 specular = textureLod(tex, sampleDirection, lodval); Spec = max(specular, vec4(0.)); } diff --git a/data/shaders/importance_sampling_specular.frag b/data/shaders/importance_sampling_specular.frag new file mode 100644 index 000000000..51549aa6f --- /dev/null +++ b/data/shaders/importance_sampling_specular.frag @@ -0,0 +1,30 @@ +uniform samplerCube tex; +uniform float samples[2048]; +uniform float ViewportSize; + +uniform mat4 PermutationMatrix; + +out vec4 FragColor; + +void main(void) +{ + vec2 uv = gl_FragCoord.xy / ViewportSize; + vec3 RayDir = 2. * vec3(uv, 1.) - 1.; + RayDir = normalize((PermutationMatrix * vec4(RayDir, 0.)).xyz); + + vec4 FinalColor = vec4(0.); + vec3 up = (RayDir.y < .99) ? vec3(0., 1., 0.) : vec3(0., 0., 1.); + vec3 Tangent = normalize(cross(up, RayDir)); + vec3 Bitangent = cross(RayDir, Tangent); + + for (int i = 0; i < 1024; i++) + { + float Theta = samples[2 * i]; + float Phi = samples[2 * i + 1]; + + vec3 sampleDir = cos(Theta) * RayDir + sin(Theta) * cos(Phi) * Tangent + sin(Theta) * sin(Phi) * Bitangent; + FinalColor += textureLod(tex, sampleDir, 0.); + } + + FragColor = FinalColor / 1024.; +} diff --git a/src/graphics/IBL.cpp b/src/graphics/IBL.cpp index ac354d11b..71e7b854e 100644 --- a/src/graphics/IBL.cpp +++ b/src/graphics/IBL.cpp @@ -1,6 +1,8 @@ #include "IBL.hpp" #include "gl_headers.hpp" +#include "shaders.hpp" #include +#include static void getXYZ(GLenum face, float i, float j, float &x, float &y, float &z) { @@ -203,4 +205,108 @@ void SphericalHarmonics(Color *CubemapFace[6], size_t edge_size, float *blueSHCo delete[] Y21[face]; delete[] Y22[face]; } +} + +// From http://http.developer.nvidia.com/GPUGems3/gpugems3_ch20.html +/** Returns the index-th pair from Hammersley set of pseudo random set. + Hammersley set is a uniform distribution between 0 and 1 for 2 components. + We use the natural indexation on the set to avoid storing the whole set. + \param index of the pair + \param size of the set. */ +std::pair HammersleySequence(int index, int samples) +{ + float InvertedBinaryRepresentation = 0.; + for (size_t i = 0; i < 32; i++) + { + InvertedBinaryRepresentation += ((index >> i) & 0x1) * powf(.5, (float) (i + 1.)); + } + return std::make_pair(float(index) / float(samples), InvertedBinaryRepresentation); +} + + +/** Returns a pseudo random (theta, phi) generated from a probability density function modeled after Phong function. + \param a pseudo random float pair from a uniform density function between 0 and 1. + \param exponent from the Phong formula. */ +std::pair ImportanceSamplingPhong(std::pair Seeds, float exponent) +{ + return std::make_pair(acosf(powf(Seeds.first, 1.f / (exponent + 1.f))), 2.f * 3.14f * Seeds.second); +} + +static +core::matrix4 getPermutationMatrix(size_t indexX, float valX, size_t indexY, float valY, size_t indexZ, float valZ) +{ + core::matrix4 resultMat; + float *M = resultMat.pointer(); + memset(M, 0, 16 * sizeof(float)); + assert(indexX < 4); + assert(indexY < 4); + assert(indexZ < 4); + M[indexX] = valX; + M[4 + indexY] = valY; + M[8 + indexZ] = valZ; + return resultMat; +} + +GLuint generateSpecularCubemap(GLuint probe) +{ + GLuint cubemap_texture; + + glGenTextures(1, &cubemap_texture); + glBindTexture(GL_TEXTURE_CUBE_MAP, cubemap_texture); + size_t cubemap_size = 256; + for (int i = 0; i < 6; i++) + glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGBA16F, cubemap_size, cubemap_size, 0, GL_BGRA, GL_FLOAT, 0); + glGenerateMipmap(GL_TEXTURE_CUBE_MAP); + + GLuint fbo; + glGenFramebuffers(1, &fbo); + glBindFramebuffer(GL_FRAMEBUFFER, fbo); + glViewport(0, 0, cubemap_size, cubemap_size); + GLenum bufs[] = { GL_COLOR_ATTACHMENT0 }; + glDrawBuffers(1, bufs); + glUseProgram(UtilShader::SpecularIBLGenerator::getInstance()->Program); + glBindVertexArray(SharedObject::FullScreenQuadVAO); + + glDisable(GL_BLEND); + glDisable(GL_DEPTH_TEST); + glDisable(GL_CULL_FACE); + + core::matrix4 M[6] = { + getPermutationMatrix(2, -1., 1, -1., 0, 1.), + getPermutationMatrix(2, 1., 1, -1., 0, -1.), + getPermutationMatrix(0, 1., 2, 1., 1, 1.), + getPermutationMatrix(0, 1., 2, -1., 1, -1.), + getPermutationMatrix(0, 1., 1, -1., 2, 1.), + getPermutationMatrix(0, -1., 1, -1., 2, -1.), + }; + + for (unsigned level = 0; level < 8; level++) + { + // Blinn Phong can be approximated by Phong with 4x the specular coefficient + // See http://seblagarde.wordpress.com/2012/03/29/relationship-between-phong-and-blinn-lighting-model/ + float roughness = (8 - level) * 4 * pow(2., 10.) / 8.; + float viewportSize = 1 << (8 - level); + + std::vector Samples; + for (unsigned i = 0; i < 1024; i++) + { + std::pair sample = ImportanceSamplingPhong(HammersleySequence(i, 1024), roughness); + Samples.push_back(sample.first); + Samples.push_back(sample.second); + } + + for (unsigned face = 0; face < 6; face++) + { + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, cubemap_texture, level); + GLuint status = glCheckFramebufferStatus(GL_FRAMEBUFFER); + assert(status == GL_FRAMEBUFFER_COMPLETE); + + UtilShader::SpecularIBLGenerator::getInstance()->SetTextureUnits(probe); + UtilShader::SpecularIBLGenerator::getInstance()->setUniforms(M[face], Samples, viewportSize); + glDrawArrays(GL_TRIANGLES, 0, 3); + } + } + + glDeleteFramebuffers(1, &fbo); + return cubemap_texture; } \ No newline at end of file diff --git a/src/graphics/IBL.hpp b/src/graphics/IBL.hpp index 09ddd7d35..24cdac36e 100644 --- a/src/graphics/IBL.hpp +++ b/src/graphics/IBL.hpp @@ -1,6 +1,8 @@ #ifndef IBL_HPP #define IBL_HPP +#include "gl_headers.hpp" + struct Color { float Red; @@ -14,4 +16,6 @@ using the cubemap provided by CubemapFace. * \param row/columns count of textures. */ void SphericalHarmonics(Color *CubemapFace[6], size_t edge_size, float *blueSHCoeff, float *greenSHCoeff, float *redSHCoeff); + +GLuint generateSpecularCubemap(GLuint probe); #endif \ No newline at end of file diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index df502a7e3..35b8163ae 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -1365,6 +1365,7 @@ scene::ISceneNode *IrrDriver::addSkyBox(const std::vector &tex SkyboxTextures = texture; SphericalHarmonicsTextures = sphericalHarmonics; SkyboxCubeMap = 0; + SkyboxSpecularProbe = 0; m_SH_dirty = true; return m_scene_manager->addSkyBoxSceneNode(texture[0], texture[1], texture[2], texture[3], @@ -1377,8 +1378,12 @@ void IrrDriver::suppressSkyBox() SphericalHarmonicsTextures.clear(); m_SH_dirty = true; if ((SkyboxCubeMap) && (!ProfileWorld::isNoGraphics())) + { glDeleteTextures(1, &SkyboxCubeMap); + glDeleteTextures(1, &SkyboxSpecularProbe); + } SkyboxCubeMap = 0; + SkyboxSpecularProbe = 0; } // ---------------------------------------------------------------------------- diff --git a/src/graphics/irr_driver.hpp b/src/graphics/irr_driver.hpp index 843b43cd0..60a8b2154 100644 --- a/src/graphics/irr_driver.hpp +++ b/src/graphics/irr_driver.hpp @@ -254,6 +254,7 @@ private: public: GLuint SkyboxCubeMap; + GLuint SkyboxSpecularProbe; /** A simple class to store video resolutions. */ class VideoMode { diff --git a/src/graphics/render_lighting.cpp b/src/graphics/render_lighting.cpp index 1262f0881..ca5e45061 100644 --- a/src/graphics/render_lighting.cpp +++ b/src/graphics/render_lighting.cpp @@ -155,7 +155,7 @@ void IrrDriver::renderLights(unsigned pointlightcount, bool hasShadow) { ScopedGPUTimer timer(irr_driver->getGPUTimer(Q_ENVMAP)); - m_post_processing->renderEnvMap(blueSHCoeff, greenSHCoeff, redSHCoeff, SkyboxCubeMap); + m_post_processing->renderEnvMap(blueSHCoeff, greenSHCoeff, redSHCoeff, SkyboxSpecularProbe); } // Render sunlight if and only if track supports shadow diff --git a/src/graphics/render_skybox.cpp b/src/graphics/render_skybox.cpp index 2a9fc4412..c408636d5 100644 --- a/src/graphics/render_skybox.cpp +++ b/src/graphics/render_skybox.cpp @@ -280,6 +280,7 @@ void IrrDriver::generateSkyboxCubemap() assert(SkyboxTextures.size() == 6); SkyboxCubeMap = generateCubeMapFromTextures(SkyboxTextures); + SkyboxSpecularProbe = generateSpecularCubemap(SkyboxCubeMap); } void IrrDriver::generateDiffuseCoefficients() @@ -322,8 +323,8 @@ void IrrDriver::generateDiffuseCoefficients() } else { - int sh_w = 16; - int sh_h = 16; + sh_w = 16; + sh_h = 16; video::SColor ambient = m_scene_manager->getAmbientLight().toSColor(); diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 3706f140e..1b67a5546 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -889,6 +889,18 @@ unsigned getGLSLVersion() return irr_driver->getGLSLVersion(); } +namespace UtilShader +{ + SpecularIBLGenerator::SpecularIBLGenerator() + { + Program = LoadProgram(OBJECT, + GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(), + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/importance_sampling_specular.frag").c_str()); + AssignUniforms("PermutationMatrix", "samples[0]", "ViewportSize"); + AssignSamplerNames(Program, 0, "tex"); + } +} + namespace MeshShader { // Solid Normal and depth pass shaders diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index 2251cbb65..97ba49c41 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -48,6 +48,12 @@ public: static void init(); static void setUniforms(const irr::video::SColor &); }; + +class SpecularIBLGenerator : public ShaderHelperSingleton, float >, public TextureRead +{ +public: + SpecularIBLGenerator(); +}; } From 1e2656dc887c282f9673d5b2b0507139cd4dd759 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Fri, 5 Dec 2014 17:48:56 +0100 Subject: [PATCH 31/49] Use clamp instead of max(0, dot(normalized, normalized)) Should help GLSL compiler to optimize them. --- data/shaders/grass_pass2.frag | 2 +- data/shaders/instanced_grass_pass2.frag | 2 +- data/shaders/pointlight.frag | 2 +- data/shaders/sunlight.frag | 2 +- data/shaders/sunlightshadow.frag | 2 +- data/shaders/utils/SpecularBRDF.frag | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/data/shaders/grass_pass2.frag b/data/shaders/grass_pass2.frag index ac5586321..0f881c161 100644 --- a/data/shaders/grass_pass2.frag +++ b/data/shaders/grass_pass2.frag @@ -35,7 +35,7 @@ void main(void) vec3 eyedir = normalize(xpos.xyz); // Inspired from http://http.developer.nvidia.com/GPUGems3/gpugems3_ch16.html - float fEdotL = max(0., dot(SunDir, eyedir)); + float fEdotL = clamp(dot(SunDir, eyedir), 0., 1.); float fPowEdotL = pow(fEdotL, 4.); float fLdotNBack = max(0., - dot(nor, SunDir) * 0.6 + 0.4); diff --git a/data/shaders/instanced_grass_pass2.frag b/data/shaders/instanced_grass_pass2.frag index b06742743..dace65097 100644 --- a/data/shaders/instanced_grass_pass2.frag +++ b/data/shaders/instanced_grass_pass2.frag @@ -41,7 +41,7 @@ void main(void) vec3 eyedir = normalize(xpos.xyz); // Inspired from http://http.developer.nvidia.com/GPUGems3/gpugems3_ch16.html - float fEdotL = max(0., dot(SunDir, eyedir)); + float fEdotL = clamp(dot(SunDir, eyedir), 0., 1.); float fPowEdotL = pow(fEdotL, 4.); float fLdotNBack = max(0., - dot(nor, SunDir) * 0.6 + 0.4); diff --git a/data/shaders/pointlight.frag b/data/shaders/pointlight.frag index cabadc0b5..66a0b8449 100644 --- a/data/shaders/pointlight.frag +++ b/data/shaders/pointlight.frag @@ -35,7 +35,7 @@ void main() // Light Direction vec3 L = -normalize(xpos.xyz - light_pos); - float NdotL = max(0., dot(norm, L)); + float NdotL = clamp(dot(norm, L), 0., 1.); Diffuse = vec4(NdotL * light_col * att, 1.); Specular = vec4(SpecularBRDF(norm, eyedir, L, light_col, roughness) * NdotL * att, 1.); diff --git a/data/shaders/sunlight.frag b/data/shaders/sunlight.frag index e7503241e..e911e4d7e 100644 --- a/data/shaders/sunlight.frag +++ b/data/shaders/sunlight.frag @@ -46,7 +46,7 @@ void main() { // Normalized on the cpu vec3 L = direction; - float NdotL = max(0., dot(norm, L)); + float NdotL = clamp(dot(norm, L), 0., 1.); float angle = 3.14 * sunangle / 180.; vec3 R = reflect(-eyedir, norm); diff --git a/data/shaders/sunlightshadow.frag b/data/shaders/sunlightshadow.frag index c60665e63..b375be90c 100644 --- a/data/shaders/sunlightshadow.frag +++ b/data/shaders/sunlightshadow.frag @@ -60,7 +60,7 @@ void main() { // Normalized on the cpu vec3 L = direction; - float NdotL = max(0., dot(norm, L)); + float NdotL = clamp(dot(norm, L), 0., 1.); float angle = 3.14 * sunangle / 180.; vec3 R = reflect(-eyedir, norm); diff --git a/data/shaders/utils/SpecularBRDF.frag b/data/shaders/utils/SpecularBRDF.frag index 2795b3f48..79b2a18cb 100644 --- a/data/shaders/utils/SpecularBRDF.frag +++ b/data/shaders/utils/SpecularBRDF.frag @@ -4,8 +4,8 @@ vec3 SpecularBRDF(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float rou float exponentroughness = exp2(10. * roughness + 1.); // Half Light View direction vec3 H = normalize(eyedir + lightdir); - float NdotH = max(0., dot(normal, H)); + float NdotH = clamp(dot(normal, H), 0., 1.); float normalisationFactor = (exponentroughness + 2.) / 8.; - vec3 FresnelSchlick = color + (1.0f - color) * pow(1.0f - max(0., (dot(eyedir, H))), 5); + vec3 FresnelSchlick = color + (1.0f - color) * pow(1.0f - clamp(dot(eyedir, H), 0., 1.), 5); return max(pow(NdotH, exponentroughness) * FresnelSchlick * normalisationFactor, vec3(0.)); } \ No newline at end of file From f05618b3b91b47dfc7fa11a02dd615692f69d922 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Fri, 5 Dec 2014 19:17:52 -0500 Subject: [PATCH 32/49] Add possibility to specify non-translated texts in GUI XML files, and use it for debug strings that should not be translated --- data/gui/debug_slider.stkgui | 12 ++++++------ data/gui/main.stkgui | 12 ++++++------ src/guiengine/engine.cpp | 2 +- src/guiengine/screen_loader.cpp | 7 +++++++ 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/data/gui/debug_slider.stkgui b/data/gui/debug_slider.stkgui index 270f892b7..a0285405c 100644 --- a/data/gui/debug_slider.stkgui +++ b/data/gui/debug_slider.stkgui @@ -2,37 +2,37 @@
-
-
-
-
-
-
diff --git a/data/gui/main.stkgui b/data/gui/main.stkgui index 788b48e71..11769b286 100644 --- a/data/gui/main.stkgui +++ b/data/gui/main.stkgui @@ -40,17 +40,17 @@ + raw_text="TEST: GPWin" label_location="hover"/> + raw_text="TEST: GPLose" label_location="hover"/> + raw_text="TEST: Unlocked" label_location="hover"/> + raw_text="TEST: Unlocked 2" label_location="hover"/> + raw_text="TEST: Intro" label_location="hover"/> + raw_text="TEST: Outro" label_location="hover"/> Name in XML files: \c "text" + Name in XML files: \c "text" or "raw_text" ("text" is translated, "raw_text" is not) gives text (a label) to the widget where supported. Ribbon-grids give a special meaning to this parameter, see ribbon-grid docs above. diff --git a/src/guiengine/screen_loader.cpp b/src/guiengine/screen_loader.cpp index 1c1c5a23e..4126806cc 100644 --- a/src/guiengine/screen_loader.cpp +++ b/src/guiengine/screen_loader.cpp @@ -232,6 +232,13 @@ if(prop_name != NULL) widget.m_properties[prop_flag] = core::stringc(prop_name). widget.m_is_text_rtl = (translations->isRTLLanguage() && widget.m_text != text); } + const wchar_t* raw_text = xml->getAttributeValue(L"raw_text"); + + if (raw_text != NULL) + { + widget.m_text = raw_text; + } + if (parent != NULL) { widget.setParent(parent); From d3ba1ca28363ca548caefe532ddf51f653b34aed Mon Sep 17 00:00:00 2001 From: auria Date: Fri, 5 Dec 2014 19:26:09 -0500 Subject: [PATCH 33/49] Update strings --- data/po/supertuxkart.pot | 1007 +++++++++++++++++++------------------- 1 file changed, 491 insertions(+), 516 deletions(-) diff --git a/data/po/supertuxkart.pot b/data/po/supertuxkart.pot index 47511a371..69e3f768f 100644 --- a/data/po/supertuxkart.pot +++ b/data/po/supertuxkart.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: supertuxkart\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-11-25 15:04+1100\n" +"POT-Creation-Date: 2014-12-05 19:20-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -74,6 +74,16 @@ msgstr "" msgid "%s is ready" msgstr "" +#: src/states_screens/online_profile_base.cpp:108 +#, c-format +msgid "%s's profile" +msgstr "" + +#: src/states_screens/create_server_screen.cpp:60 +#, c-format +msgid "%s's server" +msgstr "" + #: src/online/online_player_profile.cpp:401 #, c-format msgid "%s, %s and %s are now online." @@ -84,23 +94,15 @@ msgstr "" msgid "'%s' has been eliminated." msgstr "" -#: src/states_screens/online_profile_base.cpp:102 -msgid "'s profile" -msgstr "" - -#: src/states_screens/create_server_screen.cpp:60 -msgid "'s server" -msgstr "" - #. I18N: for empty highscores entries #. I18N: ./data/gui/track_info.stkgui -#: src/states_screens/track_info_screen.cpp:252 data/po/gui_strings.h:211 -#: data/po/gui_strings.h:214 data/po/gui_strings.h:217 +#: src/states_screens/track_info_screen.cpp:252 data/po/gui_strings.h:17 +#: data/po/gui_strings.h:20 data/po/gui_strings.h:23 msgid "(Empty)" msgstr "" #. I18N: ./data/gui/help4.stkgui -#: data/po/gui_strings.h:189 +#: data/po/gui_strings.h:954 msgid "(network play is not yet available)" msgstr "" @@ -114,13 +116,13 @@ msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: in the help screen -#: data/po/gui_strings.h:1128 +#: data/po/gui_strings.h:929 msgid "* Current key bindings can be seen/changed in menu Options" msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:1232 +#: data/po/gui_strings.h:1012 msgid "" "* Most of these game modes can also be played in a Grand Prix fashion: " "instead of playing a single race, you play many in a row. The better you " @@ -130,12 +132,12 @@ msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:785 +#: data/po/gui_strings.h:826 msgid "* Restart STK to apply new settings" msgstr "" #. I18N: ./data/gui/options_input.stkgui -#: data/po/gui_strings.h:164 +#: data/po/gui_strings.h:1054 msgid "" "* Which config to use will be inferred from which 'Select' key is pressed to " "join the game." @@ -145,8 +147,10 @@ msgstr "" #. I18N: ./data/gui/online/profile_achievements.stkgui #. I18N: ./data/gui/online/profile_settings.stkgui #. I18N: ./data/gui/online/profile_friends.stkgui -#: data/po/gui_strings.h:295 data/po/gui_strings.h:310 -#: data/po/gui_strings.h:404 data/po/gui_strings.h:574 +#. I18N: ./data/gui/online/profile_achievements_tab.stkgui +#: data/po/gui_strings.h:403 data/po/gui_strings.h:481 +#: data/po/gui_strings.h:686 data/po/gui_strings.h:700 +#: data/po/gui_strings.h:726 msgid "..." msgstr "" @@ -177,7 +181,7 @@ msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:1220 +#: data/po/gui_strings.h:1000 msgid "" "3 Strikes Battle: Only in multiplayer games. Hit others with weapons until " "they lose all their lives." @@ -196,13 +200,13 @@ msgid "9 months" msgstr "" #. I18N: ./data/gui/track_info.stkgui -#: data/po/gui_strings.h:208 +#: data/po/gui_strings.h:14 msgid "= Highscores =" msgstr "" #. I18N: ./data/gui/gp_info.stkgui #. I18N: In the grand prix info screen -#: data/po/gui_strings.h:126 +#: data/po/gui_strings.h:147 msgid "AI karts" msgstr "" @@ -212,7 +216,7 @@ msgstr "" #. I18N: ./data/gui/main.stkgui #. I18N: In the main screen -#: data/po/gui_strings.h:1006 +#: data/po/gui_strings.h:139 msgid "About" msgstr "" @@ -221,7 +225,7 @@ msgstr "" msgid "Accelerate" msgstr "" -#: src/tracks/track_object_presentation.cpp:942 +#: src/tracks/track_object_presentation.cpp:945 #, c-format msgid "" "Accelerate and press the <%s> key while turning to skid. Skidding for a " @@ -237,7 +241,7 @@ msgstr "" #. I18N: User info dialog #. I18N: ./data/gui/online/registration_terms.stkgui #. I18N: In the registration dialog -#: data/po/gui_strings.h:358 data/po/gui_strings.h:621 +#: data/po/gui_strings.h:504 data/po/gui_strings.h:575 msgid "Accept" msgstr "" @@ -245,19 +249,22 @@ msgstr "" #. I18N: In the recovery dialog #. I18N: ./data/gui/online/recovery_info.stkgui #. I18N: In the recovery dialog -#: data/po/gui_strings.h:479 data/po/gui_strings.h:563 +#: data/po/gui_strings.h:459 data/po/gui_strings.h:715 msgid "Account Recovery" msgstr "" #. I18N: ./data/gui/online/profile_settings.stkgui #. I18N: Section in the profile screen -#: src/states_screens/online_profile_base.cpp:95 data/po/gui_strings.h:408 +#: src/states_screens/online_profile_base.cpp:101 data/po/gui_strings.h:690 msgid "Account Settings" msgstr "" -#. I18N: ./data/gui/online/profile_achievements.stkgui +#. I18N: ./data/gui/main.stkgui +#. I18N: In the main screen +#. I18N: ./data/gui/online/profile_achievements_tab.stkgui #. I18N: Section in the profile screen -#: src/states_screens/online_profile_base.cpp:94 data/po/gui_strings.h:314 +#: src/states_screens/online_profile_base.cpp:100 data/po/gui_strings.h:131 +#: data/po/gui_strings.h:730 msgid "Achievements" msgstr "" @@ -267,13 +274,13 @@ msgstr "" #. I18N: ./data/gui/gpedit.stkgui #. I18N: Menu item -#: data/po/gui_strings.h:1305 +#: data/po/gui_strings.h:1125 msgid "Add" msgstr "" #. I18N: ./data/gui/online/user_info_dialog.stkgui #. I18N: User info dialog -#: data/po/gui_strings.h:354 +#: data/po/gui_strings.h:500 msgid "Add Friend" msgstr "" @@ -284,7 +291,7 @@ msgstr "" #. I18N: ./data/gui/options_players.stkgui #. I18N: In the player configuration screen -#: data/po/gui_strings.h:948 +#: data/po/gui_strings.h:317 msgid "Add Player" msgstr "" @@ -295,7 +302,7 @@ msgstr "" #. I18N: ./data/gui/options_input.stkgui #. I18N: In the input configuration screen -#: data/po/gui_strings.h:161 +#: data/po/gui_strings.h:1051 msgid "Add a device" msgstr "" @@ -303,24 +310,24 @@ msgstr "" #. I18N: In the user screen #. I18N: ./data/gui/user_screen.stkgui #. I18N: In the user screen -#: data/po/gui_strings.h:264 data/po/gui_strings.h:918 +#: data/po/gui_strings.h:198 data/po/gui_strings.h:287 msgid "Add user" msgstr "" -#. I18N: arena group name #. I18N: track group name #. I18N: kart group name +#. I18N: arena group name #. I18N: track group name -#. I18N: ./data/gui/easter_egg.stkgui -#. I18N: track group #. I18N: ./data/gui/arenas.stkgui #. I18N: track group -#: src/states_screens/arenas_screen.cpp:83 -#: src/states_screens/grand_prix_editor_screen.cpp:336 +#. I18N: ./data/gui/easter_egg.stkgui +#. I18N: track group #: src/states_screens/tracks_screen.cpp:154 +#: src/states_screens/grand_prix_editor_screen.cpp:336 #: src/states_screens/kart_selection.cpp:286 -#: src/states_screens/easter_egg_screen.cpp:145 data/po/gui_strings.h:288 -#: data/po/gui_strings.h:1067 +#: src/states_screens/arenas_screen.cpp:83 +#: src/states_screens/easter_egg_screen.cpp:145 data/po/gui_strings.h:1225 +#: data/po/gui_strings.h:1261 msgid "Add-Ons" msgstr "" @@ -330,35 +337,36 @@ msgstr "" #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: data/po/gui_strings.h:968 +#: data/po/gui_strings.h:115 msgid "Addons" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:721 +#: data/po/gui_strings.h:762 msgid "Advanced pipeline (lights, etc.)" msgstr "" -#. I18N: name of the tab that will show arenas from all groups -#. I18N: name of the tab that will show tracks from all groups -#. I18N: Time filters for add-ons #. I18N: name of the tab that will show tracks from all groups #. I18N: if all kart animations are enabled -#. I18N: ./data/gui/easter_egg.stkgui -#. I18N: track group +#. I18N: Time filters for add-ons +#. I18N: name of the tab that will show tracks from all groups +#. I18N: name of the tab that will show arenas from all groups +#. I18N: name of the tab that will show tracks from all groups #. I18N: ./data/gui/arenas.stkgui #. I18N: track group -#: src/states_screens/arenas_screen.cpp:75 -#: src/states_screens/grand_prix_editor_screen.cpp:333 +#. I18N: ./data/gui/easter_egg.stkgui +#. I18N: track group #: src/states_screens/tracks_screen.cpp:146 +#: src/states_screens/options_screen_video.cpp:412 +#: src/states_screens/grand_prix_editor_screen.cpp:333 #: src/states_screens/addons_screen.cpp:49 #: src/states_screens/kart_selection.cpp:278 -#: src/states_screens/easter_egg_screen.cpp:137 -#: src/states_screens/gp_info_screen.cpp:76 #: src/states_screens/edit_track_screen.cpp:147 -#: src/states_screens/options_screen_video.cpp:412 data/po/gui_strings.h:292 -#: data/po/gui_strings.h:1071 +#: src/states_screens/arenas_screen.cpp:75 +#: src/states_screens/easter_egg_screen.cpp:137 +#: src/states_screens/gp_info_screen.cpp:76 data/po/gui_strings.h:1229 +#: data/po/gui_strings.h:1265 msgid "All" msgstr "" @@ -366,7 +374,7 @@ msgstr "" #. I18N: In the track selection screen #. I18N: ./data/gui/easter_egg.stkgui #. I18N: Section in easter egg tracks selection screen -#: data/po/gui_strings.h:118 data/po/gui_strings.h:280 +#: data/po/gui_strings.h:375 data/po/gui_strings.h:1253 msgid "All Tracks" msgstr "" @@ -376,13 +384,13 @@ msgstr "" #. I18N: ./data/gui/options_ui.stkgui #. I18N: In the ui settings -#: data/po/gui_strings.h:807 +#: data/po/gui_strings.h:1073 msgid "Always show login screen" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:737 +#: data/po/gui_strings.h:778 msgid "Ambient Occlusion" msgstr "" @@ -397,13 +405,13 @@ msgid "An error occurred while trying to save your grand prix." msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:1169 +#: data/po/gui_strings.h:358 msgid "Anchor - slows down greatly the kart in the first position." msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:777 +#: data/po/gui_strings.h:818 msgid "Animated Characters" msgstr "" @@ -415,7 +423,7 @@ msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:765 +#: data/po/gui_strings.h:806 msgid "Animated Scenery" msgstr "" @@ -450,7 +458,7 @@ msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:749 +#: data/po/gui_strings.h:790 msgid "Anti-aliasing" msgstr "" @@ -461,13 +469,13 @@ msgid "Anti-aliasing : %s" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui -#: data/po/gui_strings.h:788 +#: data/po/gui_strings.h:829 msgid "Apply" msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: In the video settings -#: data/po/gui_strings.h:660 +#: data/po/gui_strings.h:1213 msgid "Apply new resolution" msgstr "" @@ -476,50 +484,50 @@ msgstr "" msgid "Are you sure you want to permanently delete this configuration?" msgstr "" -#: src/states_screens/grand_prix_editor_screen.cpp:109 #: src/states_screens/edit_gp_screen.cpp:123 +#: src/states_screens/grand_prix_editor_screen.cpp:109 #, c-format msgid "Are you sure you want to remove '%s'?" msgstr "" -#. I18N: ./data/gui/addons_screen.stkgui -#. I18N: In the addons screen #. I18N: ./data/gui/arenas.stkgui #. I18N: Section in arena tracks selection screen -#: data/po/gui_strings.h:1051 data/po/gui_strings.h:1059 +#. I18N: ./data/gui/addons_screen.stkgui +#. I18N: In the addons screen +#: data/po/gui_strings.h:1217 data/po/gui_strings.h:1288 msgid "Arenas" msgstr "" #. I18N: ./data/gui/press_a_key_dialog.stkgui #. I18N: When configuring input -#: data/po/gui_strings.h:830 +#: data/po/gui_strings.h:1096 msgid "Assign nothing" msgstr "" #. I18N: ./data/gui/press_a_key_dialog.stkgui #. I18N: When configuring input -#: data/po/gui_strings.h:826 +#: data/po/gui_strings.h:1092 msgid "Assign to ESC key" msgstr "" #. I18N: ./data/grandprix/4_atworldsend.grandprix -#: data/po/gui_strings.h:8 data/po/gui_strings.h:1326 +#: data/po/gui_strings.h:2 data/po/gui_strings.h:1291 msgid "At World's End" msgstr "" #. I18N: ./data/gui/options_audio.stkgui #. I18N: Section in the settings menu -#: src/states_screens/options_screen_input2.cpp:86 -#: src/states_screens/options_screen_input.cpp:139 -#: src/states_screens/options_screen_ui.cpp:119 #: src/states_screens/user_screen.cpp:592 -#: src/states_screens/options_screen_video.cpp:136 data/po/gui_strings.h:51 +#: src/states_screens/options_screen_input2.cpp:86 +#: src/states_screens/options_screen_video.cpp:136 +#: src/states_screens/options_screen_input.cpp:139 +#: src/states_screens/options_screen_ui.cpp:119 data/po/gui_strings.h:221 msgid "Audio" msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: In the help menu -#: src/tracks/track_object_presentation.cpp:883 data/po/gui_strings.h:1112 +#: src/tracks/track_object_presentation.cpp:883 data/po/gui_strings.h:913 msgid "Avoid bananas!" msgstr "" @@ -541,22 +549,23 @@ msgstr "" msgid "Axis %d inverted" msgstr "" +#. I18N: name of buttons on gamepads #. I18N: ./data/gui/addons_loading.stkgui #. I18N: Add-on screen action #: src/states_screens/dialogs/addons_loading.cpp:284 -#: src/input/gamepad_config.cpp:203 data/po/gui_strings.h:102 +#: src/input/gamepad_config.cpp:216 data/po/gui_strings.h:1245 msgid "Back" msgstr "" #. I18N: ./data/gui/overworld_dialog.stkgui #. I18N: In the in-game dialog -#: data/po/gui_strings.h:847 +#: data/po/gui_strings.h:836 msgid "Back to Game" msgstr "" #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button -#: data/po/gui_strings.h:667 +#: data/po/gui_strings.h:859 msgid "Back to Race" msgstr "" @@ -566,13 +575,13 @@ msgstr "" #. I18N: ./data/gui/options_device.stkgui #. I18N: In the input configuration screen -#: data/po/gui_strings.h:714 +#: data/po/gui_strings.h:1152 msgid "Back to device list" msgstr "" #. I18N: ./data/gui/overworld_dialog.stkgui #. I18N: In the in-game dialog -#: data/po/gui_strings.h:863 +#: data/po/gui_strings.h:852 msgid "Back to menu" msgstr "" @@ -581,7 +590,7 @@ msgid "Back to the menu" msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:1175 +#: data/po/gui_strings.h:364 msgid "" "Basket Ball - bounces after the leader, and might squash and slow down karts " "down on the way." @@ -603,7 +612,7 @@ msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:729 +#: data/po/gui_strings.h:770 msgid "Bloom" msgstr "" @@ -613,17 +622,12 @@ msgstr "" msgid "Bloom : %s" msgstr "" -#. I18N: ./data/gui/debug_slider.stkgui -#: data/po/gui_strings.h:1019 -msgid "Blue" -msgstr "" - #: src/states_screens/race_result_gui.cpp:959 msgid "Blue Team Wins" msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:1163 +#: data/po/gui_strings.h:352 msgid "" "Bowling Ball - bounces off walls. If you are looking back, it will be thrown " "backwards." @@ -635,51 +639,51 @@ msgid "Brake" msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:1154 +#: data/po/gui_strings.h:343 msgid "" "BubbleGum - protect yourself with a shield, or use while looking back to " "leave a sticky pink puddle behind you." msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:1157 +#: data/po/gui_strings.h:346 msgid "" "Cake - thrown at the closest rival, best on short ranges and long straights." msgstr "" -#: src/addons/addons_manager.cpp:97 src/addons/news_manager.cpp:315 +#: src/addons/news_manager.cpp:315 src/addons/addons_manager.cpp:97 msgid "Can't access stkaddons server..." msgstr "" #. I18N: ./data/gui/edit_track.stkgui -#. I18N: ./data/gui/enter_player_name_dialog.stkgui -#. I18N: In the 'add new player' dialog #. I18N: ./data/gui/confirm_dialog.stkgui #. I18N: In a 'are you sure?' dialog #. I18N: ./data/gui/user_screen_tab.stkgui #. I18N: In the user screen -#. I18N: ./data/gui/online/server_info_dialog.stkgui -#. I18N: In the server info dialog -#. I18N: ./data/gui/online/create_server.stkgui -#. I18N: In the server creation screen -#. I18N: ./data/gui/online/register.stkgui -#. I18N: In the registration dialog -#. I18N: ./data/gui/online/recovery_input.stkgui -#. I18N: In the recovery dialog -#. I18N: ./data/gui/online/registration_terms.stkgui -#. I18N: In the registration dialog #. I18N: ./data/gui/confirm_resolution_dialog.stkgui #. I18N: In the 'confirm resolution' dialog, that's shown when switching resoluton #. I18N: ./data/gui/user_screen.stkgui #. I18N: In the user screen -#: src/states_screens/dialogs/add_device_dialog.cpp:128 +#. I18N: ./data/gui/online/recovery_input.stkgui +#. I18N: In the recovery dialog +#. I18N: ./data/gui/online/registration_terms.stkgui +#. I18N: In the registration dialog +#. I18N: ./data/gui/online/create_server.stkgui +#. I18N: In the server creation screen +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#. I18N: ./data/gui/online/server_info_dialog.stkgui +#. I18N: In the server info dialog +#. I18N: ./data/gui/enter_player_name_dialog.stkgui +#. I18N: In the 'add new player' dialog +#: src/states_screens/user_screen.cpp:83 #: src/states_screens/dialogs/addons_loading.cpp:227 -#: src/states_screens/user_screen.cpp:83 data/po/gui_strings.h:44 -#: data/po/gui_strings.h:87 data/po/gui_strings.h:205 -#: data/po/gui_strings.h:276 data/po/gui_strings.h:338 -#: data/po/gui_strings.h:435 data/po/gui_strings.h:475 -#: data/po/gui_strings.h:498 data/po/gui_strings.h:625 -#: data/po/gui_strings.h:699 data/po/gui_strings.h:930 +#: src/states_screens/dialogs/add_device_dialog.cpp:128 +#: data/po/gui_strings.h:87 data/po/gui_strings.h:95 data/po/gui_strings.h:210 +#: data/po/gui_strings.h:260 data/po/gui_strings.h:299 +#: data/po/gui_strings.h:478 data/po/gui_strings.h:579 +#: data/po/gui_strings.h:607 data/po/gui_strings.h:647 +#: data/po/gui_strings.h:663 data/po/gui_strings.h:1178 msgid "Cancel" msgstr "" @@ -698,49 +702,49 @@ msgstr "" #. I18N: ./data/gui/challenges.stkgui #. I18N: Title for challenges screen -#: data/po/gui_strings.h:891 +#: data/po/gui_strings.h:43 msgid "Challenges : Trophy Room" msgstr "" #. I18N: ./data/gui/online/profile_settings.stkgui -#: data/po/gui_strings.h:415 +#: data/po/gui_strings.h:697 msgid "Change" msgstr "" -#. I18N: ./data/gui/karts_online.stkgui -#. I18N: In the kart selection (player setup) screen #. I18N: ./data/gui/karts.stkgui #. I18N: In the kart selection (player setup) screen -#: data/po/gui_strings.h:1055 data/po/gui_strings.h:1082 +#. I18N: ./data/gui/karts_online.stkgui +#. I18N: In the kart selection (player setup) screen +#: data/po/gui_strings.h:1233 data/po/gui_strings.h:1249 msgid "Choose a Kart" msgstr "" #. I18N: ./data/gui/help1.stkgui -#: data/po/gui_strings.h:1104 +#: data/po/gui_strings.h:905 msgid "Click here to play the tutorial" msgstr "" -#. I18N: ./data/gui/online/vote_dialog.stkgui -#. I18N: Vote dialog -#. I18N: ./data/gui/online/notification_dialog.stkgui -#. I18N: User info dialog +#. I18N: ./data/gui/online/change_password.stkgui +#. I18N: In the change password dialog #. I18N: ./data/gui/online/user_info_dialog.stkgui #. I18N: User info dialog #. I18N: ./data/gui/online/guest_login.stkgui #. I18N: In the login dialog +#. I18N: ./data/gui/online/vote_dialog.stkgui +#. I18N: Vote dialog +#. I18N: ./data/gui/online/notification_dialog.stkgui +#. I18N: User info dialog #. I18N: ./data/gui/online/recovery_info.stkgui #. I18N: In the recovery dialog -#. I18N: ./data/gui/online/change_password.stkgui -#. I18N: In the change password dialog -#: data/po/gui_strings.h:307 data/po/gui_strings.h:322 -#: data/po/gui_strings.h:370 data/po/gui_strings.h:401 -#: data/po/gui_strings.h:571 data/po/gui_strings.h:609 +#: data/po/gui_strings.h:455 data/po/gui_strings.h:516 +#: data/po/gui_strings.h:563 data/po/gui_strings.h:587 +#: data/po/gui_strings.h:671 data/po/gui_strings.h:723 msgid "Close" msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:1108 +#: data/po/gui_strings.h:909 msgid "Collect blue boxes : they will give you weapons or other powerups" msgstr "" @@ -750,7 +754,7 @@ msgid "" "Collect gift boxes, and fire the weapon with <%s> to blow away these boxes!" msgstr "" -#: src/tracks/track_object_presentation.cpp:909 +#: src/tracks/track_object_presentation.cpp:912 msgid "Collect nitro bottles (we will use them after the curve)" msgstr "" @@ -760,7 +764,7 @@ msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:1116 +#: data/po/gui_strings.h:917 msgid "" "Collecting nitro allows you to get speed boosts whenever you wish by " "pressing the appropriate key. You can see your current level of nitro in the " @@ -776,11 +780,11 @@ msgstr "" msgid "Completed achievement \"%s\"." msgstr "" -#. I18N: ./data/gui/online/register.stkgui -#. I18N: In the registration dialog #. I18N: ./data/gui/online/change_password.stkgui #. I18N: In the change password dialog -#: data/po/gui_strings.h:459 data/po/gui_strings.h:601 +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#: data/po/gui_strings.h:447 data/po/gui_strings.h:631 msgid "Confirm" msgstr "" @@ -792,7 +796,7 @@ msgstr "" #. I18N: ./data/gui/options_ui.stkgui #. I18N: In the ui settings -#: data/po/gui_strings.h:819 +#: data/po/gui_strings.h:1085 msgid "Connect to the Internet" msgstr "" @@ -806,23 +810,23 @@ msgstr "" msgid "Contains no powerups, so only your driving skills matter!" msgstr "" -#. I18N: ./data/gui/feature_unlocked.stkgui -#. I18N: ./data/gui/tutorial_message_dialog.stkgui -#. I18N: Button in tutorial -#. I18N: ./data/gui/grand_prix_win.stkgui -#. I18N: ./data/gui/grand_prix_lose.stkgui #. I18N: ./data/gui/soccer_setup.stkgui #. I18N: In soccer setup screen +#. I18N: ./data/gui/tutorial_message_dialog.stkgui +#. I18N: Button in tutorial +#. I18N: ./data/gui/grand_prix_lose.stkgui +#. I18N: ./data/gui/feature_unlocked.stkgui +#. I18N: ./data/gui/grand_prix_win.stkgui #: src/states_screens/race_result_gui.cpp:175 -#: src/states_screens/dialogs/gp_info_dialog.cpp:212 data/po/gui_strings.h:90 -#: data/po/gui_strings.h:122 data/po/gui_strings.h:837 -#: data/po/gui_strings.h:1260 data/po/gui_strings.h:1289 +#: src/states_screens/dialogs/gp_info_dialog.cpp:212 data/po/gui_strings.h:69 +#: data/po/gui_strings.h:214 data/po/gui_strings.h:1103 +#: data/po/gui_strings.h:1109 data/po/gui_strings.h:1155 msgid "Continue" msgstr "" #. I18N: ./data/gui/gp_info.stkgui #. I18N: In the grand prix info screen -#: src/states_screens/gp_info_screen.cpp:142 data/po/gui_strings.h:146 +#: src/states_screens/gp_info_screen.cpp:142 data/po/gui_strings.h:167 msgid "Continue saved GP" msgstr "" @@ -834,17 +838,17 @@ msgstr "" #. I18N: Section in the settings menu #. I18N: ./data/gui/options_device.stkgui #. I18N: Section in the settings menu -#: src/states_screens/options_screen_ui.cpp:121 -#: src/states_screens/options_screen_audio.cpp:67 #: src/states_screens/user_screen.cpp:594 -#: src/states_screens/options_screen_video.cpp:139 data/po/gui_strings.h:153 -#: data/po/gui_strings.h:706 +#: src/states_screens/options_screen_audio.cpp:67 +#: src/states_screens/options_screen_video.cpp:139 +#: src/states_screens/options_screen_ui.cpp:121 data/po/gui_strings.h:1043 +#: data/po/gui_strings.h:1144 msgid "Controls" msgstr "" #. I18N: ./data/gui/gpeditor.stkgui #. I18N: Menu item -#: data/po/gui_strings.h:875 +#: data/po/gui_strings.h:1024 msgid "Copy" msgstr "" @@ -860,25 +864,25 @@ msgstr "" #. I18N: ./data/gui/online/create_server.stkgui #. I18N: In the server creation screen -#: data/po/gui_strings.h:431 +#: data/po/gui_strings.h:603 msgid "Create" msgstr "" #. I18N: ./data/gui/online/main.stkgui #. I18N: In the online multiplayer screen -#: data/po/gui_strings.h:535 +#: data/po/gui_strings.h:423 msgid "Create Server" msgstr "" #. I18N: ./data/gui/online/register.stkgui #. I18N: In the registration dialog -#: data/po/gui_strings.h:439 +#: data/po/gui_strings.h:611 msgid "Create User" msgstr "" #. I18N: ./data/gui/online/register.stkgui #. I18N: In the registration dialog -#: data/po/gui_strings.h:447 +#: data/po/gui_strings.h:619 msgid "Create online account" msgstr "" @@ -888,13 +892,13 @@ msgstr "" #. I18N: ./data/gui/credits.stkgui #. I18N: Title in credits screen -#: data/po/gui_strings.h:1182 +#: data/po/gui_strings.h:73 msgid "Credits" msgstr "" #. I18N: ./data/gui/online/change_password.stkgui #. I18N: In the change password dialog -#: data/po/gui_strings.h:593 +#: data/po/gui_strings.h:439 msgid "Current Password" msgstr "" @@ -913,29 +917,33 @@ msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: In the video settings -#: data/po/gui_strings.h:640 +#: data/po/gui_strings.h:1193 msgid "Custom settings..." msgstr "" -#: src/input/gamepad_config.cpp:186 src/input/gamepad_config.cpp:225 +#. I18N: name of buttons on gamepads +#: src/input/gamepad_config.cpp:195 src/input/gamepad_config.cpp:253 msgid "DPad down" msgstr "" -#: src/input/gamepad_config.cpp:185 src/input/gamepad_config.cpp:227 +#. I18N: name of buttons on gamepads +#: src/input/gamepad_config.cpp:193 src/input/gamepad_config.cpp:257 msgid "DPad left" msgstr "" -#: src/input/gamepad_config.cpp:184 src/input/gamepad_config.cpp:226 +#. I18N: name of buttons on gamepads +#: src/input/gamepad_config.cpp:191 src/input/gamepad_config.cpp:255 msgid "DPad right" msgstr "" -#: src/input/gamepad_config.cpp:187 src/input/gamepad_config.cpp:224 +#. I18N: name of buttons on gamepads +#: src/input/gamepad_config.cpp:197 src/input/gamepad_config.cpp:251 msgid "DPad up" msgstr "" #. I18N: ./data/gui/online/user_info_dialog.stkgui #. I18N: User info dialog -#: data/po/gui_strings.h:362 +#: data/po/gui_strings.h:508 msgid "Decline" msgstr "" @@ -947,19 +955,19 @@ msgstr "" #. I18N: In the user screen #. I18N: ./data/gui/user_screen.stkgui #. I18N: In the user screen -#: data/po/gui_strings.h:268 data/po/gui_strings.h:922 +#: data/po/gui_strings.h:202 data/po/gui_strings.h:291 msgid "Delete" msgstr "" #. I18N: ./data/gui/options_device.stkgui #. I18N: In the input configuration screen -#: src/states_screens/options_screen_input2.cpp:111 data/po/gui_strings.h:710 +#: src/states_screens/options_screen_input2.cpp:111 data/po/gui_strings.h:1148 msgid "Delete Configuration" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:757 +#: data/po/gui_strings.h:798 msgid "Depth of field" msgstr "" @@ -985,7 +993,7 @@ msgstr "" #. I18N: ./data/gui/options_ui.stkgui #. I18N: In the ui settings -#: data/po/gui_strings.h:803 +#: data/po/gui_strings.h:1069 msgid "Display FPS" msgstr "" @@ -1003,8 +1011,8 @@ msgstr "" msgid "Do you want to save your changes?" msgstr "" -#: src/karts/controller/network_player_controller.cpp:283 #: src/karts/controller/player_controller.cpp:340 +#: src/karts/controller/network_player_controller.cpp:283 msgid "Don't accelerate before go" msgstr "" @@ -1015,7 +1023,7 @@ msgstr "" #. I18N: ./data/gui/track_info.stkgui #. I18N: In the track info screen -#: data/po/gui_strings.h:229 +#: data/po/gui_strings.h:35 msgid "Drive in reverse" msgstr "" @@ -1029,13 +1037,13 @@ msgstr "" #. I18N: Menu item #. I18N: ./data/gui/gpedit.stkgui #. I18N: Menu item -#: data/po/gui_strings.h:879 data/po/gui_strings.h:1309 +#: data/po/gui_strings.h:1028 data/po/gui_strings.h:1129 msgid "Edit" msgstr "" #. I18N: ./data/gui/gpedit.stkgui #. I18N: Title in edit grand prix screen -#: data/po/gui_strings.h:1293 +#: data/po/gui_strings.h:1113 msgid "Edit Grand Prix" msgstr "" @@ -1046,7 +1054,7 @@ msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:1228 +#: data/po/gui_strings.h:1008 msgid "Egg hunt: Explore tracks to find all hidden eggs." msgstr "" @@ -1060,11 +1068,11 @@ msgstr "" msgid "Eliminated" msgstr "" -#. I18N: ./data/gui/online/register.stkgui -#. I18N: In the registration dialog #. I18N: ./data/gui/online/recovery_input.stkgui #. I18N: In the recovery dialog -#: data/po/gui_strings.h:463 data/po/gui_strings.h:490 +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#: data/po/gui_strings.h:470 data/po/gui_strings.h:635 msgid "Email" msgstr "" @@ -1088,7 +1096,7 @@ msgstr "" #. I18N: ./data/gui/options_ui.stkgui #. I18N: In the ui settings -#: data/po/gui_strings.h:815 +#: data/po/gui_strings.h:1081 msgid "Enable handicaped users" msgstr "" @@ -1096,8 +1104,8 @@ msgstr "" #. indicates a graphical feature is enabled #. I18N: ./data/gui/options_audio.stkgui #. I18N: In the audio options screen -#: src/states_screens/options_screen_video.cpp:407 data/po/gui_strings.h:59 -#: data/po/gui_strings.h:71 +#: src/states_screens/options_screen_video.cpp:407 data/po/gui_strings.h:229 +#: data/po/gui_strings.h:241 msgid "Enabled" msgstr "" @@ -1108,7 +1116,7 @@ msgstr "" #. I18N: ./data/gui/enter_player_name_dialog.stkgui #. I18N: In the 'add new player' dialog -#: data/po/gui_strings.h:79 +#: data/po/gui_strings.h:1170 msgid "Enter the new player's name" msgstr "" @@ -1117,7 +1125,7 @@ msgstr "" msgid "Error downloading news: '%s'." msgstr "" -#: src/states_screens/kart_selection.cpp:927 +#: src/states_screens/kart_selection.cpp:922 msgid "" "Everyone:\n" "Press 'Select' now to join the game!" @@ -1125,13 +1133,13 @@ msgstr "" #. I18N: ./data/gui/online/lobby.stkgui #. I18N: In the networking lobby -#: data/po/gui_strings.h:559 +#: data/po/gui_strings.h:532 msgid "Exit" msgstr "" #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button -#: data/po/gui_strings.h:691 +#: data/po/gui_strings.h:883 msgid "Exit Race" msgstr "" @@ -1143,7 +1151,7 @@ msgstr "" #. I18N: Difficulty #. I18N: ./data/gui/racesetup.stkgui #. I18N: Difficulty -#: data/po/gui_strings.h:30 data/po/gui_strings.h:1250 +#: data/po/gui_strings.h:394 data/po/gui_strings.h:748 msgid "Expert" msgstr "" @@ -1151,18 +1159,18 @@ msgstr "" msgid "Explore tracks to find all hidden eggs" msgstr "" -#: src/graphics/irr_driver.cpp:1837 +#: src/graphics/irr_driver.cpp:1839 #, c-format msgid "FPS: %d/%d/%d - PolyCount: %d Solid, %d Shadows - LightDist : %d" msgstr "" -#: src/graphics/irr_driver.cpp:1846 +#: src/graphics/irr_driver.cpp:1848 #, c-format msgid "FPS: %d/%d/%d - %d KTris" msgstr "" -#: src/states_screens/online_profile_achievements.cpp:126 -#: src/states_screens/online_profile_achievements.cpp:166 +#: src/states_screens/online_profile_achievements.cpp:128 +#: src/states_screens/online_profile_achievements.cpp:168 msgid "Fetching achievements" msgstr "" @@ -1181,7 +1189,7 @@ msgid "Fetching servers" msgstr "" #. I18N: ./data/gui/online/recovery_input.stkgui -#: data/po/gui_strings.h:482 +#: data/po/gui_strings.h:462 msgid "" "Fill in the username and email address you supplied at registration to be " "able to reset your password." @@ -1193,7 +1201,7 @@ msgstr "" #. I18N: ./data/gui/online/main.stkgui #. I18N: In the online multiplayer screen -#: data/po/gui_strings.h:531 +#: data/po/gui_strings.h:419 msgid "Find Server" msgstr "" @@ -1204,7 +1212,7 @@ msgstr "" #. I18N: ./data/gui/help4.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:193 +#: data/po/gui_strings.h:958 msgid "" "First, you will need several input devices (having multiple gamepads or " "joysticks is the best way to play with several people). Go in the input " @@ -1225,7 +1233,7 @@ msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:1216 +#: data/po/gui_strings.h:996 msgid "" "Follow the leader: Run for second place, as the last kart will be " "disqualified every time the counter hits zero. Beware : going in front of " @@ -1254,18 +1262,18 @@ msgid "Friend request declined!" msgstr "" #: src/states_screens/dialogs/user_info_dialog.cpp:158 -msgid "Friend request send!" +msgid "Friend request sent!" msgstr "" #. I18N: ./data/gui/online/profile_friends.stkgui #. I18N: Section in the profile screen -#: src/states_screens/online_profile_base.cpp:93 data/po/gui_strings.h:578 +#: src/states_screens/online_profile_base.cpp:99 data/po/gui_strings.h:704 msgid "Friends" msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: In the video settings -#: data/po/gui_strings.h:652 +#: data/po/gui_strings.h:1205 msgid "Fullscreen" msgstr "" @@ -1279,22 +1287,22 @@ msgstr "" msgid "Game Keys" msgstr "" -#. I18N: ./data/gui/help4.stkgui +#. I18N: ./data/gui/help2.stkgui #. I18N: Tab in help menu #. I18N: ./data/gui/help1.stkgui #. I18N: Tab in help menu -#. I18N: ./data/gui/help2.stkgui +#. I18N: ./data/gui/help4.stkgui #. I18N: Tab in help menu #. I18N: ./data/gui/help3.stkgui #. I18N: Tab in help menu -#: data/po/gui_strings.h:179 data/po/gui_strings.h:1097 -#: data/po/gui_strings.h:1143 data/po/gui_strings.h:1197 +#: data/po/gui_strings.h:332 data/po/gui_strings.h:898 +#: data/po/gui_strings.h:944 data/po/gui_strings.h:977 msgid "Game Modes" msgstr "" #. I18N: ./data/gui/soccer_setup.stkgui #. I18N: In soccer setup screen -#: data/po/gui_strings.h:1278 +#: data/po/gui_strings.h:58 msgid "Game type (Goals limit / Time limit)" msgstr "" @@ -1310,28 +1318,28 @@ msgstr "" msgid "Gamepad hat %d" msgstr "" -#. I18N: ./data/gui/help4.stkgui +#. I18N: ./data/gui/help2.stkgui #. I18N: Tab in help menu #. I18N: ./data/gui/help1.stkgui #. I18N: Tab in help menu -#. I18N: ./data/gui/help2.stkgui +#. I18N: ./data/gui/help4.stkgui #. I18N: Tab in help menu #. I18N: ./data/gui/help3.stkgui #. I18N: Tab in help menu -#: data/po/gui_strings.h:171 data/po/gui_strings.h:1089 -#: data/po/gui_strings.h:1135 data/po/gui_strings.h:1189 +#: data/po/gui_strings.h:324 data/po/gui_strings.h:890 +#: data/po/gui_strings.h:936 data/po/gui_strings.h:969 msgid "General" msgstr "" #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button -#: data/po/gui_strings.h:679 +#: data/po/gui_strings.h:871 msgid "Give Up Race" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:741 +#: data/po/gui_strings.h:782 msgid "Global illumination" msgstr "" @@ -1343,7 +1351,7 @@ msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:745 +#: data/po/gui_strings.h:786 msgid "Glow (outlines)" msgstr "" @@ -1361,19 +1369,19 @@ msgstr "" #. I18N: ./data/gui/tracks.stkgui #. I18N: In the track selection screen #: src/states_screens/dialogs/select_challenge.cpp:145 -#: data/po/gui_strings.h:114 +#: data/po/gui_strings.h:371 msgid "Grand Prix" msgstr "" #. I18N: ./data/gui/main.stkgui #. I18N: In the main screen -#: data/po/gui_strings.h:1002 +#: data/po/gui_strings.h:135 msgid "Grand Prix Editor" msgstr "" #. I18N: ./data/gui/gpeditor.stkgui #. I18N: Title in grand prix editor screen -#: data/po/gui_strings.h:867 +#: data/po/gui_strings.h:1016 msgid "Grand Prix editor" msgstr "" @@ -1383,30 +1391,25 @@ msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: In the video settings -#: data/po/gui_strings.h:636 +#: data/po/gui_strings.h:1189 msgid "Graphical Effects Level" msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: Section in the settings menu +#: src/states_screens/user_screen.cpp:591 #: src/states_screens/options_screen_input2.cpp:85 -#: src/states_screens/options_screen_input.cpp:138 -#: src/states_screens/options_screen_ui.cpp:118 #: src/states_screens/options_screen_audio.cpp:64 -#: src/states_screens/user_screen.cpp:591 data/po/gui_strings.h:632 +#: src/states_screens/options_screen_input.cpp:138 +#: src/states_screens/options_screen_ui.cpp:118 data/po/gui_strings.h:1185 msgid "Graphics" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui -#: data/po/gui_strings.h:717 +#: data/po/gui_strings.h:758 msgid "Graphics Settings" msgstr "" -#. I18N: ./data/gui/debug_slider.stkgui -#: data/po/gui_strings.h:1016 -msgid "Green" -msgstr "" - #. I18N: Name of first guest player (without number) #: src/config/player_manager.cpp:392 msgid "Guest" @@ -1420,18 +1423,18 @@ msgstr "" #. I18N: ./data/gui/online/guest_login.stkgui #. I18N: In the login dialog -#: data/po/gui_strings.h:389 +#: data/po/gui_strings.h:551 msgid "Guest Sign in" msgstr "" -#. I18N: ./data/gui/race_paused_dialog.stkgui -#. I18N: Race paused button -#. I18N: ./data/gui/overworld_dialog.stkgui -#. I18N: In the in-game dialog #. I18N: ./data/gui/main.stkgui #. I18N: In the main screen -#: data/po/gui_strings.h:687 data/po/gui_strings.h:859 -#: data/po/gui_strings.h:994 +#. I18N: ./data/gui/overworld_dialog.stkgui +#. I18N: In the in-game dialog +#. I18N: ./data/gui/race_paused_dialog.stkgui +#. I18N: Race paused button +#: data/po/gui_strings.h:123 data/po/gui_strings.h:848 +#: data/po/gui_strings.h:879 msgid "Help" msgstr "" @@ -1452,13 +1455,13 @@ msgstr "" #. I18N: ./data/gui/online/registration_terms.stkgui #. I18N: In the registration dialog -#: data/po/gui_strings.h:617 +#: data/po/gui_strings.h:571 msgid "I agree to the above terms and am 13 years or older. " msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:1120 +#: data/po/gui_strings.h:921 msgid "" "If you see a button with a lock like this one, you need to complete a " "challenge to unlock it." @@ -1471,7 +1474,7 @@ msgstr "" #. I18N: ./data/gui/addons_loading.stkgui #. I18N: Add-on screen action -#: data/po/gui_strings.h:94 +#: data/po/gui_strings.h:1237 msgid "Install" msgstr "" @@ -1479,12 +1482,12 @@ msgstr "" #. I18N: Difficulty #. I18N: ./data/gui/racesetup.stkgui #. I18N: Difficulty -#: data/po/gui_strings.h:26 data/po/gui_strings.h:1246 +#: data/po/gui_strings.h:390 data/po/gui_strings.h:744 msgid "Intermediate" msgstr "" -#: src/states_screens/register_screen.cpp:347 #: src/states_screens/user_screen.cpp:277 +#: src/states_screens/register_screen.cpp:347 msgid "Internet access is disabled, please enable it in the options" msgstr "" @@ -1494,7 +1497,7 @@ msgstr "" #. I18N: ./data/gui/online/server_info_dialog.stkgui #. I18N: In the server info dialog -#: data/po/gui_strings.h:334 +#: data/po/gui_strings.h:659 msgid "Join" msgstr "" @@ -1504,13 +1507,13 @@ msgstr "" #. I18N: ./data/gui/addons_screen.stkgui #. I18N: In the addons screen -#: data/po/gui_strings.h:1043 +#: data/po/gui_strings.h:1280 msgid "Karts" msgstr "" #. I18N: ./data/gui/confirm_resolution_dialog.stkgui #. I18N: In the 'confirm resolution' dialog, that's shown when switching resoluton -#: data/po/gui_strings.h:695 +#: data/po/gui_strings.h:256 msgid "Keep this resolution" msgstr "" @@ -1557,37 +1560,45 @@ msgstr "" msgid "Left" msgstr "" -#: src/input/gamepad_config.cpp:201 +#. I18N: name of buttons on gamepads +#: src/input/gamepad_config.cpp:212 msgid "Left bumper" msgstr "" -#: src/input/gamepad_config.cpp:205 +#. I18N: name of buttons on gamepads +#: src/input/gamepad_config.cpp:220 msgid "Left thumb button" msgstr "" -#: src/input/gamepad_config.cpp:216 +#. I18N: name of stick on gamepads +#: src/input/gamepad_config.cpp:235 msgid "Left thumb down" msgstr "" -#: src/input/gamepad_config.cpp:215 +#. I18N: name of stick on gamepads +#: src/input/gamepad_config.cpp:233 msgid "Left thumb left" msgstr "" -#: src/input/gamepad_config.cpp:214 +#. I18N: name of stick on gamepads +#: src/input/gamepad_config.cpp:231 msgid "Left thumb right" msgstr "" -#: src/input/gamepad_config.cpp:217 +#. I18N: name of stick on gamepads +#: src/input/gamepad_config.cpp:237 msgid "Left thumb up" msgstr "" -#: src/input/gamepad_config.cpp:178 src/input/gamepad_config.cpp:218 +#. I18N: name of buttons on gamepads +#. I18N: name of stick on gamepads +#: src/input/gamepad_config.cpp:179 src/input/gamepad_config.cpp:239 msgid "Left trigger" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:733 +#: data/po/gui_strings.h:774 msgid "Light shaft (God rays)" msgstr "" @@ -1603,34 +1614,34 @@ msgstr "" #. I18N: ./data/gui/online/lobby.stkgui #. I18N: In networking lobby -#: data/po/gui_strings.h:547 +#: data/po/gui_strings.h:520 msgid "Lobby" msgstr "" #. I18N: ./data/gui/online/lobby_settings.stkgui #. I18N: In the lobby settings screen -#: data/po/gui_strings.h:508 +#: data/po/gui_strings.h:675 msgid "Lobby Settings" msgstr "" #. I18N: ./data/gui/online/register.stkgui #. I18N: In the registration dialog -#: data/po/gui_strings.h:443 +#: data/po/gui_strings.h:615 msgid "Local Username" msgstr "" -#: src/states_screens/kart_selection.cpp:856 +#: src/states_screens/kart_selection.cpp:852 msgid "Locked" msgstr "" +#: src/states_screens/tracks_screen.cpp:282 +#: src/states_screens/race_setup_screen.cpp:214 +#: src/states_screens/kart_selection.cpp:857 +#: src/states_screens/kart_selection.cpp:1448 #: src/states_screens/arenas_screen.cpp:237 #: src/states_screens/arenas_screen.cpp:267 -#: src/states_screens/tracks_screen.cpp:282 -#: src/states_screens/kart_selection.cpp:861 -#: src/states_screens/kart_selection.cpp:1453 #: src/states_screens/easter_egg_screen.cpp:225 #: src/states_screens/easter_egg_screen.cpp:256 -#: src/states_screens/race_setup_screen.cpp:214 msgid "Locked : solve active challenges to gain access to more!" msgstr "" @@ -1638,11 +1649,11 @@ msgstr "" msgid "Locked!" msgstr "" -#. I18N: ./data/gui/online/guest_login.stkgui #. I18N: ./data/gui/user_screen.stkgui +#. I18N: ./data/gui/online/guest_login.stkgui #: src/states_screens/main_menu_screen.cpp:175 -#: src/states_screens/main_menu_screen.cpp:186 data/po/gui_strings.h:373 -#: data/po/gui_strings.h:894 +#: src/states_screens/main_menu_screen.cpp:186 data/po/gui_strings.h:263 +#: data/po/gui_strings.h:535 msgid "Login" msgstr "" @@ -1653,7 +1664,7 @@ msgstr "" #. I18N: ./data/gui/online/profile_friends.stkgui #. I18N: In the profile screen -#: data/po/gui_strings.h:582 +#: data/po/gui_strings.h:708 msgid "Look for more friends:" msgstr "" @@ -1661,13 +1672,13 @@ msgstr "" #. I18N: In the server creation screen #. I18N: ./data/gui/online/lobby_settings.stkgui #. I18N: In the lobby settings screen -#: data/po/gui_strings.h:427 data/po/gui_strings.h:516 +#: data/po/gui_strings.h:599 data/po/gui_strings.h:683 msgid "Max. number of players" msgstr "" #. I18N: ./data/gui/soccer_setup.stkgui #. I18N: In soccer setup screen -#: data/po/gui_strings.h:1274 +#: data/po/gui_strings.h:54 msgid "Maximum time (min.)" msgstr "" @@ -1683,7 +1694,7 @@ msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:753 +#: data/po/gui_strings.h:794 msgid "Motion blur" msgstr "" @@ -1707,48 +1718,48 @@ msgstr "" #. I18N: ./data/gui/gpedit.stkgui #. I18N: Menu item -#: data/po/gui_strings.h:1301 +#: data/po/gui_strings.h:1121 msgid "Move down" msgstr "" #. I18N: ./data/gui/gpedit.stkgui #. I18N: Menu item -#: data/po/gui_strings.h:1297 +#: data/po/gui_strings.h:1117 msgid "Move up" msgstr "" #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: data/po/gui_strings.h:960 +#: data/po/gui_strings.h:107 msgid "Multiplayer" msgstr "" -#. I18N: ./data/gui/help4.stkgui +#. I18N: ./data/gui/help2.stkgui #. I18N: Tab in help menu #. I18N: ./data/gui/help1.stkgui #. I18N: Tab in help menu -#. I18N: ./data/gui/help2.stkgui +#. I18N: ./data/gui/help4.stkgui #. I18N: Tab in help menu #. I18N: ./data/gui/help3.stkgui #. I18N: Tab in help menu -#: data/po/gui_strings.h:183 data/po/gui_strings.h:1101 -#: data/po/gui_strings.h:1147 data/po/gui_strings.h:1201 +#: data/po/gui_strings.h:336 data/po/gui_strings.h:902 +#: data/po/gui_strings.h:948 data/po/gui_strings.h:981 msgid "Multi­player" msgstr "" #. I18N: ./data/gui/options_audio.stkgui #. I18N: In the audio options screen -#: data/po/gui_strings.h:55 +#: data/po/gui_strings.h:225 msgid "Music" msgstr "" -#. I18N: ./data/gui/online/server_info_dialog.stkgui -#. I18N: In the server info dialog #. I18N: ./data/gui/online/user_info_dialog.stkgui #. I18N: User info dialog -#: src/states_screens/online_profile_achievements.cpp:72 -#: src/states_screens/server_selection.cpp:91 data/po/gui_strings.h:330 -#: data/po/gui_strings.h:346 +#. I18N: ./data/gui/online/server_info_dialog.stkgui +#. I18N: In the server info dialog +#: src/states_screens/server_selection.cpp:91 +#: src/states_screens/online_profile_achievements.cpp:73 +#: data/po/gui_strings.h:492 data/po/gui_strings.h:655 msgid "Name" msgstr "" @@ -1768,13 +1779,13 @@ msgstr "" #. I18N: In the server creation screen #. I18N: ./data/gui/online/lobby_settings.stkgui #. I18N: In the lobby settings screen -#: data/po/gui_strings.h:423 data/po/gui_strings.h:512 +#: data/po/gui_strings.h:595 data/po/gui_strings.h:679 msgid "Name of the server" msgstr "" #. I18N: ./data/gui/gpeditor.stkgui #. I18N: Menu item -#: data/po/gui_strings.h:871 +#: data/po/gui_strings.h:1020 msgid "New" msgstr "" @@ -1785,7 +1796,7 @@ msgstr "" #. I18N: ./data/gui/online/change_password.stkgui #. I18N: In the change password dialog -#: data/po/gui_strings.h:597 +#: data/po/gui_strings.h:443 msgid "New Password" msgstr "" @@ -1832,8 +1843,8 @@ msgid "No" msgstr "" #. I18N: if no kart animations are enabled -#: src/states_screens/gp_info_screen.cpp:75 #: src/states_screens/options_screen_video.cpp:416 +#: src/states_screens/gp_info_screen.cpp:75 msgid "None" msgstr "" @@ -1842,7 +1853,7 @@ msgstr "" msgid "Normal Race" msgstr "" -#: src/tracks/track_object_presentation.cpp:950 +#: src/tracks/track_object_presentation.cpp:953 msgid "" "Note that if you manage to skid for several seconds, you will receive a " "bonus speedup as a reward!" @@ -1852,7 +1863,7 @@ msgstr "" #. I18N: Difficulty #. I18N: ./data/gui/racesetup.stkgui #. I18N: Difficulty -#: data/po/gui_strings.h:22 data/po/gui_strings.h:1242 +#: data/po/gui_strings.h:386 data/po/gui_strings.h:740 msgid "Novice" msgstr "" @@ -1863,46 +1874,46 @@ msgstr "" #. I18N: ./data/gui/track_info.stkgui #. I18N: In the track info screen -#: data/po/gui_strings.h:225 +#: data/po/gui_strings.h:31 msgid "Number of AI karts" msgstr "" #. I18N: ./data/gui/soccer_setup.stkgui #. I18N: In soccer setup screen -#: data/po/gui_strings.h:1270 +#: data/po/gui_strings.h:50 msgid "Number of goals to win" msgstr "" #. I18N: ./data/gui/track_info.stkgui #. I18N: In the track info screen -#: data/po/gui_strings.h:221 +#: data/po/gui_strings.h:27 msgid "Number of laps" msgstr "" #. I18N: ./data/gui/edit_track.stkgui #. I18N: In the edit track screen -#: data/po/gui_strings.h:34 +#: data/po/gui_strings.h:77 msgid "Number of laps:" msgstr "" #. I18N: ./data/gui/edit_track.stkgui -#. I18N: ./data/gui/enter_player_name_dialog.stkgui -#. I18N: In the 'add new player' dialog #. I18N: ./data/gui/user_screen_tab.stkgui #. I18N: In the user screen +#. I18N: ./data/gui/user_screen.stkgui +#. I18N: In the user screen #. I18N: ./data/gui/online/register.stkgui #. I18N: In the registration dialog -#. I18N: ./data/gui/user_screen.stkgui -#. I18N: In the user screen +#. I18N: ./data/gui/enter_player_name_dialog.stkgui +#. I18N: In the 'add new player' dialog #: src/states_screens/dialogs/message_dialog.cpp:95 -#: src/states_screens/dialogs/message_dialog.cpp:108 data/po/gui_strings.h:41 -#: data/po/gui_strings.h:83 data/po/gui_strings.h:260 -#: data/po/gui_strings.h:471 data/po/gui_strings.h:914 +#: src/states_screens/dialogs/message_dialog.cpp:108 data/po/gui_strings.h:84 +#: data/po/gui_strings.h:194 data/po/gui_strings.h:283 +#: data/po/gui_strings.h:643 data/po/gui_strings.h:1174 msgid "OK" msgstr "" #. I18N: ./data/grandprix/2_offthebeatentrack.grandprix -#: data/po/gui_strings.h:11 data/po/gui_strings.h:1329 +#: data/po/gui_strings.h:8 data/po/gui_strings.h:1297 msgid "Off the beaten track" msgstr "" @@ -1910,28 +1921,28 @@ msgstr "" msgid "Offline" msgstr "" +#. I18N: ./data/gui/main.stkgui +#. I18N: Main menu button #. I18N: ./data/gui/user_screen_tab.stkgui #. I18N: In the user screen #. I18N: ./data/gui/user_screen.stkgui #. I18N: In the user screen -#. I18N: ./data/gui/main.stkgui -#. I18N: Main menu button +#: src/states_screens/online_profile_friends.cpp:149 #: src/states_screens/main_menu_screen.cpp:170 -#: src/states_screens/main_menu_screen.cpp:185 -#: src/states_screens/online_profile_friends.cpp:149 data/po/gui_strings.h:244 -#: data/po/gui_strings.h:898 data/po/gui_strings.h:964 +#: src/states_screens/main_menu_screen.cpp:185 data/po/gui_strings.h:111 +#: data/po/gui_strings.h:178 data/po/gui_strings.h:267 msgid "Online" msgstr "" #. I18N: ./data/gui/online/main.stkgui #. I18N: In the online multiplayer screen -#: data/po/gui_strings.h:523 +#: data/po/gui_strings.h:411 msgid "Online Multiplayer" msgstr "" #. I18N: ./data/gui/online/register.stkgui #. I18N: In the registration dialog -#: data/po/gui_strings.h:451 +#: data/po/gui_strings.h:623 msgid "Online Username" msgstr "" @@ -1947,53 +1958,53 @@ msgstr "" msgid "Only the Game Master may act at this point!" msgstr "" -#: src/tracks/track_object_presentation.cpp:929 +#: src/tracks/track_object_presentation.cpp:932 #, c-format msgid "Oops! When you're in trouble, press <%s> to be rescued" msgstr "" -#. I18N: ./data/gui/race_paused_dialog.stkgui -#. I18N: Race paused button -#. I18N: ./data/gui/overworld_dialog.stkgui -#. I18N: In the in-game dialog #. I18N: ./data/gui/main.stkgui #. I18N: In the main screen -#: data/po/gui_strings.h:683 data/po/gui_strings.h:855 -#: data/po/gui_strings.h:990 +#. I18N: ./data/gui/overworld_dialog.stkgui +#. I18N: In the in-game dialog +#. I18N: ./data/gui/race_paused_dialog.stkgui +#. I18N: Race paused button +#: data/po/gui_strings.h:119 data/po/gui_strings.h:844 +#: data/po/gui_strings.h:875 msgid "Options" msgstr "" #. I18N: ./data/gui/online/profile_overview.stkgui #. I18N: Section in the profile screen -#: data/po/gui_strings.h:299 +#: data/po/gui_strings.h:407 msgid "Overview" msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:1166 +#: data/po/gui_strings.h:355 msgid "Parachute - slows down all karts in a better position." msgstr "" #. I18N: ./data/gui/user_screen_tab.stkgui #. I18N: In the registration dialog -#. I18N: ./data/gui/online/register.stkgui -#. I18N: In the registration dialog #. I18N: ./data/gui/user_screen.stkgui #. I18N: In the user screen -#: data/po/gui_strings.h:256 data/po/gui_strings.h:455 -#: data/po/gui_strings.h:910 +#. I18N: ./data/gui/online/register.stkgui +#. I18N: In the registration dialog +#: data/po/gui_strings.h:190 data/po/gui_strings.h:279 +#: data/po/gui_strings.h:627 msgid "Password" msgstr "" #. I18N: ./data/gui/online/profile_settings.stkgui #. I18N: In the online account settings screen -#: data/po/gui_strings.h:412 +#: data/po/gui_strings.h:694 msgid "Password :" msgstr "" #. I18N: ./data/gui/online/change_password.stkgui #. I18N: In the change password dialog -#: data/po/gui_strings.h:589 +#: data/po/gui_strings.h:435 msgid "Password Change" msgstr "" @@ -2016,14 +2027,14 @@ msgstr "" msgid "Pause Game" msgstr "" -#. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: ./data/gui/overworld_dialog.stkgui -#: data/po/gui_strings.h:663 data/po/gui_strings.h:843 +#. I18N: ./data/gui/race_paused_dialog.stkgui +#: data/po/gui_strings.h:832 data/po/gui_strings.h:855 msgid "Paused" msgstr "" -#: src/karts/controller/network_player_controller.cpp:281 #: src/karts/controller/player_controller.cpp:338 +#: src/karts/controller/network_player_controller.cpp:281 msgid "Penalty time!!" msgstr "" @@ -2032,7 +2043,7 @@ msgid "Pending" msgstr "" #. I18N: ./data/grandprix/1_penguinplayground.grandprix -#: data/po/gui_strings.h:2 data/po/gui_strings.h:1320 +#: data/po/gui_strings.h:5 data/po/gui_strings.h:1294 msgid "Penguin Playground" msgstr "" @@ -2041,7 +2052,7 @@ msgid "Performing vote" msgstr "" #. I18N: ./data/gui/tutorial.stkgui -#: data/po/gui_strings.h:1078 +#: data/po/gui_strings.h:252 msgid "Play all" msgstr "" @@ -2050,18 +2061,18 @@ msgstr "" #. I18N: ./data/gui/options_players.stkgui #. I18N: Section in the settings menu #: src/states_screens/options_screen_input2.cpp:88 -#: src/states_screens/options_screen_input.cpp:141 #: src/states_screens/server_selection.cpp:92 -#: src/states_screens/options_screen_ui.cpp:120 #: src/states_screens/options_screen_audio.cpp:66 -#: src/states_screens/options_screen_video.cpp:138 data/po/gui_strings.h:240 -#: data/po/gui_strings.h:937 +#: src/states_screens/options_screen_video.cpp:138 +#: src/states_screens/options_screen_input.cpp:141 +#: src/states_screens/options_screen_ui.cpp:120 data/po/gui_strings.h:174 +#: data/po/gui_strings.h:306 msgid "Players" msgstr "" #. I18N: ./data/gui/enter_gp_name_dialog.stkgui #. I18N: In the 'add new grand prix' dialog -#: data/po/gui_strings.h:106 +#: data/po/gui_strings.h:1162 msgid "Please enter the name of the grand prix" msgstr "" @@ -2074,54 +2085,54 @@ msgstr "" msgid "Please wait while addons are updated" msgstr "" -#: src/states_screens/main_menu_screen.cpp:553 +#: src/states_screens/main_menu_screen.cpp:557 msgid "Please wait while the add-ons are loading" msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:1160 +#: data/po/gui_strings.h:349 msgid "" "Plunger - throw straight to pull an opponent back, or throw while looking " "back to make one lose sight." msgstr "" -#: src/tracks/track_object_presentation.cpp:902 +#: src/tracks/track_object_presentation.cpp:904 #, c-format msgid "" -"Press to look behind, to fire the weapon with <%s> while pressing to " +"Press <%s> to look behind, and fire the weapon with <%s> while pressing <%s> " "to fire behind!" msgstr "" -#. I18N: ./data/gui/enter_gp_name_dialog.stkgui -#. I18N: In the 'add new grand prix' dialog #. I18N: ./data/gui/press_a_key_dialog.stkgui #. I18N: When configuring input -#: data/po/gui_strings.h:110 data/po/gui_strings.h:834 +#. I18N: ./data/gui/enter_gp_name_dialog.stkgui +#. I18N: In the 'add new grand prix' dialog +#: data/po/gui_strings.h:1100 data/po/gui_strings.h:1166 msgid "Press ESC to cancel" msgstr "" #. I18N: ./data/gui/press_a_key_dialog.stkgui -#: data/po/gui_strings.h:822 +#: data/po/gui_strings.h:1088 msgid "Press a key" msgstr "" #. I18N: ./data/gui/options_input.stkgui #. I18N: In the input configuration screen -#: data/po/gui_strings.h:157 +#: data/po/gui_strings.h:1047 msgid "Press enter or double-click on a device to configure it" msgstr "" #. I18N: ./data/gui/options_players.stkgui #. I18N: In the player configuration screen -#: data/po/gui_strings.h:944 +#: data/po/gui_strings.h:313 msgid "Press enter or double-click on a player to edit him/her" msgstr "" -#: src/states_screens/race_gui_overworld.cpp:464 +#: src/states_screens/race_gui_overworld.cpp:462 msgid "Press fire to play the tutorial" msgstr "" -#: src/states_screens/race_gui_overworld.cpp:534 +#: src/states_screens/race_gui_overworld.cpp:532 msgid "Press fire to start the challenge" msgstr "" @@ -2131,12 +2142,12 @@ msgid "" "mode, then click on Ok.Detailed instructions at supertuxkart.net/Wiimote" msgstr "" -#: src/states_screens/dialogs/addons_loading.cpp:358 +#: src/states_screens/dialogs/addons_loading.cpp:357 #, c-format msgid "Problems installing the addon '%s'." msgstr "" -#: src/states_screens/dialogs/addons_loading.cpp:397 +#: src/states_screens/dialogs/addons_loading.cpp:394 #, c-format msgid "Problems removing the addon '%s'." msgstr "" @@ -2147,11 +2158,11 @@ msgstr "" #. I18N: ./data/gui/online/main.stkgui #. I18N: In the online multiplayer screen -#: data/po/gui_strings.h:539 +#: data/po/gui_strings.h:427 msgid "Profile" msgstr "" -#: src/states_screens/online_profile_achievements.cpp:78 +#: src/states_screens/online_profile_achievements.cpp:79 msgid "Progress" msgstr "" @@ -2163,13 +2174,13 @@ msgstr "" #. I18N: ./data/gui/online/main.stkgui #. I18N: In the online multiplayer screen -#: data/po/gui_strings.h:527 +#: data/po/gui_strings.h:415 msgid "Quick Play" msgstr "" #. I18N: ./data/gui/main.stkgui #. I18N: In the main screen -#: data/po/gui_strings.h:1010 +#: data/po/gui_strings.h:143 msgid "Quit" msgstr "" @@ -2177,11 +2188,11 @@ msgstr "" msgid "Quit the server." msgstr "" +#. I18N: ./data/gui/soccer_setup.stkgui #. I18N: ./data/gui/select_challenge.stkgui #. I18N: ./data/gui/racesetup.stkgui -#. I18N: ./data/gui/soccer_setup.stkgui -#: data/po/gui_strings.h:14 data/po/gui_strings.h:1235 -#: data/po/gui_strings.h:1266 +#: data/po/gui_strings.h:46 data/po/gui_strings.h:378 +#: data/po/gui_strings.h:733 msgid "Race Setup" msgstr "" @@ -2197,8 +2208,8 @@ msgstr "" msgid "Random Grand Prix" msgstr "" -#: src/states_screens/kart_selection.cpp:842 -#: src/states_screens/kart_selection.cpp:1472 +#: src/states_screens/kart_selection.cpp:838 +#: src/states_screens/kart_selection.cpp:1466 msgid "Random Kart" msgstr "" @@ -2213,7 +2224,7 @@ msgstr "" #. I18N: ./data/gui/addons_screen.stkgui #. I18N: In addons screen, in the filtering bar, to enable a filter that will show only items with good rating -#: data/po/gui_strings.h:1039 +#: data/po/gui_strings.h:1276 msgid "Rating >=" msgstr "" @@ -2222,24 +2233,19 @@ msgstr "" msgid "Ready!" msgstr "" -#. I18N: ./data/gui/debug_slider.stkgui -#: data/po/gui_strings.h:1013 -msgid "Red" -msgstr "" - #: src/states_screens/race_result_gui.cpp:955 msgid "Red Team Wins" msgstr "" #. I18N: ./data/gui/online/guest_login.stkgui #. I18N: Tab in login menu -#: data/po/gui_strings.h:385 +#: data/po/gui_strings.h:547 msgid "Register" msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:1208 +#: data/po/gui_strings.h:988 msgid "" "Regular Race: All blows allowed, so catch weapons and make clever use of " "them!" @@ -2254,13 +2260,13 @@ msgstr "" #. I18N: In the user screen #. I18N: ./data/gui/user_screen.stkgui #. I18N: In the user screen -#: data/po/gui_strings.h:248 data/po/gui_strings.h:902 +#: data/po/gui_strings.h:182 data/po/gui_strings.h:271 msgid "Remember password" msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: In the video settings -#: data/po/gui_strings.h:656 +#: data/po/gui_strings.h:1209 msgid "Remember window location" msgstr "" @@ -2270,19 +2276,19 @@ msgstr "" #. I18N: Menu item #. I18N: ./data/gui/gpedit.stkgui #. I18N: Menu item -#: data/po/gui_strings.h:350 data/po/gui_strings.h:883 -#: data/po/gui_strings.h:1313 +#: data/po/gui_strings.h:496 data/po/gui_strings.h:1032 +#: data/po/gui_strings.h:1133 msgid "Remove" msgstr "" #. I18N: ./data/gui/user_screen_tab.stkgui #. I18N: In the user screen -#. I18N: ./data/gui/gpeditor.stkgui -#. I18N: Menu item #. I18N: ./data/gui/user_screen.stkgui #. I18N: In the user screen -#: data/po/gui_strings.h:272 data/po/gui_strings.h:887 -#: data/po/gui_strings.h:926 +#. I18N: ./data/gui/gpeditor.stkgui +#. I18N: Menu item +#: data/po/gui_strings.h:206 data/po/gui_strings.h:295 +#: data/po/gui_strings.h:1036 msgid "Rename" msgstr "" @@ -2308,7 +2314,7 @@ msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: In the video settings -#: data/po/gui_strings.h:648 +#: data/po/gui_strings.h:1201 msgid "Resolution" msgstr "" @@ -2318,19 +2324,19 @@ msgstr "" #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button -#: data/po/gui_strings.h:675 +#: data/po/gui_strings.h:867 msgid "Restart Race" msgstr "" #. I18N: ./data/gui/gp_info.stkgui #. I18N: In the grand prix info screen -#: data/po/gui_strings.h:130 +#: data/po/gui_strings.h:151 msgid "Reverse" msgstr "" #. I18N: ./data/gui/edit_track.stkgui #. I18N: In the edit track screen -#: data/po/gui_strings.h:38 +#: data/po/gui_strings.h:81 msgid "Reverse:" msgstr "" @@ -2343,64 +2349,61 @@ msgstr "" msgid "Right" msgstr "" -#: src/input/gamepad_config.cpp:202 +#. I18N: name of buttons on gamepads +#: src/input/gamepad_config.cpp:214 msgid "Right bumper" msgstr "" -#: src/input/gamepad_config.cpp:206 +#. I18N: name of buttons on gamepads +#: src/input/gamepad_config.cpp:222 msgid "Right thumb button" msgstr "" -#: src/input/gamepad_config.cpp:181 src/input/gamepad_config.cpp:220 +#. I18N: name of buttons on gamepads +#. I18N: name of stick on gamepads +#: src/input/gamepad_config.cpp:185 src/input/gamepad_config.cpp:243 msgid "Right thumb down" msgstr "" -#: src/input/gamepad_config.cpp:180 src/input/gamepad_config.cpp:223 +#. I18N: name of buttons on gamepads +#. I18N: name of stick on gamepads +#: src/input/gamepad_config.cpp:183 src/input/gamepad_config.cpp:249 msgid "Right thumb left" msgstr "" -#: src/input/gamepad_config.cpp:179 src/input/gamepad_config.cpp:222 +#. I18N: name of buttons on gamepads +#. I18N: name of stick on gamepads +#: src/input/gamepad_config.cpp:181 src/input/gamepad_config.cpp:247 msgid "Right thumb right" msgstr "" -#: src/input/gamepad_config.cpp:182 src/input/gamepad_config.cpp:221 +#. I18N: name of buttons on gamepads +#. I18N: name of stick on gamepads +#: src/input/gamepad_config.cpp:187 src/input/gamepad_config.cpp:245 msgid "Right thumb up" msgstr "" -#: src/input/gamepad_config.cpp:183 src/input/gamepad_config.cpp:219 +#. I18N: name of buttons on gamepads +#. I18N: name of stick on gamepads +#: src/input/gamepad_config.cpp:189 src/input/gamepad_config.cpp:241 msgid "Right trigger" msgstr "" -#. I18N: ./data/gui/debug_slider.stkgui -#: data/po/gui_strings.h:1025 -msgid "SSAO K" -msgstr "" - -#. I18N: ./data/gui/debug_slider.stkgui -#: data/po/gui_strings.h:1022 -msgid "SSAO Radius" -msgstr "" - -#. I18N: ./data/gui/debug_slider.stkgui -#: data/po/gui_strings.h:1028 -msgid "SSAO sigma" -msgstr "" - #. I18N: ./data/gui/gpedit.stkgui #. I18N: Menu item -#: data/po/gui_strings.h:1317 +#: data/po/gui_strings.h:1137 msgid "Save" msgstr "" -#. I18N: ./data/gui/grand_prix_win.stkgui #. I18N: ./data/gui/grand_prix_lose.stkgui -#: data/po/gui_strings.h:840 data/po/gui_strings.h:1263 +#. I18N: ./data/gui/grand_prix_win.stkgui +#: data/po/gui_strings.h:1106 data/po/gui_strings.h:1158 msgid "Save Grand Prix" msgstr "" #. I18N: ./data/gui/online/user_search.stkgui #. I18N: ./data/gui/online/profile_friends.stkgui -#: data/po/gui_strings.h:504 data/po/gui_strings.h:585 +#: data/po/gui_strings.h:400 data/po/gui_strings.h:711 msgid "Search" msgstr "" @@ -2415,12 +2418,12 @@ msgid "Select" msgstr "" #. I18N: ./data/gui/racesetup.stkgui -#: data/po/gui_strings.h:1238 +#: data/po/gui_strings.h:736 msgid "Select a difficulty" msgstr "" #. I18N: ./data/gui/racesetup.stkgui -#: data/po/gui_strings.h:1257 +#: data/po/gui_strings.h:755 msgid "Select a game mode" msgstr "" @@ -2430,36 +2433,36 @@ msgstr "" #. I18N: ./data/gui/overworld_dialog.stkgui #. I18N: In the in-game dialog -#: data/po/gui_strings.h:851 +#: data/po/gui_strings.h:840 msgid "Select kart" msgstr "" #. I18N: ./data/gui/options_ui.stkgui #. I18N: In the ui settings -#: data/po/gui_strings.h:811 +#: data/po/gui_strings.h:1077 msgid "Send anonymous HW statistics" msgstr "" #. I18N: ./data/gui/online/create_server.stkgui #. I18N: In the server creation screen -#: data/po/gui_strings.h:419 +#: data/po/gui_strings.h:591 msgid "Server Creation" msgstr "" #. I18N: ./data/gui/online/server_info_dialog.stkgui #. I18N: In the server info dialog -#: data/po/gui_strings.h:326 +#: data/po/gui_strings.h:651 msgid "Server Info" msgstr "" #. I18N: ./data/gui/online/server_selection.stkgui -#: data/po/gui_strings.h:519 +#: data/po/gui_strings.h:484 msgid "Server Selection" msgstr "" #. I18N: ./data/gui/online/lobby.stkgui #. I18N: In the networking lobby -#: data/po/gui_strings.h:551 +#: data/po/gui_strings.h:524 msgid "Server name :" msgstr "" @@ -2474,13 +2477,13 @@ msgstr "" #. I18N: ./data/gui/race_paused_dialog.stkgui #. I18N: Race paused button -#: src/states_screens/race_result_gui.cpp:198 data/po/gui_strings.h:671 +#: src/states_screens/race_result_gui.cpp:198 data/po/gui_strings.h:863 msgid "Setup New Race" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:725 +#: data/po/gui_strings.h:766 msgid "Shadows" msgstr "" @@ -2494,19 +2497,19 @@ msgstr "" #. I18N: Tab in login menu #. I18N: ./data/gui/online/guest_login.stkgui #. I18N: In the login dialog -#: data/po/gui_strings.h:377 data/po/gui_strings.h:397 +#: data/po/gui_strings.h:539 data/po/gui_strings.h:559 msgid "Sign In" msgstr "" #. I18N: ./data/gui/online/guest_login.stkgui #. I18N: Tab in login menu -#: data/po/gui_strings.h:381 +#: data/po/gui_strings.h:543 msgid "Sign In As Guest" msgstr "" #. I18N: ./data/gui/online/main.stkgui #. I18N: In the online multiplayer screen -#: data/po/gui_strings.h:543 +#: data/po/gui_strings.h:431 msgid "Sign Out" msgstr "" @@ -2526,7 +2529,7 @@ msgstr "" #. I18N: ./data/gui/online/guest_login.stkgui #. I18N: In the login dialog -#: data/po/gui_strings.h:393 +#: data/po/gui_strings.h:555 msgid "" "Signing in as a guest allows you to participate in online races, but it does " "not allow you to vote for addons, or collect any achievements while being " @@ -2548,7 +2551,7 @@ msgstr "" #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: data/po/gui_strings.h:956 +#: data/po/gui_strings.h:103 msgid "Singleplayer" msgstr "" @@ -2564,7 +2567,7 @@ msgstr "" #. I18N: ./data/gui/options_ui.stkgui #. I18N: In the ui settings -#: data/po/gui_strings.h:799 +#: data/po/gui_strings.h:1065 msgid "Skin" msgstr "" @@ -2575,14 +2578,14 @@ msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:1224 +#: data/po/gui_strings.h:1004 msgid "" "Soccer: Only in multiplayer games. Use your kart to push the ball into the " "goal." msgstr "" +#: src/states_screens/main_menu_screen.cpp:550 #: src/states_screens/addons_screen.cpp:514 -#: src/states_screens/main_menu_screen.cpp:546 msgid "" "Sorry, an error occurred while contacting the add-ons website. Make sure you " "are connected to the Internet and that SuperTuxKart is not blocked by a " @@ -2595,20 +2598,21 @@ msgstr "" #. I18N: ./data/gui/options_audio.stkgui #. I18N: In the audio options screen -#: data/po/gui_strings.h:67 +#: data/po/gui_strings.h:237 msgid "Sound Effects" msgstr "" -#. I18N: ./data/gui/easter_egg.stkgui -#. I18N: track group #. I18N: ./data/gui/arenas.stkgui #. I18N: track group +#. I18N: ./data/gui/easter_egg.stkgui +#. I18N: track group #: src/states_screens/grand_prix_editor_screen.cpp:334 -#: data/po/gui_strings.h:284 data/po/gui_strings.h:1063 +#: data/po/gui_strings.h:1221 data/po/gui_strings.h:1257 msgid "Standard" msgstr "" -#: src/input/gamepad_config.cpp:204 +#. I18N: name of buttons on gamepads +#: src/input/gamepad_config.cpp:218 msgid "Start" msgstr "" @@ -2616,11 +2620,11 @@ msgstr "" msgid "Start Grand Prix" msgstr "" -#. I18N: ./data/gui/gp_info.stkgui -#. I18N: In the grand prix info screen #. I18N: ./data/gui/track_info.stkgui #. I18N: In the track info screen -#: data/po/gui_strings.h:142 data/po/gui_strings.h:233 +#. I18N: ./data/gui/gp_info.stkgui +#. I18N: In the grand prix info screen +#: data/po/gui_strings.h:39 data/po/gui_strings.h:163 msgid "Start Race" msgstr "" @@ -2640,59 +2644,59 @@ msgstr "" #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: data/po/gui_strings.h:952 +#: data/po/gui_strings.h:99 msgid "Story Mode" msgstr "" -#. I18N: ./data/gui/online/recovery_input.stkgui -#. I18N: In the recovery dialog #. I18N: ./data/gui/online/change_password.stkgui #. I18N: In the change password dialog -#: data/po/gui_strings.h:494 data/po/gui_strings.h:605 +#. I18N: ./data/gui/online/recovery_input.stkgui +#. I18N: In the recovery dialog +#: data/po/gui_strings.h:451 data/po/gui_strings.h:474 msgid "Submit" msgstr "" #. I18N: ./data/gui/racesetup.stkgui #. I18N: Difficulty -#: data/po/gui_strings.h:1254 +#: data/po/gui_strings.h:752 msgid "SuperTux" msgstr "" #. I18N: ./data/gui/addons_screen.stkgui -#: data/po/gui_strings.h:1031 +#: data/po/gui_strings.h:1268 msgid "SuperTuxKart Addons" msgstr "" -#. I18N: ./data/gui/help4.stkgui -#. I18N: ./data/gui/help1.stkgui #. I18N: ./data/gui/help2.stkgui +#. I18N: ./data/gui/help1.stkgui +#. I18N: ./data/gui/help4.stkgui #. I18N: ./data/gui/help3.stkgui -#: data/po/gui_strings.h:167 data/po/gui_strings.h:1085 -#: data/po/gui_strings.h:1131 data/po/gui_strings.h:1185 +#: data/po/gui_strings.h:320 data/po/gui_strings.h:886 +#: data/po/gui_strings.h:932 data/po/gui_strings.h:965 msgid "SuperTuxKart Help" msgstr "" -#. I18N: ./data/gui/options_audio.stkgui -#. I18N: ./data/gui/options_input.stkgui #. I18N: ./data/gui/user_screen_tab.stkgui -#. I18N: ./data/gui/options_video.stkgui -#. I18N: ./data/gui/options_device.stkgui -#. I18N: ./data/gui/options_ui.stkgui +#. I18N: ./data/gui/options_audio.stkgui #. I18N: ./data/gui/options_players.stkgui -#: data/po/gui_strings.h:47 data/po/gui_strings.h:149 -#: data/po/gui_strings.h:236 data/po/gui_strings.h:628 -#: data/po/gui_strings.h:702 data/po/gui_strings.h:791 -#: data/po/gui_strings.h:933 +#. I18N: ./data/gui/options_input.stkgui +#. I18N: ./data/gui/options_ui.stkgui +#. I18N: ./data/gui/options_device.stkgui +#. I18N: ./data/gui/options_video.stkgui +#: data/po/gui_strings.h:170 data/po/gui_strings.h:217 +#: data/po/gui_strings.h:302 data/po/gui_strings.h:1039 +#: data/po/gui_strings.h:1057 data/po/gui_strings.h:1140 +#: data/po/gui_strings.h:1181 msgid "SuperTuxKart Options" msgstr "" #. I18N: ./data/gui/help4.stkgui -#: data/po/gui_strings.h:186 +#: data/po/gui_strings.h:951 msgid "SuperTuxKart can be played in multiplayer mode on the same computer" msgstr "" #. I18N: ./data/gui/help3.stkgui -#: data/po/gui_strings.h:1204 +#: data/po/gui_strings.h:984 msgid "SuperTuxKart features several game modes" msgstr "" @@ -2707,14 +2711,14 @@ msgid "" msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:1172 +#: data/po/gui_strings.h:361 msgid "" "Swapper - gift boxes are transformed into bananas and vice versa for a short " "time." msgstr "" #. I18N: ./data/gui/help2.stkgui -#: data/po/gui_strings.h:1178 +#: data/po/gui_strings.h:367 msgid "Swatter - will squash karts close by, slowing them down." msgstr "" @@ -2723,61 +2727,31 @@ msgstr "" msgid "System Language" msgstr "" -#. I18N: ./data/gui/main.stkgui -#: data/po/gui_strings.h:974 -msgid "TEST: GPLose" -msgstr "" - -#. I18N: ./data/gui/main.stkgui -#: data/po/gui_strings.h:971 -msgid "TEST: GPWin" -msgstr "" - -#. I18N: ./data/gui/main.stkgui -#: data/po/gui_strings.h:983 -msgid "TEST: Intro" -msgstr "" - -#. I18N: ./data/gui/main.stkgui -#: data/po/gui_strings.h:986 -msgid "TEST: Outro" -msgstr "" - -#. I18N: ./data/gui/main.stkgui -#: data/po/gui_strings.h:977 -msgid "TEST: Unlocked" -msgstr "" - -#. I18N: ./data/gui/main.stkgui -#: data/po/gui_strings.h:980 -msgid "TEST: Unlocked 2" -msgstr "" - #. I18N: ./data/gui/online/registration_terms.stkgui #. I18N: In the registration dialog -#: data/po/gui_strings.h:613 +#: data/po/gui_strings.h:567 msgid "Terms and Agreement" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:769 +#: data/po/gui_strings.h:810 msgid "Texture compression" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:781 +#: data/po/gui_strings.h:822 msgid "Texture filtering" msgstr "" #. I18N: ./data/gui/help1.stkgui #. I18N: in the help menu -#: data/po/gui_strings.h:1124 +#: data/po/gui_strings.h:925 msgid "The 'skidding' key allows you to skid in sharp turns and get a boost." msgstr "" -#: src/states_screens/main_menu_screen.cpp:541 +#: src/states_screens/main_menu_screen.cpp:545 msgid "The add-ons module is currently disabled in the Options screen" msgstr "" @@ -2798,7 +2772,7 @@ msgstr "" #. I18N: ./data/gui/help3.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:1212 +#: data/po/gui_strings.h:992 msgid "Time Trial: Contains no powerups, so only your driving skills matter!" msgstr "" @@ -2816,12 +2790,12 @@ msgstr "" #. I18N: ./data/gui/help2.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:1151 +#: data/po/gui_strings.h:340 msgid "To help you win, there are some powerups you can collect :" msgstr "" #. I18N: ./data/grandprix/3_tothemoonandback.grandprix -#: data/po/gui_strings.h:5 data/po/gui_strings.h:1323 +#: data/po/gui_strings.h:11 data/po/gui_strings.h:1300 msgid "To the moon and back" msgstr "" @@ -2854,7 +2828,7 @@ msgstr "" #. I18N: ./data/gui/gp_info.stkgui #. I18N: In the grand prix info screen -#: data/po/gui_strings.h:138 +#: data/po/gui_strings.h:159 msgid "Track group" msgstr "" @@ -2862,7 +2836,7 @@ msgstr "" #. I18N: In the grand prix info screen #. I18N: ./data/gui/addons_screen.stkgui #. I18N: In the addons screen -#: data/po/gui_strings.h:134 data/po/gui_strings.h:1047 +#: data/po/gui_strings.h:155 data/po/gui_strings.h:1284 msgid "Tracks" msgstr "" @@ -2870,30 +2844,30 @@ msgstr "" msgid "Trilinear" msgstr "" -#: src/states_screens/dialogs/addons_loading.cpp:370 -#: src/states_screens/dialogs/addons_loading.cpp:409 +#: src/states_screens/dialogs/addons_loading.cpp:369 +#: src/states_screens/dialogs/addons_loading.cpp:406 msgid "Try again" msgstr "" #. I18N: ./data/gui/main.stkgui #. I18N: In the main screen -#: src/states_screens/race_gui_overworld.cpp:457 data/po/gui_strings.h:998 +#: src/states_screens/race_gui_overworld.cpp:455 data/po/gui_strings.h:127 msgid "Tutorial" msgstr "" #. I18N: ./data/gui/tutorial.stkgui #. I18N: Title for tutorials screen -#: data/po/gui_strings.h:1075 +#: data/po/gui_strings.h:249 msgid "Tutorial : Selection Room" msgstr "" #. I18N: ./data/gui/select_challenge.stkgui #. I18N: Type of race, in a challenge -#: data/po/gui_strings.h:18 +#: data/po/gui_strings.h:382 msgid "Type :" msgstr "" -#: src/states_screens/race_gui_overworld.cpp:504 +#: src/states_screens/race_gui_overworld.cpp:502 msgid "Type: Grand Prix" msgstr "" @@ -2905,7 +2879,7 @@ msgstr "" #. I18N: ./data/gui/addons_loading.stkgui #. I18N: Add-on screen action -#: data/po/gui_strings.h:98 +#: data/po/gui_strings.h:1241 msgid "Uninstall" msgstr "" @@ -2920,7 +2894,7 @@ msgstr "" #. I18N: ./data/gui/addons_screen.stkgui #. I18N: In addons screen, in the filtering bar, to enable a filter that will show only recently updated items -#: data/po/gui_strings.h:1035 +#: data/po/gui_strings.h:1272 msgid "Updated" msgstr "" @@ -2930,34 +2904,34 @@ msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:773 +#: data/po/gui_strings.h:814 msgid "Use high definition textures" msgstr "" #. I18N: ./data/gui/soccer_setup.stkgui #. I18N: In soccer setup screen -#: data/po/gui_strings.h:1282 +#: data/po/gui_strings.h:62 msgid "Use left/right to choose your team and press fire" msgstr "" -#: src/tracks/track_object_presentation.cpp:919 +#: src/tracks/track_object_presentation.cpp:922 #, c-format msgid "Use the nitro you collected by pressing <%s>!" msgstr "" #. I18N: ./data/gui/online/user_info_dialog.stkgui #. I18N: User info dialog' dialog -#: data/po/gui_strings.h:342 +#: data/po/gui_strings.h:488 msgid "User Info" msgstr "" #. I18N: ./data/gui/options_ui.stkgui #. I18N: Section in the settings menu -#: src/states_screens/options_screen_input2.cpp:87 -#: src/states_screens/options_screen_input.cpp:140 -#: src/states_screens/options_screen_audio.cpp:65 #: src/states_screens/user_screen.cpp:593 -#: src/states_screens/options_screen_video.cpp:137 data/po/gui_strings.h:795 +#: src/states_screens/options_screen_input2.cpp:87 +#: src/states_screens/options_screen_audio.cpp:65 +#: src/states_screens/options_screen_video.cpp:137 +#: src/states_screens/options_screen_input.cpp:140 data/po/gui_strings.h:1061 msgid "User Interface" msgstr "" @@ -2966,19 +2940,19 @@ msgid "User defined" msgstr "" #. I18N: ./data/gui/online/user_search.stkgui -#: data/po/gui_strings.h:501 +#: data/po/gui_strings.h:397 msgid "User search" msgstr "" #. I18N: ./data/gui/user_screen_tab.stkgui #. I18N: In the user screen -#. I18N: ./data/gui/online/recovery_input.stkgui -#. I18N: In the recovery dialog #. I18N: ./data/gui/user_screen.stkgui #. I18N: In the user screen +#. I18N: ./data/gui/online/recovery_input.stkgui +#. I18N: In the recovery dialog #: src/states_screens/online_user_search.cpp:74 -#: src/states_screens/online_profile_friends.cpp:67 data/po/gui_strings.h:252 -#: data/po/gui_strings.h:486 data/po/gui_strings.h:906 +#: src/states_screens/online_profile_friends.cpp:67 data/po/gui_strings.h:186 +#: data/po/gui_strings.h:275 data/po/gui_strings.h:466 msgid "Username" msgstr "" @@ -2987,7 +2961,7 @@ msgid "Username and/or email address invalid." msgstr "" #. I18N: ./data/gui/soccer_setup.stkgui -#: data/po/gui_strings.h:1285 +#: data/po/gui_strings.h:65 msgid "VS" msgstr "" @@ -3004,27 +2978,27 @@ msgstr "" #. I18N: ./data/gui/options_video.stkgui #. I18N: In the video settings -#: data/po/gui_strings.h:644 +#: data/po/gui_strings.h:1197 msgid "Vertical Sync (requires restart)" msgstr "" -#. I18N: ./data/gui/online/notification_dialog.stkgui -#. I18N: User info dialog #. I18N: ./data/gui/online/user_info_dialog.stkgui #. I18N: User info dialog -#: data/po/gui_strings.h:318 data/po/gui_strings.h:366 +#. I18N: ./data/gui/online/notification_dialog.stkgui +#. I18N: User info dialog +#: data/po/gui_strings.h:512 data/po/gui_strings.h:667 msgid "View" msgstr "" #. I18N: ./data/gui/options_audio.stkgui #. I18N: In the audio options screen -#: data/po/gui_strings.h:63 data/po/gui_strings.h:75 +#: data/po/gui_strings.h:233 data/po/gui_strings.h:245 msgid "Volume" msgstr "" #. I18N: ./data/gui/online/vote_dialog.stkgui #. I18N: In the vote dialog -#: data/po/gui_strings.h:303 +#: data/po/gui_strings.h:583 msgid "Vote" msgstr "" @@ -3043,22 +3017,22 @@ msgid "" "working." msgstr "" -#. I18N: ./data/gui/help4.stkgui +#. I18N: ./data/gui/help2.stkgui #. I18N: Tab in help menu #. I18N: ./data/gui/help1.stkgui #. I18N: Tab in help menu -#. I18N: ./data/gui/help2.stkgui +#. I18N: ./data/gui/help4.stkgui #. I18N: Tab in help menu #. I18N: ./data/gui/help3.stkgui #. I18N: Tab in help menu -#: data/po/gui_strings.h:175 data/po/gui_strings.h:1093 -#: data/po/gui_strings.h:1139 data/po/gui_strings.h:1193 +#: data/po/gui_strings.h:328 data/po/gui_strings.h:894 +#: data/po/gui_strings.h:940 data/po/gui_strings.h:973 msgid "Weapons" msgstr "" #. I18N: ./data/gui/custom_video_settings.stkgui #. I18N: Video settings -#: data/po/gui_strings.h:761 +#: data/po/gui_strings.h:802 msgid "Weather Effects" msgstr "" @@ -3070,7 +3044,7 @@ msgstr "" #. I18N: ./data/gui/help4.stkgui #. I18N: In the help menu -#: data/po/gui_strings.h:197 +#: data/po/gui_strings.h:962 msgid "" "When input devices are configured, you are ready to play. Select the " "'multiplayer race' icon in the main menu. When it is time to choose a kart, " @@ -3087,16 +3061,16 @@ msgstr "" #. I18N: ./data/gui/confirm_dialog.stkgui #. I18N: In a 'are you sure?' dialog -#: src/states_screens/edit_gp_screen.cpp:253 data/po/gui_strings.h:201 +#: src/states_screens/edit_gp_screen.cpp:253 data/po/gui_strings.h:91 msgid "Yes" msgstr "" -#: src/tracks/track_object_presentation.cpp:958 +#: src/tracks/track_object_presentation.cpp:961 msgid "You are now ready to race. Good luck!" msgstr "" #. I18N: ./data/gui/options_players.stkgui -#: data/po/gui_strings.h:940 +#: data/po/gui_strings.h:309 msgid "You are playing as" msgstr "" @@ -3120,7 +3094,7 @@ msgstr "" #. I18N: ./data/gui/online/register.stkgui #. I18N: In the registration dialog -#: data/po/gui_strings.h:467 +#: data/po/gui_strings.h:639 msgid "" "You can play without creating an online account by unchecking the online " "checkbox, though then you can not connect to friends, vote for addons etc. " @@ -3129,8 +3103,8 @@ msgid "" "supertuxkart.net" msgstr "" -#: src/states_screens/grand_prix_win.cpp:125 #: src/states_screens/race_result_gui.cpp:164 +#: src/states_screens/grand_prix_win.cpp:125 msgid "You completed a challenge!" msgstr "" @@ -3204,7 +3178,7 @@ msgstr "" #. I18N: ./data/gui/online/recovery_info.stkgui #. I18N: In the recovery dialog -#: data/po/gui_strings.h:567 +#: data/po/gui_strings.h:719 msgid "" "You will receive an email with further instructions on how to reset your " "password. Please be patient and be sure to check your spam folder." @@ -3236,7 +3210,8 @@ msgstr "" msgid "Your input config file is not compatible with this version of STK." msgstr "" -#: src/states_screens/online_profile_base.cpp:99 +#: src/states_screens/online_profile_base.cpp:105 +#: src/states_screens/online_profile_base.cpp:115 msgid "Your profile" msgstr "" @@ -3247,7 +3222,7 @@ msgstr "" #. I18N: ./data/gui/online/lobby.stkgui #. I18N: In networking lobby -#: data/po/gui_strings.h:555 +#: data/po/gui_strings.h:528 msgid "actions" msgstr "" @@ -3268,13 +3243,13 @@ msgstr "" msgid "low" msgstr "" -#. I18N: arena group name #. I18N: track group name #. I18N: kart group name +#. I18N: arena group name #. I18N: track group name -#: src/states_screens/arenas_screen.cpp:81 #: src/states_screens/tracks_screen.cpp:152 #: src/states_screens/kart_selection.cpp:284 +#: src/states_screens/arenas_screen.cpp:81 #: src/states_screens/easter_egg_screen.cpp:143 msgid "standard" msgstr "" From 8a2128fe7eafbb731bb10617f093f0461fa1b1fe Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Fri, 5 Dec 2014 19:55:24 -0500 Subject: [PATCH 34/49] Cleanup additive material detection --- src/graphics/stkmesh.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/graphics/stkmesh.cpp b/src/graphics/stkmesh.cpp index cd3fb7fa7..3047c0876 100644 --- a/src/graphics/stkmesh.cpp +++ b/src/graphics/stkmesh.cpp @@ -34,11 +34,7 @@ TransparentMaterial MaterialTypeToTransparentMaterial(video::E_MATERIAL_TYPE typ { if (type == irr_driver->getShader(ES_DISPLACE)) return TM_DISPLACEMENT; - video::E_BLEND_FACTOR srcFact, DstFact; - video::E_MODULATE_FUNC mod; - u32 alpha; - unpack_textureBlendFunc(srcFact, DstFact, mod, alpha, MaterialTypeParam); - if (DstFact == video::EBF_ONE || type == video::EMT_TRANSPARENT_ADD_COLOR) + if (material->getShaderType() == Material::SHADERTYPE_ADDITIVE) return TM_ADDITIVE; return TM_DEFAULT; } From 7367342755cc056381a83a4192110f730f02b821 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sat, 6 Dec 2014 02:06:59 +0100 Subject: [PATCH 35/49] Fix split_stream wrong blending op "immediate_draw" objects were assumed to be always blended but splitstream is additive. --- src/graphics/stkmeshscenenode.cpp | 7 ++++++- src/graphics/stkmeshscenenode.hpp | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index 418c34e4c..d609dd6bd 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -142,6 +142,8 @@ void STKMeshSceneNode::updateNoGL() TransparentMaterial TranspMat = MaterialTypeToTransparentMaterial(type, MaterialTypeParam, material); if (!immediate_draw) TransparentMesh[TranspMat].push_back(&mesh); + else + additive = (TranspMat == TM_ADDITIVE); } else { @@ -370,7 +372,10 @@ void STKMeshSceneNode::render() { if (update_each_frame) updatevbo(); - glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); + if (additive) + glBlendFunc(GL_ONE, GL_ONE); + else + glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); if (World::getWorld() && World::getWorld()->isFogEnabled()) { diff --git a/src/graphics/stkmeshscenenode.hpp b/src/graphics/stkmeshscenenode.hpp index d247b9cc0..bdebe8788 100644 --- a/src/graphics/stkmeshscenenode.hpp +++ b/src/graphics/stkmeshscenenode.hpp @@ -21,6 +21,7 @@ protected: bool isMaterialInitialized; bool isGLInitialized; bool immediate_draw; + bool additive; bool update_each_frame; bool isDisplacement; bool isGlow; From 68db893e8482ac37e1e0515f7d1ad332f0cb172e Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Fri, 5 Dec 2014 21:11:56 -0500 Subject: [PATCH 36/49] Message dialog: set buttons text before layout occurs, so that buttons get the proper size. Fixes #1764 --- src/states_screens/dialogs/message_dialog.cpp | 18 ++++++++++-------- src/states_screens/dialogs/message_dialog.hpp | 4 ++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/states_screens/dialogs/message_dialog.cpp b/src/states_screens/dialogs/message_dialog.cpp index 075774013..15feb9d50 100644 --- a/src/states_screens/dialogs/message_dialog.cpp +++ b/src/states_screens/dialogs/message_dialog.cpp @@ -68,25 +68,28 @@ MessageDialog::~MessageDialog() // ------------------------------------------------------------------------------------------------------ void MessageDialog::doInit(MessageDialogType type, - IConfirmDialogListener* listener, bool own_listener) + IConfirmDialogListener* listener, bool own_listener) { if (StateManager::get()->getGameState() == GUIEngine::GAME) { World::getWorld()->schedulePause(World::IN_GAME_MENU_PHASE); } - - loadFromFile("confirm_dialog.stkgui"); - + m_type = type; m_listener = listener; m_own_listener = own_listener; + loadFromFile("confirm_dialog.stkgui"); +} + +void MessageDialog::loadedFromFile() +{ LabelWidget* message = getWidget("title"); message->setText( m_msg.c_str(), false ); // If the dialog is a simple 'OK' dialog, then hide the "Yes" button and // change "Cancel" to "OK" - if (type == MessageDialog::MESSAGE_DIALOG_OK) + if (m_type == MessageDialog::MESSAGE_DIALOG_OK) { ButtonWidget* yesbtn = getWidget("confirm"); yesbtn->setVisible(false); @@ -95,13 +98,13 @@ void MessageDialog::doInit(MessageDialogType type, cancelbtn->setText(_("OK")); cancelbtn->setFocusForPlayer(PLAYER_ID_GAME_MASTER); } - else if (type == MessageDialog::MESSAGE_DIALOG_YESNO) + else if (m_type == MessageDialog::MESSAGE_DIALOG_YESNO) { ButtonWidget* cancelbtn = getWidget("cancel"); cancelbtn->setText(_("No")); } - else if (type == MessageDialog::MESSAGE_DIALOG_OK_CANCEL) + else if (m_type == MessageDialog::MESSAGE_DIALOG_OK_CANCEL) { // In case of a OK_CANCEL dialog, change the text from 'Yes' to 'Ok' ButtonWidget* yesbtn = getWidget("confirm"); @@ -109,7 +112,6 @@ void MessageDialog::doInit(MessageDialogType type, } } - // ------------------------------------------------------------------------------------------------------ void MessageDialog::onEnterPressedInternal() diff --git a/src/states_screens/dialogs/message_dialog.hpp b/src/states_screens/dialogs/message_dialog.hpp index 05dfda475..fb39b6d8e 100644 --- a/src/states_screens/dialogs/message_dialog.hpp +++ b/src/states_screens/dialogs/message_dialog.hpp @@ -64,6 +64,8 @@ public: enum MessageDialogType { MESSAGE_DIALOG_OK, MESSAGE_DIALOG_CONFIRM, MESSAGE_DIALOG_OK_CANCEL, MESSAGE_DIALOG_YESNO }; + MessageDialogType m_type; + private: IConfirmDialogListener* m_listener; @@ -96,6 +98,8 @@ public: virtual void load(); GUIEngine::EventPropagation processEvent(const std::string& eventSource); + + virtual void loadedFromFile(); }; From 6d88a6547bd13b9ddf8e9eeb564bbcc165680b55 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sat, 6 Dec 2014 21:17:46 +0100 Subject: [PATCH 37/49] Fix GI viz --- src/graphics/render.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index 2ce4f441d..ee278aa9f 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -440,12 +440,14 @@ void IrrDriver::renderScene(scene::ICameraSceneNode * const camnode, unsigned po if (getRH()) { + glDisable(GL_BLEND); m_rtts->getFBO(FBO_COLORS).Bind(); m_post_processing->renderRHDebug(m_rtts->getRH().getRTT()[0], m_rtts->getRH().getRTT()[1], m_rtts->getRH().getRTT()[2], rh_matrix, rh_extend); } if (getGI()) { + glDisable(GL_BLEND); m_rtts->getFBO(FBO_COLORS).Bind(); m_post_processing->renderGI(rh_matrix, rh_extend, m_rtts->getRH().getRTT()[0], m_rtts->getRH().getRTT()[1], m_rtts->getRH().getRTT()[2]); } From 1bd83f41401e46852e5603a7c200edaf67e15560 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sat, 6 Dec 2014 23:20:46 +0100 Subject: [PATCH 38/49] Use omp for IBL gen + force some typecast --- src/graphics/IBL.cpp | 22 ++++++++++++---------- src/graphics/render_skybox.cpp | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/graphics/IBL.cpp b/src/graphics/IBL.cpp index 71e7b854e..38efe5f5b 100644 --- a/src/graphics/IBL.cpp +++ b/src/graphics/IBL.cpp @@ -46,18 +46,19 @@ static void getXYZ(GLenum face, float i, float j, float &x, float &y, float &z) } -static void getYml(GLenum face, size_t width, size_t height, +static void getYml(GLenum face, size_t edge_size, float *Y00, float *Y1minus1, float *Y10, float *Y11, float *Y2minus2, float *Y2minus1, float *Y20, float *Y21, float *Y22) { - for (unsigned i = 0; i < width; i++) +#pragma omp parallel for + for (int i = 0; i < int(edge_size); i++) { - for (unsigned j = 0; j < height; j++) + for (unsigned j = 0; j < edge_size; j++) { float x, y, z; float fi = float(i), fj = float(j); - fi /= width, fj /= height; + fi /= edge_size, fj /= edge_size; fi = 2 * fi - 1, fj = 2 * fj - 1; getXYZ(face, fi, fj, x, y, z); @@ -72,7 +73,7 @@ static void getYml(GLenum face, size_t width, size_t height, float c20 = 0.315392f; float c22 = 0.546274f; - size_t idx = i * height + j; + size_t idx = i * edge_size + j; Y00[idx] = c00; Y1minus1[idx] = c1minus1 * y; @@ -105,11 +106,12 @@ static void projectSH(Color *CubemapFace[6], size_t edge_size, float wh = float(edge_size * edge_size); for (unsigned face = 0; face < 6; face++) { - for (unsigned i = 0; i < edge_size; i++) +#pragma omp parallel for + for (int i = 0; i < int(edge_size); i++) { for (unsigned j = 0; j < edge_size; j++) { - size_t idx = i * edge_size + j; + int idx = i * edge_size + j; float fi = float(i), fj = float(j); fi /= edge_size, fj /= edge_size; fi = 2 * fi - 1, fj = 2 * fj - 1; @@ -183,7 +185,7 @@ void SphericalHarmonics(Color *CubemapFace[6], size_t edge_size, float *blueSHCo Y21[face] = new float[edge_size * edge_size]; Y22[face] = new float[edge_size * edge_size]; - getYml(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, edge_size, edge_size, Y00[face], Y1minus1[face], Y10[face], Y11[face], Y2minus2[face], Y2minus1[face], Y20[face], Y21[face], Y22[face]); + getYml(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, edge_size, Y00[face], Y1minus1[face], Y10[face], Y11[face], Y2minus2[face], Y2minus1[face], Y20[face], Y21[face], Y22[face]); } projectSH(CubemapFace, edge_size, @@ -284,8 +286,8 @@ GLuint generateSpecularCubemap(GLuint probe) { // Blinn Phong can be approximated by Phong with 4x the specular coefficient // See http://seblagarde.wordpress.com/2012/03/29/relationship-between-phong-and-blinn-lighting-model/ - float roughness = (8 - level) * 4 * pow(2., 10.) / 8.; - float viewportSize = 1 << (8 - level); + float roughness = (8 - level) * 4 * pow(2.f, 10.f) / 8.f; + float viewportSize = float(1 << (8 - level)); std::vector Samples; for (unsigned i = 0; i < 1024; i++) diff --git a/src/graphics/render_skybox.cpp b/src/graphics/render_skybox.cpp index c408636d5..ef7ca122f 100644 --- a/src/graphics/render_skybox.cpp +++ b/src/graphics/render_skybox.cpp @@ -332,7 +332,7 @@ void IrrDriver::generateDiffuseCoefficients() { sh_rgba[i] = new unsigned char[sh_w * sh_h * 4]; - for (int j = 0; j < sh_w * sh_h * 4; j += 4) + for (unsigned j = 0; j < sh_w * sh_h * 4; j += 4) { sh_rgba[i][j] = ambient.getBlue(); sh_rgba[i][j + 1] = ambient.getGreen(); From 7686628401604098266f9f078194fac291592532 Mon Sep 17 00:00:00 2001 From: Marianne Gagnon Date: Sat, 6 Dec 2014 19:51:46 -0500 Subject: [PATCH 39/49] Allow animated meshes in LOD, fixes #1747 --- src/tracks/model_definition_loader.cpp | 61 ++++++++++++++++++-------- src/tracks/model_definition_loader.hpp | 8 +++- 2 files changed, 48 insertions(+), 21 deletions(-) diff --git a/src/tracks/model_definition_loader.cpp b/src/tracks/model_definition_loader.cpp index c6c29a17b..14fe029e2 100644 --- a/src/tracks/model_definition_loader.cpp +++ b/src/tracks/model_definition_loader.cpp @@ -45,13 +45,13 @@ void ModelDefinitionLoader::addModelDefinition(const XMLNode* xml) std::string lodgroup; xml->get("lod_group", &lodgroup); - bool tangent = false; - xml->get("tangents", &tangent); + bool skeletal_animation = false; + xml->get("skeletal-animation", &skeletal_animation); std::string model_name; xml->get("model", &model_name); - m_lod_groups[lodgroup].push_back(ModelDefinition(xml, (int)lod_distance, model_name, tangent)); + m_lod_groups[lodgroup].push_back(ModelDefinition(xml, (int)lod_distance, model_name, false, skeletal_animation)); } // ---------------------------------------------------------------------------- @@ -72,28 +72,51 @@ LODNode* ModelDefinitionLoader::instanciateAsLOD(const XMLNode* node, scene::ISc lod_node->updateAbsolutePosition(); for (unsigned int m=0; mgetMesh(group[m].m_model_file); - - if (!a_mesh) + if (group[m].m_skeletal_animation) { - Log::warn("LODNodeLoad", "Warning: object model '%s' not found, ignored.\n", - group[m].m_model_file.c_str()); - continue; + scene::IAnimatedMesh* a_mesh = irr_driver->getAnimatedMesh(group[m].m_model_file); + if (!a_mesh) + { + Log::warn("LODNodeLoad", "Warning: object model '%s' not found, ignored.\n", + group[m].m_model_file.c_str()); + continue; + } + + irr_driver->setAllMaterialFlags(a_mesh); + + a_mesh->grab(); + //cache.push_back(a_mesh); + irr_driver->grabAllTextures(a_mesh); + m_track->addCachedMesh(a_mesh); + scene::IAnimatedMeshSceneNode* scene_node = irr_driver->addAnimatedMesh(a_mesh, group[m].m_model_file); + + m_track->handleAnimatedTextures(scene_node, *group[m].m_xml); + + lod_node->add(group[m].m_distance, scene_node, true); } + else + { + scene::IMesh* a_mesh = irr_driver->getMesh(group[m].m_model_file); + if (!a_mesh) + { + Log::warn("LODNodeLoad", "Warning: object model '%s' not found, ignored.\n", + group[m].m_model_file.c_str()); + continue; + } - a_mesh = MeshTools::createMeshWithTangents(a_mesh, &MeshTools::isNormalMap); - irr_driver->setAllMaterialFlags(a_mesh); + a_mesh = MeshTools::createMeshWithTangents(a_mesh, &MeshTools::isNormalMap); + irr_driver->setAllMaterialFlags(a_mesh); - a_mesh->grab(); - //cache.push_back(a_mesh); - irr_driver->grabAllTextures(a_mesh); - m_track->addCachedMesh(a_mesh); - scene::IMeshSceneNode* scene_node = irr_driver->addMesh(a_mesh, group[m].m_model_file); + a_mesh->grab(); + //cache.push_back(a_mesh); + irr_driver->grabAllTextures(a_mesh); + m_track->addCachedMesh(a_mesh); + scene::IMeshSceneNode* scene_node = irr_driver->addMesh(a_mesh, group[m].m_model_file); - m_track->handleAnimatedTextures( scene_node, *group[m].m_xml ); + m_track->handleAnimatedTextures(scene_node, *group[m].m_xml); - lod_node->add( group[m].m_distance, scene_node, true ); + lod_node->add(group[m].m_distance, scene_node, true); + } } #ifdef DEBUG diff --git a/src/tracks/model_definition_loader.hpp b/src/tracks/model_definition_loader.hpp index f7c669362..bc4f48dcb 100644 --- a/src/tracks/model_definition_loader.hpp +++ b/src/tracks/model_definition_loader.hpp @@ -42,26 +42,30 @@ namespace irr struct ModelDefinition { std::string m_model_file; - bool m_tangent; + bool m_tangent; // obsolete, TODO remove const XMLNode* m_xml; /** For LOD */ int m_distance; + bool m_skeletal_animation; + /** Constructor to allow storing this in STL containers */ ModelDefinition() { m_tangent = false; + m_skeletal_animation = false; m_distance = 0; m_xml = NULL; } - ModelDefinition(const XMLNode* xml, int distance, std::string& model, bool tangent) + ModelDefinition(const XMLNode* xml, int distance, std::string& model, bool tangent, bool skeletal_animation) { m_model_file = model; m_tangent = tangent; m_xml = xml; m_distance = distance; + m_skeletal_animation = skeletal_animation; } ~ModelDefinition() From e491422bdc9e7a2c6bdc195147fe570fe5b92f62 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sun, 7 Dec 2014 18:26:51 +0100 Subject: [PATCH 40/49] Weight sample in importance sampling --- data/shaders/importance_sampling_specular.frag | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/data/shaders/importance_sampling_specular.frag b/data/shaders/importance_sampling_specular.frag index 51549aa6f..eadddaa6d 100644 --- a/data/shaders/importance_sampling_specular.frag +++ b/data/shaders/importance_sampling_specular.frag @@ -16,15 +16,18 @@ void main(void) vec3 up = (RayDir.y < .99) ? vec3(0., 1., 0.) : vec3(0., 0., 1.); vec3 Tangent = normalize(cross(up, RayDir)); vec3 Bitangent = cross(RayDir, Tangent); + float weight = 0.; for (int i = 0; i < 1024; i++) { float Theta = samples[2 * i]; float Phi = samples[2 * i + 1]; - vec3 sampleDir = cos(Theta) * RayDir + sin(Theta) * cos(Phi) * Tangent + sin(Theta) * sin(Phi) * Bitangent; - FinalColor += textureLod(tex, sampleDir, 0.); + vec3 L = cos(Theta) * RayDir + sin(Theta) * cos(Phi) * Tangent + sin(Theta) * sin(Phi) * Bitangent; + float NdotL = clamp(dot(RayDir, L), 0., 1.); + FinalColor += textureLod(tex, L, 0.) * NdotL; + weight += NdotL; } - FragColor = FinalColor / 1024.; + FragColor = FinalColor / weight; } From 2e0bec57570c27a37630e98a721a79127ea6e7f5 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sun, 7 Dec 2014 18:48:45 +0100 Subject: [PATCH 41/49] No need to signal the shader the AMD_vertex_shader_layer is enabled --- src/graphics/shaders.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 1b67a5546..4f64a4fb8 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -147,8 +147,6 @@ GLuint LoadShader(const char * file, unsigned type) char versionString[20]; sprintf(versionString, "#version %d\n", irr_driver->getGLSLVersion()); std::string Code = versionString; - if (irr_driver->hasVSLayerExtension()) - Code += "#extension GL_AMD_vertex_shader_layer : enable\n"; if (UserConfigParams::m_azdo) Code += "#extension GL_ARB_bindless_texture : enable\n"; else From a094bbae196df047124fa664c6f13a637e256c94 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sun, 7 Dec 2014 19:10:22 +0100 Subject: [PATCH 42/49] Factorize DiffuseIBL and SpecularIBL --- data/shaders/IBL.frag | 41 ++++------------------------- data/shaders/utils/DiffuseIBL.frag | 32 ++++++++++++++++++++++ data/shaders/utils/SpecularIBL.frag | 11 ++++++++ src/graphics/shaders.cpp | 4 ++- 4 files changed, 51 insertions(+), 37 deletions(-) create mode 100644 data/shaders/utils/DiffuseIBL.frag create mode 100644 data/shaders/utils/SpecularIBL.frag diff --git a/data/shaders/IBL.frag b/data/shaders/IBL.frag index a638c3629..70e08e020 100644 --- a/data/shaders/IBL.frag +++ b/data/shaders/IBL.frag @@ -1,57 +1,26 @@ -uniform float blueLmn[9]; -uniform float greenLmn[9]; -uniform float redLmn[9]; uniform sampler2D ntex; uniform sampler2D dtex; -uniform samplerCube tex; -uniform mat4 TransposeViewMatrix; out vec4 Diff; out vec4 Spec; vec3 DecodeNormal(vec2 n); vec4 getPosFromUVDepth(vec3 uvDepth, mat4 InverseProjectionMatrix); - -mat4 getMatrix(float L[9]) -{ - float c1 = 0.429043, c2 = 0.511664, c3 = 0.743125, c4 = 0.886227, c5 = 0.247708; - - return mat4( - c1 * L[8] /*L22*/, c1 * L[4] /*L2-2*/, c1 * L[7] /*L21*/, c2 * L[3] /*L11*/, - c1 * L[4], - c1 * L[8], c1 * L[5] /*L2-1*/, c2 * L[1] /*L1-1*/, - c1 * L[7], c1 * L[5], c3 * L[6] /*L20*/, c2 * L[2] /*L10*/, - c2 * L[3], c2 * L[1], c2 * L[2], c4 * L[0] /*L00*/ - c5 * L[6] - ); -} +vec3 DiffuseIBL(vec3 normal); +vec3 SpecularIBL(vec3 normal, vec3 V, float roughness); void main(void) { vec2 uv = gl_FragCoord.xy / screen; vec3 normal = normalize(DecodeNormal(2. * texture(ntex, uv).xy - 1.)); - // Convert normal in world space (where SH coordinates were computed) - vec4 extendednormal = TransposeViewMatrix * vec4(normal, 0.); - extendednormal.w = 1.; - mat4 rmat = getMatrix(redLmn); - mat4 gmat = getMatrix(greenLmn); - mat4 bmat = getMatrix(blueLmn); - - float r = dot(extendednormal, rmat * extendednormal); - float g = dot(extendednormal, gmat * extendednormal); - float b = dot(extendednormal, bmat * extendednormal); - - Diff = max(0.25 * vec4(r, g, b, .1), vec4(0.)); + Diff = vec4(0.25 * DiffuseIBL(normal), 1.); float z = texture(dtex, uv).x; vec4 xpos = getPosFromUVDepth(vec3(uv, z), InverseProjectionMatrix); vec3 eyedir = -normalize(xpos.xyz); - vec3 sampleDirection = reflect(-eyedir, normal); - sampleDirection = (InverseViewMatrix * vec4(sampleDirection, 0.)).xyz; - float specval = texture(ntex, uv).z; - // Assume 8 level of lod (ie 256x256 texture) - float lodval = 8. * (1. - specval); - vec4 specular = textureLod(tex, sampleDirection, lodval); - Spec = max(specular, vec4(0.)); + + Spec = vec4(SpecularIBL(normal, eyedir, specval), 1.); } diff --git a/data/shaders/utils/DiffuseIBL.frag b/data/shaders/utils/DiffuseIBL.frag new file mode 100644 index 000000000..0d4d14194 --- /dev/null +++ b/data/shaders/utils/DiffuseIBL.frag @@ -0,0 +1,32 @@ +uniform float blueLmn[9]; +uniform float greenLmn[9]; +uniform float redLmn[9]; +uniform mat4 TransposeViewMatrix; + +mat4 getMatrix(float L[9]) +{ + float c1 = 0.429043, c2 = 0.511664, c3 = 0.743125, c4 = 0.886227, c5 = 0.247708; + + return mat4( + c1 * L[8] /*L22*/, c1 * L[4] /*L2-2*/, c1 * L[7] /*L21*/, c2 * L[3] /*L11*/, + c1 * L[4], - c1 * L[8], c1 * L[5] /*L2-1*/, c2 * L[1] /*L1-1*/, + c1 * L[7], c1 * L[5], c3 * L[6] /*L20*/, c2 * L[2] /*L10*/, + c2 * L[3], c2 * L[1], c2 * L[2], c4 * L[0] /*L00*/ - c5 * L[6] + ); +} + +vec3 DiffuseIBL(vec3 normal) +{ + // Convert normal in world space (where SH coordinates were computed) + vec4 extendednormal = TransposeViewMatrix * vec4(normal, 0.); + extendednormal.w = 1.; + mat4 rmat = getMatrix(redLmn); + mat4 gmat = getMatrix(greenLmn); + mat4 bmat = getMatrix(blueLmn); + + float r = dot(extendednormal, rmat * extendednormal); + float g = dot(extendednormal, gmat * extendednormal); + float b = dot(extendednormal, bmat * extendednormal); + + return max(vec3(r, g, b), vec3(0.)); +} \ No newline at end of file diff --git a/data/shaders/utils/SpecularIBL.frag b/data/shaders/utils/SpecularIBL.frag new file mode 100644 index 000000000..04832dfa7 --- /dev/null +++ b/data/shaders/utils/SpecularIBL.frag @@ -0,0 +1,11 @@ +uniform samplerCube probe; + +vec3 SpecularIBL(vec3 normal, vec3 V, float roughness) +{ + vec3 sampleDirection = reflect(-V, normal); + sampleDirection = (InverseViewMatrix * vec4(sampleDirection, 0.)).xyz; + + // Assume 8 level of lod (ie 256x256 texture) + float lodval = 8. * (1. - roughness); + return textureLod(probe, sampleDirection, lodval).rgb; +} \ No newline at end of file diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 4f64a4fb8..c9a3c3569 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -1649,9 +1649,11 @@ namespace FullScreenShader GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/decodeNormal.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(), + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/DiffuseIBL.frag").c_str(), + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/SpecularIBL.frag").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/IBL.frag").c_str()); AssignUniforms("TransposeViewMatrix", "blueLmn[0]", "greenLmn[0]", "redLmn[0]"); - AssignSamplerNames(Program, 0, "ntex", 1, "dtex", 2, "tex"); + AssignSamplerNames(Program, 0, "ntex", 1, "dtex", 2, "probe"); } ShadowedSunLightShader::ShadowedSunLightShader() From a320eebecebfb9cedc4a7e450a58c907050e136f Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sun, 7 Dec 2014 21:27:26 +0100 Subject: [PATCH 43/49] Cleanup tonemap shader --- data/shaders/tonemap.frag | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/data/shaders/tonemap.frag b/data/shaders/tonemap.frag index 1ebd6c119..47832801a 100644 --- a/data/shaders/tonemap.frag +++ b/data/shaders/tonemap.frag @@ -1,9 +1,4 @@ -// From http://www.ceng.metu.edu.tr/~akyuz/files/hdrgpu.pdf - uniform sampler2D tex; -uniform sampler2D logluminancetex; -uniform float exposure = .09; -uniform float Lwhite = 1.; uniform float vignette_weight; out vec4 FragColor; @@ -11,25 +6,10 @@ out vec4 FragColor; vec3 getCIEYxy(vec3 rgbColor); vec3 getRGBFromCIEXxy(vec3 YxyColor); - -float delta = .0001; -float saturation = 1.; - void main() { vec2 uv = gl_FragCoord.xy / screen; vec4 col = texture(tex, uv); - float avgLw = textureLod(logluminancetex, uv, 10.).x; - avgLw = max(exp(avgLw) - delta, delta); - - vec3 Cw = getCIEYxy(col.xyz); - float Lw = Cw.y; - - /* Reinhard, for reference */ -// float L = Lw * exposure / avgLw; -// float Ld = L * (1. + L / (Lwhite * Lwhite)); -// Ld /= (1. + L); -// FragColor = vec4(Ld * pow(col.xyz / Lw, vec3(saturation)), 1.); // Uncharted2 tonemap with Auria's custom coefficients vec4 perChannel = (col * (6.9 * col + .5)) / (col * (5.2 * col + 1.7) + 0.06); @@ -38,7 +18,6 @@ void main() vec2 inside = uv - 0.5; float vignette = 1. - dot(inside, inside) * vignette_weight; vignette = clamp(pow(vignette, 0.8), 0., 1.); - //vignette = clamp(vignette + vignette - 0.5, 0., 1.15); FragColor = vec4(perChannel.xyz * vignette, col.a); } From 6041c48fbedb3b02e38ecdc9ef01c0f1c320a29a Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sun, 7 Dec 2014 21:37:16 +0100 Subject: [PATCH 44/49] Source DiffuseIBL algorithm --- data/shaders/utils/DiffuseIBL.frag | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/shaders/utils/DiffuseIBL.frag b/data/shaders/utils/DiffuseIBL.frag index 0d4d14194..a581514e9 100644 --- a/data/shaders/utils/DiffuseIBL.frag +++ b/data/shaders/utils/DiffuseIBL.frag @@ -1,3 +1,7 @@ +// From "An Efficient Representation for Irradiance Environment Maps" article +// See http://graphics.stanford.edu/papers/envmap/ + +// Coefficients are calculated in IBL.cpp uniform float blueLmn[9]; uniform float greenLmn[9]; uniform float redLmn[9]; From f0d430c83350d0bdbaf8b888d210503e517354a2 Mon Sep 17 00:00:00 2001 From: hiker Date: Mon, 8 Dec 2014 15:22:12 +1100 Subject: [PATCH 45/49] Fix #1761 (Players tab in Options autofocus issue). --- src/states_screens/user_screen.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/states_screens/user_screen.cpp b/src/states_screens/user_screen.cpp index 2877eb37f..8df444ba4 100644 --- a/src/states_screens/user_screen.cpp +++ b/src/states_screens/user_screen.cpp @@ -111,8 +111,14 @@ void BaseUserScreen::init() // Select the current player. That can only be done after // updateItemDisplay is called. - if(current_player_index != -1) - selectUser(current_player_index); + if (current_player_index != -1) + { + // Only set focus in case of non-tabbed version (so that keyboard + // or gamepad navigation with tabs works as expected, i.e. you can + // select the next tab without having to go up to the tab list first. + if(!getWidget("options_choice")) + selectUser(current_player_index); + } // no current player found // The first player is the most frequently used, so select it else if (PlayerManager::get()->getNumPlayers() > 0) @@ -586,8 +592,8 @@ void BaseUserScreen::unloaded() */ void TabbedUserScreen::init() { - RibbonWidget* tab_bar = this->getWidget("options_choice"); - if (tab_bar != NULL) tab_bar->select("tab_players", PLAYER_ID_GAME_MASTER); + RibbonWidget* tab_bar = getWidget("options_choice"); + if (tab_bar) tab_bar->select("tab_players", PLAYER_ID_GAME_MASTER); tab_bar->getRibbonChildren()[0].setTooltip( _("Graphics") ); tab_bar->getRibbonChildren()[1].setTooltip( _("Audio") ); tab_bar->getRibbonChildren()[2].setTooltip(_("User Interface")); From 2b0680d92dbedfe8633a0a6690d09195f2ca2b2a Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Mon, 8 Dec 2014 18:24:43 +0100 Subject: [PATCH 46/49] Use texture buffer instead of uniform for samples Should fix nvidia glsl error --- .../shaders/importance_sampling_specular.frag | 6 ++--- src/graphics/IBL.cpp | 23 +++++++++++++++---- src/graphics/shaders.cpp | 4 +++- src/graphics/shaders.hpp | 3 ++- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/data/shaders/importance_sampling_specular.frag b/data/shaders/importance_sampling_specular.frag index eadddaa6d..ca3187d82 100644 --- a/data/shaders/importance_sampling_specular.frag +++ b/data/shaders/importance_sampling_specular.frag @@ -1,5 +1,5 @@ uniform samplerCube tex; -uniform float samples[2048]; +uniform samplerBuffer samples; uniform float ViewportSize; uniform mat4 PermutationMatrix; @@ -20,8 +20,8 @@ void main(void) for (int i = 0; i < 1024; i++) { - float Theta = samples[2 * i]; - float Phi = samples[2 * i + 1]; + float Theta = texelFetch(samples, 2 * i).r; + float Phi = texelFetch(samples, 2 * i).g; vec3 L = cos(Theta) * RayDir + sin(Theta) * cos(Phi) * Tangent + sin(Theta) * sin(Phi) * Bitangent; float NdotL = clamp(dot(RayDir, L), 0., 1.); diff --git a/src/graphics/IBL.cpp b/src/graphics/IBL.cpp index 38efe5f5b..abeb6d774 100644 --- a/src/graphics/IBL.cpp +++ b/src/graphics/IBL.cpp @@ -289,24 +289,39 @@ GLuint generateSpecularCubemap(GLuint probe) float roughness = (8 - level) * 4 * pow(2.f, 10.f) / 8.f; float viewportSize = float(1 << (8 - level)); - std::vector Samples; + float *tmp = new float[2048]; for (unsigned i = 0; i < 1024; i++) { std::pair sample = ImportanceSamplingPhong(HammersleySequence(i, 1024), roughness); - Samples.push_back(sample.first); - Samples.push_back(sample.second); + tmp[2 * i] = sample.first; + tmp[2 * i + 1] = sample.second; } + glActiveTexture(GL_TEXTURE0 + UtilShader::SpecularIBLGenerator::getInstance()->TU_Samples); + GLuint sampleTex, sampleBuffer; + glGenBuffers(1, &sampleBuffer); + glBindBuffer(GL_TEXTURE_BUFFER, sampleBuffer); + glBufferData(GL_TEXTURE_BUFFER, 2048 * sizeof(float), tmp, GL_STATIC_DRAW); + glGenTextures(1, &sampleTex); + glBindTexture(GL_TEXTURE_BUFFER, sampleTex); + glTexBuffer(GL_TEXTURE_BUFFER, GL_RG32F, sampleBuffer); + for (unsigned face = 0; face < 6; face++) { + glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, cubemap_texture, level); GLuint status = glCheckFramebufferStatus(GL_FRAMEBUFFER); assert(status == GL_FRAMEBUFFER_COMPLETE); UtilShader::SpecularIBLGenerator::getInstance()->SetTextureUnits(probe); - UtilShader::SpecularIBLGenerator::getInstance()->setUniforms(M[face], Samples, viewportSize); + UtilShader::SpecularIBLGenerator::getInstance()->setUniforms(M[face], viewportSize); + glDrawArrays(GL_TRIANGLES, 0, 3); } + + delete[] tmp; + glDeleteTextures(1, &sampleTex); + glDeleteBuffers(1, &sampleBuffer); } glDeleteFramebuffers(1, &fbo); diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index c9a3c3569..3a258ee25 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -894,8 +894,10 @@ namespace UtilShader Program = LoadProgram(OBJECT, GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(), GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/importance_sampling_specular.frag").c_str()); - AssignUniforms("PermutationMatrix", "samples[0]", "ViewportSize"); + AssignUniforms("PermutationMatrix", "ViewportSize"); + TU_Samples = 1; AssignSamplerNames(Program, 0, "tex"); + AssignTextureUnit(Program, TexUnit(TU_Samples, "samples")); } } diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index 97ba49c41..a8be956d0 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -49,9 +49,10 @@ public: static void setUniforms(const irr::video::SColor &); }; -class SpecularIBLGenerator : public ShaderHelperSingleton, float >, public TextureRead +class SpecularIBLGenerator : public ShaderHelperSingleton, public TextureRead { public: + GLuint TU_Samples; SpecularIBLGenerator(); }; } From 72fdf816e78b8b497d91164176215f082b590ff5 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Mon, 8 Dec 2014 19:16:26 +0100 Subject: [PATCH 47/49] Fix Importance sampling --- data/shaders/importance_sampling_specular.frag | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/shaders/importance_sampling_specular.frag b/data/shaders/importance_sampling_specular.frag index ca3187d82..c997fafb7 100644 --- a/data/shaders/importance_sampling_specular.frag +++ b/data/shaders/importance_sampling_specular.frag @@ -20,8 +20,8 @@ void main(void) for (int i = 0; i < 1024; i++) { - float Theta = texelFetch(samples, 2 * i).r; - float Phi = texelFetch(samples, 2 * i).g; + float Theta = texelFetch(samples, i).r; + float Phi = texelFetch(samples, i).g; vec3 L = cos(Theta) * RayDir + sin(Theta) * cos(Phi) * Tangent + sin(Theta) * sin(Phi) * Bitangent; float NdotL = clamp(dot(RayDir, L), 0., 1.); From 26677916215973cf69aba9babf176cd38476b82b Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Mon, 8 Dec 2014 19:36:23 +0100 Subject: [PATCH 48/49] Tweak IBL --- data/shaders/IBL.frag | 2 +- src/graphics/IBL.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/data/shaders/IBL.frag b/data/shaders/IBL.frag index 70e08e020..689e8911c 100644 --- a/data/shaders/IBL.frag +++ b/data/shaders/IBL.frag @@ -22,5 +22,5 @@ void main(void) vec3 eyedir = -normalize(xpos.xyz); float specval = texture(ntex, uv).z; - Spec = vec4(SpecularIBL(normal, eyedir, specval), 1.); + Spec = vec4(.25 * SpecularIBL(normal, eyedir, specval), 1.); } diff --git a/src/graphics/IBL.cpp b/src/graphics/IBL.cpp index abeb6d774..420a4b318 100644 --- a/src/graphics/IBL.cpp +++ b/src/graphics/IBL.cpp @@ -286,7 +286,8 @@ GLuint generateSpecularCubemap(GLuint probe) { // Blinn Phong can be approximated by Phong with 4x the specular coefficient // See http://seblagarde.wordpress.com/2012/03/29/relationship-between-phong-and-blinn-lighting-model/ - float roughness = (8 - level) * 4 * pow(2.f, 10.f) / 8.f; + // NOTE : Removed because it makes too sharp reflexion + float roughness = (8 - level) * pow(2.f, 10.f) / 8.f; float viewportSize = float(1 << (8 - level)); float *tmp = new float[2048]; From 36d20773d753faf383a2810f6362c8bec131fe2b Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Mon, 8 Dec 2014 19:42:03 +0100 Subject: [PATCH 49/49] Unbind everything before deleting --- src/graphics/IBL.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/graphics/IBL.cpp b/src/graphics/IBL.cpp index 420a4b318..9f944a76d 100644 --- a/src/graphics/IBL.cpp +++ b/src/graphics/IBL.cpp @@ -267,7 +267,6 @@ GLuint generateSpecularCubemap(GLuint probe) GLenum bufs[] = { GL_COLOR_ATTACHMENT0 }; glDrawBuffers(1, bufs); glUseProgram(UtilShader::SpecularIBLGenerator::getInstance()->Program); - glBindVertexArray(SharedObject::FullScreenQuadVAO); glDisable(GL_BLEND); glDisable(GL_DEPTH_TEST); @@ -298,6 +297,7 @@ GLuint generateSpecularCubemap(GLuint probe) tmp[2 * i + 1] = sample.second; } + glBindVertexArray(0); glActiveTexture(GL_TEXTURE0 + UtilShader::SpecularIBLGenerator::getInstance()->TU_Samples); GLuint sampleTex, sampleBuffer; glGenBuffers(1, &sampleBuffer); @@ -306,6 +306,7 @@ GLuint generateSpecularCubemap(GLuint probe) glGenTextures(1, &sampleTex); glBindTexture(GL_TEXTURE_BUFFER, sampleTex); glTexBuffer(GL_TEXTURE_BUFFER, GL_RG32F, sampleBuffer); + glBindVertexArray(SharedObject::FullScreenQuadVAO); for (unsigned face = 0; face < 6; face++) { @@ -319,12 +320,15 @@ GLuint generateSpecularCubemap(GLuint probe) glDrawArrays(GL_TRIANGLES, 0, 3); } + glActiveTexture(GL_TEXTURE0 + UtilShader::SpecularIBLGenerator::getInstance()->TU_Samples); + glBindBuffer(GL_TEXTURE_BUFFER, 0); + glBindTexture(GL_TEXTURE_BUFFER, 0); delete[] tmp; glDeleteTextures(1, &sampleTex); glDeleteBuffers(1, &sampleBuffer); } - + glBindFramebuffer(GL_FRAMEBUFFER, 0); glDeleteFramebuffers(1, &fbo); return cubemap_texture; } \ No newline at end of file