From eccc5bca3e76073523e63eb8f59c296fecdb938e Mon Sep 17 00:00:00 2001
From: Jeff Young <jeff@rokeby.ie>
Date: Tue, 24 Dec 2024 21:00:16 +0000
Subject: [PATCH] Use render cache (when available) for 3D viewer.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/18672
---
 3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp b/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp
index 08e2e19952..946206bd1d 100644
--- a/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp
+++ b/3d-viewer/3d_canvas/create_3Dgraphic_brd_items.cpp
@@ -100,6 +100,7 @@ void BOARD_ADAPTER::addText( const EDA_TEXT* aText, CONTAINER_2D_BASE* aContaine
     TEXT_ATTRIBUTES            attrs = aText->GetAttributes();
     float                      penWidth_3DU = TO_3DU( aText->GetEffectiveTextPenWidth() );
     KIFONT::FONT*              font = aText->GetFont();
+    wxString                   shownText = aText->GetShownText( true );
 
     if( !font )
         font = KIFONT::FONT::GetFont( wxEmptyString, aText->IsBold(), aText->IsItalic() );
@@ -134,8 +135,15 @@ void BOARD_ADAPTER::addText( const EDA_TEXT* aText, CONTAINER_2D_BASE* aContaine
 
         attrs.m_Angle = aText->GetDrawRotation();
 
-        font->Draw( &callback_gal, aText->GetShownText( true ), aText->GetDrawPos(), attrs,
-                    aOwner->GetFontMetrics() );
+        if( auto* cache = aText->GetRenderCache( font, shownText ) )
+        {
+            callback_gal.DrawGlyphs( *cache );
+        }
+        else
+        {
+            font->Draw( &callback_gal, shownText, aText->GetDrawPos(), attrs,
+                        aOwner->GetFontMetrics() );
+        }
     }
 }