@@ -199,13 +199,22 @@ void CUIFrameLineWnd::DrawElements() const
199199 draw_rect (lt, rb, tex_rect.lt , tex_rect.rb , m_texture_color, ts);
200200 };
201201
202+ bool one_shader = false ;
203+ if (m_shader[flFirst] == m_shader[flBack] && m_shader[flBack] == m_shader[flSecond])
204+ one_shader = true ;
205+
202206 // first
203- GEnv.UIRender ->StartPrimitive (6 , IUIRender::ptTriList, UI ().m_currentPointType );
207+ const auto first_tiles = one_shader ? total_tiles + 2 : 1 ;
208+ GEnv.UIRender ->StartPrimitive (6 * first_tiles, IUIRender::ptTriList, UI ().m_currentPointType );
204209 draw_tile (first_len, m_tex_rect[flFirst], flFirst);
205- GEnv.UIRender ->FlushPrimitive ();
210+
211+ if (!one_shader)
212+ {
213+ GEnv.UIRender ->FlushPrimitive ();
214+ GEnv.UIRender ->StartPrimitive (6 * total_tiles, IUIRender::ptTriList, UI ().m_currentPointType );
215+ }
206216
207217 // back
208- GEnv.UIRender ->StartPrimitive (6 * total_tiles, IUIRender::ptTriList, UI ().m_currentPointType );
209218 for (u32 i = 0 ; i < back_tiles; ++i)
210219 {
211220 draw_tile (back_len, m_tex_rect[flBack], flBack);
@@ -221,10 +230,14 @@ void CUIFrameLineWnd::DrawElements() const
221230
222231 draw_tile (back_len * back_remainder, remainder_tc, flBack);
223232 }
224- GEnv.UIRender ->FlushPrimitive ();
233+
234+ if (!one_shader)
235+ {
236+ GEnv.UIRender ->FlushPrimitive ();
237+ GEnv.UIRender ->StartPrimitive (6 , IUIRender::ptTriList, UI ().m_currentPointType );
238+ }
225239
226240 // second
227- GEnv.UIRender ->StartPrimitive (6 , IUIRender::ptTriList, UI ().m_currentPointType );
228241 draw_tile (second_len, m_tex_rect[flSecond], flSecond);
229242 GEnv.UIRender ->FlushPrimitive ();
230243}
0 commit comments