From 2d5a77f4a711fe783af89d8d227e1b907ce1a170 Mon Sep 17 00:00:00 2001 From: gralkapk Date: Mon, 1 Feb 2021 15:06:59 +0100 Subject: [PATCH 01/19] PR templates --- .github/PULL_REQUEST_TEMPLATE/require_test.md | 24 +++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE/standard_pr.md | 19 +++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE/require_test.md create mode 100644 .github/PULL_REQUEST_TEMPLATE/standard_pr.md diff --git a/.github/PULL_REQUEST_TEMPLATE/require_test.md b/.github/PULL_REQUEST_TEMPLATE/require_test.md new file mode 100644 index 0000000000..c40add4059 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/require_test.md @@ -0,0 +1,24 @@ +--- +name: PR with Test Requirements +about: Create a PR with explicit test instructions. +title: '' +labels: needs testing +assignees: '' + +--- + + +## Summary of Changes + + +## References + + +## Additional context + + +## Test Instructions + diff --git a/.github/PULL_REQUEST_TEMPLATE/standard_pr.md b/.github/PULL_REQUEST_TEMPLATE/standard_pr.md new file mode 100644 index 0000000000..7a0eb2de19 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/standard_pr.md @@ -0,0 +1,19 @@ +--- +name: Normal PR +about: Create a normal PR without specific test requirements. +title: '' +labels: '' +assignees: '' + +--- + + +## Summary of Changes + + +## References + + +## Additional context + From c1d0818e4c5a304c90a18fd42b791d8a0fdb7620 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Fri, 5 Feb 2021 20:23:23 +0100 Subject: [PATCH 02/19] unified utility functions --- .../include/mmcore/utility}/FileUtils.h | 40 +++- core/include/mmcore/utility/SDFFont.h | 11 +- core/include/mmcore/view/RenderUtils.h | 88 +++++-- .../src => core/src/utility}/FileUtils.cpp | 31 +-- core/src/utility/SDFFont.cpp | 154 +++--------- core/src/view/RenderUtils.cpp | 222 ++++++++++-------- plugins/cinematic/src/TimeLineRenderer.cpp | 2 +- plugins/gui/class_dependencies.png | Bin 189926 -> 189126 bytes plugins/gui/src/Configurator.cpp | 2 +- plugins/gui/src/GUIWindows.cpp | 21 +- plugins/gui/src/GUIWindows.h | 2 +- plugins/gui/src/graph/GraphCollection.cpp | 10 +- plugins/gui/src/graph/ParameterPresentation.h | 2 +- plugins/gui/src/widgets/FileBrowserWidget.cpp | 4 +- plugins/gui/src/widgets/FileBrowserWidget.h | 3 +- plugins/gui/src/widgets/ImageWidget_gl.cpp | 56 ----- plugins/gui/src/widgets/ImageWidget_gl.h | 24 +- plugins/gui/src/widgets/WidgetPicking_gl.cpp | 63 +---- plugins/gui/src/widgets/WidgetPicking_gl.h | 20 +- 19 files changed, 316 insertions(+), 439 deletions(-) rename {plugins/gui/src => core/include/mmcore/utility}/FileUtils.h (77%) rename {plugins/gui/src => core/src/utility}/FileUtils.cpp (78%) diff --git a/plugins/gui/src/FileUtils.h b/core/include/mmcore/utility/FileUtils.h similarity index 77% rename from plugins/gui/src/FileUtils.h rename to core/include/mmcore/utility/FileUtils.h index fb7cebc1f1..b0d4efbff7 100644 --- a/plugins/gui/src/FileUtils.h +++ b/core/include/mmcore/utility/FileUtils.h @@ -23,17 +23,30 @@ namespace stdfs = std::experimental::filesystem; #endif #endif -#include "GUIUtils.h" - #include #include +#include +#include +#include +#include "mmcore/utility/log/Log.h" #include "vislib/sys/FastFile.h" - namespace megamol { -namespace gui { +namespace core { +namespace utility { + + // #### Utility string conversion functions ############################ // + + static inline std::string to_string(std::wstring wstr) { + return std::wstring_convert>().to_bytes(wstr); + } + static inline std::wstring to_wstring(std::string str) { + return std::wstring_convert>().from_bytes(str); + } + + // ##################################################################### // /** * File utility functions. */ @@ -42,7 +55,11 @@ namespace gui { /** * Load raw data from file (e.g. texture data) */ - static size_t LoadRawFile(std::string name, void** outData); + static size_t LoadRawFile(const std::wstring& filename, void** outData); + + static size_t LoadRawFile(const std::string& filename, void** outData) { + return megamol::core::utility::FileUtils::LoadRawFile(megamol::core::utility::to_wstring(filename), outData); + } /** * Check if file exists. @@ -118,7 +135,7 @@ namespace gui { template - bool megamol::gui::FileUtils::FileExists(const T& path_str) { + bool megamol::core::utility::FileUtils::FileExists(const T& path_str) { auto path = static_cast(path_str); try { if (stdfs::exists(path) && stdfs::is_regular_file(path)) { @@ -130,7 +147,7 @@ namespace gui { template - bool megamol::gui::FileUtils::FileWithExtensionExists(const T& path_str, const std::string& ext) { + bool megamol::core::utility::FileUtils::FileWithExtensionExists(const T& path_str, const std::string& ext) { if (FileUtils::FileExists(path_str)) { auto path = static_cast(path_str); return (path.extension().generic_u8string() == std::string("." + ext)); @@ -140,14 +157,14 @@ namespace gui { template - bool megamol::gui::FileUtils::FileHasExtension(const T& path_str, const std::string& ext) { + bool megamol::core::utility::FileUtils::FileHasExtension(const T& path_str, const std::string& ext) { auto path = static_cast(path_str); return (path.extension().generic_u8string() == ext); } template - std::string megamol::gui::FileUtils::GetFilenameStem(const T& path_str) { + std::string megamol::core::utility::FileUtils::GetFilenameStem(const T& path_str) { auto path = static_cast(path_str); std::string filename; if (path.has_stem()) { @@ -158,7 +175,7 @@ namespace gui { template - std::string megamol::gui::FileUtils::SearchFileRecursive(const T& search_path_str, const S& search_file_str) { + std::string megamol::core::utility::FileUtils::SearchFileRecursive(const T& search_path_str, const S& search_file_str) { auto search_path = static_cast(search_path_str); auto file_path = static_cast(search_file_str); std::string found_path; @@ -172,7 +189,8 @@ namespace gui { } -} // namespace gui +} // namespace utility +} // namespace core } // namespace megamol #endif // MEGAMOL_GUI_FILEUTILS_INCLUDED diff --git a/core/include/mmcore/utility/SDFFont.h b/core/include/mmcore/utility/SDFFont.h index 8764d0925d..24e5082ca2 100644 --- a/core/include/mmcore/utility/SDFFont.h +++ b/core/include/mmcore/utility/SDFFont.h @@ -15,6 +15,7 @@ #endif /* (defined(_MSC_VER) && (_MSC_VER > 1000)) */ +#include "mmcore/view/RenderUtils.h" #include "mmcore/utility/AbstractFont.h" #include "mmcore/misc/PngBitmapCodec.h" #include "mmcore/utility/ResourceWrapper.h" @@ -95,7 +96,7 @@ namespace utility { * - Bold,Italic: false * - Rendering: java * - Glyph Cache Page - Width,Height: 1024 - * - Glyph set: ASCII + � + � + * - Glyph set: ASCII + ™ + € * - Size: ~90 (glyphs must fit on !one! page) * - Distance Field - Spread: 10 * - Distance Field - Scale: 50 (set in the end, operation is expensive) @@ -577,7 +578,7 @@ namespace utility { vislib::graphics::gl::GLSLShader shadervertcol; /** The texture of the font. */ - vislib::graphics::gl::OpenGLTexture2D texture; + std::unique_ptr texture; /** Vertex buffer object attributes. */ enum VBOAttrib { @@ -655,15 +656,9 @@ namespace utility { /** Load font info from file. */ bool loadFontInfo(vislib::StringA filename); - /** Load texture from file. */ - bool loadFontTexture(vislib::StringA filename); - /** Load shaders from files. */ bool loadFontShader(megamol::core::CoreInstance *core); - /** Load file into outData buffer and return size. */ - size_t loadFile(vislib::StringA filename, BYTE **outData); - /** * Answer the number of lines in the glyph run * diff --git a/core/include/mmcore/view/RenderUtils.h b/core/include/mmcore/view/RenderUtils.h index aaa59c6239..65ee55b069 100644 --- a/core/include/mmcore/view/RenderUtils.h +++ b/core/include/mmcore/view/RenderUtils.h @@ -17,16 +17,17 @@ #define GLOWL_OPENGL_INCLUDE_GLAD #include +#include +#include +#include "glowl/FramebufferObject.hpp" + +#include "mmcore/utility/FileUtils.h" #include "mmcore/misc/PngBitmapCodec.h" #include "mmcore/utility/SDFFont.h" #include "mmcore/utility/ShaderSourceFactory.h" #include "mmcore/view/Camera_2.h" -#include "vislib/graphics/gl/GLSLShader.h" -#include "vislib/graphics/gl/IncludeAllGL.h" -#include "vislib/graphics/gl/OpenGLTexture2D.h" -#include "vislib/graphics/gl/ShaderSource.h" namespace megamol::core::view { @@ -72,6 +73,38 @@ static inline glm::quat quaternion_from_vectors(glm::vec3 view_vector, glm::vec3 } +// #### Utility transformation functions ################################### // + +static inline glm::vec3 worldspace_to_screenspace( + const glm::vec3& vec_world, const glm::mat4& mvp, const glm::vec2& viewport) { + + glm::vec4 world = {vec_world.x, vec_world.y, vec_world.z, 1.0f}; + world = mvp * world; + world = world / world.w; + glm::vec3 screen; + screen.x = (world.x + 1.0f) / 2.0f * viewport.x; + screen.y = (world.y + 1.0f) / 2.0f * viewport.y; // flipped y-axis: glm::abs(world.y - 1.0f) + screen.z = -1.0f * (world.z + 1.0f) / 2.0f; + return screen; +} + + +static inline glm::vec3 screenspace_to_worldspace( + const glm::vec3& vec_screen, const glm::mat4& mvp, const glm::vec2& viewport) { + + glm::vec3 screen; + screen.x = (vec_screen.x * 2.0f / viewport.x) - 1.0f; + screen.y = (vec_screen.y * 2.0f / viewport.y) - 1.0f; + screen.z = ((vec_screen.z * 2.0f * -1.0f) - 1.0f); + glm::vec4 world = {screen.x, screen.y, screen.z, 1.0f}; + glm::mat4 mvp_inverse = glm::inverse(mvp); + world = mvp_inverse * world; + world = world / world.w; + glm::vec3 vec3d = glm::vec3(world.x, world.y, world.z); + return vec3d; +} + + // ##################################################################### // /* * Utility class providing simple primitive rendering (using non legacy opengl). @@ -79,9 +112,37 @@ static inline glm::quat quaternion_from_vectors(glm::vec3 view_vector, glm::vec3 class RenderUtils { public: + + // STATIC functions ------------------------------------------------------- + + /** + * Load textures. + */ + static bool LoadTextureFromFile(std::unique_ptr& out_texture_ptr, const std::wstring& filename); + + static bool LoadTextureFromFile(std::unique_ptr& out_texture_ptr, const std::string& filename) { + return megamol::core::view::RenderUtils::LoadTextureFromFile( + out_texture_ptr, megamol::core::utility::to_wstring(filename)); + } + + static bool LoadTextureFromData(std::unique_ptr& out_texture_ptr, int width, int height, float* data); + + /** + * Create shader. + */ + static bool CreateShader(std::unique_ptr& out_shader_ptr, const std::string& vertex_code, + const std::string& fragment_code); + + // LOCAL functions ------------------------------------------------------- + bool InitPrimitiveRendering(megamol::core::utility::ShaderSourceFactory& factory); - bool LoadTextureFromFile(std::wstring filename, GLuint& out_texture_id); + // Keeps the texture object in rener utils for later access via texture id + bool LoadTextureFromFile(GLuint& out_texture_id, const std::wstring& filename); + + bool LoadTextureFromFile(GLuint& out_texture_id, const std::string& filename) { + return this->LoadTextureFromFile(out_texture_id, megamol::core::utility::to_wstring(filename)); + } void PushPointPrimitive(const glm::vec3& pos_center, float size, const glm::vec3& cam_view, const glm::vec3& cam_pos, const glm::vec4& color, bool sort = false); @@ -157,21 +218,15 @@ class RenderUtils { DataType attributes; } ShaderDataType; - typedef vislib::graphics::gl::OpenGLTexture2D TextureType; - typedef std::vector> TexturesType; - typedef std::array QueuesType; - typedef std::array ShadersType; - typedef std::array, Buffers::BUFF_COUNT> BuffersType; - // VARIABLES ------------------------------------------------------- // bool smooth; bool init_once; - TexturesType textures; GLuint vertex_array; - QueuesType queues; - ShadersType shaders; - BuffersType buffers; + std::vector> textures; + std::array queues; + std::array, Primitives::PRIM_COUNT> shaders; + std::array, Buffers::BUFF_COUNT> buffers; // FUNCTIONS ------------------------------------------------------- // @@ -183,9 +238,6 @@ class RenderUtils { void sortPrimitiveQueue(Primitives primitive); - bool createShader(vislib::graphics::gl::GLSLShader& shader, const std::string* const vertex_code, - const std::string* const fragment_code); - const std::string getShaderCode(megamol::core::utility::ShaderSourceFactory& factory, std::string snippet_name); size_t loadRawFile(std::wstring filename, BYTE** outData); diff --git a/plugins/gui/src/FileUtils.cpp b/core/src/utility/FileUtils.cpp similarity index 78% rename from plugins/gui/src/FileUtils.cpp rename to core/src/utility/FileUtils.cpp index 163ba373be..74ac8d42a6 100644 --- a/plugins/gui/src/FileUtils.cpp +++ b/core/src/utility/FileUtils.cpp @@ -6,43 +6,43 @@ */ #include "stdafx.h" -#include "FileUtils.h" +#include "mmcore/utility/FileUtils.h" -using namespace megamol; -using namespace megamol::gui; +using namespace megamol::core::utility; -size_t megamol::gui::FileUtils::LoadRawFile(std::string name, void** outData) { +size_t megamol::core::utility::FileUtils::LoadRawFile(const std::wstring& filename, void** outData) { *outData = nullptr; - vislib::StringW filename = static_cast(name.c_str()); - if (filename.IsEmpty()) { + auto file_name = static_cast(filename.c_str()); + if (file_name.IsEmpty()) { megamol::core::utility::log::Log::DefaultLog.WriteError( "[GUI] Unable to load file: No file name given. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return 0; } - if (!vislib::sys::File::Exists(filename)) { + if (!vislib::sys::File::Exists(file_name)) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": Not existing. [%s, %s, line %d]\n", name.c_str(), __FILE__, __FUNCTION__, + "[GUI] Unable to load file \"%s\": Not existing. [%s, %s, line %d]\n", filename.c_str(), __FILE__, + __FUNCTION__, __LINE__); return 0; } - size_t size = static_cast(vislib::sys::File::GetSize(filename)); + size_t size = static_cast(vislib::sys::File::GetSize(file_name)); if (size < 1) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": File is empty. [%s, %s, line %d]\n", name.c_str(), __FILE__, + "[GUI] Unable to load file \"%s\": File is empty. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); return 0; } vislib::sys::FastFile f; - if (!f.Open(filename, vislib::sys::File::READ_ONLY, vislib::sys::File::SHARE_READ, vislib::sys::File::OPEN_ONLY)) { + if (!f.Open(file_name, vislib::sys::File::READ_ONLY, vislib::sys::File::SHARE_READ, vislib::sys::File::OPEN_ONLY)) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": Unable to open file. [%s, %s, line %d]\n", name.c_str(), __FILE__, + "[GUI] Unable to load file \"%s\": Unable to open file. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); return 0; } @@ -51,7 +51,8 @@ size_t megamol::gui::FileUtils::LoadRawFile(std::string name, void** outData) { size_t num = static_cast(f.Read(*outData, size)); if (num != size) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": Unable to read whole file. [%s, %s, line %d]\n", name.c_str(), __FILE__, + "[GUI] Unable to load file \"%s\": Unable to read whole file. [%s, %s, line %d]\n", filename.c_str(), + __FILE__, __FUNCTION__, __LINE__); ARY_SAFE_DELETE(*outData); return 0; @@ -61,7 +62,7 @@ size_t megamol::gui::FileUtils::LoadRawFile(std::string name, void** outData) { } -bool megamol::gui::FileUtils::WriteFile(const std::string& filename, const std::string& in_content, bool silent) { +bool megamol::core::utility::FileUtils::WriteFile(const std::string& filename, const std::string& in_content, bool silent) { try { std::ofstream file; file.open(filename, std::ios_base::out); @@ -93,7 +94,7 @@ bool megamol::gui::FileUtils::WriteFile(const std::string& filename, const std:: } -bool megamol::gui::FileUtils::ReadFile(const std::string& filename, std::string& out_content, bool silent) { +bool megamol::core::utility::FileUtils::ReadFile(const std::string& filename, std::string& out_content, bool silent) { try { std::ifstream file; file.open(filename, std::ios_base::in); diff --git a/core/src/utility/SDFFont.cpp b/core/src/utility/SDFFont.cpp index ecf168d581..7fdffe7dd3 100644 --- a/core/src/utility/SDFFont.cpp +++ b/core/src/utility/SDFFont.cpp @@ -21,7 +21,7 @@ using namespace megamol::core::utility; * SDFFont::SDFFont */ SDFFont::SDFFont(FontName fn) : AbstractFont(), - renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->fontFileName = this->translateFontName(fn); } @@ -31,7 +31,7 @@ SDFFont::SDFFont(FontName fn) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(FontName fn, SDFFont::RenderType render) : AbstractFont(), - renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->fontFileName = this->translateFontName(fn); } @@ -41,7 +41,7 @@ SDFFont::SDFFont(FontName fn, SDFFont::RenderType render) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(FontName fn, float size) : AbstractFont(), - renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); this->fontFileName = this->translateFontName(fn); @@ -52,7 +52,7 @@ SDFFont::SDFFont(FontName fn, float size) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(FontName fn, bool flipY) : AbstractFont(), - renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetFlipY(flipY); this->fontFileName = this->translateFontName(fn); @@ -63,7 +63,7 @@ SDFFont::SDFFont(FontName fn, bool flipY) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(FontName fn, SDFFont::RenderType render, bool flipY) : AbstractFont(), - renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetFlipY(flipY); this->fontFileName = this->translateFontName(fn); @@ -74,7 +74,7 @@ SDFFont::SDFFont(FontName fn, SDFFont::RenderType render, bool flipY) : Abstract * SDFFont::SDFFont */ SDFFont::SDFFont(FontName fn, float size, bool flipY) : AbstractFont(), - renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); this->SetFlipY(flipY); @@ -86,7 +86,7 @@ SDFFont::SDFFont(FontName fn, float size, bool flipY) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(FontName fn, float size, SDFFont::RenderType render) : AbstractFont(), - renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); this->fontFileName = this->translateFontName(fn); @@ -97,7 +97,7 @@ SDFFont::SDFFont(FontName fn, float size, SDFFont::RenderType render) : Abstract * SDFFont::SDFFont */ SDFFont::SDFFont(FontName fn, float size, SDFFont::RenderType render, bool flipY) : AbstractFont(), - renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); this->SetFlipY(flipY); @@ -109,7 +109,7 @@ SDFFont::SDFFont(FontName fn, float size, SDFFont::RenderType render, bool flipY * SDFFont::SDFFont */ SDFFont::SDFFont(vislib::StringA fn) : AbstractFont(), - fontFileName(fn), renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(fn), renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { } @@ -118,7 +118,7 @@ SDFFont::SDFFont(vislib::StringA fn) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(vislib::StringA fn, SDFFont::RenderType render) : AbstractFont(), - fontFileName(fn), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(fn), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { } @@ -127,7 +127,7 @@ SDFFont::SDFFont(vislib::StringA fn, SDFFont::RenderType render) : AbstractFont * SDFFont::SDFFont */ SDFFont::SDFFont(vislib::StringA fn, float size) : AbstractFont(), - fontFileName(fn), renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(fn), renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); } @@ -137,7 +137,7 @@ SDFFont::SDFFont(vislib::StringA fn, float size) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(vislib::StringA fn, bool flipY) : AbstractFont(), - fontFileName(fn), renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(fn), renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetFlipY(flipY); } @@ -147,7 +147,7 @@ SDFFont::SDFFont(vislib::StringA fn, bool flipY) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(vislib::StringA fn, SDFFont::RenderType render, bool flipY) : AbstractFont(), - fontFileName(fn), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(fn), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetFlipY(flipY); } @@ -157,7 +157,7 @@ SDFFont::SDFFont(vislib::StringA fn, SDFFont::RenderType render, bool flipY) : A * SDFFont::SDFFont */ SDFFont::SDFFont(vislib::StringA fn, float size, bool flipY) : AbstractFont(), - fontFileName(fn), renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(fn), renderType(SDFFont::RENDERTYPE_FILL), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); this->SetFlipY(flipY); @@ -168,7 +168,7 @@ SDFFont::SDFFont(vislib::StringA fn, float size, bool flipY) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(vislib::StringA fn, float size, SDFFont::RenderType render) : AbstractFont(), - fontFileName(fn), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(fn), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); } @@ -178,7 +178,7 @@ SDFFont::SDFFont(vislib::StringA fn, float size, SDFFont::RenderType render) : A * SDFFont::SDFFont */ SDFFont::SDFFont(vislib::StringA fn, float size, SDFFont::RenderType render, bool flipY) : AbstractFont(), - fontFileName(fn), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(fn), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); this->SetFlipY(flipY); @@ -189,7 +189,7 @@ SDFFont::SDFFont(vislib::StringA fn, float size, SDFFont::RenderType render, boo * SDFFont::SDFFont */ SDFFont::SDFFont(const SDFFont& src) : AbstractFont(), - fontFileName(src.fontFileName), renderType(src.renderType), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(src.fontFileName), renderType(src.renderType), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(src.GetSize()); this->SetFlipY(src.IsFlipY()); @@ -200,7 +200,7 @@ SDFFont::SDFFont(const SDFFont& src) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(const SDFFont& src, SDFFont::RenderType render) : AbstractFont(), - fontFileName(src.fontFileName), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(src.fontFileName), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(src.GetSize()); this->SetFlipY(src.IsFlipY()); @@ -211,7 +211,7 @@ SDFFont::SDFFont(const SDFFont& src, SDFFont::RenderType render) : AbstractFont( * SDFFont::SDFFont */ SDFFont::SDFFont(const SDFFont& src, float size) : AbstractFont(), - fontFileName(src.fontFileName), renderType(src.renderType), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(src.fontFileName), renderType(src.renderType), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); this->SetFlipY(src.IsFlipY()); @@ -222,7 +222,7 @@ SDFFont::SDFFont(const SDFFont& src, float size) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(const SDFFont& src, bool flipY) : AbstractFont(), - fontFileName(src.fontFileName), renderType(src.renderType), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false){ + fontFileName(src.fontFileName), renderType(src.renderType), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false){ this->SetSize(src.GetSize()); this->SetFlipY(flipY); @@ -233,7 +233,7 @@ SDFFont::SDFFont(const SDFFont& src, bool flipY) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(const SDFFont& src, SDFFont::RenderType render, bool flipY) : AbstractFont(), - fontFileName(src.fontFileName), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(src.fontFileName), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(src.GetSize()); this->SetFlipY(flipY); @@ -244,7 +244,7 @@ SDFFont::SDFFont(const SDFFont& src, SDFFont::RenderType render, bool flipY) : A * SDFFont::SDFFont */ SDFFont::SDFFont(const SDFFont& src, float size, bool flipY) : AbstractFont(), - fontFileName(src.fontFileName), renderType(src.renderType), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(src.fontFileName), renderType(src.renderType), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); this->SetFlipY(flipY); @@ -255,7 +255,7 @@ SDFFont::SDFFont(const SDFFont& src, float size, bool flipY) : AbstractFont(), * SDFFont::SDFFont */ SDFFont::SDFFont(const SDFFont& src, float size, SDFFont::RenderType render) : AbstractFont(), - fontFileName(src.fontFileName), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(src.fontFileName), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); this->SetFlipY(src.IsFlipY()); @@ -266,7 +266,7 @@ SDFFont::SDFFont(const SDFFont& src, float size, SDFFont::RenderType render) : * SDFFont::SDFFont */ SDFFont::SDFFont(const SDFFont& src, float size, SDFFont::RenderType render, bool flipY) : AbstractFont(), - fontFileName(src.fontFileName), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { + fontFileName(src.fontFileName), renderType(render), billboard(false), rotation(), initialised(false), shader(), shadervertcol(), texture(nullptr), vbos(), glyphs(), glyphIdcs(), glyphKrns(), useBatchDraw(false) { this->SetSize(size); this->SetFlipY(flipY); @@ -705,7 +705,7 @@ void SDFFont::deinitialise(void) { this->ClearBatchDrawCache(); // Texture - this->texture.Release(); + this->texture.reset(); // Shader this->shader.Release(); @@ -1188,7 +1188,7 @@ void SDFFont::drawGlyphs(const float col[4], int* run, float x, float y, float z void SDFFont::render(unsigned int gc, const float *col[4]) const { // Check texture - if (!this->texture.IsValid()) { + if (this->texture->getTextureHandle() == 0) { megamol::core::utility::log::Log::DefaultLog.WriteError("[SDFFont] [render] Texture is not valid. \n"); return; } @@ -1234,7 +1234,7 @@ void SDFFont::render(unsigned int gc, const float *col[4]) const { glEnable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, this->texture.GetId()); // instead of this->texture.Bind() => because draw() is CONST + this->texture->bindTexture(); glBindVertexArray(this->vaoHandle); @@ -1289,7 +1289,6 @@ bool SDFFont::loadFont(megamol::core::CoreInstance *core) { // (2) Load font information ----------------------------------------------- vislib::StringA infoFile = this->fontFileName; infoFile.Append(".fnt"); - ///megamol::core::utility::log::Log::DefaultLog.WriteInfo("[SDFFont] [loadFont] Loading FONT INFO ... \n"); if (!this->loadFontInfo(ResourceWrapper::getFileName(core->Configuration(), infoFile))) { megamol::core::utility::log::Log::DefaultLog.WriteWarn("[SDFFont] [loadFont] Failed to load font info file: \"%s\". \n", infoFile.PeekBuffer()); return false; @@ -1298,14 +1297,14 @@ bool SDFFont::loadFont(megamol::core::CoreInstance *core) { // (3) Load font texture -------------------------------------------------------- vislib::StringA textureFile = this->fontFileName; textureFile.Append(".png"); - ///megamol::core::utility::log::Log::DefaultLog.WriteInfo("[SDFFont] [loadFont] Loading FONT TEXTURE ... \n"); - if (!this->loadFontTexture(ResourceWrapper::getFileName(core->Configuration(), textureFile))) { + auto filename = + static_cast(ResourceWrapper::getFileName(core->Configuration(), textureFile).PeekBuffer()); + if (!megamol::core::view::RenderUtils::LoadTextureFromFile(this->texture, filename)) { megamol::core::utility::log::Log::DefaultLog.WriteWarn("[SDFFont] [loadFont] Failed to load font texture: \"%s\". \n", textureFile.PeekBuffer()); return false; } // (4) Load shaders -------------------------------------------------------- - ///megamol::core::utility::log::Log::DefaultLog.WriteInfo("[SDFFont] [loadFont] Loading SHADERS ... \n"); if (!this->loadFontShader(core)) { megamol::core::utility::log::Log::DefaultLog.WriteWarn("[SDFFont] [loadFont] Failed to load font shaders. \n"); return false; @@ -1552,57 +1551,6 @@ bool SDFFont::loadFontInfo(vislib::StringA filename) { } -/* -* SDFFont::loadTexture -*/ -bool SDFFont::loadFontTexture(vislib::StringA filename) { - - // Reset font texture - this->texture.Release(); - - static vislib::graphics::BitmapImage img; - static sg::graphics::PngBitmapCodec pbc; - pbc.Image() = &img; - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - BYTE *buf = nullptr; - size_t size = 0; - - if ((size = this->loadFile(filename, &buf)) <= 0) { - megamol::core::utility::log::Log::DefaultLog.WriteError("[SDFFont] [loadTexture] Could not find texture: \"%s\". \n", filename.PeekBuffer()); - ARY_SAFE_DELETE(buf); - return false; - } - - if (pbc.Load((void*)buf, size)) { - - img.Convert(vislib::graphics::BitmapImage::TemplateByteRGBA); - - if (this->texture.Create(img.Width(), img.Height(), false, img.PeekDataAs(), GL_RGBA) != GL_NO_ERROR) { - megamol::core::utility::log::Log::DefaultLog.WriteError("[SDFFont] [loadTexture] Could not load texture: \"%s\". \n", filename.PeekBuffer()); - ARY_SAFE_DELETE(buf); - return false; - } - this->texture.Bind(); - - //glGenerateMipmap(GL_TEXTURE_2D); - //this->texture.SetFilter(GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR); - this->texture.SetFilter(GL_LINEAR, GL_LINEAR); - - this->texture.SetWrap(GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE); - glBindTexture(GL_TEXTURE_2D, 0); - ARY_SAFE_DELETE(buf); - } - else { - megamol::core::utility::log::Log::DefaultLog.WriteError("[SDFFont] [loadTexture] Could not read texture: \"%s\". \n", filename.PeekBuffer()); - ARY_SAFE_DELETE(buf); - return false; - } - - glPixelStorei(GL_UNPACK_ALIGNMENT, 4); - return true; -} - - /* * SDFFont::loadFontShader */ @@ -1721,45 +1669,3 @@ bool SDFFont::loadFontShader(megamol::core::CoreInstance *core) { return true; } - - -/* -* SDFFont::loadFile -*/ -size_t SDFFont::loadFile(vislib::StringA filename, BYTE **outData) { - - // Reset out data - *outData = nullptr; - - vislib::StringW name = static_cast(filename); - if (name.IsEmpty()) { - megamol::core::utility::log::Log::DefaultLog.WriteError("[SDFFont] [loadFile] Unable to load file: No name given. \n"); - return false; - } - if (!vislib::sys::File::Exists(name)) { - megamol::core::utility::log::Log::DefaultLog.WriteError("[SDFFont] [loadFile] Unable to load not existing file: \"%s\". \n", filename.PeekBuffer()); - return false; - } - - size_t size = static_cast(vislib::sys::File::GetSize(name)); - if (size < 1) { - megamol::core::utility::log::Log::DefaultLog.WriteError("[SDFFont] [loadFile] Unable to load empty file: \"%s\". \n", filename.PeekBuffer()); - return false; - } - - vislib::sys::FastFile f; - if (!f.Open(name, vislib::sys::File::READ_ONLY, vislib::sys::File::SHARE_READ, vislib::sys::File::OPEN_ONLY)) { - megamol::core::utility::log::Log::DefaultLog.WriteError("[SDFFont] [loadFile] Unable to open file: \"%s\". \n", filename.PeekBuffer()); - return false; - } - - *outData = new BYTE[size]; - size_t num = static_cast(f.Read(*outData, size)); - if (num != size) { - megamol::core::utility::log::Log::DefaultLog.WriteError("[SDFFont] [loadFile] Unable to read whole file: \"%s\". \n", filename.PeekBuffer()); - ARY_SAFE_DELETE(*outData); - return false; - } - - return num; -} diff --git a/core/src/view/RenderUtils.cpp b/core/src/view/RenderUtils.cpp index d402fc0063..4093b430ab 100644 --- a/core/src/view/RenderUtils.cpp +++ b/core/src/view/RenderUtils.cpp @@ -9,6 +9,98 @@ namespace megamol::core::view { +// STATIC functions ------------------------------------------------------- + +bool RenderUtils::LoadTextureFromFile(std::unique_ptr& out_texture_ptr, const std::wstring& filename) { + + if (filename.empty()) + return false; + bool retval = false; + + static vislib::graphics::BitmapImage img; + static sg::graphics::PngBitmapCodec pbc; + pbc.Image() = &img; + void* buf = nullptr; + size_t size = 0; + + glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + size = megamol::core::utility::FileUtils::LoadRawFile(filename, &buf); + if (size > 0) { + if (pbc.Load(buf, size)) { + img.Convert(vislib::graphics::BitmapImage::TemplateFloatRGBA); + retval = + RenderUtils::LoadTextureFromData(out_texture_ptr, img.Width(), img.Height(), img.PeekDataAs()); + } else { + megamol::core::utility::log::Log::DefaultLog.WriteError( + "[GUI] Unable to read texture: %s [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, + __LINE__); + retval = false; + } + } else { + retval = false; + } + + ARY_SAFE_DELETE(buf); + return retval; +} + + +bool RenderUtils::LoadTextureFromData( + std::unique_ptr& out_texture_ptr, int width, int height, float* data) { + + if (data == nullptr) + return false; + try { + glowl::TextureLayout tex_layout(GL_RGBA32F, width, height, 1, GL_RGBA, GL_FLOAT, 1); + if (out_texture_ptr == nullptr) { + out_texture_ptr = + std::make_unique("image_widget", tex_layout, static_cast(data), false); + } else { + // Reload data + out_texture_ptr->reload(tex_layout, static_cast(data), false); + } + } catch (glowl::TextureException& e) { + megamol::core::utility::log::Log::DefaultLog.WriteError( + "[GUI] Error during texture creation: '%s'. [%s, %s, line %d]\n", e.what(), __FILE__, __FUNCTION__, + __LINE__); + return false; + } + return true; +} + + +bool RenderUtils::CreateShader( + std::unique_ptr& out_shader_ptr, const std::string& vertex_code, const std::string& fragment_code) { + + std::vector> shader_srcs; + + if (!vertex_code.empty()) + shader_srcs.push_back({glowl::GLSLProgram::ShaderType::Vertex, vertex_code}); + if (!fragment_code.empty()) + shader_srcs.push_back({glowl::GLSLProgram::ShaderType::Fragment, fragment_code}); + + try { + if (out_shader_ptr != nullptr) + out_shader_ptr.reset(); + out_shader_ptr = std::make_unique(shader_srcs); + } catch (glowl::GLSLProgramException const& exc) { + std::string debug_label; + if (out_shader_ptr != nullptr) { + debug_label = out_shader_ptr->getDebugLabel(); + } + megamol::core::utility::log::Log::DefaultLog.WriteError( + "[GUI] Error during shader program creation of\"%s\": %s. [%s, %s, line %d]\n ", debug_label.c_str(), + exc.what(), __FILE__, __FUNCTION__, __LINE__); + return false; + } + + return true; +} + + +// LOCAL functions ------------------------------------------------------- + + RenderUtils::RenderUtils() : smooth(true), init_once(false), vertex_array(0), textures(), queues(), shaders(), buffers() {} @@ -26,7 +118,11 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac // Create shaders std::string vertShaderCode = this->getShaderCode(factory, "primitives::points::vertex"); std::string fragShaderCode = this->getShaderCode(factory, "primitives::points::fragment"); - if (!this->createShader(this->shaders[Primitives::POINTS], &vertShaderCode, &fragShaderCode)) { + if (!RenderUtils::CreateShader(this->shaders[Primitives::POINTS], vertShaderCode, fragShaderCode)) { + this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::POSITION, "inPosition"); + this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::COLOR, "inColor"); + this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); + this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create point shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; @@ -34,7 +130,11 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac vertShaderCode = this->getShaderCode(factory, "primitives::lines::vertex"); fragShaderCode = this->getShaderCode(factory, "primitives::lines::fragment"); - if (!this->createShader(this->shaders[Primitives::LINES], &vertShaderCode, &fragShaderCode)) { + if (!RenderUtils::CreateShader(this->shaders[Primitives::LINES], vertShaderCode, fragShaderCode)) { + this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::POSITION, "inPosition"); + this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::COLOR, "inColor"); + this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); + this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create line shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; @@ -42,7 +142,11 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac vertShaderCode = this->getShaderCode(factory, "primitives::quads::vertex"); fragShaderCode = this->getShaderCode(factory, "primitives::quads::fragment"); - if (!this->createShader(this->shaders[Primitives::QUADS], &vertShaderCode, &fragShaderCode)) { + if (!RenderUtils::CreateShader(this->shaders[Primitives::QUADS], vertShaderCode, fragShaderCode)) { + this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::POSITION, "inPosition"); + this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::COLOR, "inColor"); + this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); + this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create quad shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; @@ -50,7 +154,11 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac vertShaderCode = this->getShaderCode(factory, "primitives::color_texture::vertex"); fragShaderCode = this->getShaderCode(factory, "primitives::color_texture::fragment"); - if (!this->createShader(this->shaders[Primitives::COLOR_TEXTURE], &vertShaderCode, &fragShaderCode)) { + if (!RenderUtils::CreateShader(this->shaders[Primitives::COLOR_TEXTURE], vertShaderCode, fragShaderCode)) { + this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::POSITION, "inPosition"); + this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::COLOR, "inColor"); + this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); + this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create color texture shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; @@ -58,7 +166,11 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac vertShaderCode = this->getShaderCode(factory, "primitives::depth_texture::vertex"); fragShaderCode = this->getShaderCode(factory, "primitives::depth_texture::fragment"); - if (!this->createShader(this->shaders[Primitives::DEPTH_TEXTURE], &vertShaderCode, &fragShaderCode)) { + if (!RenderUtils::CreateShader(this->shaders[Primitives::DEPTH_TEXTURE], vertShaderCode, fragShaderCode)) { + this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::POSITION, "inPosition"); + this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::COLOR, "inColor"); + this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); + this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create depth texture shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; @@ -100,64 +212,20 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac glDisableVertexAttribArray(Buffers::ATTRIBUTES); this->init_once = true; - + return true; } -bool RenderUtils::LoadTextureFromFile(std::wstring filename, GLuint& out_texture_id) { +bool RenderUtils::LoadTextureFromFile(GLuint& out_texture_id, const std::wstring& filename) { out_texture_id = 0; - - this->textures.emplace_back(std::make_unique()); - auto texture = this->textures.back(); - - vislib::graphics::BitmapImage img; - sg::graphics::PngBitmapCodec pbc; - pbc.Image() = &img; - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - BYTE* buf = nullptr; - size_t size = 0; - - /// megamol::core::utility::ResourceWrapper::LoadResource(this->GetCoreInstance()->Configuration(), filename, - /// (void**)(&buf))) - if ((size = this->loadRawFile(filename, &buf)) <= 0) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "Could not find texture \"%s\". [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); - ARY_SAFE_DELETE(buf); - return false; - } - - if (pbc.Load((void*) buf, size)) { - - img.Convert(vislib::graphics::BitmapImage::TemplateByteRGBA); - - if (texture->Create(img.Width(), img.Height(), false, img.PeekDataAs(), GL_RGBA) != GL_NO_ERROR) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "Could not load texture \"%s\". [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, - __LINE__); - ARY_SAFE_DELETE(buf); - return false; - } - - // Additional texture options - texture->Bind(); - /// glGenerateMipmap(GL_TEXTURE_2D); - /// texture->SetFilter(GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR); - texture->SetFilter(GL_LINEAR, GL_LINEAR); - texture->SetWrap(GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE); - glBindTexture(GL_TEXTURE_2D, 0); - - ARY_SAFE_DELETE(buf); - out_texture_id = texture->GetId(); - } else { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "Could not read texture \"%s\". [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); - ARY_SAFE_DELETE(buf); - return false; + this->textures.push_back(nullptr); + if (RenderUtils::LoadTextureFromFile(this->textures.back(), filename)) { + out_texture_id = this->textures.back()->getTextureHandle(); + return true; } - - return true; + return false; } @@ -338,18 +406,18 @@ void RenderUtils::drawPrimitives(RenderUtils::Primitives primitive, glm::mat4& m } glBindVertexArray(this->vertex_array); - this->shaders[primitive].Enable(); + this->shaders[primitive]->use(); if (texture_id != 0) { glEnable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture_id); - glUniform1i(this->shaders[primitive].ParameterLocation("tex"), static_cast(0)); + glUniform1i(this->shaders[primitive]->getUniformLocation("tex"), static_cast(0)); } - glUniform1i(this->shaders[primitive].ParameterLocation("apply_smooth"), static_cast(this->smooth)); - glUniform2fv(this->shaders[primitive].ParameterLocation("viewport"), 1, glm::value_ptr(dim_vp)); - glUniformMatrix4fv(this->shaders[primitive].ParameterLocation("mvp"), 1, GL_FALSE, glm::value_ptr(mat_mvp)); + glUniform1i(this->shaders[primitive]->getUniformLocation("apply_smooth"), static_cast(this->smooth)); + glUniform2fv(this->shaders[primitive]->getUniformLocation("viewport"), 1, glm::value_ptr(dim_vp)); + glUniformMatrix4fv(this->shaders[primitive]->getUniformLocation("mvp"), 1, GL_FALSE, glm::value_ptr(mat_mvp)); glDrawArrays(mode, 0, count); @@ -358,7 +426,7 @@ void RenderUtils::drawPrimitives(RenderUtils::Primitives primitive, glm::mat4& m glDisable(GL_TEXTURE_2D); } - this->shaders[primitive].Disable(); + glUseProgram(0); glBindVertexArray(0); // Reset OpenGL state -------------------------------------------------- @@ -424,36 +492,6 @@ void RenderUtils::sortPrimitiveQueue(Primitives primitive) { } -bool RenderUtils::createShader(vislib::graphics::gl::GLSLShader& shader, const std::string* const vertex_code, - const std::string* const fragment_code) { - - try { - shader.Release(); - if (!shader.Compile(vertex_code->c_str(), fragment_code->c_str())) { - megamol::core::utility::log::Log::DefaultLog.WriteMsg(megamol::core::utility::log::Log::LEVEL_ERROR, - "Unable to compile shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); - return false; - } - shader.BindAttribute(Buffers::POSITION, "inPosition"); - shader.BindAttribute(Buffers::COLOR, "inColor"); - shader.BindAttribute(Buffers::TEXTURE_COORD, "inTexture"); - shader.BindAttribute(Buffers::ATTRIBUTES, "inAttributes"); - if (!shader.Link()) { - megamol::core::utility::log::Log::DefaultLog.WriteMsg(megamol::core::utility::log::Log::LEVEL_ERROR, - "Unable to link shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); - return false; - } - } catch (...) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "Unable to create shader. Unknown error. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); - return false; - } - - - return true; -} - - const std::string RenderUtils::getShaderCode( megamol::core::utility::ShaderSourceFactory& factory, std::string snippet_name) { diff --git a/plugins/cinematic/src/TimeLineRenderer.cpp b/plugins/cinematic/src/TimeLineRenderer.cpp index 79dcbc5ce7..06a59e2547 100644 --- a/plugins/cinematic/src/TimeLineRenderer.cpp +++ b/plugins/cinematic/src/TimeLineRenderer.cpp @@ -89,7 +89,7 @@ bool TimeLineRenderer::create(void) { // Load texture vislib::StringA shortfilename = "arrow.png"; auto fullfilename = megamol::core::utility::ResourceWrapper::getFileName(this->GetCoreInstance()->Configuration(), shortfilename); - if (!this->utils.LoadTextureFromFile(std::wstring(fullfilename.PeekBuffer()), this->texture)) { + if (!this->utils.LoadTextureFromFile(this->texture, std::wstring(fullfilename.PeekBuffer()))) { megamol::core::utility::log::Log::DefaultLog.WriteError("[TIMELINE RENDERER] [create] Couldn't load marker texture. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } diff --git a/plugins/gui/class_dependencies.png b/plugins/gui/class_dependencies.png index 262844e5a40b1c16ccb576051e209f954d3b1216..62ea97a1f61df66018c4c2365f2f8e811786c0df 100644 GIT binary patch literal 189126 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%0DuzwLrWm(33NG%$7)q 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

