@@ -414,17 +414,29 @@ public void Update(float delta)
414414 /// <summary>
415415 /// 三角形顶点缓冲区
416416 /// </summary>
417- protected readonly SFML . Graphics . VertexArray _triangleVertices = new ( SFML . Graphics . PrimitiveType . Triangles ) ;
417+ protected readonly SFMLVertexBuffer _triangleVertices = new (
418+ 1024 ,
419+ SFML . Graphics . PrimitiveType . Triangles ,
420+ SFML . Graphics . VertexBuffer . UsageSpecifier . Dynamic
421+ ) ;
418422
419423 /// <summary>
420424 /// 无面积线条缓冲区
421425 /// </summary>
422- protected readonly SFML . Graphics . VertexArray _lineVertices = new ( SFML . Graphics . PrimitiveType . Lines ) ;
426+ protected readonly SFMLVertexBuffer _lineVertices = new (
427+ 1024 ,
428+ SFML . Graphics . PrimitiveType . Lines ,
429+ SFML . Graphics . VertexBuffer . UsageSpecifier . Dynamic
430+ ) ;
423431
424432 /// <summary>
425433 /// 有宽度线条缓冲区, 需要通过 <see cref="AddRectLine"/> 添加顶点
426434 /// </summary>
427- protected readonly SFML . Graphics . VertexArray _rectLineVertices = new ( SFML . Graphics . PrimitiveType . Quads ) ;
435+ protected readonly SFMLVertexBuffer _rectLineVertices = new (
436+ 1024 ,
437+ SFML . Graphics . PrimitiveType . Quads ,
438+ SFML . Graphics . VertexBuffer . UsageSpecifier . Dynamic
439+ ) ;
428440
429441 /// <summary>
430442 /// 有半径圆点临时缓存对象
@@ -459,10 +471,10 @@ protected void AddRectLine(SFML.System.Vector2f p1, SFML.System.Vector2f p2, SFM
459471 var t = new SFML . System . Vector2f ( halfWidth * cosTheta , halfWidth * sinTheta ) ;
460472 var v = new SFML . Graphics . Vertex ( ) { Color = color } ;
461473
462- v . Position = p1 + t ; _rectLineVertices . Append ( v ) ;
463- v . Position = p2 + t ; _rectLineVertices . Append ( v ) ;
464- v . Position = p2 - t ; _rectLineVertices . Append ( v ) ;
465- v . Position = p1 - t ; _rectLineVertices . Append ( v ) ;
474+ v . Position = p1 + t ; _rectLineVertices . AddVertex ( v ) ;
475+ v . Position = p2 + t ; _rectLineVertices . AddVertex ( v ) ;
476+ v . Position = p2 - t ; _rectLineVertices . AddVertex ( v ) ;
477+ v . Position = p1 - t ; _rectLineVertices . AddVertex ( v ) ;
466478 }
467479
468480 /// <summary>
@@ -534,16 +546,12 @@ protected void DrawTexture(SFML.Graphics.RenderTarget target, SFML.Graphics.Rend
534546 continue ;
535547 }
536548
537- // 纹理或者混合模式发生变化则立即渲染
549+ // 纹理或者混合模式发生变化则记录状态
538550 var blendMode = slot . Blend ;
539551 states . Texture ??= texture ;
540552 if ( states . BlendMode != blendMode || states . Texture != texture )
541553 {
542- if ( _triangleVertices . VertexCount > 0 )
543- {
544- target . Draw ( _triangleVertices , states ) ;
545- _triangleVertices . Clear ( ) ;
546- }
554+ _triangleVertices . AddStates ( states ) ;
547555 states . BlendMode = blendMode ;
548556 states . Texture = texture ;
549557 }
@@ -561,20 +569,24 @@ protected void DrawTexture(SFML.Graphics.RenderTarget target, SFML.Graphics.Rend
561569 var texW = texture . Size . X ;
562570 var texH = texture . Size . Y ;
563571
564- SFML . Graphics . Vertex vt = new ( ) ;
565- vt . Color . R = ( byte ) ( tintR * 255 ) ;
566- vt . Color . G = ( byte ) ( tintG * 255 ) ;
567- vt . Color . B = ( byte ) ( tintB * 255 ) ;
568- vt . Color . A = ( byte ) ( tintA * 255 ) ;
569-
570- for ( int i = 0 ; i < trianglesLength ; i ++ )
572+ SFML . Graphics . Vertex vt = new ( )
573+ {
574+ Color = new (
575+ ( byte ) ( tintR * 255 ) ,
576+ ( byte ) ( tintG * 255 ) ,
577+ ( byte ) ( tintB * 255 ) ,
578+ ( byte ) ( tintA * 255 )
579+ )
580+ } ;
581+
582+ for ( uint i = 0 ; i < trianglesLength ; i ++ )
571583 {
572584 var index = triangles [ i ] << 1 ;
573585 vt . Position . X = worldVertices [ index ] ;
574586 vt . Position . Y = worldVertices [ index + 1 ] ;
575587 vt . TexCoords . X = uvs [ index ] * texW ;
576588 vt . TexCoords . Y = uvs [ index + 1 ] * texH ;
577- _triangleVertices . Append ( vt ) ;
589+ _triangleVertices . AddVertex ( vt ) ;
578590 }
579591
580592 clipping . ClipEnd ( slot ) ;
@@ -604,23 +616,23 @@ protected void DrawNonTexture(SFML.Graphics.RenderTarget target)
604616
605617 vt . Position . X = _worldVertices [ 0 ] ;
606618 vt . Position . Y = _worldVertices [ 1 ] ;
607- _lineVertices . Append ( vt ) ;
619+ _lineVertices . AddVertex ( vt ) ;
608620
609621 vt . Position . X = _worldVertices [ 2 ] ;
610622 vt . Position . Y = _worldVertices [ 3 ] ;
611- _lineVertices . Append ( vt ) ; _lineVertices . Append ( vt ) ;
623+ _lineVertices . AddVertex ( vt ) ; _lineVertices . AddVertex ( vt ) ;
612624
613625 vt . Position . X = _worldVertices [ 4 ] ;
614626 vt . Position . Y = _worldVertices [ 5 ] ;
615- _lineVertices . Append ( vt ) ; _lineVertices . Append ( vt ) ;
627+ _lineVertices . AddVertex ( vt ) ; _lineVertices . AddVertex ( vt ) ;
616628
617629 vt . Position . X = _worldVertices [ 6 ] ;
618630 vt . Position . Y = _worldVertices [ 7 ] ;
619- _lineVertices . Append ( vt ) ; _lineVertices . Append ( vt ) ;
631+ _lineVertices . AddVertex ( vt ) ; _lineVertices . AddVertex ( vt ) ;
620632
621633 vt . Position . X = _worldVertices [ 0 ] ;
622634 vt . Position . Y = _worldVertices [ 1 ] ;
623- _lineVertices . Append ( vt ) ;
635+ _lineVertices . AddVertex ( vt ) ;
624636 }
625637 }
626638 }
@@ -643,19 +655,19 @@ protected void DrawNonTexture(SFML.Graphics.RenderTarget target)
643655
644656 vt . Position . X = _worldVertices [ idx0 ] ;
645657 vt . Position . Y = _worldVertices [ idx0 + 1 ] ;
646- _lineVertices . Append ( vt ) ;
658+ _lineVertices . AddVertex ( vt ) ;
647659
648660 vt . Position . X = _worldVertices [ idx1 ] ;
649661 vt . Position . Y = _worldVertices [ idx1 + 1 ] ;
650- _lineVertices . Append ( vt ) ; _lineVertices . Append ( vt ) ;
662+ _lineVertices . AddVertex ( vt ) ; _lineVertices . AddVertex ( vt ) ;
651663
652664 vt . Position . X = _worldVertices [ idx2 ] ;
653665 vt . Position . Y = _worldVertices [ idx2 + 1 ] ;
654- _lineVertices . Append ( vt ) ; _lineVertices . Append ( vt ) ;
666+ _lineVertices . AddVertex ( vt ) ; _lineVertices . AddVertex ( vt ) ;
655667
656668 vt . Position . X = _worldVertices [ idx0 ] ;
657669 vt . Position . Y = _worldVertices [ idx0 + 1 ] ;
658- _lineVertices . Append ( vt ) ;
670+ _lineVertices . AddVertex ( vt ) ;
659671 }
660672 }
661673 }
@@ -675,19 +687,19 @@ protected void DrawNonTexture(SFML.Graphics.RenderTarget target)
675687
676688 vt . Position . X = _worldVertices [ 0 ] ;
677689 vt . Position . Y = _worldVertices [ 1 ] ;
678- _lineVertices . Append ( vt ) ;
690+ _lineVertices . AddVertex ( vt ) ;
679691
680692 for ( int i = 2 ; i < hullLength - 1 ; i += 2 )
681693 {
682694 vt . Position . X = _worldVertices [ i ] ;
683695 vt . Position . Y = _worldVertices [ i + 1 ] ;
684- _lineVertices . Append ( vt ) ;
685- _lineVertices . Append ( vt ) ;
696+ _lineVertices . AddVertex ( vt ) ;
697+ _lineVertices . AddVertex ( vt ) ;
686698 }
687699
688700 vt . Position . X = _worldVertices [ 0 ] ;
689701 vt . Position . Y = _worldVertices [ 1 ] ;
690- _lineVertices . Append ( vt ) ;
702+ _lineVertices . AddVertex ( vt ) ;
691703 }
692704 }
693705 }
@@ -718,19 +730,19 @@ protected void DrawNonTexture(SFML.Graphics.RenderTarget target)
718730
719731 vt . Position . X = _worldVertices [ 0 ] ;
720732 vt . Position . Y = _worldVertices [ 1 ] ;
721- _lineVertices . Append ( vt ) ;
733+ _lineVertices . AddVertex ( vt ) ;
722734
723735 for ( int i = 2 ; i < length - 1 ; i += 2 )
724736 {
725737 vt . Position . X = _worldVertices [ i ] ;
726738 vt . Position . Y = _worldVertices [ i + 1 ] ;
727- _lineVertices . Append ( vt ) ;
728- _lineVertices . Append ( vt ) ;
739+ _lineVertices . AddVertex ( vt ) ;
740+ _lineVertices . AddVertex ( vt ) ;
729741 }
730742
731743 vt . Position . X = _worldVertices [ 0 ] ;
732744 vt . Position . Y = _worldVertices [ 1 ] ;
733- _lineVertices . Append ( vt ) ;
745+ _lineVertices . AddVertex ( vt ) ;
734746 }
735747 }
736748 }
@@ -744,23 +756,23 @@ protected void DrawNonTexture(SFML.Graphics.RenderTarget target)
744756
745757 vt . Position . X = x1 ;
746758 vt . Position . Y = y1 ;
747- _lineVertices . Append ( vt ) ;
759+ _lineVertices . AddVertex ( vt ) ;
748760
749761 vt . Position . X = x2 ;
750762 vt . Position . Y = y1 ;
751- _lineVertices . Append ( vt ) ; _lineVertices . Append ( vt ) ;
763+ _lineVertices . AddVertex ( vt ) ; _lineVertices . AddVertex ( vt ) ;
752764
753765 vt . Position . X = x2 ;
754766 vt . Position . Y = y2 ;
755- _lineVertices . Append ( vt ) ; _lineVertices . Append ( vt ) ;
767+ _lineVertices . AddVertex ( vt ) ; _lineVertices . AddVertex ( vt ) ;
756768
757769 vt . Position . X = x1 ;
758770 vt . Position . Y = y2 ;
759- _lineVertices . Append ( vt ) ; _lineVertices . Append ( vt ) ;
771+ _lineVertices . AddVertex ( vt ) ; _lineVertices . AddVertex ( vt ) ;
760772
761773 vt . Position . X = x1 ;
762774 vt . Position . Y = y1 ;
763- _lineVertices . Append ( vt ) ;
775+ _lineVertices . AddVertex ( vt ) ;
764776 }
765777
766778 // 骨骼线放最后画
@@ -937,7 +949,7 @@ public virtual int IterDrawCount
937949 vt . Position . Y = worldVertices [ index + 1 ] ;
938950 vt . TexCoords . X = uvs [ index ] * texW ;
939951 vt . TexCoords . Y = uvs [ index + 1 ] * texH ;
940- _triangleVertices . Append ( vt ) ;
952+ _triangleVertices . AddVertex ( vt ) ;
941953 }
942954
943955 clipping . ClipEnd ( slot ) ;
0 commit comments