From: <geo...@us...> - 2012-07-24 05:20:39
|
Revision: 5064 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=5064&view=rev Author: geoffthemedio Date: 2012-07-24 05:20:33 +0000 (Tue, 24 Jul 2012) Log Message: ----------- Fixed shader program reading. Modified Paths: -------------- branches/FreeOrion-GiGi-Fork/UI/ChatWnd.h branches/FreeOrion-GiGi-Fork/UI/MapWnd.cpp branches/FreeOrion-GiGi-Fork/UI/ShaderProgram.cpp branches/FreeOrion-GiGi-Fork/UI/ShaderProgram.h branches/FreeOrion-GiGi-Fork/UI/SidePanel.cpp Modified: branches/FreeOrion-GiGi-Fork/UI/ChatWnd.h =================================================================== --- branches/FreeOrion-GiGi-Fork/UI/ChatWnd.h 2012-07-24 04:04:28 UTC (rev 5063) +++ branches/FreeOrion-GiGi-Fork/UI/ChatWnd.h 2012-07-24 05:20:33 UTC (rev 5064) @@ -13,8 +13,7 @@ namespace GG { class MultiEdit; } class MessageWndEdit; -class MessageWnd : public CUIWnd -{ +class MessageWnd : public CUIWnd { public: //! \name Structors //@{ MessageWnd(GG::X x, GG::Y y, GG::X w, GG::Y h); Modified: branches/FreeOrion-GiGi-Fork/UI/MapWnd.cpp =================================================================== --- branches/FreeOrion-GiGi-Fork/UI/MapWnd.cpp 2012-07-24 04:04:28 UTC (rev 5063) +++ branches/FreeOrion-GiGi-Fork/UI/MapWnd.cpp 2012-07-24 05:20:33 UTC (rev 5064) @@ -1810,8 +1810,11 @@ boost::timer timer; if (!m_scanline_shader && GetOptionsDB().Get<bool>("UI.system-fog-of-war")) { - m_scanline_shader = boost::shared_ptr<ShaderProgram>(ShaderProgram::shaderProgramFactory("", - ReadFile((GetRootDataDir() / "default" / "shaders" / "scanlines.frag").string()))); + boost::filesystem::path shader_path = GetRootDataDir() / "default" / "shaders" / "scanlines.frag"; + std::string shader_text; + ReadFile(shader_path, shader_text); + m_scanline_shader = boost::shared_ptr<ShaderProgram>( + ShaderProgram::shaderProgramFactory("", shader_text)); } const ObjectMap& known_objects = GetUniverse().EmpireKnownObjects(HumanClientApp::GetApp()->EmpireID()); Modified: branches/FreeOrion-GiGi-Fork/UI/ShaderProgram.cpp =================================================================== --- branches/FreeOrion-GiGi-Fork/UI/ShaderProgram.cpp 2012-07-24 04:04:28 UTC (rev 5063) +++ branches/FreeOrion-GiGi-Fork/UI/ShaderProgram.cpp 2012-07-24 05:20:33 UTC (rev 5064) @@ -52,20 +52,26 @@ } } -std::string ReadFile(const std::string& filename) { - std::string retval; -#ifdef FREEORION_WIN32 - boost::filesystem::path::string_type filename_native; - utf8::utf8to16(filename.begin(), filename.end(), std::back_inserter(filename_native)); - boost::filesystem::path path(filename_native); -#else - boost::filesystem::path path(filename); -#endif +bool ReadFile(const boost::filesystem::path& path, std::string& file_contents) { boost::filesystem::ifstream ifs(path); - int c; - while ((c = ifs.get()) != boost::filesystem::ifstream::traits_type::eof()); - retval += c; - return retval; + if (!ifs) + return false; + + // skip byte order mark (BOM) + static const int UTF8_BOM[3] = {0x00EF, 0x00BB, 0x00BF}; + for (int i = 0; i < 3; i++) { + if (UTF8_BOM[i] != ifs.get()) { + // no header set stream back to start of file + ifs.seekg(0, std::ios::beg); + // and continue + break; + } + } + + std::getline(ifs, file_contents, '\0'); + + // no problems? + return true; } ShaderProgram::ShaderProgram(const std::string& vertex_shader, const std::string& fragment_shader) : Modified: branches/FreeOrion-GiGi-Fork/UI/ShaderProgram.h =================================================================== --- branches/FreeOrion-GiGi-Fork/UI/ShaderProgram.h 2012-07-24 04:04:28 UTC (rev 5063) +++ branches/FreeOrion-GiGi-Fork/UI/ShaderProgram.h 2012-07-24 05:20:33 UTC (rev 5064) @@ -16,14 +16,14 @@ # include <GL/glu.h> #endif +#include <boost/filesystem/operations.hpp> + #include <string> #include <vector> +bool ReadFile(const boost::filesystem::path& path, std::string& file_contents); -std::string ReadFile(const std::string& filename); - -class ShaderProgram -{ +class ShaderProgram { private: ShaderProgram(); // default ctor forbidden, makes no sense Modified: branches/FreeOrion-GiGi-Fork/UI/SidePanel.cpp =================================================================== --- branches/FreeOrion-GiGi-Fork/UI/SidePanel.cpp 2012-07-24 04:04:28 UTC (rev 5063) +++ branches/FreeOrion-GiGi-Fork/UI/SidePanel.cpp 2012-07-24 05:20:33 UTC (rev 5064) @@ -573,8 +573,11 @@ m_star_type(star_type) { if (!s_scanline_shader && GetOptionsDB().Get<bool>("UI.system-fog-of-war")) { - s_scanline_shader = boost::shared_ptr<ShaderProgram>(ShaderProgram::shaderProgramFactory("", - ReadFile((GetRootDataDir() / "default" / "shaders" / "scanlines.frag").string()))); + boost::filesystem::path shader_path = GetRootDataDir() / "default" / "shaders" / "scanlines.frag"; + std::string shader_text; + ReadFile(shader_path, shader_text); + s_scanline_shader = boost::shared_ptr<ShaderProgram>( + ShaderProgram::shaderProgramFactory("", shader_text)); } s_instances_counter++; Refresh(); |