Pd$$@@K66nr(+3x6! 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 literal 189926 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¥!h#DsjmykeN~KXKnj_q<;c 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

Dz2`=0<0U^E$Dj&@lLHf0oE|z7; z^o0F|w$?%_v05vM?bb(#)!h(7fm8RVpM{ZJCiSGhHw`FucP;yG{5Fw#z=O{3@i6Am zi?9;U<~%ns`G!jYBo-FilM;7d~@$GXq@ z={vX=+;i{1M`Rh#)fR@Hb~5D9fzZ|%|Uz}=ce*;NP83q}VdQ#yh} zX;fvx7!3#CpEdDUV8B0SeImQQ~TR#9f01#KH9v58@6F&bPEAFC%<7#B*&) zsGDH!CwI3#myXikScy6r#0MQGBy8rji!2%>zqnB9eBJ84r*Qoq7g}v@^D|SxwmEob z+E!+_+I)GRwONw7jT|qO3I7GP|7hU|eJc!16Q@oJmW3c*2L!JBy}24xtt3l}7k_p= z5iXnX3nygNSv%H*Fcj8pB0X?Je_O|ZKThU*spp>v+KX09bY66ok4|VCRHDACNqkmU zG9Ch3%z7NHP2ssv!YW|a+hufE0Vxi%xL^oix(pzaq(|V!*1;Caj-g27Hks*1 zyTh(En9a8`riY)x6R}(+IzMp*bV@Mc_Uyn{)}Qj};oSu0DZ(d^PBG?8OT*wNm~iYs z@i3JZUp%Z=E5Nq%I z+0H#WDAbH;PSD*voh%j~zkmdRZ>L>?4`K4A zf*10{@M~A0Y(sfG(&(b*nOhs>F*I z+V~w4!ZTzn#Sh+rs`31=@q94?y!TzSQJ(Y8dCl8!`t?SThc zQ%!>a+cYoXj})0zm*FNP((c!mrDy^=F80QZASRw1h6m9l8lE1-#f6fRQpa$v9IN6V z`vHvnL>`g{J`jtehIQIsEb%-on;1%7 zWHXQVZ!^W#;k?{&YCPH%P$WZuWPYjE4jc^LM!O-VSlYR5m^{!7u2C*dvB_)_s*}t4 z;0|^X4ta10u5bBvHeG z&4-|m<>{z$YSL&E^Mp z!}0x)PU*xMD{(SY;TQUk@z)(A?rjKtNV?oPE0!78XPO2QzQd)s(`gJ)SH>1|6LpL*C? zuy-IUaSd45z}Y9wKNg0z2w;QRn<}&S!USmz2NGUen_MXlrkzLJRuWQTV7i~4?Nj(E zo2F|bc?m7po`#cy8wuzuYJcwb2@EX|6AtPcS70+WDL2wkxc53ZzfuRxn+R3n%alCb z^?PGnhnxRV78ppUOn1q4CGbBx2<|e&I(b(en;Fx{F>dp-go@MWJisUd{w0A^#`5Yo zTE(wu3mL1ruwvJmMYK3umQxHlWe&Kb9#@f4Qr2?tphg_^Bv%uzH^Ki5uyaJ9eS0(x zjC((h&+9Za&dc=+E}4&WzZ!qqDYrD_UHL~?!^}D1g1LiL0FI#N4Kajbf#|?=@_1s6 zIKwm>ylHq}`RXNyEghWq2DXCu3|~d}TS;44S*hn~2h@WNx*L%T8-z%^92_5_N~EBRA>7vqlTM{+J*!dgyXNzg@ooA0P3;EBv1t znZ6{m(-#EMpYYfi8IFD7DNK!raYu{}qlPs=Ab9`|}@%V{aIC4E{VHbFo&Xu*` zjVuVMGx|>_-{hXfTfYeNo%A#`f86tsYn00h#0g2;emoz013oXf006s=^NxfN)t=WK z@9ye~pxnj~Yn=>uV5oxi6(g9gKIG!4EmcEH^B0J~NV1y!b*m#RQ|y6g`XBctiHRPJ z9fB;dvbJ6XhQ5W<_>{PFC8ea$>)rQ7o#yR}?Bw|HT56!@R)OeH9H`vW$e;4f%@WV$ z4y7$LH+K~Mk0ti|js1Kt8}+$rsC~riRj7hjU%X>V=^y;Tw7Y9YioWG{#RG1ai~RF9 zgV38v0jF`CM>z~a7f>~bJ(RFmTwzS0WfkuR@j7}%TVaKOF&uOu9=CZe7u9b4dyP-@ zf+g?3LEnOJV>$uj5FI|{PUhH^Psa(Ugxw^)y!uIad<5?gPB>ePGf|%Jh!9=44L#PZ z;BkI;XDN`{leV4DlZ?V&M0Wp1raH1o#o=-!teQ(tOoh>#F;EiJ7uI@XnU^k^|%AtxtZot>-akpj^bYI9>f zvx|M*V!h}5lkcBcn6c+f@XI0mD)$ff9)+`9En74#&_P^g?h1G}(OnoGzK$nF-#GyE z9U{(uQwk!Z~C3 z#hwMC4lo$>Fa7Bn|9$~>8Ug_CWcG(2ev1S@I<-#n-oIP>u!8>OKz*0zZ3?e-^R?6IAyF>3{y;`TBhjN*5*8ArJ47l2}UuAUPDc=gS>9xpR-}#0*p8T z4I`FT-J=k~h^d-ezc;!adfd`T^5MGT`!a~&+(R~Ve8V}+ zVFD+<2>L=RZ7|nh6uA>AM>?NZ- z!tH7BiLLGfNIT}g!0`PpfbC~;LAUOZjCmcJXjJaYmyiR$xf0behSAx&Zuj#WIf!Td zi|fpdo4FzaG(W4JQiK8HW$9!D=E}ugwJCnkaU2;0SoGkgd4(5(g!H~LnAP|at?(?S zwmIWT`C~DTIeg#yZaf>dvn4(>}gk@U8FPXLcYm#3@sv9H(VOqR0VhUd_`m2p_MSof)dHn|44Sb%;RnvsSH1A&M)F1y z1{@qK?7=ql0eaW_WfUG+Dv_1*;UwHc9iD+qMUo2inPwVmy58Mf7m~|CxBmXG5J~23 z@l$#iSGoIv@iFOPX=%eaVLRha2CcL3#E{9CIcEO+6Kc(ON@R_eJd8w>(3>GFV`Zf0 z)cWXhc9i;8E8=01k>_T5@c_D=z=6AycK?M?W9gcB&bHDqvh&rOm-7k54`4-WR)|2(t4|8R@uw#=zNuScpOyhxl zR>|O7fbJ8(Y-S?#X z{PvJ=_zqn2(W9j2&&^(+y5{@^1rU97GyAlQizs&{VnW_K&d&H1((*POHEPz2$FN=u z*STIUnP2svk;sH2+fB+?^eymHiVODpca_Qmhb`r|W}pkNRsfN$qSXDe1dA=_Pq@n6 z48SQWfQAL3C$wC!&gdU<7zaFM_}KJ9LWSWsIS6Y`y4TSzZT?g+=B^MDq+vR^5N&Z z0~g(27;gjU2E&PcD>lnqiRAD3V+{|V(3;eJVQfK+9DO`Vw`lR2v!X)burFUaSh!}9 zg@qlEKrXIpax)6DX9@ZFS2n|D;lRJIhY$nbgCKqR-32>86c%r#1285`l9+HQqPIZ< zfRYc7hm=wNQL*4eRD8|wGAS7xCaGZyy8K@+z}2|sLGAqG&K_CQQQrj2g_jX^k(r^e zIt*{J^Cf@1CflZkSL0QfFU9wiXj5Qw}+?@Kc^uLpPN<_0R+D{BO7#v49%$m(@jxMar(3nd8l5tFdb!Q6t zzINGqqwpO{W$C&utjo*;Uf`qRdMBxl5q-=hCDZ2dJ|awq92x6KJ>ui#YL5LP^;hoP z2;O@y`*v^Src(nalUYrv?Bj9SvCV6p5Sl}(`T1Qy_178=jjwJO7JW4|CV>v$j*8-{ zZ&W2swuZuixPigupwT%9R0&UrfMR>rOyJZ3gY5RPtqcPu7haVVZRpPfrqd5r~8O*VI^r_xmR&VoET+G-R#P>-Dz zGFbVUY%_FAMuhOosk{&1DF+hwA;|Nj25yKs@sdh_o!sMmP~ z@xZ5DS>l;w#VpkcAiA;npL09P^r09+tNsF%!%;du6yp!ht1>u+SM z{J?3Cqod)26Jm24=Wsl~gKmKm+LxG(Ne)TM204JGB6tz%2#+4GfL%Yvlc8n@ml6kM zi&m+oxM;E#^SwGU-$N%Gk(B)P=yI9SdrEHeiO0~k7u~{NIZU(hh4Gf~wt9z=rOFpnkb93Dqp> z>@WeuEe7#`h|$UF7cbal0s{I;9L$Qx#zdY}7!jA%?Z|eM>@a~{+)k~Y1}-_QbQ<7` z(M;#XOS&m)QsIbU!aGN2_v{~?@_i^uICTwQ9-a8OwR_YT$YLVx>)PvVnP?QS`H@-) zRQO@`5WMAc#$&}7WM7I8tZ68E`~CaU>+RXAq_T0@cDv0{Ely*# z;I}AG_|Ru2?a#%)!T^lGn(ta3@ncrkcpSd(=tCXeGHF2^^x^e)0!ibO^szImMdxdvw;<=Lx`Ec$xL?3 zdmrobksJ;qXfHo(ofBqy{Vr9dabJN#^EEJqNA@2X*w!>cLkmJhGX3rY&>BTD_&!J+ zv={j1EzvjsIrB3Xq;^p*GNqhI9}ZaBgo8%SVj4amaygDS3ua4@pO0I?FEM@gsb za7nZm?!^wU;h~pv#rJKQ_EN;HIcjqhrJPTR4>7!#R;iBHazvQm(w-6z1;Jf zfIF$e6w=w`ez@`&ugCO_5N{dqx+3~WI?gQ&OA#JwBJS6K1D7@6`FSJ#{se?Fhcd-t zo>g>%Pk0OUpG$MK_pQdNPmuUIX{& zifQrO)e%%9V<{DC-YULG0q3slO9k1@rYbmO_pEdL`-@G-k;o}4nW^n&Ynn*#Yostx zQaY@g7=Z2JS~|2Myf}@k499h3V_6$QYd<;jNgS$?*@X%+9%p1t!D?(04lIc z|1m032NS-qurO5d;kuzYCB*^ZxFwI=G?=IyH#75BHNrfIcvXeAf7U*;cb@Q1iD$Uf`WYjFvqgMR$OBBLK21lfahm2q z>43~_=HQ&h4Y6sV`Q{kMYUfmCnd?DK2m83?mmg_u@Dox<1@FAT#_oQbW9G`?2t|*I zr~YtZ21BT+(b?N71G(+)uoK}wN#a`=qNt>YE3dJsRIsl2RM_tr9rK~^jNO5QbY+&I zofn5>ASkiDG}gppPz62mNJV!uy$aVIq%qj>BfW9K{jg{HH#mp-QT?0Q_mO*ds=#6S zBCh#^Df?tRC-)dPviWpdn$4y^e5n@7IjpW1caTdw%j5^>wHiJ~9|w>ssvDg(snErQ zx3{+sm1bQ}u91?q0GS9|WE@pOSQz=$>w7)8@Zc})niefb-Wji=5=gfMH-=-?o=t5I zpU%AT8}`LV_Y6e;*NasObewG7^Q?|2ct-JA&aqhzONY6}vB(d1YG`z3&4H@R0>Law zehZp$);V7YJdbZmM6(IRJYQs)j}iR9y=}j$9^0;ib-{Sg-cJbskn)Ft$eF{gD4ExK zAXnt#rzXx)@ZA`6$Q{^4U`vd|=*9m>*n7uQ-T(jN;n1cYN)>Pk^L8ct5Hd~=)IzCifwUATo9d#W=y z+rJv5@*{p*lqNK$;$t_g?a+j4lXOHfVl(dV9z@y{BT0gPc(&&yU5|(Q$b|cYy;3b8N*Qj{x#P7Ac3)1`y+ zYKC<4pKh{DKc#d~4dx!wtsJVn9d_JfEKKUSM0zwBSb86Q`a!1PnWv;IyZ37~>+ET% zPg8>3DoZJLP6`8fI%9B|%?p8I34%jS5E#t3*?+u>cn zD~x_gGk0*ZjhDt!Y`)JnChneP%sR9>EDGBmqpBhC`*v<qHSO-<|!38C-M3MmmQi z!XvI+>8A%Y7vFeuP(r@p)vVjG$7jY{&Z`02Uk)T#;0I__m_Hq$aDh zCaa{PHt@J-^zezD%X!Lf8nHrW>dPt>&*sZVPx6nyrJeD1yuA5-#VUz;HP-mmaKZ>z zUVf6l8}|`)=g7c>^3@$S($&0&dVDiq9EWEgHLz}GNXVVN%U7G0o9fazd1B|eUPen0 z27FDXip%sHY!txuuE}pPc}*fOqc}O8z7KtPr)rmQC&9QRGpLIH{nCA`fup&&(T1Fx znadyHDN(cg1UA5O(DZff^z(P;$!e9eBhN@h8lC$`uH*nVf;Hpn z>b2#4oRvB9)yb>bH8n&&ILPu9t)7{@JWDT9LUQjnMWf=Ci?`Q1EG1YC$$P}-T?#ke zGhB>1Oi33{#%1JNxz@AE-6cWkeY3KG&oQv|5tIVMk21J4o&5VEAg*Ct>u0ltOb?E& z=Hry-7i*;bWhT1$uG=<-B=iC%KZT*Q_veqXDI4m74M2at%3ifaE&ZA+gS(@6ctZ^X zu89bX_Y1bn>}=-i?PnLhWNXK+-UI<5O>61n+M1Caz=j7KkEW!Z- ze1g1aP8!dR{2q+Ji4j9FAAT})Y}(xh}PcLlt7R%s7y757i@g_kxPqa8_ucBQFF%GHYM^->PDa&O@(=J z#mL`AN}}-n&@98RCyWqn%c#gHcT%G-))6L?`{L!1(*{E1t=^K<AQ>tf`)Mi$<~JIyqF!? zOY?Q(f=nL_sp1B2*u!LOn%S|xK0cwctD4}vYsHtbL6$=tkyjZ(Ve+>{HT;FnYR znqpGZ!heF;+U_Uk(E7#*zdDr|>2~?aRi0k1B^XP1)Rk}Zsc76G~nC78cCM4yoYw( zZn-MHpV)DK54Gs=3LcfsVi}?5709!v+|HXByl+sE$8pLK@vd&?)H)BA++323e8p3* zPFLR^r|V>7Po9fXn_QGp+7G*vLxigr*{te!Z@)<9CrVO*ZNDKm9r3ukxIG;3(94`+pGYN51#6$UAsGv~I z)EXLAcU@cr9-FW+bLQ@ksy7!!QmQuH1bzvFO#F#uJjdjL&M_|G&v4JnZqo`X>W6jn zE(aVunYPji{>0jgkT;R?(6`0dQ)^l6hG34BT>#kC7wb=RSkTKm zc7ul;A+7pzL0tOMfLOBf;sREbC+g=>dAr+Hf6-NcdxUFnd#B|f)=tln0p1+>L4_yB zfpM><6VVyQw&9e_RrBuF6`O(8n;Xh*NX4$O6HoapJg1MSYMq@7UgtKZBp}5S}4Det3J*S<|O?Qnakz(9`_}(b7I62 zURnQSHD&{carXsOKasC8$Zi;(nTF^r6c_F-(5`V*Y8{(Q(Wo$u7jX5+K*37%!)jLL zq;*?!HU~>(9n5HHwaRk=y93X*CS>_B>Rc;;$j`&G>PcuiA>XeCks-!9A=C46-e$%M$(tfre|nx~-15g@Hp~InHzcQD^^k9fW8NBmTq7 zir>5Ni;QM|3?5oE<2)VR8QuRS!gX_b0eGul*Nw0k2*AfNQLBuWH(9n98S6CPN*R4? z+=G;I!S>?4pa~ofEdN9`SxKQmmD;a%GAF@@jr4F48>t{jLUdNFyC*7Y84NJqztSTm zjrHoNsNT>rff`;XWWSdAbzsgvc6IACG_>Sbk2yk$aaPqCvds!*{&eWp!+hOpb_Kxu zJlHOuC=X7Ny2zeKmItMCAJdW2$sp=R`=%jw)rvB9lvLD-79;uNkWFff{VsP#~7m9q(vj?OTQ&J!4QA4W;DVhT%w-Gjal+Ly5Lcv#lgeQDb z@g+*kF$Am}#uR+IXzXSTO6Rg)=U{|6oMAUNrF^r&N&BjSGWdgyfb^{aw{Po1st+O7 zII(Hd5&hP=dga#~IF>gas;xkUkJaP)jIoUqjIdhrQq?84%@>Cd# zD|Y3r4nHMfC>7`E%U)*ZTeUbQk3UrrCBMB5Ewxl3!6T{HA1}<(9laG+e|FDo@(o9H zhsnV-4zoh!FeYm-+V2)0F<y zKp0S#XKV=HfJ9d;_ntyZH5mIE=v3bIj zp{}dwxjq9kj{G@S_lfi3J{SyKugi(KQl8U(br z$n&1BP(YKL(sHHc%QNrj_yDK;N;#4ZB5SlX+Q)G)^+@FI5hgi8eef5|LKZ_n{e`2- znuBu$Fqr2p`z?lKo8Pf+T0Z!1%96#oC#W=JlH$BCa0lM_MWYON5SYQk^*m$Y@Ou!t zH~bojv|3!3n6qul#{2WM_@ddLzoXzU1Qz9!zNolXF9Myc63LB!D>@SgI-J`~ze* zA%uuQch18xW!|ro`*-_>us)5L?4hU*kNWY}B+kWU%p=ukNN-gq1N!6R)0_9BoRrB% z>RhM*@A|gu7gc(rwmI9!gMGq#$|_d0Hvw@*BFW3ZfWc{fVqx%xFg5NNaX{ZCP^<^O z?Z(LGrw;|7k3UkH)Hht&0#WObyVF;NF)b@C1(m<+pSyc9LJYVX*b5!Ic5Xl{u;%J@ zadJDWuE1WclV3k^LffVI2vm`nAadCX^(PAvDG!C*f`Sb|DeI_p-0qS z;a3{dCgIU^chODnT1zh;!$-D(mP=Ew z!bq$=C2-()pFe;0ow7MN8l&si!%inhyOh1uZFy@sC9FFKEaT&E<%13jU?i@N+PVk` zHXH)q75cR$Amd%k2UDLFXa7#YUX#zGJUvcd9K^*)Zg^q-gEb&)Tt z7azE!h?&3j=UEB>T1DU#@|#OKATWJxG{34T=8!Dz zWn0+sk8{?D4|Zp#bztxC$Cw)s>Zh8DJ~_62KsTm`EgE5UcVwXFss1p{hY_M*D+{h# zk#gtfHvm1+AG^|Oq=5SEc(Webptqu-5RpKojI>BtGzjnN{yTJX#5h^?AEaO^r)ga` zUR?tI!VHvqdWQ>&fi!avI*k_sc+lP^8w@~^Wj6bg&um93b#YINv|-k9iFVZ4%=#M(y*E# z!>pkBs)<6x+(kd>&5bI~YfD}C{>pBUTNuz6l1lLNjE(u*V`2lQI)_fEP%dY&`yic$ zRp=_J~dqO9{I$&SCo7XlP>>f9h%~>%@2BI z&Fn~C4|)e5YKnUZ-|7(ffc)`+n{NCJUxA({Qhi@n))z2+B#2m(ol^Y~el_{|M7X%P zIXOA}C1URxpnsE_%yi{5=!5Bl?J`%;5B9S|lpMP*vS(>2w5Uwn7o6hM$(bVU2Ilyg zp7;%9_qr)@0&{VXDtR#bw|Cyk16I&$Vd1+ktRF-g4UHTeuPUXcoDXmD)-EwBytLMB z`w=YIu5xvE>#h-?RFbB>Jr-_;^|2{6n1TjlC$j@m9a5zoqP#CL@*SkXP#G!(8M9CCx5vOC*n211ZWSW@A^hFrn6P6!ySJ!Eu}oAC}>WIVk-eN$c%-iKinqk6%Yltg)(xgAFx7q77kAM_xWtO zAW5%vXY+6mXy3FpIFWKXC12vq^}BO<;F0Xx{f#$%nmq})1timB(pY)8BOBI6v|oo? z30*N*vhQ~&#in6Eh~K*u52dHEzMad9%^U&Fw?6_Nssw@Zy6U2;Mr>H?0#2-CaA07X zq2zg=fHWU(=z%t{F%h3#uy8$Cx7>cNY8zD0J&Jwg_(_pOIWcJAb4MNcY&`uC_hDZRSuDELfEEK``QL4USC0}wj zOfag4Xsef>Tb_xL%qY|8M~w(Fe}v-eE5a&ujl$Vj}nP*<~lpi=Dl7LglB>0jjlTc(k#JlbQ5oN1*m4@#M-peanQ>YEtljYsoqr{ zU8tuNpocS1@};vGoCo0Q3l!K=upUJ9KQl$1g|#&qT+!xb3O-Nx7Vi zo8{E^9BD+lWyi-SgZu&(nWKACYA%;Y-V_B=-w(K#{YiPxjoUyTkhuAw>A??;i2t}y zX{<(F2zf693Gh5Dfjb`6SgnP%I*$gQY}+ZsMI=d@{m7R57FH=~5N1Gi(89(g(Y(4l z)3l~#K9@M}u(A#g#6CT%_7>`ZdtdyREU0>Rs#ImZChqdR%sb>4_pk1knD>5g$QohoH;W!$Tp z?X&O?DvT~iJLnDH{4R*I_3hMrK&-^IUqaASF0#|lbpD*|vU@qPIenCnN9iS6uZajU z_v#0excaZRz2j2epIVHI-FdoqXYW%fEqWR9)${X|5`FlnIubr6?Bx5E=9_Q6egsiJk1BFE|lV3GeYC^xvwWrJ;h@U^t6nytbdw1k;~dQq89+Bb*1dk zUI`APyexCa;f+Jjb@7<3j^g_@m-A#&rYoOLYq1}%Qmx_5sy`%Qt@WFq8pB;rrp9C! z>Hk?ypD7zT6bg%zlkHW(#s~f%6nYN*jULPTnW4}Ie9ZPUvdCbK;BmuypPT=9>?SL0 zz+;Um`XcoMhmjc+f0tZM;LgVH#?itv2>dYzWtNj4&c>2&L&rWhqJD{=`D@@KD(&K7 zH?d}^NC{L^F*%P1=l?i>gLo)Y7gP`}#9G}SVNV-RYg5ax*>J?rwrQ#58Sd+k_r2AO zkwahHw1c=hFto05nSoh?m4t?3TMH)RbbUZVIo9eU&4bX zD2O3Vc!4^McdF~EW}g)D=R#@LrbAXFNyp*ZJ6k5UZ{#Z?}T+H z082iTauO_1k^j(UvebLiE2}IxadauAuzmjIJQJe%5sQ3#0@(ZK<0YACMg*dMkflM; zp#8ln_*lOj0M48F;5peg!0cZrWSf;c4q7=KWTnaKR>!Yww3bA1{c*P^w^!6rV2)XdtTd~i&~3b zaQ^n}@qIjfzi;Z*FnTG|D(MeJkMhYzsJ9ZZTx`zEo+gj!(VPU^R&wh0iHWWYXBoh? zfA(|q&#a{A4P^FfBMpw(XiT$1g&nI4tRRjhw!%`AjDWX8aq7Y5q->yw5^4*>|hZrS3s1pAYvsGd%d8k&MUkqnSf z1-P-{;GsOW`k$jQ^_{J>zgszhHD1JY6na?NRM6!8L9)D#AOhev^&3GVkV$NVrw3Bg z+!jC_EGV%X$$)JLtFp+C{|(E-mU5c2lDfa@Mc|zF-{@!xH@U2!059%Tug`VoIprnU zwu9TdEcmx~&6r&#-ZrN}k5#bcjaUlAJa}HAdUV*ESg+6#W@ahrQ$HG*+~|dPb03#sZBw<$&Sg=7rwnXPXM)d=M7c&mmBmG8w@-NY#dk-fOIe# zUpb*bU;LS;GtaRn#io`~*ZCs<1zprqb*_pNw^~t;eygpf-}M2t3Z2j*eYWlNT7APY zc;JbQeZ{sLoS?JKFPZOK0BE3cdjzg)Iol_fU3?JhK#*@H<4jz~ z?Qs=eV8_!7PVzBDW^@bAwY^Ju4q9EhmY7KisP#ecpHYNZ{iDCQKLdDDH$BRc`6%$i zD~IYqeW@we49`i^>sCx8aG^uvQK##XOgNOYa{^D(NX$FKSpf5JXvO1)#Tt+-n65Sp zf%0>ozi=%mq$yQ@S;2yK;}u{}FGLOP&mZDbOFFzJD}@D9d;f?Te_Q^%&_Vfe9u?dI zKHAkwFA$SP+?%sWV-i|uw%c6uu)HEu&6#-s?~bXqtP?~nf{TFs2iYTO&)uPsTmw&Q zXnT@l+~`f{*TW@v-)~!x#tP`2GN+`=>k)P9naj6+SY*CBdDR`x2($rmq`#KJXx6UG zgmzjp$ofnsg?mi&SJ0`0pm}woJGK6FS}CACE8_SBe&ji6BGHo0wG*$50U97M~HM4_eCk8f(m6?}TPb6epu%Tf2DgK`kyfsNLeAbs)#=Z1`-c7VZ> zOQiL*W5{U$!x%O1mu@KGEcBdTbhp6e7_t?sS(!~E@#|Ek6X0g*sCONcH_M}Z6un$* zH&YfNZPmvt;)d2~OKD$SNo@~tOyRseLgf)fuRP>19Hcj-+ni%9(<#GXPY3J;(_B!E zKYBDgQOw{y7n)AR3Cqq|mtKtx90PBLZK8keILrcj8iERFeshD5*>+cgEqDwFjIj3O zNr8ftns=kxOwH5A^TJKBy#uaN-ITnDpN?ncGYOwJ^M>?EX-|?>zw~G^y$V|Ma3pme zZP7wSwya34<$uH9KFQuu>dfu(TfUSoajbLlIL4ad?%h`}D#eQWME~g+9Id1sr%GZY zvMjzIF)BD8NU>E0j;R;k;?^J6KAQsi6gJ;sV)&yr!w^w#ZTm}+-bmrO^27nQB;$n7 zR7a!SY8UU*g=O^6kVayLO)mT|XxXw+=~D~mB}Agb5~9*(Vl2U{a5~2ll<%f0 z4Y~A%z$4OM;iBeM@?VCt9E8^tXqpo_zC|f&p30S@QO9}us&{i^C_A82M5CL)!-4U?)ZN0X&Mo&QA8!daLtF!tf?;b z$?Iyh50~97CHy2si=O%;9>zZ`*5>AwToQa}mAhw0^Q#|EV*Vb0gO<(LgU_SRZrrkG zf6#(+A`wu-1#P*cF{;6e&Gc*zkEu}3X!XXrWM*QO3Z~A6&vF@HJpWz^Bo7AACb_cK z4C*PVu2x)n19N!1xVRq7Te2gyoqQ63`>|Bay#paA7*+0skI#OLkrM=7o>Q3?Wh(=$ z2_Qla^h%$%r9eYE1?h%utws*W?IzX@t`hh?ZKZo9-ZrbGGwv#rm}jlTW6*bO79pS* z5w6eVja`x!j@X-u2Debtzvy>2*Bk*5tzbSW?^{(wdel9a>v==5!SG&i!|6bysIPXp z{<3eaq%TV&Mf@sj?KhE6lg+dQVxv?L8VMKedR;LKQPPl_`GYI=-3r!kr4tAH_uoC{ zQlJUHIQYb8HyCr0G?Rf|zfM)86aLd#+^;s-i|FxcXCCj-tL`myUIF*;hG)zcq!a3)=o@3Y;B{LpxfxneBDW^$4_`x?PiWhLq)@d}iXR9ah` zS_a0#Ek-w-qv<85{dTw9VteA^oL7?9ODp_BpYM~J1giwMp=IVuNXvu7Dc8*DGMTt! z8+Ex`t{Zed*uEGH4c1lnH!O_lhw~YSU|)s6t2Q?eMG4lbLGo9@)}yi;JB3V#h4upQ zv9_2+Uf=5Ii7qDA;H94syhH0ou1*^UbB?sd4pFAw>5&m`xWhfrKla#?+Ho1xa4&a# zhpEOrGiCC_NOh@ba9)ah^k|;t!;8%LN_y1CH25BEa;e18-P{TTEhaL@C73YjqcV>< zZE=-7mED*9Xg3BOQh-$sN{Z3_4niO(qrNqjV)y+n#JBNX-Mek$&p(?-Wc+frJ>r2f z`%$h)dz~2?!ZKANzUZV`?Olo3v9uZ=mkQ52KS$BlII$`6Rpe33ba3mQ+>oJy!xg=E z`S>0;?|3s;JL;Mvr6J?x^mzK#2h5eh8o`Qy=OQ&VkO>I?3Z15ZyF-CkxR#!O+JS!2 z3!*4`(YB8FVJSY7=F0XqDIb!e4-Mpmx;NFYu2jr+sRx}5uV$W2Yt&_LB+niVj%-nm z=GRl_1r0&6bm&6whML^qAURX=Nk3twmRH5cU13B$&gkri=;KS?JeBAh-cQ?b>)QP| zLuw%^<+lH5;BegD@@=9ZFWzjf-TBeaVr|YJ>|8+^T_hTDt!fXkgEJ_GA7))z>*~m( z&w8#w*`yZhpPS2)lPiR_DA@~nx~WF2A=(nNNdIO_QJck$sm1;V_ZtQn+e6Vd{M(IO zq7_1Pw@15X+6`lF(A{1-+q^wMB6IXMq2uL4$=UCc7rL9{z^_V!W|&&xt121D=b%uA zUnsc=kXsDig$b}=?=Tf^=%*yP%Gp|zlnkQwv=3d6a1}uT{+W7wp%p$$1bAK*(~Xiv z@9f~&0YGx&6aR?9H4L}TF40?;V+cE9{4XBp`$&*q6PZj$|9kS5|B7vY{I1IV;`vo7rNO5zODxhzCMP z%{rwTSZmOoB)$UNyp~RT^>0Olcw2W?khMhVp*QA75(S{Ios@IQTC^HjE8XoXSCoGlqJ_h!&-h=r+EK*DHl~)^uU>eaT?(EXwKivFu3_f1;I^uOLkTSx z4^$3bXT>r6P$hgBH4vFUH$c`0gf#a%Mioj;<^_u{d@h8zJ|DdWDt1eOpPO# zax9}Cy)5$W;r3+)iY;WS2+^IkVFDk(SB#Q_P)9Ho{+B;0931u~G~ z@no6Wz?T&#$<*&lc=*kPq`m6-Dw|`{h}N$p?pdFV_3uXtT${D%zDM&Mo+NK7C~pmu zwz|nuSwZ1&b@xzzd9=*AU?U7L8vXy`?nicRgs$*Bxw;!ekC3IJSQmi+&OVLW7_#)x`RW`%N#(-%UJC)i%idiwSkP0lxL2pbJYZ|dZO;kmGIfyG(IpC zL5XY@opinI`(rmpCE{1>U?O!|lUE9obd_r+MAT^^@PjCGWe$AqGZIGiC#xX#hg+?wlndPSL=OhqJyDd zb3{{tyZn6Oi{r9T(cG5~+SkulptBa7>GwOw%T&_SACtGVP69P`6&S?Iij(9kqh){=J> z_?Q3{=)ch&e+r1&7j+#}%(+F~J6AD)3R)Gd7H$MVWh$YX3vzM}NtszLGfOn=-{HNx zZIVO*{fBV0g+Jxw@twu9kMQDYTKGU!NlU?_8p|r}zie8}i@ZPYfzjEgdXFe<^KMfEKp2szZ*p zHZjng{xYq%=SZyyqq0_)Js0@LcT?nOfy`Wjj)MQKkLNl=V)Y(#1c8MORQZf6_+7W02su0KDC?z9?@+qxIl64=Wu*Jz$$s&1ifJS%9>@G6? z{EC)ULz04JS~jNC#`$+kQjs~BUOEe|uA{e7-+_`t#!j4`6Yh<6ixcnHrL^*9wc2z? zC&-1MHR!Cj^Ym{XE(EYqB8`eJZEo6PzAZN|@A;ylmf5>|_uOGuo@^h)2ut7+0m?R- zDejf*?|7PESr5!Hi4WGD;lqUmsBd+w|4`o)xCvaY{aqu?B1a3E3c|LR_SYv_goVd5 zwp|2(G@UJ0iOSh{S`2FhOl>9_wMBsZTc(QyZ~ z8V}dyb{F&D@F<3U_uVHH{2|~F-+ja}a_^5TaSa2jebmX1#pd+=Mp~KfGO~mg(ov)$ zxOMM;@zmN_Uv-B9WA2GhLD>^@xUgYd{sbW=h7}cc7W*81NJ%+7Gu3_OmdsKKIf~Y5 zX|Q;2xY^p=!vq^B!JU1t{~3uEev?o(^p|ke^T`Jq`F(d!K98mj=Y%c;P@aIoYAn=~ zlm{hSOHG%kzI$7d-wzQOIHzjRK!P#HclHN-u5SJRPUEU?fo>)9+NyLh1G|*V!`q%9 z3iN3u3kq?Vv%p2RUAmJ%T<^BG^OQRoScYXoLBEg%Ta=zo;os^-(xMPDAm$2B?h z-84O&7ZB)U$zX8fC?Cd!heCTNfjMJdL~q{8Uo&uIVAlPFTSqkAe~3NNt9{RQs*@kR z9T$6ZOZERGuk98~B`afXLjG@EF8N2}Z0wvhjK;=l@`~Slwzl3(D}`vO{q79?!-)8? zHX-Eumt9Q=Zs{Zb<8myHk#xS;oLEjcKjwh?3Dh??S2`zOEc4Xhp(FLe0fVc2zT=5nTeRCnA+R#t38U(`l1Dq zdMB8YVZ}JNIj4Qlm|oKqZeu&;I~Hc@Jrh2cAoCB;SZ%jRHgt82vin+h?=x(u3`_>e z=;lI`E;%OWfT?jUmsSY5nmadLE&QhC(HI>cPt$*OzK1S+ke!_xM6gx?!Ih}8Cn_ug zI|N0Ra6|uC(0N_F1?C>e_*25VY#tD0NPeKSM^mRf)XrhuN%i?=InfcgN+Q4BN zgVfSTkTsf@>?+opmb`%8rf|riE$8USOF&@bg!imqL<0TN6{@+K#So|QpT=db(Q&Ie z7_BJkNGI$vZWxBJq^1?__@_C11k9m$5s78SzaR)6tg|o0=k;qd1*l8_>U2+%ne!mI z<#V^8Ux752X`OcpmZ^5S8YH~FhC$9yKf>=ul5yj8oO-tsF0|T6xZ@oqgenTAX6EE{ zM>$1e>Z70QZQMEvd3kxCG3=X%!8lGQ?(DqD#6Y7fxcw{Eoyk3P$ko8Dt!tGEFN8?u zzQp_XI<$`(3=GW07@i-Cd?{#gAp`FR#gO|#2ET=A0L2Ioz&AhU{vfXRoBBqxdFP!5 zSU&i=T0CB8vEx#R2j0k+Pe zMIpQ2@BnJU<$&N(D|kk5M$Iwz+P)b(*9j~(R#NzWsdf#5nHdKT7l#Agh#x=Jf!VL- z7UtWu02Vrb?l3{o^7K+~URv1i^m)$(NPzFWXB=C3x>>A;KR8 z^UkqXWJ>+F0@{{_>?DMUK$(%|7h50ony;Fvg4A04fsd&YYHoUE9djXMKcEd%4}!K%U&;RsM^>7TXdBnEZ`qi*#H_FPCgEqCRTkAivg zvoySHM&8|4piYLeben4-y9@(5ULa z*t6s!qpHeJ>2zXo%hKuc+rnv2@<)K>hLI+;aq6XoF>fmlvm7cw;l*OY~AgnGQp^jJfv-CYNOrMIOi^6lyISD z?M=@9X40Ga6CGY!UH-(L#E|b8iX*^hzk0Pkxedg1T0xFS7`m@Fp@Rp|{YcF;3nWUEqR91Z0yK}p{35rGj&}g5O=&Rt8p+wrCo=;p(eI$+(*mX z((90`_hc7uk;KFm1-5^sFDW61(+J-(UFv!n56YJ?hy0u7f5cNTZ4ggkulCgb8{GOv zQsn^Qo%Hl^c8*7ymW66+aTsf$X&F?eE^lfYRJPjjlAJ0dcjY-fqn&=)6Vg`uVnStu zb22M>9j3Xn6QZ9v8*NM?u0zg;0?^W@T~=T8gs6%cVJkB50!f>D|`i|+c2rCbBtw6qC z39(}7m0r8q3cK>mZq8QGfZCJ+nEFhDz04nf zyab8|BAygfe6nU{n$b%6;V(4wJgU?D5rs9rResxMFc~X877|Cf$e@a#BT$tyo4i`G za33QsUXiLcnhR9ncv%W9Yr?mPm*z^#C~9NIgyEkl)D>q7z(Zh%1(h`@h3A z!o%8*&RbZJ%&7B-1|eQ!8&kz=J0XH8W@w&G&`L9lv1Po~SU3VSyb!6&Um91FCIzl3 z8tRV*$QpgA)1$IlCaTISqD??uh|K8uw6frT^MTI1_cw4QR#tj1F3ex!S4R^5$i{BY zVaJML_a&f&kIC5uo>|7-FJ~?we3&=ZCEGp0qpjAhla=G$Tx%JcABX+$L)GIf7gU{< z8C({Y?vt8xPrl`P^yHUKyN2zsnRvz5@t^e?W;W{0bv zgm?X3(R?njqBZW)X8*2e7gXcnS%Qlg-^mFNd(|-1_pPBa)Gx>DMU_-asoEolG3c|p zIG?R+$JCVQ*>JSFA0qb#{WpHW>cb^L8Ya@SufFiJ-P_UT)F@)d z$8tH*vJhoP+-_UEb1x!vi>lQMkEV*|vuQ@}J%`Ek6m{e-DfCf)W{QhEqN{+m_2kQkN&Ec1S!7zYmz@h0jnlMhk~7wUH{CZYYWbNtuK z0~v5+Lac6CGymr-U&3~xdj0^`w&DKc<8h;hOSH%K7VC%V7d{#n%eOcfySy4k7!J%>$r*btOe@x2)I zUpEHxf{=m**rMvdzqZ|f<66KAmU2Z@#xsc$3h08du`egrH`YFiMO?zZaRmV-Gf~Z! z{^tV1kjOS6{E>y-Bafuv=hb>U?No*@oUSIz{r(3;CT4Wh+hpLae2*5(YrwC0o3K4c zO)y<^TvrC)HYf~oFYIRC@7t64<`TG$6Sg(7|9p-W=3G|jnjf{``)PZHvhyor4?s{2 z+GpWbjobHr-rUop;Wtk=Jy@N7;`q>G*zY z?jF%=dUc;>bliPmc@WgfinxIDPoACriCFs|IVGhl`wL$)QdK!ENxFZ{e0dXBY4zHY zwJ*|a*EY6RO9GKlS--?MIKr?ZJiN40z4j$v*|t*0`B(n^`JRsCxLpOgPU{HXXj#%} zO8%n4vYV^x6I#4+(;lzB-I^1L_Zl!YIal2b98?vfYk4I2?S?Y3ADw80_R0!_Ahp2F z_X?wh4%c`J46C@qq?_!)ZgW>&rwI6Wx4&P)@{uRMjv2|73Z40z1ubDYdU95 zr3U0Jfb>m>xUSd9etpqK-jCeGm(DUBi18tp%BO~?$*!gbl1N&emnmgap zfVI&n45Uc9PM)1#lDlO|2Cha~%43QEd* zjb5jGdGuw?x4veBQNwP>H!!dcwXFn1&c>Tuw|y>Iq63>>C%s@|d$D<4GX7Q%^g+Jc zvx0Bs_JP~e9G=IOB5>2CY4K0^^rUCU2c?hq$kVY|L;{Q@@aLRIXSf?1yk9m)r6jO9 zpFInVNxq?NQ@_Ysy^vNLwshs1%Q0je_=*En;7xy@1er9uCMQNuw zqBs`-i{p|UKh2Loj)A>v$$pH$c(%W{&zKMf!A}VB{r#8ER}Ss_y+evVv0V4AQ>Y>N znXqQBJ;Q{}sN$^}zA19ea7IjVCFp<|IveTfs6)GQEqq7rd?c4=&ud-oGP6bHY=J)f zRm77m^m}iPo!!Qe${J+_L0*`%m(#7mws{(Q&9Re(rMvu6^&4-`Hg_1iF9xADLk!}N z>!>_#hmrU#!-7fVa`MdVOG{s^J{h`y8Ku#WvG6pTAM&)6*9Io59xr-NAJ^)YY`L+Z zZ{*K&&sEbzXCD`NKPuanovRL6$<@?qeX9b&C-Hk*RH9~?YiTnSE5P|Y9fx`G_QQ)@ zhH_;&t=5kRbv2rDjW3j%>l36|Z;ZFGvyC4giFm}a_lJ{p_6Nt@0GnSEEQq>sCF){Pm4=QslXqxa*q=Gb8j+-u&{$j zG8zumMgntyd&igTw>hB0_!T={1?hhl+{Xde!q)RqxWq@x*9{)- zk#wv+7Zbif_=ei}<>xupt`pHpT2*UY)UTKH$3S>$V%hugj3&S=I_y;Rk?bsonWVRS zJvh-K;@1)p=p&1_-sk64KDUPw7mt%Y7jWlfV3en-&BPAG;b3acujf?uYM@W$TCM+!Ko^DDY916k#`KkwDe^_^f2e_L* zbZ`6-#*AYV_w4L7iZLrOGQ9qk$ot^1&-`9oascXeJ&%)KlPVmRX5cv8q|H45X&{zm#Za0cn(2Nd#q=Y>B^<5teG`f({U%Qb~7X`E)_6bRvubnuT7UUUw zG`PXHL(qM{RJ!{l47*c!3=!)jmXO*|v;L(GVGq7d6<_6){XWFKne~!o{>~IPMbhgtvi{szWqZ)gm|}(MRvDQK|$gFvGQQA|VaZ zAt4<~2$D)S4ALbbC8dOPhtjBs5{h&v-Q6|RdyERh?RBmDd7pQ!@89=>wPwL^p678K zdv5!-?`K-!N>vUXFNa_ov&w)bl^wR&|n z=-SMObnCs;?JuHcYRx{Wje&<6oRR)8e@$cHMS{)ryPC+RR>Xnk#Ma3~ar&hS5QzCH zK9Wti(aHMKT=vRUCN{liM6M~4nc!V?$vR#z)x(+#8Mp12TSq?Iawipqle|v|vzrr!3E-TVFGz!gz_8dfL z!%y{sSLVEo>i#a4BArEMC#Pk?)4Zd=7%_-&Yj5$)yw1ifEF2>IqKGH=wfk+orW65X z{%kV~+ULn88=3NAiU-q%Mwt7#UgT3k&GnHA98;F_yNNE_J0F=oN`J#%p@K%l4sQ<( z=}f$PqwpY=i?n=QV7 z)|m`=!;8o!CKh}-{E2y->tA|uu7?XK*V26|X_OioDKAJbGQ}6eByFX@D!U&5!spIg zwqHc@oMyd)CgX5eFVlHv#_X1cjVSYoxFxpQ%$gZ=aUbOJZW<04ZkJsqpme)u86CJ;oU84J{ICk_^>E(IhY%Kn)q$_f1bBpC(* zK!|XOYzGj0>X0NK0)I(hFvYYlh#yC(Aj@L{SANLG20hv0KYugE0^<&Q+&kpVz!zK@ z@eBRHon01)?w>^a&^{S(=bEh`)4w0uKLFf0_9lCP4~Rt79c}1w&?1pRH7;tw&;}67 zN-oI75&V7Qmh%n#Q1&t1Rd*X%-~41c(wcSVWnuU?qCQ>(?y57{WG5X9zFxUjb8~aU zqWzr$MP8BmDX^jDweS}pdDQwLaKnWf4;9o6|K#&3 z$gAJV{XtPy=P2J%%x+lk)=6Wf{#3K4Iw0k zWaZ|*sL>L5k$`vOliNG^feNo&}Hpl@%`)Lw~$|(OVavqx+49|l!x3r|EqJO~95lmG%drBFsqKI+rG3-wWH?!m&=^v^ zzP*h4TmK4!g+Lov_N?39Rukx{Wa#$bS5Xb*qDHIhTc1$=f&$4kN`S${(BZ z@3R0pMa{XLn2*xuF_6Ym*VeX%o+#Guef6Zlh#-IzQA6%hgo(j5_42AaRsvnScET4- zhA3`K5ajfBVkoqH2@WrM8R~@Z9}k4!T{}A)YB|`zu1Sr4&9FO>_TMtlMGQo~(nVpq ziNvvb>8XZJou>V*MU(ro!=<$ytToB2hnc~Oc>-#qq1{Q{jq9&x>GLOwaJRue8wUe zrl=#{G_vuYy^mjgO=owpJpBU|7kN$5eSa|w$v41h0gmgo z848v=@va1QdVh9L3b{BH_e% zo1UoxU#B0H_zD+wG;~O3&|%qe{^S7vJkLX<4p}d3)kzJeF8gW_f5i6>5$btSk~SX^ zFg6!K9*=d0Er=IuVzKdU$Vel{U{b&iBy1$TyNtbTNOPQwR2O=32q?kMr3L;M@E`gA zJ}_z_7=dtD>UwX0@mKrQ_$4A=$wyCFpVGYIik8%Y`-*le6-)6FJB6eeZi`-#9GxS}xb_w39kYY~!03ghfzh7)SV$WL$;Vt)txw1k=RndX&w^=RF)-{#|u)k~97ZM~0VG&MDq z$P(1~6@hkyZ4UO>M9C=Gd){4yfvsy9);x2}1;DKm3qjr4o(LT6+iR)1|G7{!h&~J- zyr8Yy-{sTZS2og0_awuOZ_kB4$-;#U(X}LoDRdQ5RSqZhNgcn%h4WucZU02fOgFl) zSivRE!H$Fe4P17tnm?WD*}2^^Jo^zOUqry8!dMY2r^lrrnlw6+$PMC;{| zdRD5{6^Obl3An6%Kf~NVF6)cDtbdbAH1e`2{8B+OudG%x&e1XD>I!*S)%sF&R-7_X zF-s8afdukWKRHcNaaZ9nsz`C-r+!Ct_?Y0kPlb%6Ww0RNwJE=19J;i|7E_kUw^xRv zuiNgz`67-aMS2VgAPYCZVdvkG7(^YgDgZq7CkJ2OJ~@d$PIe5$wAAv2vSy@kLx`}- z&Uhmg7a1LVqGHX^X8UWza`W3@EFai|yWsAsKZ#9IQBz?Rklw0g*e1%O{&`X#BHIBajpz>{nb$5SDgO(0m`V|uYJA!utv7I3BZ&=jq&=ho74u6i3 z-GOPUi5=mWj_UNMSn#X;PldLAu1CCJdfBnG{9t;+kqq7d431O+CnIWm(vU{AtKW?G z1Y-STFzQ)B#BVq}9&b23#(BsipTyGx_4dYgrsjYaJNan@(_hHEqsrgi?J}_xh4;m-GvB;S{M|j%&h)_0i-DTG@ z^!`3SG3u8954K3GwjZK=%saMvB^zIIIBUAOiQ_Xyg1ivE7&Z6B*B(P#O}HBS>+y!8 zZBylBojoxes={GE$aQEfeB?eHe3C4KN#+%(3Roi4yOOoY%D;q8T}zQa!&dk0E4Lcb zs{x7qXcX+M-Tk9#vZiI}yknA(WLE;82^tWKOMMXO69g9jNdgdy&lU_gs1y1v7T=40 zp_(~JR1&x~CZ0XGH z?)eXj1_v27u?p+&%sIXwc2El_-D%`TkGRSWo~Y{?^ZlT1YpO^ylMo%1KB1Yzt^@!Y|{bItrT==S~9p8O|%;{28k zopl#?clAE~)+p-z0qpfz(rheZNITt=nOA<;68r1hpD`euL&Ft1scsGGSx3gn=hEK<)y6+2fK}G9OhZkd7j^Y&DwieqEZkrjah%G11=c`H1S{^;Z-64L@o7xp>&23&(mS+J- zUw-==1WGLef_lmq8fQ;(2v|2VG9L)-WIfTQU$z`nlms*oYW-!li57DL)1x^J2RUlY zVDE&XcFjHl@YJIKH_;^XhXTYPvdfRRHxhavX3_97{q5zw*IxJz1+K6WYP`+;_XT*n z3TTS+%zA|l(8$(U?)!mz7fIiT;It%1a~9NIwoW>7nqNNTz3=(qs^x5do{NyASh8x$ z2f9ktYhvxmS$5r7uu(8X{xNLeYqdK!9cXBj%FQngm}(K6jaqI(TrY*BJG;g)^Vhaw z@yKn3Utk!BT0Sx#5p*UyvaCL8a#)s77G+OXgy$|%DJVR`$_)`x2Y%>-zCQk`^%4N{ z5#S&69_0{zf1=hEO59(ar79@bRM)`>7o^^2WT?D2A$b@^X^>=6;QI&El9TlQV1xO^ zvw|q3&b54?`{pP_c%z$nYDFURiBGNbU5foBMEqp$HY5h!E(UFuHnpgctp|=^$@~f%wo%bhpgd;t9JDe?YXBKUoEm{WHh;T`2_$TDYsJ`14fQe@^?~IdF+c5>W4gC9C0>>?((>I@K_@ z%?WnnHENr-IwWU}3w5=P)@~iGa_-KhTTu7`fIFB`|J)!u=V->Nx0c{I{!Jw0vUkca z3oU?*wPEN5DJn1e?RyHVkuEU%twW1T%wTW!TNHq{EW%)a-fKq4&s08f?debD>AEqR z4kF=JA>OprwP?ANj}$x_{fz;XynKXn1DA*)75bx_gmYq{lJXF&p$$GYR!~rj`QEb9G6O?ck5KwLl`SDUVScngKmdY^|sIyeM4{S;H5}(^& z5l&hu@^lNhTwz)T?qbN`hOX`EkEJpqdoU6L7+8+A9T^_=SQK-H&s%7< z^<5pXt=B`^THoVt*7B^pcJHAGrL(FUe%E}rW+RGWs_1=&-3*&)HFnxej*-e2F-%S{ zpxhLf7#oXNK(WnNQ>~`pBZb8QIs!}?G zsf|B$Dic_poVEj7y7{M$c-H4MxJWbLu?6~pyOgs2Lg-+f)cEn~sI*E+9IUh1oHGQ4 z;Qe+@D~ZU3O6~(~3`qO-h6(Z%J;>3t7<3xr9HI{KoQIl(LEBCc6&K#>7Q<2 zP;z)B{nGR~ruL_cmTsWZ8wl)I?mNaVRHgTU1Bf&1hlS@(Ra<|9cG%z#;jiNqM(!!- za+~HpMHhGJ%@HdXF--lM;gd=COo3w7WJpC_WfZ^u>*KIQC z_>Bd<35=h2EwkQPfvh^?Nxii+`?N^@h~)O17;F?QiBSHV7s~!JfP{=1<96I7l)U{u z5h#e%KRA4tMP7~mM`fkNL|@SzYPxAKFf?x7))FBKGX)Q)*trTjW#26Tk}=u>KS@%4 z8z~`d@N22}atcM!k=G!PO$S)IyN{CJ4W@VG{a9ysqX2qwkc1ysM)6Z8kDm|L^CbPU z-(MFyDU;Bo2^Bws3Fwum+)sSi)l;)aH)fq)q72|e;CrEZ=TAkb`pC;~y=g@;G=4vr z=Oo4$IfV3SfnyyHt!QssWbn{#^!6*EX)N<=ZhnsZ0LUjI@n`+P{2PlW8kiaVIGzS% ze70xN=xG(^@7#<9Z0bU>a#z5~lRltB%EEF2kO#ENKU40eKP8fcY(ATNK;%VRe z9es2XTdY@%_+A9VBrO(YADi^i_xG2ioAt(jU`$ekrp1Ddx%lJB0P5nB{@_>MH%m@~ zO23Y{hw$G4f;h1wm}IGpn(VhrVHjN3HbF#26~XK`&07sdL%mbm~+`y{egd@ zyn0F#xK9BgpWB#Tu#(`evkLs?*eGbT4d<)q98f(rbyn->lu3IvBJ}}=HH>zt^q&do zzm%4Ki|$OC5SU7q-Ox78&)9FaZCk8KE&*eQQyIv=C@3JOjtGCm7aJ8tlb)U)E=QQ! zu50Df)unyo>(|MMXnQaj_E5gkb~hu_*vfQ(;`8%is)~vrB>SUleFcX8zs8=FG&C4o z-n!EBTvrL)dm1XA*?Ei2Qm)0E`gose8PM|S@K&q(2@*WEC@>B-#CASgXEGp#u zjW@udNZ4ADCMqUI=I-6QkZ!h%@II`I7cWXmNl7ix20POhIPxj96dB0e#Srac!y5TQD8$FR|roSX3!Md3Nm|*L>!Nj@(!-}hpNl^&I zbXwNzSr4h%*^Hnc{9-?sIDqwHdi>apn!kqIut_4cH3os;%oAtBPg%P#s9tCu|Q2%+=S}M(RG)(I(}9wh`rp$=Q6iYl)iCY6tt#rtE=EQb+3S9+))PNSn@V7@mVM6$tud*Kd0i~gx zbH2PTgCVrG7Hy3U)w}uwDVBrLiZ@Rzf+r5RTHk|6`oHUFaCH#I29(jSQ-ocH|3~Rq z{+l*BEMU|)iW}6(1J2%1MtOy_YGCMI9ATe175yTgJS^}pZ25*#rwuxWwoiWqTXEex z%q{tm>;RqY>^VN*5d(SAs2R;(P5?yS94*&ZC>R-WU4Ai(5@mdR0#H-LIrWQQ=O!r( z7sC(^9X#a9a@iQXc=64oA-16$k4z;?9DP2^Y!ed|i7#~+u>qK<9mC%}J}IAt>bV8`R{$dsu(g_w|MB@)ha z>QSM9EAfE~Rg(T=1ukCvcUPc%FD^Qg;$N_0Qlmmzbf`D7<|0e)dkRLuhl4|a7G6eS zk$=3YGGy!;B&%YL^zly>mID&m2;EL`Zl4eVbIRkw)4h~w~*@YhWBq{&1H#<;J(zV`VUsdgunr*}w`_>k!K-3y2bO-%ZO+Ib;mGWJ; zX(tL#&rPuF>Q)MwsG@ZJAyWJ6{A~YzY@r752TIy;w0JC#aq2ivNj-j?^_BOPHbhAj zguA8-96BiRrbbdY^=mZ#t~{d2AlV`fx9^Ev#b_1A2RYY;>jK)Kf;Rq+5-A0@z&%nF z$4O7D0~%xikaa(Bp(ubSQUI)mSA3E_Gv+aRn-Pn?Ncq4G7?_@6sv9UYxiA?-ntO|+ z#D7Pc-yehTCej+B2LTN(+Bv64jy{Zx`*KdL{eMVF-JV-TBnI_pl7zt#^aPgNH2Ar~nMRM~W2d|$%O2L!WokZ<9UgYsQYhOkwo$6!5p2v z=E;uuf^duE1!(5#A10}7_7W1Y1dLNKpKY$@$tA`0;3T_%hLrp#J?9;Q!PL$_KI)w4 zqbU_Yhm(R)|767&{|C4J4Ek*(qk0`D&Gpp5{nF$V0)JX)N)MomYBkst-gwXiKou@| zEJcsGm~JoF4ep{9W1EmQTkeK^-CMq^?&6rjmM@<)a_m&yA49gZnX1;hQYVwp^6@BBK4L?i7hwiI#sDaV*B=eG^Qva_~Wk{(c8}n zcXi*K3yi(TN(^DpxTUdnZkvb^Q`q*E$Y!DWVO|8tpmTIJ8P%AohfL;QHgN=RcgtX~ zb}XYXv3_}Gtsdo;rs6IFQz6FV7;7qMb-8Bs18`(L*ost92 zL)Ax>ho1!Nnyel!u{P=r7G~JY1;DUJRz`zBz&@^e2@qI+{=7S8J?XdDAOwj(+U5Q` z^$3&@$s;*t4La#`e;tMd7BX|(rSdTAj&!cuNR!33j#vPKZgSk&USi9aZx;?mGMmkA*Y=ry1GIm{GrB3BO=nX9n>-{L zF;l`vV@b1u^1)EJaWv^>O`T1Z;xk+m?<$Y+Va*`Qgpq<;mcDpb8&m?7TGhN&wBB%Cg9mZYz?o}=?QPlHtr=dK zPT+lzdi+GL#eO`6ND?9_N1s&?_{tq;IEm;M_Y_NRZtv;7d9>a$d^U*_Q`>#xS$`nk@4V;CxK8#q%M9 z>bwtlpZV?3z(CtX*(W#Rb7(_s%bgwM%{7csK-S zxwn5@gL!i^M-*3H;W~AHeU_4q$GXBANnBq3Y1sR(BBS1{}z@=MeCiIUHa{#;z5zw6OjuS?~-N7lQg z-40CiJ!fA~;%WVpgP1@G(p82#QrA%);P)pnBqD~+bOm?u7c)`|-kK$h&)BDQ7QG1h z^fGc&sHYctbr)bw!;rrZNeS7NfoO@ih$bK|3q}XLnsh0;K*(^2e zIaL@8{42UqNkJHnPzVXWm|Nku@o@H1`7OlVRJYE2;_ET^orH(AtKu z8IreOIBuy)Pd-|-jmqbzb{e5�+DxV zo}JmZ8`CHmgv|>)^f$b;O&FtmX7*zQI*wm0WcW=5F?f7 z%B2BP2n+&|H3xz%42ino|gXjiI zsSE3niO({{wNpXBuTTcR=ogi-{)Ecd=s!P+2B9R7R8WZ7-**MG=L06#8Yw-62!Y^H zqb1Uy1mG%i&8u3n&;DL>=_N^Vd~dfufwnr*oM4?2rT+q5g9r>X?%@OVki-IuU?}=} z3k5-kJwR&xIb)tv*ZOq=xk#7}yGjV>*MmTWcW_TF6W;~=R}q(y_}~Ahi$bfAt|9LwQ6_WfuPtY>( z?{w>F?5W3)4;N1%@U}WP<%- zYTVbTHp%ff*0XgFA~s&$_Tm?Uy+-GZcW6nvq8jj)UctHcwiaNQ5mpKWfnM1iu!0Y7 z^{G$o#wge!EVaO=e~Tx#By0$jkO{T}x8n`iZ4daGW)hcSJeoy8^*!wl{=J>_Q63fQ z=aOvR=rq5PhbYMd``T>5gM+fK)SwAW5W zIKV(tMOKSJFYoQWTwa$r$DH{z+i@@Z&l==`=oXB~&R!5XfjX{?{I{!3UoJoXe*s-i z`j7zYpe^cm?`WOs0eG|PG3)J6bJ%skiKoC;%+JN{M{0{0e--HREw))EH^4nu$akA8 zc3;n7-(JfJaq{w5da`DPIWw?P4SKJP5LS;`TC{HO_I51KzO<9$$HqPzjg`dslg#V$ zDSF(C5zbcH_sMswbaRt!Oz}Z7apSRxTd8+3(-F_8r+I4dPA1^}9z5Nzd-1h5aGSo#zJc+ygmJN-W#cY*}(a#VMAW zyGU{u!O{%RMy$hD+pKsqX4;vVW9tn5PiWIK2*AatJmv^;B|F7aY0D~#Exz&uG z?RVa!%Dddn$u`#Tc(C@^v7u&l5ZFjiHAnvSXr@uAnBD& z8of?3Cl;o5eW!$PulYQ(C%ciagr!2efo84G=E!0{H`&8u+Wv@v8jMev$4i{quMVpq~~@rw0JJP>~Pgtem#qZS0!am z3GK37wm)`Erm~<4z4-R(gvIt1;fw38$gZuPtBz}r-8n2$=I*!ol0_~Ib7mw#Q?&7} z*Gj&O7qq-93#0BI=IwcoWD?vm<$H!o2!-~*Des)-y8ZS~PtoiMC6M6G{q*19&V9W< z;Ev;e(%K*i7YV<*7CAP$e(>c9dp(7V8!)rti+i`!j#C!&N{%BgUCV|F5Hz@Y`3d-l zr(YmT-qZJ;wi6nhdX{=z~zYog;{ZHiH_O>i$-AzvKbPkYuC~k{h=U!nuz3)}LPRZiG#W~$ z4?({K;#7UO+^bXh%V!XhKm8fqahkOS6vMOggr&wjU_EWrw5?aEF?TrmJQ~}Jo^PFj zWX|~72DH}tZgRxy#?0@HgN)Z#{8((mM0}Wd!7B_lH?YX(ZsBaMH*e;IC=0i)XTk#V z6+-lC9|RCg-RteUxXr*Wf3d%C|FOpUTu|e?k(YDFv`GQ)xMBPrFGjo5Er4N;b1i|`(u zhb!VsPF|pDZ_xzaEQvjb4z@M5hh#XLz(CH!p_&a{o_+cGI&FvPM@^nik-_s1yIM@u zKAKRkH^C6RM4NHEisL}>Nzwe(L059q)hV0~vutHPm3mRV;gm**9*F^Nd?urMR}{-@ z5i-DUv$dLneR=Nwq^SLECHCiiY&%WK=UyK?*`~rI9UVd1W0G7ozAM0qmaFDbSXS9SB=SV2Yc0~&;yC9Sh9d-fh<0q+ir`rk*REv8mz1O z%y(&>9YqBYnnQM@@)VDIR&%a?Q#J9K#tjpGD;r+@e%MDTmkiSWX}(ifrB5XJCBZyQ z5-?gHaj$1xLjc-lhoe&qZF_I;OxPzRCHDFJh(C}2YcCiQT0YV!rSpPVnM=@lA>ln* zKw|4Vcv}mqkt%8m=H24X2pH9wh&Z0^C1xd$Kp@LfMK~EcCxIZ`8%oUyU2F6s20u}U z;z9B=wEX9*q+>1|#w=s?yIleeW-{k*-MTIFY1CkCSFQVyw@nbdeaYjIf=sX6so-b} z9{@{A?rk!~(@C4+&otbsWVXZ4rY)C-ceqW==DjS}1mhb(=lFRWNm1eg`9|&{iDgeS zt&MKBDIqax&_rC25Xa}PU!O$^K%yZ4dbtq>V7qB^IQc%s2(El|w>MvbNU^sy)=ViQ zC=&q&s#Aj@FugnG?av%Y--kVd3idxW^W>P(UO4hIgqX zra?map0zhxAG?^Hz0A}xQeE)EO8eA3z9T6yrriG_r2U4p#yuai47^t`cUGQax>yhqx?n;98njb!UuSM_sM~N;@08;5i-)L{&BOe$YhnvND%xb;^LN(s5pNwO z+B66DV6Q-6#n=hFSs{2)6^$6wrVyL+T^~6)V?bH`4xsdFXmnE38Ovu(jX(T%;9pW2 zUo06iCT-Ky(EeVgCNeo7fM(wO5>&8!Gim2779CJT9w`QN0bf+!5DQW(SHIB-nEzadtENAq-?i93 z(t`n1)}F2iPr7iSya-Rsb&{YgVGD!dWCpM?8&9h3jB3!$@9=wd97Hpj0J0s@s zy6Q?Dfun3q-z|X~26bHbtZi%(2X79dlGg?>8cVWOD(<^JGS@4oc=1f=3Nn5${f}H3 z?tM;ps9%Go;Bc5r`#jN}n<2=XCE3v2_**?cj9Y)ps<1}PW@N;kSwtO&?Vl+xHU^$g~`G7c$ges{nrVo-83Rt++A@S`RjK^sJ1OTuCQk+xkAiikT4_lJ~+){0gqiSKR%oNtI(j4m!_ zKXg$R^SU4oV*}4bINo{#^(7a9BhHAp;YWt)xRKDlrd(!W}V% zP4ivF$+)6qjxZwAdP@lcOaeIZSI&2t4>7w~s?&tHSsNY|D>m+dUG#!IkOQaK^OGd| z6zcL8Y=g`4^=?ql4#Wn%MO{ao6KRq1(uz0(sI=N&9GQ;#+TBUpB59M-RQ0{^&Z=?( zhcWbxY?3gLjeiH~#AKV!LaCACphRLdP&IMbCm=&iaD%1yvO&f6= z+f%EM!I@^AB=Ilv5ms2`_|%2JC;|pBHc2C+^o7B-*AuSy7?wWb zNX@*UQI>ke(94`e;nQ*N#g*^nymuACYrJ}#9KTEj zHaNM0bRV(eOSsX(ti|4D+We*^Z$yz;3kYa(9>f}Eah`vB@+ZPvFeKbXJGR)qZV(%^>3cq^K3{+G4; zLqq#rEJSWPYzy2*-|D3`hclnuTGie4kXnx#$1Fo5qbo<2?ni5k9xQc;Pf=?n^Om=~ zD7*a_jSlTN4Ey|-TNa$^R*&`@hq*4d&8_(3#{OK%878B1%oOZyai#R%wSB(+S?;Dh z_O9(V3sr2&G?p%_$_y2E>FZ}qrZp|@)@5~E2MaSrM21bwT;;sGV!f&IVx(^GAx`UM zIEO^Sw%0~Cc;+j2edjwpocm@p{LD+|!w1O557q{+Vk*<){#}OyOU#B%?thUbsjOLA_i$&9P*kfu|vnQN*Rbx-)Jxtv->oS6<_; z%lHwxZ~I9Y?iSyf@Fv>3Y+ze2iotmfkDm@ESv>lwZl^$*M_c1DgjeN^Sepgz)6DwM zHaW?+M9B2We_CnFrOw43TJ@fT$hFRA<>-M5UBgvsp3Mz7n$7Ghzij>;j`b#bBHDwT z_THm|aSN)y(h%7ZA4w<{H zbcHhlDpnTV846}aQ(OVrltAJM11=dHs{k5A1nX2Icrg}~S_Nj-tkGfDB=*!!N@1pw z$@dI;I5?_+pTTs;0u5F;gPcerA>umpS_t$+Wv=+)y6&&N8E#hgaQ*JV94v5`%8|m3 zSh_A{%>Egyz{*v_GU0%TYM)^4V%YGIYfYw5)0)xSysc&PZPz#JeB3)7| z@|r#4S?8gmGljw{d)dash1`Wl99cV4j8v~)=RbbDEEYb(sMB@zeec)IZ57xDWe2_y zY!bKZ#(H7V$*;Y)cX~P6UZdZbA`(&AnHXb;@#C`-TaM!qBLtp6Vf>z2d8q@?(>wS- zjX|C_Rb=7hr+i%)e|mq40P^&kZU@$}@eE@^x>~ZH#jpWAKDx&mr0gTLvk_dm+!}es zmVsEOhLcpXT&C;q4V7j?8@OAq3k=IbnV!liCKDcTds}^UEoxcME+8~7-7lHT|O9M;3T`YPt*xJh($#mJ zI@ZhjBch|D`_R<^Dewa*021CNK8q4-e5e)>&_0z53zD!M-pB|F(U3FVyriOa1C`?9 z$)2l7qbX{)l3D}k7U1w0Rl1z{T@qmjh~%+4b{Z9-yI-wvZNSK?E*U=++t|BDxdNTN zjhRH8V0D>on>N`=?If}{<*C|n!#A?dvMU_TK1>yG)0EPp%gbZ~ZVnO6J8c8TOZ3a| zq5=$>f41r?sK)2UfB3sopMgnu9;yx&;9s`wH-|5jE~Z*?%mq018w<#Zv`Ks7-4C(7 zu_L^9=|AEZA`O>}72c?DvHBS|3k^o8~NW0Ry>KoU%4NW%$|_1B$2%` z6NnP$eGIQ>u;0xp<8?O~K?W-Z?o2tRk0NBBL4OF`G*(amh#fsW%fO}7%>*+~3U7s} zU~}&*k#R}@egrikb0cLKA6Q#ciLueK;0;7YkKS&>{0xf5|<9XXnXFU!L zf)bk)53ZW#o0zF>&2!b=uwkv^eGsUg->zx_=8IP9j z7Ve>NYtOSFz2$zQ{1^)jl7KA2?z+hO9p`64)yUDQnJ;zkEMHo^n!6S={jDV;(l{it zR$1a)f;>JFF}azmU8kuErls324H`h$lByTosrp`j!~w1C^oID<(b2~RmEZtnqqUs? zac(2P9lc_=Nlza9Q8x3gK5@r))f?0$fKPNb zI9kzDhpxHI|B#-}yW!yNbBtqB3(7`^H3QM)E!s&)z0yEkT^Lj$iKikvoz@u5tN}#t_TN#;bc#|2SZ);)=WeO=zTVmz8b0dTSv?M`<6SscBOW&{_k*E@E*iB9q4FMr!yenrPL`XIYxAFE zXc%)A$FuIYtrx^oSnaz#%N%~jHqN?nlpDzJ@zeWuU6ARpYODJ_oOzQSQ@;xfW@?U{_E-qIIHDt| zT9>mPG=^~GbBZv{rOQKjma^8L*O`m7Jf;KV4)Wwl6qo1A?BsY?9_pH@H)$*;jezk^ zoDybQhgGA#(`RM%SAWcR!TgK+ox4A-Z8HAQVoT(+$-NNE5k4QQzlxzB>W$12E_0qg zvEIz5c2EqE0b+4(rQE$iH=}Fxx zNeOUb4}$d^Kl3*xPu1n}&o30)PpeRPT`@iqllHy9`2lOr=_*Y?qA{KT%w@ z`#aOU9{tz&K5rfENz^CICm)rpl1x-CA%n}5NQEe@$ir@^h-|gv%UqAqwv--T5KxPc z=&z-77%p-!h6pv!U(vfgrR*VfP$kHxzyGO%EJwE`X3%o~(`NROvru!bLy`x%PRU`A zJ*V!$r|MnS*8A7q+bs^2iS`H{<<|9FyKWu@QY(Yp^blJQ1nXBjH-wE%UGLWeyxr$c zYNQ^k`CE!LT`%WYJGzH5Yv#K5#8Ul6oNVuj`KfoU^9sGvQQ;QTm-r|exQqQkwNK+VMZ|I}d#~@@ z9fL!GEH@4hl8tS-w&5NJrX81j1lRWKEjdi8E`j8}jAV0{qe0K*z9_Y$j>3DRXhe^u0t5o8jIZei*4MoDd-+hNd{rd)Oxn!2_A5GUR zGFT1gTV`kHfR{dQYqhPMxxbyXp43(`!q>&RjP>0kOXJ3IGzz2CVa`)>I0|xO+Bk@= zvyyJgJlu3pt`tZNq7y`13%BBDZhxbi<>sU-Ui+flk6w1=eb*Ft(b$C$?&rQm9+v1t zZ_IqKG-s~98UGybu{SIrjE`f&{fvCeskKHk^&Ioz+BZ{;wIAs{1zeVc=01GiUbCYq4~ROB;Wi! zmU5T3Xtuu;$9S0KDeGw_V^v*HDZp}#wG&ufc;Sff%9oqW%nwz0@Gal4(X%wuYKwm>{w4N zDU#)V8!eMta*vvt5Zmvr2;zK^JFbr?A!1`2p#jw1tksyUX1~+yD}T>r1Y*Ozrbob% z-D4_cQKw_ScN2>>L?ybpkiqXu`?gM4>pksfLf?RAn{Yi(e;n$8ILQy)=^CV+HF{bH zyokqkm6?6EFKd-mN8ye^Ip1Dafzgs3SMzg{Z*ObA_pqjaCFwxW)SVMnt=`E^*l5cL zSU*24X5hY9ZPircFhqu@)mQgwsesDgoitaEaz19a&V7Q!x-qw4lT_3Uv99G&_~FLX zc_){_vv$%q_3p(Fw8m^|KF7j|HCCPPULqUTbBtkfT3PZQ6BL_e#GYqi!?FdX98W5AWw=3@qEhxwmH1@@9wQ z3j4-Ri%}$#sm#{{-4bb4UR~OH6*RxK89nCj0hk9>9C>j)GbvPC`61$dJ}X zX?2x}lkVkNMYd#*E#Aimy+^Gk_znGbAILvQUW61~509XS>Wkp*E#IkBGrr&g8!Ifr zq~Ws{pYHs2WvY9afOBiyytRmJOGqZ=rk`#`nV$8$-Req!+xVg|@pKXQ*2pJ#>Ss-f zS-zVd;XgNo+Kw(y`uvzkwR7DKqTh_|PXZG(tRYWuz3?py$2;+A{m+t17M1G?0UTFq&0HgTm^ zWR!P~cxCPLe`=-VVLT(h6MxnOCUcge8h-`Zcw7MH>!bYDM5>T3rf_Ra;lQVQ@^{=1 z5m{@?CAIj&&wU*DzGr-dmz2O~VQk-H$ynG1?iciPW8szG!0W()*e6m_x+Y3G$^*w`qlc#w*xG|`^*>}g9yVvF8bN3roHHXrC zX(<$b#T1ik!h0hPyf--XHCKDnFgPelGt4CNq%NuH=zp^dzfmN%(nL~V2i!I zh~}GdYen0e^+5Y?>Q7n{tv~1Wwz#KeGp8mdmv45%!Z;Sb>*0$na|~K<^lr&h1@L-Z z*l-<4P8EZbao$9WHe${~sQ-19BS+m49R9})p7u%=z_IhAt3<(`!6T()pP8ezI_nRyX(Z|@_i3YuoDV&=ZJ+x(P5T-Z zkG@YD7hhn-@$5_ z@AGsuz1pPnv^P0cCWaHgdB1I1dBi{lUe)Q&ryVOsI0U?px{p~ zmP<1srp+9FH#8YZEy(5e#AbdCJ-@o4^I4wd*UIp53@&A@?Cht z_Wq=Dj%KU`-`9|qu4=M@VR2o*kpe97-GX9T{DS$eqj>>reRPUVOXkf$1eumiz3@#)Z&}#ullJKu=SOx#bY|Zeb%ergSmhG=AQg&_G(hB#`=@)&#$jp zHXo8DRms1|>ou7S7|lWAaaI@yQHv{lORJggKBOX-aVZG{OQEWKu%;L2$lW|}^(o>n zYW#__UXgi32W9eGq7*RkFJTkcPmFvtdZZ=%N7|uGFU+u8EI4I{zTrY@{N-yzqn)n0^ zTV(x(DITLou;&V7nnG2orr+#s{lzY84#738HU-_g9OWas{V?%Y?+$n;q94h?U9ybh zf$UH0GZDgGt?PUzS6HdSq!e>0Se7BH2A0^x{-vi#sl5D-`|boMQNWeP=9g0E!p6sK zlaqh2;XMD?{f0g)TIbrKv)SO#x4H0O-K%O%aUML{VrpJL?kj`z)D>_Z752BSXfw;GwE*<2h^!5zHH--RI5?QqE;vE0Xk?T};r$9&F}n z{$eTv-|J#awOqqkebs%WXsKZZT-X++_y4KE$YxNRR^5^omWqa8=%XsM*vWQ)(f|0zPyMK*m2Ld$k>R{7Idt(XHdP|8M&+F)+&&xR>=C|;0ccx@m|5(_@!BL z-p=&$u-D;@itXhKu@BeF1jMoTcvH=Jn-fh-B`VUtEp!wlQX4A3WwySNr*g$A&by?{ z@zo`b9xXnJ+G*r$TPHtyNd8Tzf?*E`RC;1qm&(iGUg4l}oxOOnz1@yc@~O@o9CfpR z-JdxHK5M>=d-075hg(k(vP}Hspv})Om5!Y%CMXVHfF)9kuNw(^n)abBD2%%r@c>)a z{pwSasCn$w2**2`)Ex8F?8R3e`O|jm6S!X$vPrAEn_VHh9{HO0UFUpBcgs=bVTF?; za%Z$MU)idW{B15Mij>~T=p(%`<9uYw;>&NNLt+DqTuX| zlia|d2fenoM+pbc^Oq@w>qIQ9drC~zLy69tL)f9taDIAX)Rdzj_Cy zrI}@=8m{JINXcb^>xqq+18FVjF zYz4TK5UDBIUv3+HXmp>I(fw%)J*%Ed6_<;hEtkb?N%Jh&^EtQJJ3tv;cr<1 zm-VvqMx=`wfu@=thn|-8k{4Rh@bX6Ht!?O-Ae;KV8Z+iTI>;cU=6X3U3OTwf3kr=Q zt(;!Z7xi@$oin*|_Dj!~%h3_lMi^pF7ssG8%kJN#dymsOkN+Fv_o{`7S7Itd^?7R_ z0EF}GjUX44V!I7!V0^lEM5JCzZ)uzG>$~QD3~8a97~6rUxTzLtc!MXOz)^*rLp7bW z^sSWq)dB-8Vf-7`*gv3HP~cb;=?U@F_JL(_t*T-J6$SR8Vy8JmZRLMk$!J^P%cUkA z3T1>XMsNmF^WcR+6Is4;_054f96zbRR($jVIwTf&!|H?6?fO)M1|54Fu&A%-R+##Uy={qW2nz1+FcTdZ zMo?|EYq3yi%uaoY#6y#RF!?o_aiEuFjz&;bKZP*rs&%3i9pPR3;>V&IgX-cSg;D@{A;x!xJQRL#>=j zqep{+|P&{BELq%Ekeo3q@Cu52wt-<3@n!}S-Cw?RMZX6&KA8XUUxP9y>ld& z@0?KWGaUf-k8e;XqO2z`R}wJLe1|rUC;L5$YE_*&tB>DNMFr^`R~mPc7^~5}&ra(; z#2^ze#Nra+0GT7%D02j+-r3zDBDHebW@dAO$Ypt;b^Xz;m@Kgo-%B5#F52;mOCr&j<#(_$e86Pkwl^z`J`aYYtMUyYg?>-etc-yVK1@a z;P=b`Cax81LiG23)PiARh*MBd7#>i1gyxq}GUQj)>-uIk*`jMt5}HMG-4=Y`=F*d@ zO|lWy*~3a|j+~mZP0271P?ymA&cMQ2p@oa5EL)aLEtDOyxoOnv*4S8J*n(tbph}fA z{D>SHBL@SH>&L}C3C_WngTa8|_AaX%?D@tM=K_6Jx+ELaz*x1>Y}wjd@*SeM^dtDo z4wG8l_ZFrtFSdiY_-~<)?1M&2lAfKd^mA@*ZNPtg?e5$6?{78*P)>VcNTp;gsP-3` z2b*$9>0)4D$;!3%t7!>qe)z5@*K;AjGNh>~y(+s$O!mnRI?nUUp%hR3;maXFvT!b7 z7NNw)wsh?VqD3aaV%2|I;GX+CWlB!0fc`Vvs@Pah4J_lSCCGH}9P5YTd9QCWFDs~3@JaQc4U zf8lj;adS%5f!yp*XCWOm@w$sdehNt0AJ~3UP4ZWTZ{p%UBnr=z=>W>0XO0)&YsQ*; z_oIEE2iX)xZjn;SI+N#5~M@w<^dh01icqNkOuE7NUCThSN zYD7SdGNhoFUGO@CYiEC;DkyZsrmejs&sPpSj-OIOzR7Fv-#g!i7|WJ*3o-T{(81lZ zsIw=U6@fs%1_JCuWw*kQ^s-z(-==t%Jz~O1e%;QO>T6|Hnms3 zH!H6A$Ha=QKcx>6Rs$_F5>C}HK`;U~V6nF52D;JrhG_7jrHFCaw5f`lJ<#zLj-#Qu zsa8&fuft+F85wPD?(h=RBS9M*62 zdE4_~f#70Z!A1-D9_kghN!&IGJU*&uYqJ|Py~25mEss*f7c#+X>u_yE(aVTU9|`Lu zcEx1}PpRK?%6$F0J$!szqm1=c6rn6s7>L4j$oquzJZouSHXvnwpf^jCnbu=J&rVwM z%aG2c3ZeQh)OdMNUb@&A2Cf7*3+telb1K8VPe_3Q4<7X(o`jd^)FqMryXF$8qr zb+*i!484rh^s(+`AqOpLPI{8}$ko+39M2!l29cr`;1_1y)~C;wAK?BF#!d_~GeHuF z?jtRZ(>7(*Je3e~64oFJ{F{GkJ&zE%?g!3ypCv|XCQtMT`ngwjhwVf%l%gjjq^Mmr z^6;a&@}&fuot;cprWr3$ruHnk4I>(SbkWX=^ag0x>e6xZx1HwFIW%-C7hs5ZSqd%{ zQDHl+v@??wlw4gsQq{vt48DvsL5G^h9Bd9MgKb~SwE2iS3%&ftQD=w<*${f0*x7T(~R)C?6({p5MiG%4ASS>%1%4%3W{PW8pVU?7ISkcmWw&b76wnx zMmgrc)^Uv)WaOen$4-Xe9t<`P)KZBdpoT>Mv75ii&z-2n0iL{5*_>=E9Xl_&WJk{J zk{>^FPo4&wuV%A4vudBv@6O$p<+~igR##)N)Nj$D*Fl96+TBcg{w9nw=>3qm)YiT6 zXXVt|P{^3zQ#$mM676S{5#hayD|5&Bi)Z3Kd#=sT4kC-W*DsE)OP&+j#rEI~@41L< zhHN&cwM*0|vZA&C+!C(fCqb#IqZ?YPIOFtS8 z0s7lS$aXE`re|e!6r5M#K(B*N|G#oG4nxg;5lWcoi|+sPCCi|~K3w_HU($xEfW`g7 z$v!5_g(km!i}2^=0cVwyp=vbL{EH~{E%pF9*DZVz_3B?&FsR_f83B<8@(!5dzfqnC zxNKx-OCYCh<&Z}8;t7+A9fAOCYmG>f{>dzVFC``@ie&it+1W8`@C}+##7D`oThP~V zPkqf0YKt|cNd9N_I4FqqohM%1*ooMr`1y50 zDMZGyTyry<;$crlQPk*`fQd(6QE^FYn16POrKW2SL2_X!!*G6g`Qx`cqr)o9x@C)r z&qmA?!#^mx<9p8!*gq{SzHTaK3J2C129e(@W$_pCgv+4y6#Vf5R?jKx2Z(-O(am6W z)U97v$Pj?gAhW~oJXt8Dy*W75q+^R8ZR1O2*Jzd~8XW<01x>KUr~6bIs+8FXiHk3> zvM64@6r7Im#T2#FT)p+=(f6tqgzv!?6P0!EdiR8QnBf)9{#scc1EW<6Z$#ABp|yKJ z6q-GX8JPPJ5^{~lu;n}vuKMDWGudLb1`vBeXCO}W(HI^ei|TJTNKskxzd7z9`YbrI zhG{FTkl4?M&0|>?)f>zWtj5A~__Ay+J0*9PC3FY8^m|;)lQ%!FRE>0VAVQn^Hh-$< zNsv1qNSnm5&WY}Fjc7N(B;#BRp2vtx`1gKOpA1{crW|NA__-sp6#cnXXs)kmw0rAl zd2O_1mz{PK_eJCzMKWak;ckKswfH=L6nEi-p9uDV7n9rdyul zL%D@?#f6784lvc{;o*46NfXa?5ESTL6Z-2|UdXR;=d(XSwU>u>d4*1x%u^KdXl->h zAmiZI+8nQ*XArEASZ4Tub5kR@dUSP5ktM6}--F6=QkUhs$(d$d6cF_^<=b`AeJvYX zBgWKnYP|0Ua7|{W>$fOK3A`iEfSAPkJyPOvF7fA5XrU}J3WeSX$`Z>(-ayjKco7f+ z{>uT@H8-Dd&IK+d+MQ(iDfU{MU^!Ely)*0+V~GxPYLagOy$`0iLaBjPM_pCmCu;|K z?&g_!7Hpo+Zmj@Nj_zifRaBbz5S9~nsmpAMxssRUGHEc<_nGK{hR5*Qo=VzuU*5gW z&IDvx>U2T%Qna<*`#2B=J_ril9*8U3+JD)2KRIKL_8>D$?d3~jfHy6;(D<^#mpuXf z6Ffp^L@m%ZC?DXvRQwv_4@I}FI94UC+*aWqKHZTYSiOYqr?nSiE)FMF`~11Nyo1tk ztvGA7>aotn(aM#}8EsJHu<0rJ%QR|9A`mO2#a~p3|xI7{rrh`ZqXyX^I*U%2?}L3v%kL_`Vpt6cVm_YzhGgf z#Ax#Q7ITd4OdeKS-Q7PbbHjXGSTC2q#(1DYV5R3FQ{SM!Ku2^wIC4RzbIBktE?)BDLD5d-Qjtjfwb7*~ zovx`JBJECo*+m|k{Y9-=l?7|(`>Xb71{(+Dq^8M$&j-1tDanRPHcze3qhEuH*-YR+ za7HbIE`&`@7U!QnS$Mogn4};~m+1An&*V_$z5xFwh3gNpz}I=x@sBXX+S@u1zMsqp z=NF6lCB+zPxZ!Ch71Qj6y@R?X zL?RT%ZxON_g5FLn*da?E0yBAB0Rgw9J&J2^anD7JkKY2r4S!bOiq)_>{B(Cs7wEpj zrHibneOrzLG`zHcbN&y4MIh}Vkdu-|>*CT-Zu@(7HB~zPY2}DKTO}e0TQ8%AaVHRT zhfRQ>xF3#Nrt{+fVb=-mJ2JSS`BeKXZT6I~shoe` zW}}QubFOB~k8x#@?m)z;iM`A1uZ|qcsY^6Db}-Q3Bb!Y*7ii-|(RScPvQJL-$*Xp~ zV(V;Q#x|4z^LEf8hhVZ_Q%69Zw7sj2GEt|5k4YKv7Lxz#_ab}lvXcWy{OT}hLQO9- zFOwa4j#iVh*zd))`S0-Vgb!M4LzJwUNS^~!@;wui&h5ma!uP8;S?5*nYY~Y~NsWqb zl!j(n*9<|3dv8Oh`+Eb;g*@6Fo3@lb&~fCxY0tYNd=gk!d2Fm2>Hd7N z2&TB*{NW-!_V}VM-ESwOmyjzZWm?{BmI_edFuQj@yyY#B)@Sv3z)_?V$rBGq@4G5$ zUw=>26Pk{io{bQ8$W4n@9U+x>frib?1NNJNmj)6Hl$(1ace|@NBj$AZ5AJkLyt=-< z!v`604SvLoM1DW=lV7!G$$Tg*;S2*hm7F|C9Nq$Yts%9R&a9#8qijPRa%mmI`2QrK zTnO5BahIBxX`AWU%%*jz9;~=)S}R@Q85uznZ4g+}WuPC!X*(21qc~BiT+g86w!@D- zuKxI^1VS4;Is4HXSo$Y3JOGB^_t}4$A@DXzXVEly#6cF`)wT|(1lyAedlFO&pfNpg zi)MuC=E>35zo|eIP(eOpTd58>ZZUq`kq;Aa^#|fpo~zgtP=tmfuL)83`>&@@P~~&r zylV>rt&AEi0?5izSO*_!&|UzmAWB;>&O_b$b+rzl&F^x{Q17prC9b(O=nQ4eJi{Dn ze*c0k{aTB$5V78;h)@r@E@g*S)z0>?55Zv^Suf4t+Y0}VC;I|)?0;qhK^{%~R-|2a zTIj)aEC;=@vQpO7>>Ce|=p8v#oaUS!Qi3vJtxb*18cBpOa)!$#^hgMz(C{|8_cw=~ z@e%_YhO@p|;B<29nEkxo;u;EJf5~$VDAd|aekPAQIVRK@{LIgy?N?l+b z^mgwvu@SH=t$XZ-Xs8j>K&P(i6cZT!crh%Wee4cAIUzy3 zw`N6v#ic@=Zcr${imi#DRP62(sR5?5VSztab%=U;dJ;Q@IROCvPig)G6az!+If{p+=2aEu|)p?m2CKBeJYZS;r}jJ zpka7HzPPW2aWHBs9AK2z6*>ZQ(l`B5<7| zgP?@$9Eikn4$H{)fu&5-Wa+=$IB^ie>$2 zc=Y65n{R(;|6eez^QP_#ZW=B-^h8Z~jA^o-R5KeT~cOz_F#Y$$|OT0gFlY&|z^3#dEYN4YrL*WGvP?CcT zQbL~XBq)OUb>*apm=i~KvWJ`A%J^C>tV|b{qN90z119#MXI(QTBSjrj{^V}kUjHjm z0;~+Ci5J4exme;aU)+TvQ*l|IHiXzOz(gO+^Jbuy*6J=Gwu+HcahYFC;mHgJ?xat7 ziOwGaq@ZLU#WxHX7#JEc!3luPsR1v|rdbo5G70_yobVmz6u9)uhVujja%>Xh^J4Q@ zk4r(}iCYiKu$_SU>$|n(i;LpiRd85a_V8cIm2sJR*@1HR>{$Tt8J^e=h}UHMohz-@ zw`48G0m>MF@vwMXUqinJ#UtpQQc+msGSrY(_c5pcKd2`ULP78evXPFK_n4B5sabtE zubS6-Vu{1!Dz)&o`LRJx(+!8EYRQjnWU^OgKFOb3*_t@B-$zNoB_bvGoMqk z>z8UhgL@W~UDpbJNkr~)*a`rwAJ4pyUfu}&j={;8C2hLSs=UOA{d$2B#_1S`RAxtm z70#v5sOES&p8%0dS-Y055AxWy`z=;n9&h*Z^BhIr-4yCI&p2eb)p?Y-|9!e9c*2}{ zt9)@7-+nc0jw1xXPYy$@QM>b7J+Iy`@>jblx5rG0#Cq)hNI&T1RmnQ_`)G7RR_@`i5L)Xh+wfsHbK{W7C=+en?F0oo> zu$!*=!EFC%3v(OFV*w6N4pogrXQsfQ@!0-ja4An}x_ zP3JI6xOjP_u%0wMQ#8z+_Q@trnMJE|_j|>9e2{sj)9bOGAZ*h;e5bY!#`bVCBfRnM zf!Ixd`Q6u{Hq%%ikv-W^q+ z1Co%izkKB@ATv_!I-8zWsx6W5@ivV`wsb8qB*^mcNl=K>7%!lp>w_xcC|v5dGUYi2 zp@zzZ;=+m?g}Y5~7vMb3n375^?lR24?AwT%xpVh*Tc~HGT%~P zSvOfg=q+*Sd!L;eaH-j&--nyRG;5=x@!)+ePJ<0Iou;V<>q_5xVBxlUUcUr;~$|eLZxq90=^_eO+68G8# z?c=1-@Voo#bw*3yJSBGi7H~AV#;n;F$@P(#Q82n-mE)`Cg?58hvX=jkw>R&msL-M@QF^RSvFMY^x%(DG*AJKGhIwvPxl z*A4k4{&G6IxHsu#fP-yP@^Wd^rDBMGiPYTLe8w4h zNvf&)w!;3H0x{y)ydaS0O~O<;Heaf@q_y&Cw`j%l8IGOlnFhPvnVfF9#6_yjz4WI80_R-?SUp!=e4Il6FsuPmJ(z-Q>W&b4fBG zPPbWKMAS!O>P=kdZuR4)u5{;Y{w;>`JEH!LM7o2#TXDKwGt6IxtFlM&deGrsa{ucay`?ZEMCFz@;R@V8Z9ny>FZ${MBL zR=N;sw;`==q;@S~p#1u9l3p>JoBSQ!1FO;d*8u>to@tPxzaN<#_<}nDpEnZcQRD+J z8djS%#-qE3qr;+w9C@@o`q@Ra{NramW<&-E4VA@_njBS1)h>M>wpBS(<8B2B$f%#Q6AAY@O*taOTwg4*55CKnJX94bG?cItGi}+DdsYouFD}^^*@lTCLhx@ znm6C%uGsqD5~OHyFR0>`(vUOD`9!_>iDW?IgL}hE-rTnaOvEs`uY?UcK_Yfz^Vs?| zpEUg4r_ORk&Jo*pwSYKkbBQAvxhaiHADq~kdxV0aD}pyBsiqIn0%YQwWnSVda;fyb zYdDG!`>1s484%pu&fOw|t<;a=2Lv>OD1KR=nnZ#P3+GWa30dcAJ&}f_C(t}F(*o4# zDNj#xAhNZRj8Va~-v(zTJqX++F9wC58YMK!1|P@{s8=~l~3^> z)-U%L&0(5ZxN*7LUb=lz@`V-)2qH63DOF3VI2YKGp+`Yx>yukIP?j4I7ucPDIDTi) z(MSNcnGa#R8|w0g>+>u;4xd`p1dZ?2*gOTP#X{<)7xd!w=ov_GHR{k!oW$_B>M#yA zUa>HLYz~O`b?8eYSC6#=+1_U)n)9&e6|5wK_?~PxRX`x(gcotuozZSf25{iw0)jZ4 zt45#>``|z4oqqA-=_r>6!`5_={$bO zH!L{6k(TsAf^P;??Q+>}sAk%$+?|V9+$j=1{BWz6f(XOYn+n!neZV)nc<2M9I29T( zt~%!OWA5;IDCN$*U#|C*(uQyjodNuZe`p@DTE^p~(AQT~;0$5brB`ZT3ZEr27IOyu zG+DV?lSYQHT{BYL|vK>=cfQ z;~$#_@JHZ&-N@0S?2!?6sp&k&yRB1|pYnhXweCii!L1-aj`CwWYPfJd@PPQBbua4J z@^5R~7nsi6CvMLF41WU3H{xv+lL_Dtn;V@C*vU{44n__RRHBF&f(3k7j@z2>l&n4W zLk@wpJf3r4$nOTM+U45_BrSN$szH1j(TO{Ur~$nAqt9Ix6?6Dab>vVXAi^7%E4g3@ z1dq?9Tzmi`-XA7@&FT0@|AkxqPuMID^vXQK$&7I>kQx*;8kS_fnaM{-%&hcUmSMc+ zc|IL%6)N=<_ZTsW5_(RM&|@xnp7@7~gtuh>i)&a=ap8tc?Zwag1AF0Aju*A0Z(u3Be-44gq-E?cG+@|_m1@}in8iv2UJ^LvTIp-Bif z|IUrF(>#fEG5$RcESGDAwAyWg!rWykc8d!_%xON;%VdT9U+c)jsE z!||_6?IE@-xdsE(`3oQFrE%-;kb`<#YMPqSZ6T2$+kF@8{D&kIVSD};`|PO+Dy+T0 z)HrGyO`c!C^n0|lT#1J#pPqmAQ5N@_|PjOaVjWM6+480pd%4O4Aj2- zx=LmPfSeRwMn*>H?(Xhu^BWmXj0c{N`ufPB`ATR;r_6wBU#D<#w)rz8@ z`2*vEsn&wf&#vXST=8PdVG5~-y)lwr-|Kza(6Fcw->o_cxhnwz;sW@ivV{3Isx1-n z2x1uz0u8i3nTrJv%DY1!MCILOM^M6LrBCJEg$+VUVKz|y4AzVSs^0z>R5`zTRG$>p z{_(drqU)sv6aR+w3t@->pLSw8Mfxq!(PCJ&vcm)PFvw1J-Z+x%OMk;}3%DjlWL4_`k^B0Gqf^s)_)wgJXkNdwnw|JvF<0 zNM_YV{R42}gbo6I;86MNco@J9KaoPfAmo9-$+gs1e=dpVG>~0Rzk3&8gA^E~*dtzl z)P`FD@YuI)OaWD3|F_VEuo)*kvb5vECx2?we^I!{Mkz>F2Cid`Gzl~e80ZZwiztqg zMxjZiY(R(@S*897Hq=6iCzZK)UynZyVV$RJ-2dmXPOzVx^XUA?GzU}}`7s3g>pujv zU_6gM`ko@3state.font_apply) { bool load_success = false; - if (FileUtils::FileWithExtensionExists(this->state.font_file_name, std::string("ttf"))) { + if (megamol::core::utility::FileUtils::FileWithExtensionExists( + this->state.font_file_name, std::string("ttf"))) { ImFontConfig config; config.OversampleH = 4; config.OversampleV = 4; @@ -1320,15 +1321,15 @@ void megamol::gui::GUIWindows::load_default_fonts(bool reload_font_api) { auto search_paths = this->core_instance->Configuration().ResourceDirectories(); for (size_t i = 0; i < search_paths.Count(); ++i) { std::wstring search_path(search_paths[i].PeekBuffer()); - std::string font_path = - FileUtils::SearchFileRecursive(search_path, "Roboto-Regular.ttf"); + std::string font_path = megamol::core::utility::FileUtils::SearchFileRecursive( + search_path, "Roboto-Regular.ttf"); if (!font_path.empty()) { font_paths.emplace_back(font_path); configurator_font = font_path; default_font = font_path; } - font_path = - FileUtils::SearchFileRecursive(search_path, "SourceCodePro-Regular.ttf"); + font_path = megamol::core::utility::FileUtils::SearchFileRecursive( + search_path, "SourceCodePro-Regular.ttf"); if (!font_path.empty()) { font_paths.emplace_back(font_path); } @@ -1869,8 +1870,8 @@ void GUIWindows::drawMenu(void) { GUIUtils::Utf8Decode(this->state.font_file_name); ImGui::PopItemWidth(); // Validate font file before offering load button - bool valid_file = - FileUtils::FileWithExtensionExists(this->state.font_file_name, std::string("ttf")); + bool valid_file = megamol::core::utility::FileUtils::FileWithExtensionExists( + this->state.font_file_name, std::string("ttf")); if (!valid_file) { megamol::gui::GUIUtils::ReadOnlyWigetStyle(true); ImGui::PushItemFlag(ImGuiItemFlags_Disabled, true); @@ -2276,7 +2277,7 @@ std::string megamol::gui::GUIWindows::dump_state_to_file(const std::string& file bool megamol::gui::GUIWindows::load_state_from_file(const std::string& filename) { std::string state_str; - if (FileUtils::ReadFile(filename, state_str, true)) { + if (megamol::core::utility::FileUtils::ReadFile(filename, state_str, true)) { state_str = GUIUtils::ExtractGUIState(state_str); if (state_str.empty()) return false; @@ -2439,9 +2440,9 @@ bool megamol::gui::GUIWindows::create_not_existing_png_filepath(std::string& ino // Check for existing file bool created_filepath = false; if (!inout_filepath.empty()) { - while (FileUtils::FileExists(inout_filepath)) { + while (megamol::core::utility::FileUtils::FileExists(inout_filepath)) { // Create new filename with iterating suffix - std::string filename = FileUtils::GetFilenameStem(inout_filepath); + std::string filename = megamol::core::utility::FileUtils::GetFilenameStem(inout_filepath); std::string id_separator = "_"; bool new_separator = false; auto separator_index = filename.find_last_of(id_separator); diff --git a/plugins/gui/src/GUIWindows.h b/plugins/gui/src/GUIWindows.h index d43b41ba53..9b21efbdea 100644 --- a/plugins/gui/src/GUIWindows.h +++ b/plugins/gui/src/GUIWindows.h @@ -24,7 +24,6 @@ #include "CorporateGreyStyle.h" #include "CorporateWhiteStyle.h" #include "DefaultStyle.h" -#include "FileUtils.h" #include "LogConsole.h" #include "WindowCollection.h" #include "widgets/FileBrowserWidget.h" @@ -37,6 +36,7 @@ #include "mmcore/CoreInstance.h" #include "mmcore/MegaMolGraph.h" #include "mmcore/ViewDescription.h" +#include "mmcore/utility/FileUtils.h" #include "mmcore/utility/ResourceWrapper.h" #include "mmcore/versioninfo.h" #include "mmcore/view/AbstractView_EventConsumption.h" diff --git a/plugins/gui/src/graph/GraphCollection.cpp b/plugins/gui/src/graph/GraphCollection.cpp index 93ad345406..43d1ea6ec0 100644 --- a/plugins/gui/src/graph/GraphCollection.cpp +++ b/plugins/gui/src/graph/GraphCollection.cpp @@ -745,9 +745,9 @@ ImGuiID megamol::gui::GraphCollection::LoadAddProjectFromFile( ImGuiID in_graph_uid, const std::string& project_filename) { std::string projectstr; - - if (!FileUtils::ReadFile(project_filename, projectstr)) + if (!megamol::core::utility::FileUtils::ReadFile(project_filename, projectstr)) { return false; + } GUIUtils::Utf8Decode(projectstr); std::cout << projectstr; @@ -1239,7 +1239,7 @@ bool megamol::gui::GraphCollection::SaveProjectToFile( confParams.str() + "\n" + confGUIState.str(); graph_ptr->ResetDirty(); - if (FileUtils::WriteFile(project_filename, projectstr)) { + if (megamol::core::utility::FileUtils::WriteFile(project_filename, projectstr)) { megamol::core::utility::log::Log::DefaultLog.WriteInfo( "[GUI] Successfully saved project '%s' to file '%s'.\n", graph_ptr->name.c_str(), project_filename.c_str()); @@ -1637,7 +1637,7 @@ std::string megamol::gui::GraphCollection::GetUpdatedGUIState(ImGuiID graph_id, // Try to load existing gui state from file std::string state_str; - if (FileUtils::ReadFile(filename, state_str, true)) { + if (megamol::core::utility::FileUtils::ReadFile(filename, state_str, true)) { state_str = GUIUtils::ExtractGUIState(state_str); if (!state_str.empty()) { state_json = nlohmann::json::parse(state_str); @@ -1681,7 +1681,7 @@ std::string megamol::gui::GraphCollection::GetUpdatedGUIState(ImGuiID graph_id, bool megamol::gui::GraphCollection::load_state_from_file(const std::string& filename, ImGuiID graph_id) { std::string state_str; - if (FileUtils::ReadFile(filename, state_str, true)) { + if (megamol::core::utility::FileUtils::ReadFile(filename, state_str, true)) { state_str = GUIUtils::ExtractGUIState(state_str); if (state_str.empty()) return false; diff --git a/plugins/gui/src/graph/ParameterPresentation.h b/plugins/gui/src/graph/ParameterPresentation.h index 07d999fe5a..c578cc0df1 100644 --- a/plugins/gui/src/graph/ParameterPresentation.h +++ b/plugins/gui/src/graph/ParameterPresentation.h @@ -9,7 +9,6 @@ #define MEGAMOL_GUI_GRAPH_PARAMETER_PRESENTATION_H_INCLUDED -#include "FileUtils.h" #include "GUIUtils.h" #include "widgets/FileBrowserWidget.h" #include "widgets/HoverToolTip.h" @@ -31,6 +30,7 @@ #include "mmcore/param/Vector2fParam.h" #include "mmcore/param/Vector3fParam.h" #include "mmcore/param/Vector4fParam.h" +#include "mmcore/utility/FileUtils.h" #include diff --git a/plugins/gui/src/widgets/FileBrowserWidget.cpp b/plugins/gui/src/widgets/FileBrowserWidget.cpp index 3f3a20c69b..5acbd9af09 100644 --- a/plugins/gui/src/widgets/FileBrowserWidget.cpp +++ b/plugins/gui/src/widgets/FileBrowserWidget.cpp @@ -474,7 +474,7 @@ void megamol::gui::FileBrowserWidget::validate_file( } else { // Warn when file has not required extension if (!ext_lower.empty()) { - if (!FileUtils::FileHasExtension(file_lower, ext_lower)) { + if (!megamol::core::utility::FileUtils::FileHasExtension(file_lower, ext_lower)) { this->file_warning += "Appending required file extension '" + ext_lower + "'\n"; this->additional_lines++; this->valid_ending = false; @@ -496,7 +496,7 @@ void megamol::gui::FileBrowserWidget::validate_file( } else if (flag == FileBrowserFlag::LOAD) { // Error when file has not required extension if (!ext_lower.empty()) { - if (!FileUtils::FileHasExtension(file_lower, ext_lower)) { + if (!megamol::core::utility::FileUtils::FileHasExtension(file_lower, ext_lower)) { this->file_error += "File with extension '" + ext_lower + "' required.\n"; this->additional_lines++; this->valid_ending = false; diff --git a/plugins/gui/src/widgets/FileBrowserWidget.h b/plugins/gui/src/widgets/FileBrowserWidget.h index 545ef3e91e..d2ee6affe8 100644 --- a/plugins/gui/src/widgets/FileBrowserWidget.h +++ b/plugins/gui/src/widgets/FileBrowserWidget.h @@ -9,10 +9,11 @@ #define MEGAMOL_GUI_FILEBROWSERPOPUP_INCLUDED -#include "FileUtils.h" #include "GUIUtils.h" #include "StringSearchWidget.h" +#include "mmcore/utility/FileUtils.h" + namespace megamol { namespace gui { diff --git a/plugins/gui/src/widgets/ImageWidget_gl.cpp b/plugins/gui/src/widgets/ImageWidget_gl.cpp index fc5fb4ffee..2001644469 100644 --- a/plugins/gui/src/widgets/ImageWidget_gl.cpp +++ b/plugins/gui/src/widgets/ImageWidget_gl.cpp @@ -16,62 +16,6 @@ using namespace megamol::gui; ImageWidget::ImageWidget(void) : tex_ptr(nullptr), tooltip() {} -bool megamol::gui::ImageWidget::LoadTextureFromFile(const std::string& filename) { - - if (filename.empty()) - return false; - bool retval = false; - - static vislib::graphics::BitmapImage img; - static sg::graphics::PngBitmapCodec pbc; - pbc.Image() = &img; - void* buf = nullptr; - size_t size = 0; - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - size = megamol::gui::FileUtils::LoadRawFile(filename, &buf); - if (size > 0) { - if (pbc.Load(buf, size)) { - img.Convert(vislib::graphics::BitmapImage::TemplateFloatRGBA); - retval = megamol::gui::ImageWidget::LoadTextureFromData(img.Width(), img.Height(), img.PeekDataAs()); - } else { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to read texture: %s [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, - __LINE__); - retval = false; - } - } else { - retval = false; - } - - ARY_SAFE_DELETE(buf); - return retval; -} - - -bool megamol::gui::ImageWidget::LoadTextureFromData(int width, int height, float* data) { - - if (data == nullptr) - return false; - try { - glowl::TextureLayout tex_layout(GL_RGBA32F, width, height, 1, GL_RGBA, GL_FLOAT, 1); - if (this->tex_ptr == nullptr) { - this->tex_ptr = - std::make_shared("image_widget", tex_layout, static_cast(data), false); - } else { - // Reload data - this->tex_ptr->reload(tex_layout, static_cast(data), false); - } - } catch (glowl::TextureException& e) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Error during texture creation: '%s'. [%s, %s, line %d]\n", e.what(), __FILE__, __FUNCTION__, - __LINE__); - return false; - } - return true; -} - - void megamol::gui::ImageWidget::Widget(ImVec2 size, ImVec2 uv0, ImVec2 uv1) { assert(ImGui::GetCurrentContext() != nullptr); diff --git a/plugins/gui/src/widgets/ImageWidget_gl.h b/plugins/gui/src/widgets/ImageWidget_gl.h index b610121901..65dd745fa0 100644 --- a/plugins/gui/src/widgets/ImageWidget_gl.h +++ b/plugins/gui/src/widgets/ImageWidget_gl.h @@ -9,17 +9,11 @@ #define MEGAMOL_GUI_IMAGEWIDGET_GL_INCLUDED -#include "FileUtils.h" #include "GUIUtils.h" #include "widgets/HoverToolTip.h" -#include "mmcore/misc/PngBitmapCodec.h" #include "mmcore/utility/log/Log.h" - -#include "vislib/graphics/BitmapImage.h" - -#define GLOWL_OPENGL_INCLUDE_GLAD -#include "glowl/Texture2D.hpp" +#include "mmcore/view/RenderUtils.h" namespace megamol { @@ -41,15 +35,13 @@ namespace gui { return (this->tex_ptr->getName() != 0); // OpenGL texture id } - /** - * Load texture from file. - */ - bool LoadTextureFromFile(const std::string& filename); + bool LoadTextureFromData(int width, int height, float* data) { + return megamol::core::view::RenderUtils::LoadTextureFromData(this->tex_ptr, width, height, data); + } - /** - * Load texture from data. - */ - bool LoadTextureFromData(int width, int height, float* data); + bool LoadTextureFromFile(const std::string& filename) { + return megamol::core::view::RenderUtils::LoadTextureFromFile(this->tex_ptr, filename); + } /** * Draw texture as simple image. @@ -64,7 +56,7 @@ namespace gui { private: // VARIABLES -------------------------------------------------------------- - std::shared_ptr tex_ptr; + std::unique_ptr tex_ptr; // Widgets HoverToolTip tooltip; diff --git a/plugins/gui/src/widgets/WidgetPicking_gl.cpp b/plugins/gui/src/widgets/WidgetPicking_gl.cpp index baea20dfd5..43ac13283b 100644 --- a/plugins/gui/src/widgets/WidgetPicking_gl.cpp +++ b/plugins/gui/src/widgets/WidgetPicking_gl.cpp @@ -247,7 +247,7 @@ bool megamol::gui::PickingBuffer::DisableInteraction(void) { " outFragColor = color; \n " "} "; - if (!PickingBuffer::CreatShader(this->fbo_shader, vertex_src, fragment_src)) + if (!megamol::core::view::RenderUtils::CreateShader(this->fbo_shader, vertex_src, fragment_src)) return false; } @@ -304,65 +304,6 @@ bool megamol::gui::PickingBuffer::DisableInteraction(void) { } -bool megamol::gui::PickingBuffer::CreatShader( - ShaderPtr& shader_ptr, const std::string& vertex_src, const std::string& fragment_src) { - - std::vector> shader_srcs; - - if (!vertex_src.empty()) - shader_srcs.push_back({glowl::GLSLProgram::ShaderType::Vertex, vertex_src}); - if (!fragment_src.empty()) - shader_srcs.push_back({glowl::GLSLProgram::ShaderType::Fragment, fragment_src}); - - try { - if (shader_ptr != nullptr) - shader_ptr.reset(); - shader_ptr = std::make_shared(shader_srcs); - } catch (glowl::GLSLProgramException const& exc) { - std::string debug_label; - if (shader_ptr != nullptr) { - debug_label = shader_ptr->getDebugLabel(); - } - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Error during shader program creation of\"%s\": %s. [%s, %s, line %d]\n ", debug_label.c_str(), - exc.what(), __FILE__, __FUNCTION__, __LINE__); - return false; - } - - return true; -} - - -glm::vec3 megamol::gui::PickingBuffer::Worldspace2Screenspace( - const glm::vec3& vec_world, const glm::mat4& mvp, const glm::vec2& viewport) { - - glm::vec4 world = {vec_world.x, vec_world.y, vec_world.z, 1.0f}; - world = mvp * world; - world = world / world.w; - glm::vec3 screen; - screen.x = (world.x + 1.0f) / 2.0f * viewport.x; - screen.y = (world.y + 1.0f) / 2.0f * viewport.y; // flipped y-axis: glm::abs(world.y - 1.0f) - screen.z = -1.0f * (world.z + 1.0f) / 2.0f; - return screen; -} - - -glm::vec3 megamol::gui::PickingBuffer::Screenspace2Worldspace( - const glm::vec3& vec_screen, const glm::mat4& mvp, const glm::vec2& viewport) { - - glm::vec3 screen; - screen.x = (vec_screen.x * 2.0f / viewport.x) - 1.0f; - screen.y = (vec_screen.y * 2.0f / viewport.y) - 1.0f; - screen.z = ((vec_screen.z * 2.0f * -1.0f) - 1.0f); - glm::vec4 world = {screen.x, screen.y, screen.z, 1.0f}; - glm::mat4 mvp_inverse = glm::inverse(mvp); - world = mvp_inverse * world; - world = world / world.w; - glm::vec3 vec3d = glm::vec3(world.x, world.y, world.z); - return vec3d; -} - - // Pickable Cube ########################################################## megamol::gui::PickableCube::PickableCube(void) : shader(nullptr) {} @@ -431,7 +372,7 @@ void megamol::gui::PickableCube::Draw(unsigned int id, int& inout_defaultview_in " outFragInfo = vec2(float(id << face_index), depth); \n " "} "; - if (!PickingBuffer::CreatShader(this->shader, vertex_src, fragment_src)) { + if (!megamol::core::view::RenderUtils::CreateShader(this->shader, vertex_src, fragment_src)) { return; } } diff --git a/plugins/gui/src/widgets/WidgetPicking_gl.h b/plugins/gui/src/widgets/WidgetPicking_gl.h index 623549b479..ed6ab72e1b 100644 --- a/plugins/gui/src/widgets/WidgetPicking_gl.h +++ b/plugins/gui/src/widgets/WidgetPicking_gl.h @@ -14,14 +14,11 @@ #include "mmcore/thecam/math/functions.h" #include "mmcore/utility/log/Log.h" #include "mmcore/view/Input.h" +#include "mmcore/view/RenderUtils.h" #include #include -#define GLOWL_OPENGL_INCLUDE_GLAD -#include "glowl/FramebufferObject.hpp" -#include "glowl/GLSLProgram.hpp" - #include @@ -59,7 +56,7 @@ namespace gui { float value; }; - typedef std::shared_ptr ShaderPtr; + typedef std::unique_ptr ShaderPtr; typedef std::vector InteractVector; typedef std::vector ManipVector; @@ -83,15 +80,6 @@ namespace gui { return this->pending_manipulations; } - // Static functions --------------------------------------------------- - - static bool CreatShader(ShaderPtr& shader_ptr, const std::string& vertex_src, const std::string& fragment_src); - - static glm::vec3 Worldspace2Screenspace( - const glm::vec3& vec_world, const glm::mat4& mvp, const glm::vec2& viewport); - static glm::vec3 Screenspace2Worldspace( - const glm::vec3& vec_screen, const glm::mat4& mvp, const glm::vec2& viewport); - protected: // FUNCTIONS -------------------------------------------------------------- /// Should only be callable by friend class who owns the object @@ -136,7 +124,7 @@ namespace gui { bool enabled; - std::shared_ptr fbo_shader; + std::unique_ptr fbo_shader; // FUNCTIONS -------------------------------------------------------------- @@ -164,7 +152,7 @@ namespace gui { InteractVector GetInteractions(unsigned int id) const; private: - std::shared_ptr shader; + std::unique_ptr shader; }; From a2123f122eae6c021447650ebca4e11641818047 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Fri, 5 Feb 2021 20:46:30 +0100 Subject: [PATCH 03/19] make it compile ... --- core/include/mmcore/utility/SDFFont.h | 2 +- core/include/mmcore/view/RenderUtils.h | 9 +++++---- core/src/view/RenderUtils.cpp | 4 ++-- plugins/gui/src/widgets/ImageWidget_gl.h | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/core/include/mmcore/utility/SDFFont.h b/core/include/mmcore/utility/SDFFont.h index 24e5082ca2..19df88eb47 100644 --- a/core/include/mmcore/utility/SDFFont.h +++ b/core/include/mmcore/utility/SDFFont.h @@ -578,7 +578,7 @@ namespace utility { vislib::graphics::gl::GLSLShader shadervertcol; /** The texture of the font. */ - std::unique_ptr texture; + std::shared_ptr texture; /** Vertex buffer object attributes. */ enum VBOAttrib { diff --git a/core/include/mmcore/view/RenderUtils.h b/core/include/mmcore/view/RenderUtils.h index 65ee55b069..e8633b0580 100644 --- a/core/include/mmcore/view/RenderUtils.h +++ b/core/include/mmcore/view/RenderUtils.h @@ -118,14 +118,15 @@ class RenderUtils { /** * Load textures. */ - static bool LoadTextureFromFile(std::unique_ptr& out_texture_ptr, const std::wstring& filename); + static bool LoadTextureFromFile(std::shared_ptr& out_texture_ptr, const std::wstring& filename); - static bool LoadTextureFromFile(std::unique_ptr& out_texture_ptr, const std::string& filename) { + static bool LoadTextureFromFile(std::shared_ptr& out_texture_ptr, const std::string& filename) { return megamol::core::view::RenderUtils::LoadTextureFromFile( out_texture_ptr, megamol::core::utility::to_wstring(filename)); } - static bool LoadTextureFromData(std::unique_ptr& out_texture_ptr, int width, int height, float* data); + static bool LoadTextureFromData( + std::shared_ptr& out_texture_ptr, int width, int height, float* data); /** * Create shader. @@ -223,7 +224,7 @@ class RenderUtils { bool smooth; bool init_once; GLuint vertex_array; - std::vector> textures; + std::vector> textures; std::array queues; std::array, Primitives::PRIM_COUNT> shaders; std::array, Buffers::BUFF_COUNT> buffers; diff --git a/core/src/view/RenderUtils.cpp b/core/src/view/RenderUtils.cpp index 4093b430ab..e2a125ff57 100644 --- a/core/src/view/RenderUtils.cpp +++ b/core/src/view/RenderUtils.cpp @@ -11,7 +11,7 @@ namespace megamol::core::view { // STATIC functions ------------------------------------------------------- -bool RenderUtils::LoadTextureFromFile(std::unique_ptr& out_texture_ptr, const std::wstring& filename) { +bool RenderUtils::LoadTextureFromFile(std::shared_ptr& out_texture_ptr, const std::wstring& filename) { if (filename.empty()) return false; @@ -46,7 +46,7 @@ bool RenderUtils::LoadTextureFromFile(std::unique_ptr& out_tex bool RenderUtils::LoadTextureFromData( - std::unique_ptr& out_texture_ptr, int width, int height, float* data) { + std::shared_ptr& out_texture_ptr, int width, int height, float* data) { if (data == nullptr) return false; diff --git a/plugins/gui/src/widgets/ImageWidget_gl.h b/plugins/gui/src/widgets/ImageWidget_gl.h index 65dd745fa0..2e3ed828e5 100644 --- a/plugins/gui/src/widgets/ImageWidget_gl.h +++ b/plugins/gui/src/widgets/ImageWidget_gl.h @@ -56,7 +56,7 @@ namespace gui { private: // VARIABLES -------------------------------------------------------------- - std::unique_ptr tex_ptr; + std::shared_ptr tex_ptr; // Widgets HoverToolTip tooltip; From b751e69e5788c2c67db534bcc6233f53b397a98f Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Sun, 7 Feb 2021 17:16:56 +0100 Subject: [PATCH 04/19] fixes ... --- core/include/mmcore/view/RenderUtils.h | 6 +-- core/src/utility/SDFFont.cpp | 9 ++-- core/src/view/RenderUtils.cpp | 46 ++++++++++---------- plugins/cinematic/src/TimeLineRenderer.cpp | 7 +-- plugins/cinematic/src/TimeLineRenderer.h | 4 +- plugins/gui/src/widgets/WidgetPicking_gl.cpp | 4 +- plugins/gui/src/widgets/WidgetPicking_gl.h | 9 ++-- 7 files changed, 43 insertions(+), 42 deletions(-) diff --git a/core/include/mmcore/view/RenderUtils.h b/core/include/mmcore/view/RenderUtils.h index e8633b0580..804f3753f6 100644 --- a/core/include/mmcore/view/RenderUtils.h +++ b/core/include/mmcore/view/RenderUtils.h @@ -131,7 +131,7 @@ class RenderUtils { /** * Create shader. */ - static bool CreateShader(std::unique_ptr& out_shader_ptr, const std::string& vertex_code, + static bool CreateShader(std::shared_ptr& out_shader_ptr, const std::string& vertex_code, const std::string& fragment_code); // LOCAL functions ------------------------------------------------------- @@ -226,8 +226,8 @@ class RenderUtils { GLuint vertex_array; std::vector> textures; std::array queues; - std::array, Primitives::PRIM_COUNT> shaders; - std::array, Buffers::BUFF_COUNT> buffers; + std::array, Primitives::PRIM_COUNT> shaders; + std::array, Buffers::BUFF_COUNT> buffers; // FUNCTIONS ------------------------------------------------------- // diff --git a/core/src/utility/SDFFont.cpp b/core/src/utility/SDFFont.cpp index 7fdffe7dd3..1188361565 100644 --- a/core/src/utility/SDFFont.cpp +++ b/core/src/utility/SDFFont.cpp @@ -1188,7 +1188,7 @@ void SDFFont::drawGlyphs(const float col[4], int* run, float x, float y, float z void SDFFont::render(unsigned int gc, const float *col[4]) const { // Check texture - if (this->texture->getTextureHandle() == 0) { + if (this->texture->getName() == 0) { megamol::core::utility::log::Log::DefaultLog.WriteError("[SDFFont] [render] Texture is not valid. \n"); return; } @@ -1289,7 +1289,8 @@ bool SDFFont::loadFont(megamol::core::CoreInstance *core) { // (2) Load font information ----------------------------------------------- vislib::StringA infoFile = this->fontFileName; infoFile.Append(".fnt"); - if (!this->loadFontInfo(ResourceWrapper::getFileName(core->Configuration(), infoFile))) { + vislib::StringW info_filename = ResourceWrapper::getFileName(core->Configuration(), infoFile).PeekBuffer(); + if (!this->loadFontInfo(info_filename)) { megamol::core::utility::log::Log::DefaultLog.WriteWarn("[SDFFont] [loadFont] Failed to load font info file: \"%s\". \n", infoFile.PeekBuffer()); return false; } @@ -1297,9 +1298,9 @@ bool SDFFont::loadFont(megamol::core::CoreInstance *core) { // (3) Load font texture -------------------------------------------------------- vislib::StringA textureFile = this->fontFileName; textureFile.Append(".png"); - auto filename = + auto texture_filename = static_cast(ResourceWrapper::getFileName(core->Configuration(), textureFile).PeekBuffer()); - if (!megamol::core::view::RenderUtils::LoadTextureFromFile(this->texture, filename)) { + if (!megamol::core::view::RenderUtils::LoadTextureFromFile(this->texture, texture_filename)) { megamol::core::utility::log::Log::DefaultLog.WriteWarn("[SDFFont] [loadFont] Failed to load font texture: \"%s\". \n", textureFile.PeekBuffer()); return false; } diff --git a/core/src/view/RenderUtils.cpp b/core/src/view/RenderUtils.cpp index e2a125ff57..1fe8419829 100644 --- a/core/src/view/RenderUtils.cpp +++ b/core/src/view/RenderUtils.cpp @@ -69,8 +69,8 @@ bool RenderUtils::LoadTextureFromData( } -bool RenderUtils::CreateShader( - std::unique_ptr& out_shader_ptr, const std::string& vertex_code, const std::string& fragment_code) { +bool RenderUtils::CreateShader(std::shared_ptr& out_shader_ptr, const std::string& vertex_code, + const std::string& fragment_code) { std::vector> shader_srcs; @@ -119,62 +119,62 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac std::string vertShaderCode = this->getShaderCode(factory, "primitives::points::vertex"); std::string fragShaderCode = this->getShaderCode(factory, "primitives::points::fragment"); if (!RenderUtils::CreateShader(this->shaders[Primitives::POINTS], vertShaderCode, fragShaderCode)) { - this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::POSITION, "inPosition"); - this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::COLOR, "inColor"); - this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); - this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create point shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } + this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::POSITION, "inPosition"); + this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::COLOR, "inColor"); + this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); + this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); vertShaderCode = this->getShaderCode(factory, "primitives::lines::vertex"); fragShaderCode = this->getShaderCode(factory, "primitives::lines::fragment"); if (!RenderUtils::CreateShader(this->shaders[Primitives::LINES], vertShaderCode, fragShaderCode)) { - this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::POSITION, "inPosition"); - this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::COLOR, "inColor"); - this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); - this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create line shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } + this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::POSITION, "inPosition"); + this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::COLOR, "inColor"); + this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); + this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); vertShaderCode = this->getShaderCode(factory, "primitives::quads::vertex"); fragShaderCode = this->getShaderCode(factory, "primitives::quads::fragment"); if (!RenderUtils::CreateShader(this->shaders[Primitives::QUADS], vertShaderCode, fragShaderCode)) { - this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::POSITION, "inPosition"); - this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::COLOR, "inColor"); - this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); - this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create quad shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } + this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::POSITION, "inPosition"); + this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::COLOR, "inColor"); + this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); + this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); vertShaderCode = this->getShaderCode(factory, "primitives::color_texture::vertex"); fragShaderCode = this->getShaderCode(factory, "primitives::color_texture::fragment"); if (!RenderUtils::CreateShader(this->shaders[Primitives::COLOR_TEXTURE], vertShaderCode, fragShaderCode)) { - this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::POSITION, "inPosition"); - this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::COLOR, "inColor"); - this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); - this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create color texture shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } + this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::POSITION, "inPosition"); + this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::COLOR, "inColor"); + this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); + this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); vertShaderCode = this->getShaderCode(factory, "primitives::depth_texture::vertex"); fragShaderCode = this->getShaderCode(factory, "primitives::depth_texture::fragment"); if (!RenderUtils::CreateShader(this->shaders[Primitives::DEPTH_TEXTURE], vertShaderCode, fragShaderCode)) { - this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::POSITION, "inPosition"); - this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::COLOR, "inColor"); - this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); - this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create depth texture shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } + this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::POSITION, "inPosition"); + this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::COLOR, "inColor"); + this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); + this->shaders[Primitives::DEPTH_TEXTURE]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); // Create buffers this->buffers[Buffers::POSITION] = @@ -222,7 +222,7 @@ bool RenderUtils::LoadTextureFromFile(GLuint& out_texture_id, const std::wstring out_texture_id = 0; this->textures.push_back(nullptr); if (RenderUtils::LoadTextureFromFile(this->textures.back(), filename)) { - out_texture_id = this->textures.back()->getTextureHandle(); + out_texture_id = this->textures.back()->getName(); return true; } return false; diff --git a/plugins/cinematic/src/TimeLineRenderer.cpp b/plugins/cinematic/src/TimeLineRenderer.cpp index 06a59e2547..057eb1722e 100644 --- a/plugins/cinematic/src/TimeLineRenderer.cpp +++ b/plugins/cinematic/src/TimeLineRenderer.cpp @@ -25,7 +25,7 @@ TimeLineRenderer::TimeLineRenderer(void) : view::Renderer2DModule() , resetPanScaleParam("resetAxes", "Reset shifted and scaled time axes.") , axes() , utils() - , texture(0) + , texture_id(0) , yAxisParam(ActiveParam::SIMULATION_TIME) , dragDropKeyframe() , dragDropActive(false) @@ -89,7 +89,7 @@ bool TimeLineRenderer::create(void) { // Load texture vislib::StringA shortfilename = "arrow.png"; auto fullfilename = megamol::core::utility::ResourceWrapper::getFileName(this->GetCoreInstance()->Configuration(), shortfilename); - if (!this->utils.LoadTextureFromFile(this->texture, std::wstring(fullfilename.PeekBuffer()))) { + if (!this->utils.LoadTextureFromFile(this->texture_id, std::wstring(fullfilename.PeekBuffer()))) { megamol::core::utility::log::Log::DefaultLog.WriteError("[TIMELINE RENDERER] [create] Couldn't load marker texture. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } @@ -422,7 +422,8 @@ void TimeLineRenderer::pushMarkerTexture(float pos_x, float pos_y, float size, g glm::vec3 pos_upper_left = { pos_x - (size / 2.0f), pos_y + size, 0.0f }; glm::vec3 pos_upper_right = { pos_x + (size / 2.0f), pos_y + size, 0.0f }; glm::vec3 pos_bottom_right = { pos_x + (size / 2.0f), pos_y, 0.0f }; - this->utils.Push2DColorTexture(this->texture, pos_bottom_left, pos_upper_left, pos_upper_right, pos_bottom_right, true, color); + this->utils.Push2DColorTexture( + this->texture_id, pos_bottom_left, pos_upper_left, pos_upper_right, pos_bottom_right, true, color); } diff --git a/plugins/cinematic/src/TimeLineRenderer.h b/plugins/cinematic/src/TimeLineRenderer.h index 5e6663dce4..67f302900a 100644 --- a/plugins/cinematic/src/TimeLineRenderer.h +++ b/plugins/cinematic/src/TimeLineRenderer.h @@ -155,7 +155,7 @@ namespace cinematic { std::array axes; CinematicUtils utils; - GLuint texture; + GLuint texture_id; ActiveParam yAxisParam; Keyframe dragDropKeyframe; bool dragDropActive; @@ -198,4 +198,4 @@ namespace cinematic { } /* end namespace cinematic */ } /* end namespace megamol */ -#endif // MEGAMOL_CINEMATIC_TIMELINERENDERER_H_INCLUDED \ No newline at end of file +#endif // MEGAMOL_CINEMATIC_TIMELINERENDERER_H_INCLUDED diff --git a/plugins/gui/src/widgets/WidgetPicking_gl.cpp b/plugins/gui/src/widgets/WidgetPicking_gl.cpp index 43ac13283b..3e9011a76a 100644 --- a/plugins/gui/src/widgets/WidgetPicking_gl.cpp +++ b/plugins/gui/src/widgets/WidgetPicking_gl.cpp @@ -34,8 +34,8 @@ megamol::gui::PickingBuffer::PickingBuffer(void) , available_interactions() , pending_manipulations() , fbo(nullptr) - , enabled(false) - , fbo_shader(nullptr) {} + , fbo_shader(nullptr) + , enabled(false) {} megamol::gui::PickingBuffer::~PickingBuffer(void) { diff --git a/plugins/gui/src/widgets/WidgetPicking_gl.h b/plugins/gui/src/widgets/WidgetPicking_gl.h index ed6ab72e1b..27ca1b50a5 100644 --- a/plugins/gui/src/widgets/WidgetPicking_gl.h +++ b/plugins/gui/src/widgets/WidgetPicking_gl.h @@ -56,7 +56,7 @@ namespace gui { float value; }; - typedef std::unique_ptr ShaderPtr; + typedef std::shared_ptr ShaderPtr; typedef std::vector InteractVector; typedef std::vector ManipVector; @@ -120,12 +120,11 @@ namespace gui { std::map> available_interactions; ManipVector pending_manipulations; - std::unique_ptr fbo; + std::shared_ptr fbo; + std::shared_ptr fbo_shader; bool enabled; - std::unique_ptr fbo_shader; - // FUNCTIONS -------------------------------------------------------------- std::vector get_available_interactions(unsigned int obj_id) { @@ -152,7 +151,7 @@ namespace gui { InteractVector GetInteractions(unsigned int id) const; private: - std::unique_ptr shader; + std::shared_ptr shader; }; From 364eabaa290e382bc66babcd91c1e7cecfb63ceb Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Wed, 10 Feb 2021 19:36:22 +0100 Subject: [PATCH 05/19] removed vislib::FastFile dependency --- core/include/mmcore/utility/FileUtils.h | 3 +- core/src/utility/FileUtils.cpp | 46 +++++++++++++------------ core/src/view/RenderUtils.cpp | 6 ++-- 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/core/include/mmcore/utility/FileUtils.h b/core/include/mmcore/utility/FileUtils.h index b0d4efbff7..9e72c5a257 100644 --- a/core/include/mmcore/utility/FileUtils.h +++ b/core/include/mmcore/utility/FileUtils.h @@ -24,13 +24,14 @@ namespace stdfs = std::experimental::filesystem; #endif #include +#include #include #include #include #include #include "mmcore/utility/log/Log.h" -#include "vislib/sys/FastFile.h" + namespace megamol { namespace core { diff --git a/core/src/utility/FileUtils.cpp b/core/src/utility/FileUtils.cpp index 74ac8d42a6..c4d0fc9051 100644 --- a/core/src/utility/FileUtils.cpp +++ b/core/src/utility/FileUtils.cpp @@ -16,49 +16,51 @@ size_t megamol::core::utility::FileUtils::LoadRawFile(const std::wstring& filena *outData = nullptr; - auto file_name = static_cast(filename.c_str()); - if (file_name.IsEmpty()) { + if (filename.empty()) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file: No file name given. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + "Unable to load file: No file name given. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return 0; } - if (!vislib::sys::File::Exists(file_name)) { + if (!megamol::core::utility::FileUtils::FileExists(filename)) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": Not existing. [%s, %s, line %d]\n", filename.c_str(), __FILE__, + "Unable to load file \"%s\": Not existing. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); return 0; } - size_t size = static_cast(vislib::sys::File::GetSize(file_name)); - if (size < 1) { + std::ifstream input_file(filename, (std::ifstream::in | std::ifstream::binary)); + if (!input_file.good() || !input_file.is_open()) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": File is empty. [%s, %s, line %d]\n", filename.c_str(), __FILE__, + "Unable to open file \"%s\": Bad file. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); return 0; } - vislib::sys::FastFile f; - if (!f.Open(file_name, vislib::sys::File::READ_ONLY, vislib::sys::File::SHARE_READ, vislib::sys::File::OPEN_ONLY)) { + size_t size = 0; + input_file.seekg(0, input_file.end); + size = input_file.tellg(); + input_file.seekg(0, input_file.beg); + if (size < 1) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": Unable to open file. [%s, %s, line %d]\n", filename.c_str(), __FILE__, + "Unable to load file \"%s\": File is empty. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); return 0; } - *outData = new BYTE[size]; - size_t num = static_cast(f.Read(*outData, size)); - if (num != size) { + *outData = new char[size]; + input_file.read(static_cast(*outData), size); + if (!input_file.good()) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": Unable to read whole file. [%s, %s, line %d]\n", filename.c_str(), + "Unable to load file \"%s\": Unable to read whole file. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); ARY_SAFE_DELETE(*outData); return 0; } - return num; + return size; } @@ -72,7 +74,7 @@ bool megamol::core::utility::FileUtils::WriteFile(const std::string& filename, c } else { if (!silent) megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to create file '%s'. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, + "Unable to create file '%s'. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); file.close(); @@ -81,12 +83,12 @@ bool megamol::core::utility::FileUtils::WriteFile(const std::string& filename, c } catch (std::exception& e) { if (!silent) megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Error: %s [%s, %s, line %d]\n", e.what(), __FILE__, __FUNCTION__, __LINE__); + "Error: %s [%s, %s, line %d]\n", e.what(), __FILE__, __FUNCTION__, __LINE__); return false; } catch (...) { if (!silent) megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unknown Error. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + "Unknown Error. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } @@ -104,7 +106,7 @@ bool megamol::core::utility::FileUtils::ReadFile(const std::string& filename, st } else { if (!silent) megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to open file '%s'. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, + "Unable to open file '%s'. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); file.close(); return false; @@ -112,12 +114,12 @@ bool megamol::core::utility::FileUtils::ReadFile(const std::string& filename, st } catch (std::exception& e) { if (!silent) megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Error: %s [%s, %s, line %d]\n", e.what(), __FILE__, __FUNCTION__, __LINE__); + "Error: %s [%s, %s, line %d]\n", e.what(), __FILE__, __FUNCTION__, __LINE__); return false; } catch (...) { if (!silent) megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unknown Error. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + "Unknown Error. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } diff --git a/core/src/view/RenderUtils.cpp b/core/src/view/RenderUtils.cpp index 1fe8419829..b4a3b0dccb 100644 --- a/core/src/view/RenderUtils.cpp +++ b/core/src/view/RenderUtils.cpp @@ -32,7 +32,7 @@ bool RenderUtils::LoadTextureFromFile(std::shared_ptr& out_tex RenderUtils::LoadTextureFromData(out_texture_ptr, img.Width(), img.Height(), img.PeekDataAs()); } else { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to read texture: %s [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, + "Unable to read texture: %s [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); retval = false; } @@ -61,7 +61,7 @@ bool RenderUtils::LoadTextureFromData( } } catch (glowl::TextureException& e) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Error during texture creation: '%s'. [%s, %s, line %d]\n", e.what(), __FILE__, __FUNCTION__, + "Error during texture creation: '%s'. [%s, %s, line %d]\n", e.what(), __FILE__, __FUNCTION__, __LINE__); return false; } @@ -89,7 +89,7 @@ bool RenderUtils::CreateShader(std::shared_ptr& out_shader_p debug_label = out_shader_ptr->getDebugLabel(); } megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Error during shader program creation of\"%s\": %s. [%s, %s, line %d]\n ", debug_label.c_str(), + "Error during shader program creation of\"%s\": %s. [%s, %s, line %d]\n ", debug_label.c_str(), exc.what(), __FILE__, __FUNCTION__, __LINE__); return false; } From 86dfb26a1efdc901fe2fdd3dbfc23660c171c873 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Wed, 10 Feb 2021 21:40:13 +0100 Subject: [PATCH 06/19] only convert from wstring to string --- core/include/mmcore/utility/FileUtils.h | 9 +++++---- core/include/mmcore/view/RenderUtils.h | 16 ++++++++-------- core/src/utility/FileUtils.cpp | 4 ++-- core/src/view/RenderUtils.cpp | 4 ++-- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/core/include/mmcore/utility/FileUtils.h b/core/include/mmcore/utility/FileUtils.h index 9e72c5a257..1230a927d7 100644 --- a/core/include/mmcore/utility/FileUtils.h +++ b/core/include/mmcore/utility/FileUtils.h @@ -56,12 +56,13 @@ namespace utility { /** * Load raw data from file (e.g. texture data) */ - static size_t LoadRawFile(const std::wstring& filename, void** outData); - - static size_t LoadRawFile(const std::string& filename, void** outData) { - return megamol::core::utility::FileUtils::LoadRawFile(megamol::core::utility::to_wstring(filename), outData); + static size_t LoadRawFile(const std::wstring& filename, void** outData) { + return megamol::core::utility::FileUtils::LoadRawFile( + megamol::core::utility::to_string(filename), outData); } + static size_t LoadRawFile(const std::string& filename, void** outData); + /** * Check if file exists. * diff --git a/core/include/mmcore/view/RenderUtils.h b/core/include/mmcore/view/RenderUtils.h index 804f3753f6..b5c12951df 100644 --- a/core/include/mmcore/view/RenderUtils.h +++ b/core/include/mmcore/view/RenderUtils.h @@ -118,13 +118,13 @@ class RenderUtils { /** * Load textures. */ - static bool LoadTextureFromFile(std::shared_ptr& out_texture_ptr, const std::wstring& filename); - - static bool LoadTextureFromFile(std::shared_ptr& out_texture_ptr, const std::string& filename) { + static bool LoadTextureFromFile(std::shared_ptr& out_texture_ptr, const std::wstring& filename) { return megamol::core::view::RenderUtils::LoadTextureFromFile( - out_texture_ptr, megamol::core::utility::to_wstring(filename)); + out_texture_ptr, megamol::core::utility::to_string(filename)); } + static bool LoadTextureFromFile(std::shared_ptr& out_texture_ptr, const std::string& filename); + static bool LoadTextureFromData( std::shared_ptr& out_texture_ptr, int width, int height, float* data); @@ -139,12 +139,12 @@ class RenderUtils { bool InitPrimitiveRendering(megamol::core::utility::ShaderSourceFactory& factory); // Keeps the texture object in rener utils for later access via texture id - bool LoadTextureFromFile(GLuint& out_texture_id, const std::wstring& filename); - - bool LoadTextureFromFile(GLuint& out_texture_id, const std::string& filename) { - return this->LoadTextureFromFile(out_texture_id, megamol::core::utility::to_wstring(filename)); + bool LoadTextureFromFile(GLuint& out_texture_id, const std::wstring& filename) { + return this->LoadTextureFromFile(out_texture_id, megamol::core::utility::to_string(filename)); } + bool LoadTextureFromFile(GLuint& out_texture_id, const std::string& filename); + void PushPointPrimitive(const glm::vec3& pos_center, float size, const glm::vec3& cam_view, const glm::vec3& cam_pos, const glm::vec4& color, bool sort = false); diff --git a/core/src/utility/FileUtils.cpp b/core/src/utility/FileUtils.cpp index c4d0fc9051..0b19affde3 100644 --- a/core/src/utility/FileUtils.cpp +++ b/core/src/utility/FileUtils.cpp @@ -12,7 +12,7 @@ using namespace megamol::core::utility; -size_t megamol::core::utility::FileUtils::LoadRawFile(const std::wstring& filename, void** outData) { +size_t megamol::core::utility::FileUtils::LoadRawFile(const std::string& filename, void** outData) { *outData = nullptr; @@ -22,7 +22,7 @@ size_t megamol::core::utility::FileUtils::LoadRawFile(const std::wstring& filena return 0; } - if (!megamol::core::utility::FileUtils::FileExists(filename)) { + if (!megamol::core::utility::FileUtils::FileExists(filename)) { megamol::core::utility::log::Log::DefaultLog.WriteError( "Unable to load file \"%s\": Not existing. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, diff --git a/core/src/view/RenderUtils.cpp b/core/src/view/RenderUtils.cpp index b4a3b0dccb..a007f02c2d 100644 --- a/core/src/view/RenderUtils.cpp +++ b/core/src/view/RenderUtils.cpp @@ -11,7 +11,7 @@ namespace megamol::core::view { // STATIC functions ------------------------------------------------------- -bool RenderUtils::LoadTextureFromFile(std::shared_ptr& out_texture_ptr, const std::wstring& filename) { +bool RenderUtils::LoadTextureFromFile(std::shared_ptr& out_texture_ptr, const std::string& filename) { if (filename.empty()) return false; @@ -217,7 +217,7 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac } -bool RenderUtils::LoadTextureFromFile(GLuint& out_texture_id, const std::wstring& filename) { +bool RenderUtils::LoadTextureFromFile(GLuint& out_texture_id, const std::string& filename) { out_texture_id = 0; this->textures.push_back(nullptr); From 15fd59edbeb830244241a89271a83cfa0acdbe47 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Fri, 12 Feb 2021 16:22:29 +0100 Subject: [PATCH 07/19] removed voidjj in file utils, refactored overlay renderer to use utils, too --- core/include/mmcore/utility/FileUtils.h | 6 +- core/include/mmcore/utility/SDFFont.h | 2 +- core/include/mmcore/view/RenderUtils.h | 22 +- core/src/utility/FileUtils.cpp | 22 +- core/src/utility/SDFFont.cpp | 2 +- core/src/view/RenderUtils.cpp | 122 ++++++---- plugins/gui/CMakeLists.txt | 5 +- plugins/gui/shaders/overlay.btf | 63 ----- plugins/gui/src/OverlayRenderer.cpp | 291 ++++++------------------ plugins/gui/src/OverlayRenderer.h | 41 +--- 10 files changed, 192 insertions(+), 384 deletions(-) delete mode 100644 plugins/gui/shaders/overlay.btf diff --git a/core/include/mmcore/utility/FileUtils.h b/core/include/mmcore/utility/FileUtils.h index 1230a927d7..8f55ee0b1d 100644 --- a/core/include/mmcore/utility/FileUtils.h +++ b/core/include/mmcore/utility/FileUtils.h @@ -56,12 +56,12 @@ namespace utility { /** * Load raw data from file (e.g. texture data) */ - static size_t LoadRawFile(const std::wstring& filename, void** outData) { + static bool LoadRawFile(const std::wstring& filename, std::vector& out_data) { return megamol::core::utility::FileUtils::LoadRawFile( - megamol::core::utility::to_string(filename), outData); + megamol::core::utility::to_string(filename), out_data); } - static size_t LoadRawFile(const std::string& filename, void** outData); + static bool LoadRawFile(const std::string& filename, std::vector& out_data); /** * Check if file exists. diff --git a/core/include/mmcore/utility/SDFFont.h b/core/include/mmcore/utility/SDFFont.h index 19df88eb47..2ebb5f4139 100644 --- a/core/include/mmcore/utility/SDFFont.h +++ b/core/include/mmcore/utility/SDFFont.h @@ -654,7 +654,7 @@ namespace utility { bool loadFontBuffers(); /** Load font info from file. */ - bool loadFontInfo(vislib::StringA filename); + bool loadFontInfo(vislib::StringW filename); /** Load shaders from files. */ bool loadFontShader(megamol::core::CoreInstance *core); diff --git a/core/include/mmcore/view/RenderUtils.h b/core/include/mmcore/view/RenderUtils.h index b5c12951df..4a1efe612a 100644 --- a/core/include/mmcore/view/RenderUtils.h +++ b/core/include/mmcore/view/RenderUtils.h @@ -138,12 +138,11 @@ class RenderUtils { bool InitPrimitiveRendering(megamol::core::utility::ShaderSourceFactory& factory); - // Keeps the texture object in rener utils for later access via texture id - bool LoadTextureFromFile(GLuint& out_texture_id, const std::wstring& filename) { - return this->LoadTextureFromFile(out_texture_id, megamol::core::utility::to_string(filename)); + // Keeps the texture object in render utils for later access via texture id + bool LoadTextureFromFile(GLuint& out_texture_id, const std::wstring& filename, bool reload = false) { + return this->LoadTextureFromFile(out_texture_id, megamol::core::utility::to_string(filename), reload); } - - bool LoadTextureFromFile(GLuint& out_texture_id, const std::string& filename); + bool LoadTextureFromFile(GLuint& out_texture_id, const std::string& filename, bool reload = false); void PushPointPrimitive(const glm::vec3& pos_center, float size, const glm::vec3& cam_view, const glm::vec3& cam_pos, const glm::vec4& color, bool sort = false); @@ -199,6 +198,13 @@ class RenderUtils { this->smooth = s; } + unsigned int GetTextureWidth(GLuint texture_id) const; + unsigned int GetTextureHeight(GLuint texture_id) const; + + inline void DeleteAllTextures(void) { + this->textures.clear(); + } + protected: RenderUtils(); @@ -231,6 +237,10 @@ class RenderUtils { // FUNCTIONS ------------------------------------------------------- // + bool createShader(std::shared_ptr& out_shader_ptr, + megamol::core::utility::ShaderSourceFactory& shader_factory, const std::string& vertex_btf_snipprt, + const std::string& fragment_btf_snippet); + void pushQuad(Primitives primitive, GLuint texture_id, const glm::vec3& pos_bottom_left, const glm::vec3& pos_upper_left, const glm::vec3& pos_upper_right, const glm::vec3& pos_bottom_right, const glm::vec4& color, const glm::vec4& attributes); @@ -239,8 +249,6 @@ class RenderUtils { void sortPrimitiveQueue(Primitives primitive); - const std::string getShaderCode(megamol::core::utility::ShaderSourceFactory& factory, std::string snippet_name); - size_t loadRawFile(std::wstring filename, BYTE** outData); void clearQueue(Primitives primitive); diff --git a/core/src/utility/FileUtils.cpp b/core/src/utility/FileUtils.cpp index 0b19affde3..f7800f10d4 100644 --- a/core/src/utility/FileUtils.cpp +++ b/core/src/utility/FileUtils.cpp @@ -12,14 +12,14 @@ using namespace megamol::core::utility; -size_t megamol::core::utility::FileUtils::LoadRawFile(const std::string& filename, void** outData) { +bool megamol::core::utility::FileUtils::LoadRawFile(const std::string& filename, std::vector& out_data) { - *outData = nullptr; + out_data.clear(); if (filename.empty()) { megamol::core::utility::log::Log::DefaultLog.WriteError( "Unable to load file: No file name given. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); - return 0; + return false; } if (!megamol::core::utility::FileUtils::FileExists(filename)) { @@ -27,7 +27,7 @@ size_t megamol::core::utility::FileUtils::LoadRawFile(const std::string& filenam "Unable to load file \"%s\": Not existing. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); - return 0; + return false; } std::ifstream input_file(filename, (std::ifstream::in | std::ifstream::binary)); @@ -35,7 +35,7 @@ size_t megamol::core::utility::FileUtils::LoadRawFile(const std::string& filenam megamol::core::utility::log::Log::DefaultLog.WriteError( "Unable to open file \"%s\": Bad file. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); - return 0; + return false; } size_t size = 0; @@ -46,21 +46,21 @@ size_t megamol::core::utility::FileUtils::LoadRawFile(const std::string& filenam megamol::core::utility::log::Log::DefaultLog.WriteError( "Unable to load file \"%s\": File is empty. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); - return 0; + return false; } - *outData = new char[size]; - input_file.read(static_cast(*outData), size); + out_data.resize(size); + input_file.read(out_data.data(), size); if (!input_file.good()) { megamol::core::utility::log::Log::DefaultLog.WriteError( "Unable to load file \"%s\": Unable to read whole file. [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, __LINE__); - ARY_SAFE_DELETE(*outData); - return 0; + out_data.clear(); + return false; } - return size; + return true; } diff --git a/core/src/utility/SDFFont.cpp b/core/src/utility/SDFFont.cpp index 1188361565..255626cc05 100644 --- a/core/src/utility/SDFFont.cpp +++ b/core/src/utility/SDFFont.cpp @@ -1404,7 +1404,7 @@ bool SDFFont::loadFontBuffers() { * Bitmap Font file format: http://www.angelcode.com/products/fnont/doc/file_format.html * */ -bool SDFFont::loadFontInfo(vislib::StringA filename) { +bool SDFFont::loadFontInfo(vislib::StringW filename) { // Reset font info for (unsigned int i = 0; i < this->glyphs.size(); i++) { diff --git a/core/src/view/RenderUtils.cpp b/core/src/view/RenderUtils.cpp index a007f02c2d..e96664e593 100644 --- a/core/src/view/RenderUtils.cpp +++ b/core/src/view/RenderUtils.cpp @@ -20,13 +20,12 @@ bool RenderUtils::LoadTextureFromFile(std::shared_ptr& out_tex static vislib::graphics::BitmapImage img; static sg::graphics::PngBitmapCodec pbc; pbc.Image() = &img; - void* buf = nullptr; + std::vector buf; size_t size = 0; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - size = megamol::core::utility::FileUtils::LoadRawFile(filename, &buf); - if (size > 0) { - if (pbc.Load(buf, size)) { + if (megamol::core::utility::FileUtils::LoadRawFile(filename, buf)) { + if (pbc.Load(static_cast(buf.data()), buf.size())) { img.Convert(vislib::graphics::BitmapImage::TemplateFloatRGBA); retval = RenderUtils::LoadTextureFromData(out_texture_ptr, img.Width(), img.Height(), img.PeekDataAs()); @@ -40,7 +39,6 @@ bool RenderUtils::LoadTextureFromFile(std::shared_ptr& out_tex retval = false; } - ARY_SAFE_DELETE(buf); return retval; } @@ -108,7 +106,7 @@ RenderUtils::RenderUtils() RenderUtils::~RenderUtils() {} -bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFactory& factory) { +bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFactory& shader_factory) { if (this->init_once) { megamol::core::utility::log::Log::DefaultLog.WriteWarn( @@ -116,9 +114,8 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac } // Create shaders - std::string vertShaderCode = this->getShaderCode(factory, "primitives::points::vertex"); - std::string fragShaderCode = this->getShaderCode(factory, "primitives::points::fragment"); - if (!RenderUtils::CreateShader(this->shaders[Primitives::POINTS], vertShaderCode, fragShaderCode)) { + if (!this->createShader(this->shaders[Primitives::POINTS], shader_factory, "primitives::points::vertex", + "primitives::points::fragment")) { megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create point shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; @@ -128,9 +125,8 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); this->shaders[Primitives::POINTS]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); - vertShaderCode = this->getShaderCode(factory, "primitives::lines::vertex"); - fragShaderCode = this->getShaderCode(factory, "primitives::lines::fragment"); - if (!RenderUtils::CreateShader(this->shaders[Primitives::LINES], vertShaderCode, fragShaderCode)) { + if (!this->createShader(this->shaders[Primitives::LINES], shader_factory, "primitives::lines::vertex", + "primitives::lines::fragment")) { megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create line shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; @@ -140,9 +136,8 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); this->shaders[Primitives::LINES]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); - vertShaderCode = this->getShaderCode(factory, "primitives::quads::vertex"); - fragShaderCode = this->getShaderCode(factory, "primitives::quads::fragment"); - if (!RenderUtils::CreateShader(this->shaders[Primitives::QUADS], vertShaderCode, fragShaderCode)) { + if (!this->createShader(this->shaders[Primitives::QUADS], shader_factory, "primitives::quads::vertex", + "primitives::quads::fragment")) { megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create quad shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; @@ -152,9 +147,8 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); this->shaders[Primitives::QUADS]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); - vertShaderCode = this->getShaderCode(factory, "primitives::color_texture::vertex"); - fragShaderCode = this->getShaderCode(factory, "primitives::color_texture::fragment"); - if (!RenderUtils::CreateShader(this->shaders[Primitives::COLOR_TEXTURE], vertShaderCode, fragShaderCode)) { + if (!this->createShader(this->shaders[Primitives::COLOR_TEXTURE], shader_factory, + "primitives::color_texture::vertex", "primitives::color_texture::fragment")) { megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create color texture shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; @@ -164,9 +158,8 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::TEXTURE_COORD, "inTexture"); this->shaders[Primitives::COLOR_TEXTURE]->bindAttribLocation(Buffers::ATTRIBUTES, "inAttributes"); - vertShaderCode = this->getShaderCode(factory, "primitives::depth_texture::vertex"); - fragShaderCode = this->getShaderCode(factory, "primitives::depth_texture::fragment"); - if (!RenderUtils::CreateShader(this->shaders[Primitives::DEPTH_TEXTURE], vertShaderCode, fragShaderCode)) { + if (!this->createShader(this->shaders[Primitives::DEPTH_TEXTURE], shader_factory, + "primitives::depth_texture::vertex", "primitives::depth_texture::fragment")) { megamol::core::utility::log::Log::DefaultLog.WriteError( "Failed to create depth texture shader. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; @@ -217,13 +210,29 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac } -bool RenderUtils::LoadTextureFromFile(GLuint& out_texture_id, const std::string& filename) { +bool RenderUtils::LoadTextureFromFile(GLuint& out_texture_id, const std::string& filename, bool reload) { out_texture_id = 0; - this->textures.push_back(nullptr); - if (RenderUtils::LoadTextureFromFile(this->textures.back(), filename)) { - out_texture_id = this->textures.back()->getName(); - return true; + + if (reload) { + auto texture_iter = std::find_if(this->textures.begin(), this->textures.end(), [&out_texture_id](std::shared_ptr tex_ptr) { + return (tex_ptr->getName() == out_texture_id); }); + if (texture_iter == this->textures.end()) { + megamol::core::utility::log::Log::DefaultLog.WriteError( + "Unable to reload texture. Texture with given id does not exist. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, + __LINE__); + } + if (RenderUtils::LoadTextureFromFile(*texture_iter, filename)) { + return true; + } + } else { + this->textures.push_back(nullptr); + if (RenderUtils::LoadTextureFromFile(this->textures.back(), filename)) { + out_texture_id = this->textures.back()->getName(); + return true; + } else { + this->textures.pop_back(); + } } return false; } @@ -342,6 +351,30 @@ void RenderUtils::Push2DDepthTexture(GLuint texture_id, const glm::vec3& pos_bot } +unsigned int RenderUtils::GetTextureWidth(GLuint texture_id) const { + + unsigned int texture_width = 0; + auto texture_iter = std::find_if(this->textures.begin(), this->textures.end(), + [&texture_id](std::shared_ptr tex_ptr) { return (tex_ptr->getName() == texture_id); }); + if (texture_iter != this->textures.end()) { + texture_width = (*texture_iter)->getWidth(); + } + return texture_width; +} + + +unsigned int RenderUtils::GetTextureHeight(GLuint texture_id) const { + + unsigned int texture_height = 0; + auto texture_iter = std::find_if(this->textures.begin(), this->textures.end(), + [&texture_id](std::shared_ptr tex_ptr) { return (tex_ptr->getName() == texture_id); }); + if (texture_iter != this->textures.end()) { + texture_height = (*texture_iter)->getHeight(); + } + return texture_height; +} + + void RenderUtils::drawPrimitives(RenderUtils::Primitives primitive, glm::mat4& mat_mvp, glm::vec2 dim_vp) { if (!this->init_once) { @@ -492,19 +525,6 @@ void RenderUtils::sortPrimitiveQueue(Primitives primitive) { } -const std::string RenderUtils::getShaderCode( - megamol::core::utility::ShaderSourceFactory& factory, std::string snippet_name) { - - vislib::graphics::gl::ShaderSource source; - if (!factory.MakeShaderSource(snippet_name.c_str(), source)) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "Failed to make vertex shader source. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); - return std::string(""); - } - return std::string(source.WholeCode().PeekBuffer()); -} - - size_t RenderUtils::loadRawFile(std::wstring filename, BYTE** outData) { // Reset out data @@ -550,6 +570,30 @@ size_t RenderUtils::loadRawFile(std::wstring filename, BYTE** outData) { } +bool RenderUtils::createShader(std::shared_ptr& out_shader_ptr, + megamol::core::utility::ShaderSourceFactory& shader_factory, const std::string& vertex_btf_snipprt, + const std::string& fragment_btf_snippet) { + + vislib::graphics::gl::ShaderSource source; + if (!shader_factory.MakeShaderSource(vertex_btf_snipprt.c_str(), source)) { + megamol::core::utility::log::Log::DefaultLog.WriteError( + "Failed to make vertex shader source. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + return false; + } + auto vertex_code = std::string(source.WholeCode().PeekBuffer()); + + if (!shader_factory.MakeShaderSource(fragment_btf_snippet.c_str(), source)) { + megamol::core::utility::log::Log::DefaultLog.WriteError( + "Failed to make fragment shader source. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + return false; + } + auto fragment_code = std::string(source.WholeCode().PeekBuffer()); + + return RenderUtils::CreateShader(out_shader_ptr, vertex_code, fragment_code); +} + + + void RenderUtils::pushQuad(Primitives primitive, GLuint texture_id, const glm::vec3& pos_bottom_left, const glm::vec3& pos_upper_left, const glm::vec3& pos_upper_right, const glm::vec3& pos_bottom_right, const glm::vec4& color, const glm::vec4& attributes) { diff --git a/plugins/gui/CMakeLists.txt b/plugins/gui/CMakeLists.txt index 09c0585e60..60890b7093 100644 --- a/plugins/gui/CMakeLists.txt +++ b/plugins/gui/CMakeLists.txt @@ -17,7 +17,6 @@ if(BUILD_${EXPORT_NAME}_PLUGIN) file(GLOB_RECURSE source_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "src/*.cpp") file(GLOB_RECURSE header_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "src/*.h") file(GLOB_RECURSE resource_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "resources/*") - file(GLOB_RECURSE shader_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "shaders/*") # glm require_external(glm) @@ -32,7 +31,7 @@ if(BUILD_${EXPORT_NAME}_PLUGIN) require_external(glfw3) # target definition - add_library(${PROJECT_NAME} STATIC ${public_header_files} ${header_files} ${source_files} ${imgui_files} ${shader_files} ${resource_files}) + add_library(${PROJECT_NAME} STATIC ${public_header_files} ${header_files} ${source_files} ${imgui_files} ${resource_files}) # Add C++ filesystem support. if(UNIX) @@ -49,7 +48,6 @@ if(BUILD_${EXPORT_NAME}_PLUGIN) # Installation rules for generated files #install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION "include") install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/resources/ DESTINATION "share/resources") - install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/shaders/ DESTINATION "share/shaders") if(WIN32) #install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION "bin") #install(TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION "lib") @@ -80,7 +78,6 @@ if(BUILD_${EXPORT_NAME}_PLUGIN) source_group("Version" FILES ${version_files}) source_group("ImGui Files" FILES ${imgui_files}) source_group("Resources" FILES ${resource_files}) - source_group("Shaders" FILES ${shader_files}) # Format add_clang_format(${PROJECT_NAME} diff --git a/plugins/gui/shaders/overlay.btf b/plugins/gui/shaders/overlay.btf deleted file mode 100644 index a04d8355b5..0000000000 --- a/plugins/gui/shaders/overlay.btf +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - 130 - - - - - - - 130 - - 0.0) { - color = overwrite_color; - } - outFragColor = color; -} - - ]]> - - - - diff --git a/plugins/gui/src/OverlayRenderer.cpp b/plugins/gui/src/OverlayRenderer.cpp index b71aa3ea93..6f35955d63 100644 --- a/plugins/gui/src/OverlayRenderer.cpp +++ b/plugins/gui/src/OverlayRenderer.cpp @@ -16,6 +16,7 @@ using namespace megamol::gui; OverlayRenderer::OverlayRenderer(void) : view::RendererModule() + , megamol::core::view::RenderUtils() , paramMode("mode", "Overlay mode.") , paramAnchor("anchor", "Anchor of overlay.") , paramCustomPosition("position_offset", "Custom relative position offset in respect to selected anchor.") @@ -42,9 +43,8 @@ OverlayRenderer::OverlayRenderer(void) , paramFontName("font::name", "The font name.") , paramFontSize("font::size", "The font size.") , paramFontColor("font::color", "The font color.") - , m_texture() - , m_shader() - , m_font(nullptr) + , m_texture_id(0) + , m_font_ptr(nullptr) , m_viewport() , m_current_rectangle({0.0f, 0.0f, 0.0f, 0.0f}) , m_parameter_ptr(nullptr) @@ -157,46 +157,39 @@ OverlayRenderer::~OverlayRenderer(void) { void OverlayRenderer::release(void) { - this->m_font.reset(); + this->m_font_ptr.reset(); this->m_parameter_ptr = nullptr; - this->m_shader.Release(); - this->m_texture.tex.Release(); - for (size_t i = 0; i < this->m_transpctrl_icons.size(); i++) { - this->m_transpctrl_icons[i].tex.Release(); - } } bool OverlayRenderer::create(void) { + if (!this->InitPrimitiveRendering(this->GetCoreInstance()->ShaderSourceFactory())) { + megamol::core::utility::log::Log::DefaultLog.WriteError( + "Couldn't initialize primitive rendering. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + return false; + } + return this->onToggleMode(this->paramMode); - ; } bool OverlayRenderer::onToggleMode(param::ParamSlot& slot) { slot.ResetDirty(); - this->m_font.reset(); + this->m_font_ptr.reset(); this->m_parameter_ptr = nullptr; - this->m_shader.Release(); - this->m_texture.tex.Release(); - for (size_t i = 0; i < this->m_transpctrl_icons.size(); i++) { - this->m_transpctrl_icons[i].tex.Release(); - } + this->DeleteAllTextures(); + this->m_texture_id = 0; this->setParameterGUIVisibility(); auto mode = static_cast(this->paramMode.Param()->Value()); switch (mode) { case (Mode::TEXTURE): { - if (!this->loadShader(this->m_shader, "overlay::vertex", "overlay::fragment")) - return false; this->onTextureFileName(this->paramFileName); } break; case (Mode::TRANSPORT_CTRL): { - if (!this->loadShader(this->m_shader, "overlay::vertex", "overlay::fragment")) - return false; this->onParameterName(this->paramTimeParameter); this->onParameterName(this->paramSpeedParameter); std::string filename; @@ -226,8 +219,12 @@ bool OverlayRenderer::onToggleMode(param::ParamSlot& slot) { default: break; } - if (!this->loadTexture(filename, this->m_transpctrl_icons[i])) + std::wstring texture_filename(megamol::core::utility::ResourceWrapper::getFileName( + this->GetCoreInstance()->Configuration(), vislib::StringA(filename.c_str())) + .PeekBuffer()); + if (!this->LoadTextureFromFile(this->m_transpctrl_icons[i], texture_filename)) { return false; + } } } break; case (Mode::PARAMETER): { @@ -246,10 +243,10 @@ bool OverlayRenderer::onToggleMode(param::ParamSlot& slot) { bool OverlayRenderer::onTextureFileName(param::ParamSlot& slot) { slot.ResetDirty(); - this->m_texture.tex.Release(); std::string filename = std::string(this->paramFileName.Param()->Value().PeekBuffer()); - if (!this->loadTexture(filename, this->m_texture)) + if (!this->LoadTextureFromFile(this->m_texture_id, filename, (this->m_texture_id != 0))) { return false; + } this->onTriggerRecalcRectangle(slot); return true; } @@ -258,11 +255,12 @@ bool OverlayRenderer::onTextureFileName(param::ParamSlot& slot) { bool OverlayRenderer::onFontName(param::ParamSlot& slot) { slot.ResetDirty(); - this->m_font.reset(); + this->m_font_ptr.reset(); auto font_name = static_cast(this->paramFontName.Param()->Value()); - this->m_font = std::make_unique(font_name); - if (!this->m_font->Initialise(this->GetCoreInstance())) + this->m_font_ptr = std::make_unique(font_name); + if (!this->m_font_ptr->Initialise(this->GetCoreInstance())) { return false; + } return true; } @@ -278,7 +276,7 @@ bool OverlayRenderer::onParameterName(param::ParamSlot& slot) { auto parameter_ptr = this->GetCoreInstance()->FindParameter(parameter_name, false, false); if (parameter_ptr.IsNull()) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to find parameter by name. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + "Unable to find parameter by name. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } bool found_valid_param_type = false; @@ -292,7 +290,7 @@ bool OverlayRenderer::onParameterName(param::ParamSlot& slot) { this->m_time_parameter_ptr = parameter_ptr; } else { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] No valid parameter type. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + "No valid parameter type. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); } } else if (&slot == &this->paramSpeedParameter) { if (parameter_ptr.DynamicCast() != nullptr) { @@ -303,7 +301,7 @@ bool OverlayRenderer::onParameterName(param::ParamSlot& slot) { this->m_speed_parameter_ptr = parameter_ptr; } else { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] No valid parameter type. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + "No valid parameter type. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); } } else if (&slot == &this->paramParameterName) { if (parameter_ptr.DynamicCast() != nullptr) { @@ -322,7 +320,7 @@ bool OverlayRenderer::onParameterName(param::ParamSlot& slot) { this->m_parameter_ptr = parameter_ptr; } else { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] No valid parameter type. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + "No valid parameter type. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); } } @@ -343,12 +341,13 @@ bool OverlayRenderer::onTriggerRecalcRectangle(core::param::ParamSlot& slot) { if (transpctrl_mode) { if (this->m_state.icon != TranspCtrlIcon::NONE_COUNT) { - this->m_current_rectangle = this->getScreenSpaceRect( - rel_pos, rel_width, anchor, this->m_transpctrl_icons[this->m_state.icon], this->m_viewport); + this->m_current_rectangle = this->getScreenSpaceRect(rel_pos, rel_width, anchor, + this->GetTextureWidth(this->m_transpctrl_icons[this->m_state.icon]), + this->GetTextureHeight(this->m_transpctrl_icons[this->m_state.icon]), this->m_viewport); } } else { - this->m_current_rectangle = - this->getScreenSpaceRect(rel_pos, rel_width, anchor, this->m_texture, this->m_viewport); + this->m_current_rectangle = this->getScreenSpaceRect(rel_pos, rel_width, anchor, + this->GetTextureWidth(this->m_texture_id), this->GetTextureHeight(this->m_texture_id), this->m_viewport); } return true; @@ -408,9 +407,10 @@ bool OverlayRenderer::Render(view::CallRender3D_2& call) { auto leftSlotParent = call.PeekCallerSlot()->Parent(); std::shared_ptr viewptr = std::dynamic_pointer_cast(leftSlotParent); + + auto viewport = call.GetViewport(); if (viewptr != nullptr) { // XXX Move this behind the fbo magic? - auto vp = call.GetViewport(); - glViewport(vp.Left(), vp.Bottom(), vp.Width(), vp.Height()); + glViewport(viewport.Left(), viewport.Bottom(), viewport.Width(), viewport.Height()); auto backCol = call.BackgroundColor(); glClearColor(backCol.x, backCol.y, backCol.z, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -426,15 +426,13 @@ bool OverlayRenderer::Render(view::CallRender3D_2& call) { } // Get current viewport - auto viewport = call.GetViewport(); if ((this->m_viewport.x != viewport.Width()) || (this->m_viewport.y != viewport.Height())) { - this->m_viewport = {viewport.Width(), viewport.Height()}; + this->m_viewport = {static_cast(viewport.Width()), static_cast(viewport.Height())}; // Reload rectangle on viewport changes this->onTriggerRecalcRectangle(this->paramMode); } // Create 2D orthographic mvp matrix - glm::mat4 ortho = glm::ortho( - 0.0f, static_cast(this->m_viewport.x), 0.0f, static_cast(this->m_viewport.y), -1.0f, 1.0f); + glm::mat4 ortho = glm::ortho(0.0f, this->m_viewport.x, 0.0f, this->m_viewport.y, -1.0f, 1.0f); // Draw mode dependent stuff auto mode = this->paramMode.Param()->Value(); @@ -442,7 +440,7 @@ bool OverlayRenderer::Render(view::CallRender3D_2& call) { case (Mode::TEXTURE): { auto overwrite_color = glm::vec4(0.0f); // Ignored when alpha = 0. Using texture color. this->drawScreenSpaceBillboard( - ortho, this->m_current_rectangle, this->m_texture, this->m_shader, overwrite_color); + ortho, this->m_viewport, this->m_current_rectangle, this->m_texture_id, overwrite_color); } break; case (Mode::TRANSPORT_CTRL): { auto param_color = this->paramIconColor.Param()->Value(); @@ -491,8 +489,8 @@ bool OverlayRenderer::Render(view::CallRender3D_2& call) { } if (current_icon != TranspCtrlIcon::NONE_COUNT) { - this->drawScreenSpaceBillboard(ortho, this->m_current_rectangle, this->m_transpctrl_icons[current_icon], - this->m_shader, overwrite_color); + this->drawScreenSpaceBillboard(ortho, this->m_viewport, this->m_current_rectangle, + this->m_transpctrl_icons[current_icon], overwrite_color); } } break; case (Mode::PARAMETER): { @@ -537,12 +535,13 @@ bool OverlayRenderer::Render(view::CallRender3D_2& call) { text = prefix + stream.str() + sufix; } if (text.empty()) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to read parmeter value [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + // megamol::core::utility::log::Log::DefaultLog.WriteError( + // "Unable to read parmeter value [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } - this->drawScreenSpaceText(ortho, (*this->m_font), text, color, font_size, anchor, this->m_current_rectangle); + this->drawScreenSpaceText( + ortho, (*this->m_font_ptr), text, color, font_size, anchor, this->m_current_rectangle); } break; case (Mode::LABEL): { auto param_color = this->paramFontColor.Param()->Value(); @@ -553,12 +552,13 @@ bool OverlayRenderer::Render(view::CallRender3D_2& call) { auto param_text = this->paramText.Param()->Value(); std::string text = std::string(param_text.PeekBuffer()); - if (this->m_font == nullptr) { + if (this->m_font_ptr == nullptr) { megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to read texture: %s [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + "Unable to read texture: %s [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } - this->drawScreenSpaceText(ortho, (*this->m_font), text, color, font_size, anchor, this->m_current_rectangle); + this->drawScreenSpaceText( + ortho, (*this->m_font_ptr), text, color, font_size, anchor, this->m_current_rectangle); } break; } @@ -566,35 +566,16 @@ bool OverlayRenderer::Render(view::CallRender3D_2& call) { } -void OverlayRenderer::drawScreenSpaceBillboard(glm::mat4 ortho, Rectangle rectangle, TextureData& texture, - vislib::graphics::gl::GLSLShader& shader, glm::vec4 overwrite_color) const { - - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glEnable(GL_TEXTURE_2D); - glActiveTexture(GL_TEXTURE0); - texture.tex.Bind(); - - shader.Enable(); - - glUniformMatrix4fv(shader.ParameterLocation("ortho"), 1, GL_FALSE, glm::value_ptr(ortho)); - glUniform1f(shader.ParameterLocation("left"), rectangle.left); - glUniform1f(shader.ParameterLocation("right"), rectangle.right); - glUniform1f(shader.ParameterLocation("top"), rectangle.top); - glUniform1f(shader.ParameterLocation("bottom"), rectangle.bottom); - glUniform4fv(shader.ParameterLocation("overwrite_color"), 1, glm::value_ptr(overwrite_color)); - glUniform1i(shader.ParameterLocation("tex"), 0); - - // Vertex position is only given via uniforms. - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - - shader.Disable(); +void OverlayRenderer::drawScreenSpaceBillboard( + glm::mat4 ortho, glm::vec2 viewport, Rectangle rectangle, GLuint texture_id, glm::vec4 overwrite_color) { - glBindTexture(GL_TEXTURE_2D, 0); - glDisable(GL_TEXTURE_2D); - - glDisable(GL_BLEND); + glm::vec3 pos_bottom_left = {rectangle.left, rectangle.bottom, 0.0f}; + glm::vec3 pos_upper_left = {rectangle.left, rectangle.top, 0.0f}; + glm::vec3 pos_upper_right = {rectangle.right, rectangle.top, 0.0f}; + glm::vec3 pos_bottom_right = {rectangle.right, rectangle.bottom, 0.0f}; + this->Push2DColorTexture( + texture_id, pos_bottom_left, pos_upper_left, pos_upper_right, pos_bottom_right, true, overwrite_color); + this->DrawTextures(ortho, viewport); } void OverlayRenderer::drawScreenSpaceText(glm::mat4 ortho, megamol::core::utility::SDFFont& font, @@ -602,7 +583,7 @@ void OverlayRenderer::drawScreenSpaceText(glm::mat4 ortho, megamol::core::utilit float x = rectangle.left; float y = rectangle.top; - float z = -1.0f; + float z = 1.0f; switch (anchor) { case (Anchor::ALIGN_LEFT_TOP): { @@ -655,13 +636,16 @@ void OverlayRenderer::drawScreenSpaceText(glm::mat4 ortho, megamol::core::utilit } -OverlayRenderer::Rectangle OverlayRenderer::getScreenSpaceRect( - glm::vec2 rel_pos, float rel_width, Anchor anchor, const TextureData& texture, glm::ivec2 viewport) const { +OverlayRenderer::Rectangle OverlayRenderer::getScreenSpaceRect(glm::vec2 rel_pos, float rel_width, Anchor anchor, + unsigned int texture_width, unsigned int texture_height, glm::vec2 viewport) const { Rectangle rectangle = {0.0f, 0.0f, 0.0f, 0.0f}; + if ((texture_width == 0) || (texture_height == 0)) { + return rectangle; + } - float tex_aspect = static_cast(texture.width) / static_cast(texture.height); - float viewport_aspect = static_cast(viewport.x) / static_cast(viewport.y); + float tex_aspect = static_cast(texture_width) / static_cast(texture_height); + float viewport_aspect = viewport.x / viewport.y; float rel_height = rel_width / tex_aspect * viewport_aspect; switch (anchor) { @@ -729,146 +713,3 @@ OverlayRenderer::Rectangle OverlayRenderer::getScreenSpaceRect( return rectangle; } - - -bool OverlayRenderer::loadTexture(const std::string& filename, TextureData& texture) const { - - if (filename.empty()) - return false; - if (texture.tex.IsValid()) - texture.tex.Release(); - - static vislib::graphics::BitmapImage img; - static sg::graphics::PngBitmapCodec pbc; - pbc.Image() = &img; - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - void* buf = nullptr; - size_t size = 0; - - size = utility::ResourceWrapper::LoadResource( - this->GetCoreInstance()->Configuration(), vislib::StringA(filename.c_str()), (void**) (&buf)); - if (size == 0) { - size = this->loadRawFile(filename, &buf); - } - - if (size > 0) { - if (pbc.Load(buf, size)) { - img.Convert(vislib::graphics::BitmapImage::TemplateByteRGBA); - if (texture.tex.Create(img.Width(), img.Height(), false, img.PeekDataAs(), GL_RGBA) != GL_NO_ERROR) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to create texture: %s [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, - __LINE__); - ARY_SAFE_DELETE(buf); - return false; - } - texture.width = img.Width(); - texture.height = img.Height(); - texture.tex.Bind(); - /// glGenerateMipmap(GL_TEXTURE_2D); - /// texture.tex.SetFilter(GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR); - texture.tex.SetFilter(GL_LINEAR, GL_LINEAR); // Uncomment when MipMaps are used. - texture.tex.SetWrap(GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE); - glBindTexture(GL_TEXTURE_2D, 0); - - ARY_SAFE_DELETE(buf); - } else { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to read texture: %s [%s, %s, line %d]\n", filename.c_str(), __FILE__, __FUNCTION__, - __LINE__); - ARY_SAFE_DELETE(buf); - return false; - } - } else { - ARY_SAFE_DELETE(buf); - return false; - } - - return true; -} - - -bool OverlayRenderer::loadShader( - vislib::graphics::gl::GLSLShader& io_shader, const std::string& vert_name, const std::string& frag_name) const { - - io_shader.Release(); - vislib::graphics::gl::ShaderSource vert, frag; - try { - if (!this->GetCoreInstance()->ShaderSourceFactory().MakeShaderSource( - vislib::StringA(vert_name.c_str()), vert)) { - return false; - } - if (!this->GetCoreInstance()->ShaderSourceFactory().MakeShaderSource( - vislib::StringA(frag_name.c_str()), frag)) { - return false; - } - if (!io_shader.Create(vert.Code(), vert.Count(), frag.Code(), frag.Count())) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to compile: Unknown error [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); - return false; - } - } catch (vislib::graphics::gl::AbstractOpenGLShader::CompileException& ce) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to compile shader (@%s): %s [%s, %s, line %d]\n", - vislib::graphics::gl::AbstractOpenGLShader::CompileException::CompileActionName(ce.FailedAction()), - ce.GetMsgA(), __FILE__, __FUNCTION__, __LINE__); - return false; - } catch (vislib::Exception& e) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to compile shader: %s [%s, %s, line %d]\n", e.GetMsgA(), __FILE__, __FUNCTION__, __LINE__); - return false; - } catch (...) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to compile shader: Unknown exception [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); - return false; - } - - return true; -} - - -size_t OverlayRenderer::loadRawFile(std::string name, void** outData) const { - - *outData = nullptr; - - vislib::StringW filename = static_cast(name.c_str()); - if (filename.IsEmpty()) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file: No file name given. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); - return 0; - } - - if (!vislib::sys::File::Exists(filename)) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": Not existing. [%s, %s, line %d]\n", name.c_str(), __FILE__, __FUNCTION__, - __LINE__); - return 0; - } - - size_t size = static_cast(vislib::sys::File::GetSize(filename)); - if (size < 1) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": File is empty. [%s, %s, line %d]\n", name.c_str(), __FILE__, - __FUNCTION__, __LINE__); - return 0; - } - - vislib::sys::FastFile f; - if (!f.Open(filename, vislib::sys::File::READ_ONLY, vislib::sys::File::SHARE_READ, vislib::sys::File::OPEN_ONLY)) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": Unable to open file. [%s, %s, line %d]\n", name.c_str(), __FILE__, - __FUNCTION__, __LINE__); - return 0; - } - - *outData = new BYTE[size]; - size_t num = static_cast(f.Read(*outData, size)); - if (num != size) { - megamol::core::utility::log::Log::DefaultLog.WriteError( - "[GUI] Unable to load file \"%s\": Unable to read whole file. [%s, %s, line %d]\n", name.c_str(), __FILE__, - __FUNCTION__, __LINE__); - ARY_SAFE_DELETE(*outData); - return 0; - } - - return num; -} diff --git a/plugins/gui/src/OverlayRenderer.h b/plugins/gui/src/OverlayRenderer.h index 678011945f..f10c64f6d6 100644 --- a/plugins/gui/src/OverlayRenderer.h +++ b/plugins/gui/src/OverlayRenderer.h @@ -11,7 +11,6 @@ #include "mmcore/CallerSlot.h" #include "mmcore/CoreInstance.h" -#include "mmcore/misc/PngBitmapCodec.h" #include "mmcore/param/BoolParam.h" #include "mmcore/param/ColorParam.h" #include "mmcore/param/EnumParam.h" @@ -28,13 +27,9 @@ #include "mmcore/utility/log/Log.h" #include "mmcore/view/AbstractView.h" #include "mmcore/view/CallRender3D_2.h" +#include "mmcore/view/RenderUtils.h" #include "mmcore/view/RendererModule.h" -#include "vislib/graphics/gl/GLSLShader.h" -#include "vislib/graphics/gl/IncludeAllGL.h" -#include "vislib/graphics/gl/OpenGLTexture2D.h" -#include "vislib/sys/File.h" - #include #include @@ -45,7 +40,8 @@ namespace gui { /** * Renders various kinds of overlays. */ - class OverlayRenderer : public megamol::core::view::RendererModule { + class OverlayRenderer : public megamol::core::view::RendererModule, + megamol::core::view::RenderUtils { public: /** * Answer the name of this module. @@ -114,12 +110,6 @@ namespace gui { virtual bool Render(megamol::core::view::CallRender3D_2& call); private: - struct TextureData { - vislib::graphics::gl::OpenGLTexture2D tex; - unsigned int width; - unsigned int height; - }; - struct Rectangle { float left; float right; @@ -182,16 +172,14 @@ namespace gui { /********************************************************************** * variables **********************************************************************/ - - TextureData m_texture; - vislib::graphics::gl::GLSLShader m_shader; - std::unique_ptr m_font; - glm::ivec2 m_viewport; + GLuint m_texture_id; + std::unique_ptr m_font_ptr; + glm::vec2 m_viewport; Rectangle m_current_rectangle; // Parameter Mode vislib::SmartPtr m_parameter_ptr; // TranspCtrl Icons - std::array m_transpctrl_icons; + std::array m_transpctrl_icons; TranspCtrlIconState m_state; vislib::SmartPtr m_speed_parameter_ptr; vislib::SmartPtr m_time_parameter_ptr; @@ -202,21 +190,14 @@ namespace gui { void setParameterGUIVisibility(void); - void drawScreenSpaceBillboard(glm::mat4 ortho, Rectangle rectangle, TextureData& texture, - vislib::graphics::gl::GLSLShader& shader, glm::vec4 overwrite_color) const; + void drawScreenSpaceBillboard( + glm::mat4 ortho, glm::vec2 viewport, Rectangle rectangle, GLuint texture_id, glm::vec4 overwrite_color); void drawScreenSpaceText(glm::mat4 ortho, megamol::core::utility::SDFFont& font, const std::string& text, glm::vec4 color, float size, Anchor anchor, Rectangle rectangle) const; - Rectangle getScreenSpaceRect( - glm::vec2 rel_pos, float rel_width, Anchor anchor, const TextureData& texture, glm::ivec2 viewport) const; - - bool loadTexture(const std::string& filename, TextureData& texture) const; - - bool loadShader( - vislib::graphics::gl::GLSLShader& shader, const std::string& vert_name, const std::string& frag_name) const; - - size_t loadRawFile(std::string name, void** outData) const; + Rectangle getScreenSpaceRect(glm::vec2 rel_pos, float rel_width, Anchor anchor, unsigned int texture_width, + unsigned int texture_height, glm::vec2 viewport) const; /* parameter callbacks --------------------------------------------- */ From a82b0c002b4bd9cfe33527a95f5823560be74ffc Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Fri, 12 Feb 2021 17:23:31 +0100 Subject: [PATCH 08/19] fixed text positioning in overlayrenderer --- core/src/view/RenderUtils.cpp | 17 +++++++++-------- plugins/gui/src/OverlayRenderer.cpp | 17 ++++++++++------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/core/src/view/RenderUtils.cpp b/core/src/view/RenderUtils.cpp index e96664e593..87741b8497 100644 --- a/core/src/view/RenderUtils.cpp +++ b/core/src/view/RenderUtils.cpp @@ -212,18 +212,17 @@ bool RenderUtils::InitPrimitiveRendering(megamol::core::utility::ShaderSourceFac bool RenderUtils::LoadTextureFromFile(GLuint& out_texture_id, const std::string& filename, bool reload) { - out_texture_id = 0; - if (reload) { auto texture_iter = std::find_if(this->textures.begin(), this->textures.end(), [&out_texture_id](std::shared_ptr tex_ptr) { return (tex_ptr->getName() == out_texture_id); }); - if (texture_iter == this->textures.end()) { + if (texture_iter != this->textures.end()) { + if (RenderUtils::LoadTextureFromFile(*texture_iter, filename)) { + return true; + } + } else { megamol::core::utility::log::Log::DefaultLog.WriteError( - "Unable to reload texture. Texture with given id does not exist. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, - __LINE__); - } - if (RenderUtils::LoadTextureFromFile(*texture_iter, filename)) { - return true; + "Unable to reload texture. Texture with given id does not exist. [%s, %s, line %d]\n", __FILE__, + __FUNCTION__, __LINE__); } } else { this->textures.push_back(nullptr); @@ -234,6 +233,8 @@ bool RenderUtils::LoadTextureFromFile(GLuint& out_texture_id, const std::string& this->textures.pop_back(); } } + + out_texture_id = 0; return false; } diff --git a/plugins/gui/src/OverlayRenderer.cpp b/plugins/gui/src/OverlayRenderer.cpp index 6f35955d63..6728ed991e 100644 --- a/plugins/gui/src/OverlayRenderer.cpp +++ b/plugins/gui/src/OverlayRenderer.cpp @@ -236,6 +236,7 @@ bool OverlayRenderer::onToggleMode(param::ParamSlot& slot) { } break; } + this->onTriggerRecalcRectangle(slot); return true; } @@ -339,16 +340,18 @@ bool OverlayRenderer::onTriggerRecalcRectangle(core::param::ParamSlot& slot) { glm::vec2 rel_pos = glm::vec2(param_position.X() / 100.0f, param_position.Y() / 100.0f); auto rel_width = this->paramRelativeWidth.Param()->Value() / 100.0f; - if (transpctrl_mode) { + float width = this->m_viewport.x; + float height = this->m_viewport.y; + if (mode == Mode::TRANSPORT_CTRL) { if (this->m_state.icon != TranspCtrlIcon::NONE_COUNT) { - this->m_current_rectangle = this->getScreenSpaceRect(rel_pos, rel_width, anchor, - this->GetTextureWidth(this->m_transpctrl_icons[this->m_state.icon]), - this->GetTextureHeight(this->m_transpctrl_icons[this->m_state.icon]), this->m_viewport); + width = this->GetTextureWidth(this->m_transpctrl_icons[this->m_state.icon]); + height = this->GetTextureHeight(this->m_transpctrl_icons[this->m_state.icon]); } - } else { - this->m_current_rectangle = this->getScreenSpaceRect(rel_pos, rel_width, anchor, - this->GetTextureWidth(this->m_texture_id), this->GetTextureHeight(this->m_texture_id), this->m_viewport); + } else if (mode == Mode::TEXTURE) { + width = this->GetTextureWidth(this->m_texture_id); + height = this->GetTextureHeight(this->m_texture_id); } + this->m_current_rectangle = this->getScreenSpaceRect(rel_pos, rel_width, anchor, width, height, this->m_viewport); return true; } From 358b74733b57d9164f6c0e33885ad03bafe45c0e Mon Sep 17 00:00:00 2001 From: invor Date: Sun, 14 Feb 2021 16:28:04 +0100 Subject: [PATCH 09/19] Fix SimpleMoleculeRenderer for AMD GPUs --- plugins/protein/Shaders/protein.btf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/protein/Shaders/protein.btf b/plugins/protein/Shaders/protein.btf index 368a7efdee..50fce6f16c 100644 --- a/plugins/protein/Shaders/protein.btf +++ b/plugins/protein/Shaders/protein.btf @@ -2725,7 +2725,8 @@ void main(void) { From 43af00e20d8a364038e6d7e1b1977043c89f0b8a Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Mon, 15 Feb 2021 17:07:06 +0100 Subject: [PATCH 10/19] using new megamol graph access for alternative to find parameter --- plugins/gui/src/OverlayRenderer.cpp | 123 +++++++++++++++++----------- plugins/gui/src/OverlayRenderer.h | 11 ++- 2 files changed, 85 insertions(+), 49 deletions(-) diff --git a/plugins/gui/src/OverlayRenderer.cpp b/plugins/gui/src/OverlayRenderer.cpp index 6728ed991e..90026578f9 100644 --- a/plugins/gui/src/OverlayRenderer.cpp +++ b/plugins/gui/src/OverlayRenderer.cpp @@ -159,6 +159,8 @@ void OverlayRenderer::release(void) { this->m_font_ptr.reset(); this->m_parameter_ptr = nullptr; + this->m_speed_parameter_ptr = nullptr; + this->m_time_parameter_ptr = nullptr; } @@ -179,6 +181,8 @@ bool OverlayRenderer::onToggleMode(param::ParamSlot& slot) { slot.ResetDirty(); this->m_font_ptr.reset(); this->m_parameter_ptr = nullptr; + this->m_speed_parameter_ptr = nullptr; + this->m_time_parameter_ptr = nullptr; this->DeleteAllTextures(); this->m_texture_id = 0; @@ -274,54 +278,75 @@ bool OverlayRenderer::onParameterName(param::ParamSlot& slot) { if (parameter_name.IsEmpty()) { return false; } - auto parameter_ptr = this->GetCoreInstance()->FindParameter(parameter_name, false, false); - if (parameter_ptr.IsNull()) { + + // Check megamol graph for available parameter: + megamol::core::param::AbstractParam* param_ptr = nullptr; + const megamol::core::MegaMolGraph* megamolgraph_ptr = nullptr; + auto megamolgraph_it = std::find_if(this->frontend_resources.begin(), this->frontend_resources.end(), + [&](megamol::frontend::FrontendResource& dep) { return (dep.getIdentifier() == "MegaMolGraph"); }); + if (megamolgraph_it != this->frontend_resources.end()) { + megamolgraph_ptr = &megamolgraph_it->getResource(); + } + if (megamolgraph_ptr != nullptr) { + param_ptr = megamolgraph_ptr->FindParameter(std::string(parameter_name.PeekBuffer())); + } + // Alternatively, check core instance graph for available parameter: + if (param_ptr == nullptr) { + auto core_parameter_ptr = this->GetCoreInstance()->FindParameter(parameter_name, false, false); + if (!core_parameter_ptr.IsNull()) { + param_ptr = core_parameter_ptr.DynamicCast(); + } + } + if (param_ptr == nullptr) { megamol::core::utility::log::Log::DefaultLog.WriteError( "Unable to find parameter by name. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); return false; } + bool found_valid_param_type = false; if (&slot == &this->paramTimeParameter) { - if (parameter_ptr.DynamicCast() != nullptr) { + if (dynamic_cast(param_ptr) != nullptr) { found_valid_param_type = true; } this->m_time_parameter_ptr = nullptr; if (found_valid_param_type) { - this->m_time_parameter_ptr = parameter_ptr; + this->m_time_parameter_ptr = param_ptr; } else { megamol::core::utility::log::Log::DefaultLog.WriteError( - "No valid parameter type. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + "Parameter type is not supported, only: Float. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); } } else if (&slot == &this->paramSpeedParameter) { - if (parameter_ptr.DynamicCast() != nullptr) { + if (dynamic_cast(param_ptr) != nullptr) { found_valid_param_type = true; } this->m_speed_parameter_ptr = nullptr; if (found_valid_param_type) { - this->m_speed_parameter_ptr = parameter_ptr; + this->m_speed_parameter_ptr = param_ptr; } else { megamol::core::utility::log::Log::DefaultLog.WriteError( - "No valid parameter type. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + "Parameter type is not supported, only: Float. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); } } else if (&slot == &this->paramParameterName) { - if (parameter_ptr.DynamicCast() != nullptr) { + if (dynamic_cast(param_ptr) != nullptr) { found_valid_param_type = true; - } else if (parameter_ptr.DynamicCast() != nullptr) { + } else if (dynamic_cast(param_ptr) != nullptr) { found_valid_param_type = true; - } else if (parameter_ptr.DynamicCast() != nullptr) { + } else if (dynamic_cast(param_ptr) != nullptr) { found_valid_param_type = true; - } else if (parameter_ptr.DynamicCast() != nullptr) { + } else if (dynamic_cast(param_ptr) != nullptr) { found_valid_param_type = true; - } else if (parameter_ptr.DynamicCast() != nullptr) { + } else if (dynamic_cast(param_ptr) != nullptr) { found_valid_param_type = true; } this->m_parameter_ptr = nullptr; if (found_valid_param_type) { - this->m_parameter_ptr = parameter_ptr; + this->m_parameter_ptr = param_ptr; } else { megamol::core::utility::log::Log::DefaultLog.WriteError( - "No valid parameter type. [%s, %s, line %d]\n", __FILE__, __FUNCTION__, __LINE__); + "Parameter type is not supported, only: Float, Int, Vector2f, Vector3f and Vector4f. [%s, %s, line " + "%d]\n", + __FILE__, __FUNCTION__, __LINE__); } } @@ -452,12 +477,16 @@ bool OverlayRenderer::Render(view::CallRender3D_2& call) { float ultra_fast_speed = this->paramUltraFastSpeed.Param()->Value(); float current_speed = 0.0f; - if (auto* float_param = this->m_speed_parameter_ptr.DynamicCast()) { - current_speed = float_param->Value(); + if (this->m_speed_parameter_ptr != nullptr) { + if (auto* float_param = dynamic_cast(this->m_speed_parameter_ptr)) { + current_speed = float_param->Value(); + } } float current_anim_time = 0.0f; - if (auto* float_param = this->m_time_parameter_ptr.DynamicCast()) { - current_anim_time = float_param->Value(); + if (this->m_time_parameter_ptr != nullptr) { + if (auto* float_param = dynamic_cast(this->m_time_parameter_ptr)) { + current_anim_time = float_param->Value(); + } } float delta_time = current_anim_time - this->m_state.current_anim_time; this->m_state.current_anim_time = current_anim_time; @@ -509,33 +538,35 @@ bool OverlayRenderer::Render(view::CallRender3D_2& call) { std::string sufix = std::string(param_sufix.PeekBuffer()); std::string text(""); - if (auto* float_param = this->m_parameter_ptr.DynamicCast()) { - auto value = float_param->Value(); - std::stringstream stream; - stream << std::fixed << std::setprecision(8) << " " << value << " "; - text = prefix + stream.str() + sufix; - } else if (auto* int_param = this->m_parameter_ptr.DynamicCast()) { - auto value = int_param->Value(); - std::stringstream stream; - stream << " " << value << " "; - text = prefix + stream.str() + sufix; - } else if (auto* vec2_param = this->m_parameter_ptr.DynamicCast()) { - auto value = vec2_param->Value(); - std::stringstream stream; - stream << std::fixed << std::setprecision(8) << " (" << value.X() << ", " << value.Y() << ") "; - text = prefix + stream.str() + sufix; - } else if (auto* vec3_param = this->m_parameter_ptr.DynamicCast()) { - auto value = vec3_param->Value(); - std::stringstream stream; - stream << std::fixed << std::setprecision(8) << " (" << value.X() << ", " << value.Y() << ", " << value.Z() - << ") "; - text = prefix + stream.str() + sufix; - } else if (auto* vec4_param = this->m_parameter_ptr.DynamicCast()) { - auto value = vec4_param->Value(); - std::stringstream stream; - stream << std::fixed << std::setprecision(8) << " (" << value.X() << ", " << value.Y() << ", " << value.Z() - << ", " << value.W() << ") "; - text = prefix + stream.str() + sufix; + if (this->m_parameter_ptr != nullptr) { + if (auto* float_param = dynamic_cast(this->m_parameter_ptr)) { + auto value = float_param->Value(); + std::stringstream stream; + stream << std::fixed << std::setprecision(8) << " " << value << " "; + text = prefix + stream.str() + sufix; + } else if (auto* int_param = dynamic_cast(this->m_parameter_ptr)) { + auto value = int_param->Value(); + std::stringstream stream; + stream << " " << value << " "; + text = prefix + stream.str() + sufix; + } else if (auto* vec2_param = dynamic_cast(this->m_parameter_ptr)) { + auto value = vec2_param->Value(); + std::stringstream stream; + stream << std::fixed << std::setprecision(8) << " (" << value.X() << ", " << value.Y() << ") "; + text = prefix + stream.str() + sufix; + } else if (auto* vec3_param = dynamic_cast(this->m_parameter_ptr)) { + auto value = vec3_param->Value(); + std::stringstream stream; + stream << std::fixed << std::setprecision(8) << " (" << value.X() << ", " << value.Y() << ", " + << value.Z() << ") "; + text = prefix + stream.str() + sufix; + } else if (auto* vec4_param = dynamic_cast(this->m_parameter_ptr)) { + auto value = vec4_param->Value(); + std::stringstream stream; + stream << std::fixed << std::setprecision(8) << " (" << value.X() << ", " << value.Y() << ", " + << value.Z() << ", " << value.W() << ") "; + text = prefix + stream.str() + sufix; + } } if (text.empty()) { // megamol::core::utility::log::Log::DefaultLog.WriteError( diff --git a/plugins/gui/src/OverlayRenderer.h b/plugins/gui/src/OverlayRenderer.h index f10c64f6d6..fe4d8b0aad 100644 --- a/plugins/gui/src/OverlayRenderer.h +++ b/plugins/gui/src/OverlayRenderer.h @@ -11,6 +11,7 @@ #include "mmcore/CallerSlot.h" #include "mmcore/CoreInstance.h" +#include "mmcore/MegaMolGraph.h" #include "mmcore/param/BoolParam.h" #include "mmcore/param/ColorParam.h" #include "mmcore/param/EnumParam.h" @@ -43,6 +44,10 @@ namespace gui { class OverlayRenderer : public megamol::core::view::RendererModule, megamol::core::view::RenderUtils { public: + virtual std::vector requested_lifetime_resources() { + return {"IOpenGL_Context", "MegaMolGraph"}; + } + /** * Answer the name of this module. * @@ -177,12 +182,12 @@ namespace gui { glm::vec2 m_viewport; Rectangle m_current_rectangle; // Parameter Mode - vislib::SmartPtr m_parameter_ptr; + megamol::core::param::AbstractParam* m_parameter_ptr; // TranspCtrl Icons std::array m_transpctrl_icons; TranspCtrlIconState m_state; - vislib::SmartPtr m_speed_parameter_ptr; - vislib::SmartPtr m_time_parameter_ptr; + megamol::core::param::AbstractParam* m_speed_parameter_ptr; + megamol::core::param::AbstractParam* m_time_parameter_ptr; /********************************************************************** * functions From cc6fa079e585332b3f1b9883f3b8e455de413d5f Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Tue, 16 Feb 2021 12:54:31 +0100 Subject: [PATCH 11/19] screenshooter update --- docs/devguide/devguide.md | 4 +-- docs/manual.md | 70 +++++++++++++++++++++++++----------- docs/pics/screenshooter.png | Bin 86594 -> 25785 bytes 3 files changed, 50 insertions(+), 24 deletions(-) diff --git a/docs/devguide/devguide.md b/docs/devguide/devguide.md index 754598612a..96c82215a8 100644 --- a/docs/devguide/devguide.md +++ b/docs/devguide/devguide.md @@ -26,10 +26,8 @@ This guide is intended to give MegaMol developers a useful insight into the inte - [GUI Parameter Widgets](#gui-parameter-widgets) @@ -39,7 +37,7 @@ This guide is intended to give MegaMol developers a useful insight into the inte ----- ## Create new Plugin -***UPDATE required*** + ### Add own plugin using the template 1. Copy the template folder `../megamol/plugins/template`. diff --git a/docs/manual.md b/docs/manual.md index 6a12f37343..1d876c8595 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -25,9 +25,14 @@ - [View Interaction](#view-interaction) - [Project Files](#project-files) - [Making High-Resolution Screenshots](#making-high-resolution-screenshots) + - [GUI](#gui) + - [Project File](#project-file) + - [Framebuffer Size](#framebuffer-size) + - [ScreenShooter Module](#screenshooter-module) - [Making Simple Videos](#making-simple-videos) - [Reproducibility](#reproducibility) - + The following command line arguments are available: @@ -166,7 +171,7 @@ The following command line arguments are available: ### Configuration File After successfully compiling and installing MegaMol, you should have all executable files inside your `bin` directory (default: `../megamol/build/install/bin`). - + In the `bin` directory, you can find the default configuration file `megamolconfig.lua`: ```lua @@ -239,8 +244,7 @@ The *Add...Dir* commands set the paths for the respective resources. Since we switched to static linking of plugin libraries into the MegaMol binary, the configuration of `mmPluginLoaderInfo` is ***DEPRECATED*** and no longer required. - + +Some useful controls assuming the *arcball* option is set to **on**: -Some useful controls: - Hitting *Home* (aka *Pos1*) is associated with the button *resetView*. This function resets the view to default. - Hold the *Left Mouse Button* and move your mouse to rotate the view around the look-at point. The look-at point initially is placed in the center of the bounding box of the data set. @@ -550,26 +555,53 @@ It can be opened via the menu `Windows / Configurator`. You can either edit the currently running MegaMol graph (which might be empty) or you can create a new project starting a module graph by adding the main view module `View3D_2`. A detailed description of the configurator can be found in the readme file of the [GUI plugin](../plugins/gui#configurator). - ----- ## Making High-Resolution Screenshots +### GUI + The GUI menu option `Screenshot` (hotkey `F2`) provides a basic screenshot functionality using the current viewport size. If screenshots are taken consecutively, the given file name is prepended by an incrementing suffix. This way, no new file name has to be set after each screenshot. - **module name** of your view module in the corresponding variable `::screenshooter::view` (e.g. to `::View3D_2_1`). +When making single screenshots, set the option `makeAnim` in the group `::screenshooter::anim` to `disabled`, as shown in the figure. Ignore the remaining options in that group. These options will be explained in section [Making Simple Videos](#making-simple-videos), as they are used to produce videos. @@ -587,8 +619,6 @@ Hit the button trigger to have MegaMol create the requested screenshot. ![ScreenShooter](pics/screenshooter.png) ---> - ----- @@ -623,14 +653,13 @@ It will need to wait if the correct data is not available, yet, which can reduce --> - +The currently supported OSPRay versions are **2.4** and **2.5**. +*Installing the precompiled binaries is not sufficient!* +In order to get all dependencies installed at once, we strongly recommend to build [OSPRay](https://www.ospray.org/downloads.html) following the **CMake Superbuild** instructions. +The current dependencies are in detail: +- [rekcommon](https://github.com/ospray/rkcommon) +- [openvkl](https://www.openvkl.org/) +- [ISPC](https://ispc.github.io/) +- [TBB](https://www.threadingbuildingblocks.org/), [oneTBB](https://github.com/oneapi-src/oneTBB) +- [Embree](https://embree.github.io/) + +- Step 1: **OSPRay:** + - Download the source code to a new folder `git clone https://github.com/ospray/ospray.git ospray` and configure OSPRay with CMake using the CMake file located in `..scripts/superbuild`. + - In order to speed up the build process, uncheck the option `BUILD_EMBREE_FROM_SOURCE` since the binary version of Embree is sufficient. + - Build OSPRay following further instructions for the CMake Superbuild. + +- Step 2: **MegaMol:** + - Make sure you enable the plugin in CMake by checking the option `BUILD_OSPRAY_PLUGIN_PLUGIN`. + Either use `-DBUILD_OSPRAY_PLUGIN_PLUGIN` as configuration argument or use the graphical user interface `ccmake`. + - If OSPRay is not automatically found during configuration of MegaMol, set the appropriate `ospray_DIR`. + Hint: The CMake configuration files of OSPRay are usually found in a subdirectory of the install directory: `../build/install/ospray/lib/cmake/...` + - CMake subsequently asks for the build files of the following dependencies: + - rkcommon: `../build/install/rkcommon/lib/cmake/...` + - TBB root directory: `../build/install/tbb` + - Build and install MegaMol. + - In order to test OSPRay, start MegaMol using the example project file `..build/install/examples/testspheres_ospray_megamol.lua`. ## Modules diff --git a/plugins/OSPRay_plugin/ospray_configurator.png b/plugins/OSPRay_plugin/ospray_configurator.png index 942b6231131ac6b483d4e690573aba77ba2b22c0..540f0197f36f6c8cec635d0fbc2c73dc60bb98e6 100644 GIT binary patch literal 89721 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 literal 41378 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 From 98233ffb44343b46e627f2b3af80dd7fe378a569 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Wed, 17 Feb 2021 20:25:52 +0100 Subject: [PATCH 16/19] docu --- plugins/OSPRay_plugin/Readme.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/plugins/OSPRay_plugin/Readme.md b/plugins/OSPRay_plugin/Readme.md index 8d099bf88b..c2419c9e48 100644 --- a/plugins/OSPRay_plugin/Readme.md +++ b/plugins/OSPRay_plugin/Readme.md @@ -16,12 +16,7 @@ The figure below shows a common OSPRay module call graph in MegaMol. The currently supported OSPRay versions are **2.4** and **2.5**. *Installing the precompiled binaries is not sufficient!* In order to get all dependencies installed at once, we strongly recommend to build [OSPRay](https://www.ospray.org/downloads.html) following the **CMake Superbuild** instructions. -The current dependencies are in detail: -- [rekcommon](https://github.com/ospray/rkcommon) -- [openvkl](https://www.openvkl.org/) -- [ISPC](https://ispc.github.io/) -- [TBB](https://www.threadingbuildingblocks.org/), [oneTBB](https://github.com/oneapi-src/oneTBB) -- [Embree](https://embree.github.io/) +The current dependencies are [rekcommon](https://github.com/ospray/rkcommon), [openvkl](https://www.openvkl.org/), [ISPC](https://ispc.github.io/), [TBB](https://www.threadingbuildingblocks.org/) ([oneTBB](https://github.com/oneapi-src/oneTBB)), and [Embree](https://embree.github.io/). - Step 1: **OSPRay:** - Download the source code to a new folder `git clone https://github.com/ospray/ospray.git ospray` and configure OSPRay with CMake using the CMake file located in `..scripts/superbuild`. From ca155e98ef9412d1ef708d31e8138ad1d7d59ff3 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Wed, 17 Feb 2021 20:28:26 +0100 Subject: [PATCH 17/19] docu --- plugins/OSPRay_plugin/Readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/OSPRay_plugin/Readme.md b/plugins/OSPRay_plugin/Readme.md index c2419c9e48..d90a83df2e 100644 --- a/plugins/OSPRay_plugin/Readme.md +++ b/plugins/OSPRay_plugin/Readme.md @@ -14,19 +14,19 @@ The figure below shows a common OSPRay module call graph in MegaMol. [OSPRay](http://ospray.org) is not included in this package, however it is required for this plugin to be build. The currently supported OSPRay versions are **2.4** and **2.5**. -*Installing the precompiled binaries is not sufficient!* In order to get all dependencies installed at once, we strongly recommend to build [OSPRay](https://www.ospray.org/downloads.html) following the **CMake Superbuild** instructions. -The current dependencies are [rekcommon](https://github.com/ospray/rkcommon), [openvkl](https://www.openvkl.org/), [ISPC](https://ispc.github.io/), [TBB](https://www.threadingbuildingblocks.org/) ([oneTBB](https://github.com/oneapi-src/oneTBB)), and [Embree](https://embree.github.io/). +The current dependencies are: [rekcommon](https://github.com/ospray/rkcommon), [openvkl](https://www.openvkl.org/), [ISPC](https://ispc.github.io/), [TBB](https://www.threadingbuildingblocks.org/) ([oneTBB](https://github.com/oneapi-src/oneTBB)), and [Embree](https://embree.github.io/). +*Installing the precompiled binaries is not sufficient!* - Step 1: **OSPRay:** - - Download the source code to a new folder `git clone https://github.com/ospray/ospray.git ospray` and configure OSPRay with CMake using the CMake file located in `..scripts/superbuild`. + - Download the source code to a new folder `git clone https://github.com/ospray/ospray.git ospray` and configure OSPRay with CMake using the CMake file located in `../scripts/superbuild`. - In order to speed up the build process, uncheck the option `BUILD_EMBREE_FROM_SOURCE` since the binary version of Embree is sufficient. - Build OSPRay following further instructions for the CMake Superbuild. - Step 2: **MegaMol:** - Make sure you enable the plugin in CMake by checking the option `BUILD_OSPRAY_PLUGIN_PLUGIN`. Either use `-DBUILD_OSPRAY_PLUGIN_PLUGIN` as configuration argument or use the graphical user interface `ccmake`. - - If OSPRay is not automatically found during configuration of MegaMol, set the appropriate `ospray_DIR`. + - If OSPRay is not automatically found during configuration of MegaMol, set the appropriate `ospray_DIR`. Hint: The CMake configuration files of OSPRay are usually found in a subdirectory of the install directory: `../build/install/ospray/lib/cmake/...` - CMake subsequently asks for the build files of the following dependencies: - rkcommon: `../build/install/rkcommon/lib/cmake/...` From fb11349f55d18fd8ee3274c3d7e91f94d7ae8989 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Thu, 18 Feb 2021 10:08:44 +0100 Subject: [PATCH 18/19] ospray docu: comment on linux --- plugins/OSPRay_plugin/Readme.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugins/OSPRay_plugin/Readme.md b/plugins/OSPRay_plugin/Readme.md index d90a83df2e..ac3066df36 100644 --- a/plugins/OSPRay_plugin/Readme.md +++ b/plugins/OSPRay_plugin/Readme.md @@ -27,12 +27,13 @@ The current dependencies are: [rekcommon](https://github.com/ospray/rkcommon), [ - Make sure you enable the plugin in CMake by checking the option `BUILD_OSPRAY_PLUGIN_PLUGIN`. Either use `-DBUILD_OSPRAY_PLUGIN_PLUGIN` as configuration argument or use the graphical user interface `ccmake`. - If OSPRay is not automatically found during configuration of MegaMol, set the appropriate `ospray_DIR`. - Hint: The CMake configuration files of OSPRay are usually found in a subdirectory of the install directory: `../build/install/ospray/lib/cmake/...` + *Hint:* The CMake configuration files of OSPRay are usually found in a subdirectory of the install directory: `../build/install/ospray/lib/cmake/...` - CMake subsequently asks for the build files of the following dependencies: - rkcommon: `../build/install/rkcommon/lib/cmake/...` - TBB root directory: `../build/install/tbb` - Build and install MegaMol. - - In order to test OSPRay, start MegaMol using the example project file `..build/install/examples/testspheres_ospray_megamol.lua`. + - In order to test OSPRay, start MegaMol using the example project file `..build/install/examples/testspheres_ospray_megamol.lua`. + *Note:* On Linux, you have to run MegaMol using the `megamol.sh` script in order to additionally set the required path to the shared libraries of OSPRay. ## Modules From b79ed7a809e414be8c72039a648b703557a46ef9 Mon Sep 17 00:00:00 2001 From: Matthias Braun Date: Thu, 18 Feb 2021 12:06:56 +0100 Subject: [PATCH 19/19] ospray linux compile fix --- plugins/OSPRay_plugin/src/AbstractOSPRayRenderer.cpp | 2 +- plugins/OSPRay_plugin/src/OSPRayRenderer.cpp | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/OSPRay_plugin/src/AbstractOSPRayRenderer.cpp b/plugins/OSPRay_plugin/src/AbstractOSPRayRenderer.cpp index bb282f7152..bf99bee475 100644 --- a/plugins/OSPRay_plugin/src/AbstractOSPRayRenderer.cpp +++ b/plugins/OSPRay_plugin/src/AbstractOSPRayRenderer.cpp @@ -1052,7 +1052,7 @@ namespace ospray { auto count = mesh.second.indices.byte_size / mesh::MeshDataAccessCollection::getByteSize(mesh.second.indices.type); - unsigned long long stride = 3 * sizeof(unsigned int); + size_t stride = 3 * sizeof(unsigned int); auto osp_type = OSP_VEC3UI; if (mesh_type == mesh::MeshDataAccessCollection::QUADS) { diff --git a/plugins/OSPRay_plugin/src/OSPRayRenderer.cpp b/plugins/OSPRay_plugin/src/OSPRayRenderer.cpp index 34675df4e9..0a16cbe445 100644 --- a/plugins/OSPRay_plugin/src/OSPRayRenderer.cpp +++ b/plugins/OSPRay_plugin/src/OSPRayRenderer.cpp @@ -23,7 +23,6 @@ #include #include -#include using namespace megamol::ospray;