diff --git a/assets/main.rml b/assets/main.rml index 94a43ac..fa19728 100644 --- a/assets/main.rml +++ b/assets/main.rml @@ -5,5 +5,7 @@

Hello from RmlUi

+
+
diff --git a/readme.md b/readme.md index be0a0a3..2af3ca0 100644 --- a/readme.md +++ b/readme.md @@ -8,7 +8,7 @@ I originally began creating this for a Game Jam project where I got the basic re *Rendering features (from the RmlUi render interfface documentation https://mikke89.github.io/RmlUiDoc/pages/cpp_manual/interfaces/render.html#feature-table):* - [x] Basic rendering - [ ] Clip Mask -- [ ] Transforms +- [x] Transforms - [ ] Layers - [ ] Render textures - [ ] Mask images diff --git a/src/backend/RaylibRenderInterface.cpp b/src/backend/RaylibRenderInterface.cpp index affb2bb..90b5c7c 100644 --- a/src/backend/RaylibRenderInterface.cpp +++ b/src/backend/RaylibRenderInterface.cpp @@ -39,6 +39,10 @@ void RaylibRenderInterface::RenderGeometry(Rml::CompiledGeometryHandle handle, rlPushMatrix(); rlTranslatef(translation.x, translation.y, 0.0f); + if (has_transform) { + rlMultMatrixf(current_transform.data()); + } + rlBegin(RL_TRIANGLES); for (size_t i = 0; i + 2 < geo->indices.size(); i += 3) { for (int j = 0; j < 3; ++j) { @@ -113,4 +117,13 @@ void RaylibRenderInterface::SetScissorRegion(Rml::Rectanglei region) { void RaylibRenderInterface::ApplyScissor() { BeginScissorMode(scissor_region.Left(), scissor_region.Top(), scissor_region.Width(), scissor_region.Height()); -} \ No newline at end of file +} + +void RaylibRenderInterface::SetTransform(const Rml::Matrix4f *transform) { + if (transform) { + has_transform = true; + current_transform = *transform; + } else { + has_transform = false; + } +} diff --git a/src/backend/RaylibRenderInterface.h b/src/backend/RaylibRenderInterface.h index 7253348..45de261 100644 --- a/src/backend/RaylibRenderInterface.h +++ b/src/backend/RaylibRenderInterface.h @@ -30,9 +30,14 @@ public: void EnableScissorRegion(bool enable) override; void SetScissorRegion(Rml::Rectanglei region) override; + void SetTransform(const Rml::Matrix4f *transform) override; + private: void ApplyScissor(); bool scissor_enabled = false; Rml::Rectanglei scissor_region; -}; \ No newline at end of file + + bool has_transform = false; + Rml::Matrix4f current_transform; +}; diff --git a/src/main.cpp b/src/main.cpp index cef6dfc..cd28cee 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -50,6 +50,8 @@ int main() { } CloseWindow(); + Rml::Debugger::Shutdown(); + Rml::Shutdown(); return 0; }