diff --git a/imgui-SFML.cpp b/imgui-SFML.cpp index 5ef1556..aaf1482 100644 --- a/imgui-SFML.cpp +++ b/imgui-SFML.cpp @@ -239,15 +239,15 @@ WindowContext* s_currWindowCtx = NULL; namespace ImGui { namespace SFML { -void Init(sf::RenderWindow& window, bool loadDefaultFont) { - Init(window, window, loadDefaultFont); +bool Init(sf::RenderWindow& window, bool loadDefaultFont) { + return Init(window, window, loadDefaultFont); } -void Init(sf::Window& window, sf::RenderTarget& target, bool loadDefaultFont) { - Init(window, static_cast(target.getSize()), loadDefaultFont); +bool Init(sf::Window& window, sf::RenderTarget& target, bool loadDefaultFont) { + return Init(window, static_cast(target.getSize()), loadDefaultFont); } -void Init(sf::Window& window, const sf::Vector2f& displaySize, bool loadDefaultFont) { +bool Init(sf::Window& window, const sf::Vector2f& displaySize, bool loadDefaultFont) { #if __cplusplus < 201103L // runtime assert when using earlier than C++11 as no // static_assert support assert(sizeof(GLuint) <= sizeof(ImTextureID)); // ImTextureID is not large enough to fit @@ -314,8 +314,10 @@ void Init(sf::Window& window, const sf::Vector2f& displaySize, bool loadDefaultF if (loadDefaultFont) { // this will load default font automatically // No need to call AddDefaultFont - UpdateFontTexture(); + return UpdateFontTexture(); } + + return true; } void SetCurrentWindow(const sf::Window& window) { @@ -572,7 +574,7 @@ void Shutdown() { s_windowContexts.clear(); } -void UpdateFontTexture() { +bool UpdateFontTexture() { assert(s_currWindowCtx); ImGuiIO& io = ImGui::GetIO(); @@ -582,11 +584,16 @@ void UpdateFontTexture() { io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); sf::Texture& texture = *s_currWindowCtx->fontTexture; - texture.create(width, height); + if (!texture.create(width, height)) { + return false; + } + texture.update(pixels); ImTextureID texID = convertGLTextureHandleToImTextureID(texture.getNativeHandle()); io.Fonts->SetTexID(texID); + + return true; } sf::Texture& GetFontTexture() { diff --git a/imgui-SFML.h b/imgui-SFML.h index 79b7564..60ad7e8 100644 --- a/imgui-SFML.h +++ b/imgui-SFML.h @@ -9,6 +9,12 @@ #include "imgui-SFML_export.h" +#if __cplusplus >= 201703L // C++17 and above +#define IMGUI_SFML_NODISCARD [[nodiscard]] +#else +#define IMGUI_SFML_NODISCARD +#endif + namespace sf { class Event; class RenderTarget; @@ -21,10 +27,12 @@ class Window; namespace ImGui { namespace SFML { -IMGUI_SFML_API void Init(sf::RenderWindow& window, bool loadDefaultFont = true); -IMGUI_SFML_API void Init(sf::Window& window, sf::RenderTarget& target, bool loadDefaultFont = true); -IMGUI_SFML_API void Init(sf::Window& window, const sf::Vector2f& displaySize, - bool loadDefaultFont = true); +IMGUI_SFML_NODISCARD IMGUI_SFML_API bool Init(sf::RenderWindow& window, + bool loadDefaultFont = true); +IMGUI_SFML_NODISCARD IMGUI_SFML_API bool Init(sf::Window& window, sf::RenderTarget& target, + bool loadDefaultFont = true); +IMGUI_SFML_NODISCARD IMGUI_SFML_API bool Init(sf::Window& window, const sf::Vector2f& displaySize, + bool loadDefaultFont = true); IMGUI_SFML_API void SetCurrentWindow(const sf::Window& window); IMGUI_SFML_API void ProcessEvent(const sf::Event& event); // DEPRECATED: use (window, @@ -44,7 +52,7 @@ IMGUI_SFML_API void Shutdown(const sf::Window& window); // Shuts down all ImGui contexts IMGUI_SFML_API void Shutdown(); -IMGUI_SFML_API void UpdateFontTexture(); +IMGUI_SFML_NODISCARD IMGUI_SFML_API bool UpdateFontTexture(); IMGUI_SFML_API sf::Texture& GetFontTexture(); // joystick functions