|
|
@@ -1,4 +1,4 @@
|
|
|
-/*
|
|
|
+/*
|
|
|
* This source file is part of RmlUi, the HTML/CSS Interface Middleware
|
|
|
*
|
|
|
* For the latest information, see http://github.com/mikke89/RmlUi
|
|
|
@@ -26,13 +26,14 @@
|
|
|
*
|
|
|
*/
|
|
|
|
|
|
+#include "../Common/TestsInterface.h"
|
|
|
#include "../Common/TestsShell.h"
|
|
|
-#include <RmlUi/Core/Core.h>
|
|
|
#include <RmlUi/Core/Context.h>
|
|
|
+#include <RmlUi/Core/Core.h>
|
|
|
#include <RmlUi/Core/Element.h>
|
|
|
#include <RmlUi/Core/ElementDocument.h>
|
|
|
-#include <doctest.h>
|
|
|
#include <algorithm>
|
|
|
+#include <doctest.h>
|
|
|
|
|
|
using namespace Rml;
|
|
|
|
|
|
@@ -122,3 +123,59 @@ TEST_CASE("core.texture_source_list")
|
|
|
|
|
|
TestsShell::ShutdownShell();
|
|
|
}
|
|
|
+
|
|
|
+TEST_CASE("core.release_textures")
|
|
|
+{
|
|
|
+ TestsRenderInterface* render_interface = TestsShell::GetTestsRenderInterface();
|
|
|
+ // This test only works with the dummy renderer.
|
|
|
+ if (!render_interface)
|
|
|
+ return;
|
|
|
+
|
|
|
+ render_interface->ResetCounters();
|
|
|
+ const auto& counters = render_interface->GetCounters();
|
|
|
+
|
|
|
+ Context* context = TestsShell::GetContext();
|
|
|
+ REQUIRE(context);
|
|
|
+
|
|
|
+ ElementDocument* document = context->LoadDocument("assets/demo.rml");
|
|
|
+ document->Show();
|
|
|
+ TestsShell::RenderLoop();
|
|
|
+
|
|
|
+ Element* element = document->GetElementById("content");
|
|
|
+
|
|
|
+ SUBCASE("ReleaseTextures")
|
|
|
+ {
|
|
|
+ // Release all textures and verify that the render interface received the release call.
|
|
|
+ Rml::ReleaseTextures();
|
|
|
+ CHECK(counters.generate_texture + counters.load_texture == counters.release_texture);
|
|
|
+
|
|
|
+ // By doing a new context Update+Render the textures should be loaded again.
|
|
|
+ TestsShell::RenderLoop();
|
|
|
+ CHECK(counters.generate_texture + counters.load_texture > counters.release_texture);
|
|
|
+ }
|
|
|
+
|
|
|
+ SUBCASE("FontGlyphCache")
|
|
|
+ {
|
|
|
+ const auto counter_generate_before = counters.generate_texture;
|
|
|
+ const auto counter_release_before = counters.release_texture;
|
|
|
+
|
|
|
+ // Verify that ASCII characters are cached during the first use of the font. Then the font texture should not be regenerated when adding ASCII
|
|
|
+ // characters not previously shown.
|
|
|
+ element->SetInnerRML("Abc!%&()");
|
|
|
+ TestsShell::RenderLoop();
|
|
|
+ CHECK(counters.generate_texture == counter_generate_before);
|
|
|
+
|
|
|
+ // However, when we display a non-ASCII character not part of the initial cache, the font texture needs to be regenerated.
|
|
|
+ element->SetInnerRML(reinterpret_cast<const char*>(u8"π"));
|
|
|
+ TestsShell::RenderLoop();
|
|
|
+ CHECK(counters.generate_texture == counter_generate_before + 1);
|
|
|
+ CHECK(counters.release_texture == counter_release_before + 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ document->Close();
|
|
|
+
|
|
|
+ TestsShell::ShutdownShell();
|
|
|
+
|
|
|
+ // Finally, verify that all generated and loaded textures are released during shutdown.
|
|
|
+ CHECK(counters.generate_texture + counters.load_texture == counters.release_texture);
|
|
|
+}
|