From cad96d8131165b223e0357757a54350beceda86b Mon Sep 17 00:00:00 2001 From: Ari Vuollet Date: Sat, 9 Sep 2023 10:46:55 +0300 Subject: [PATCH] _font writereserve --- Source/Engine/Render2D/Render2D.cpp | 66 ++++++++++++++++++++++------- 1 file changed, 50 insertions(+), 16 deletions(-) diff --git a/Source/Engine/Render2D/Render2D.cpp b/Source/Engine/Render2D/Render2D.cpp index 2d91c747f..b7e48a80e 100644 --- a/Source/Engine/Render2D/Render2D.cpp +++ b/Source/Engine/Render2D/Render2D.cpp @@ -283,6 +283,22 @@ FORCE_INLINE Render2DVertex MakeVertex(const Float2& point, const Float2& uv, co }; } +FORCE_INLINE Render2DVertex MakeTransformedVertex(const Float2& pos, const Float2& uv, const Color& color) +{ + Float2 point; + ApplyTransform(pos, point); + + //return MakeVertex(point, uv, color, ClipLayersStack.Peek().Mask, { 0.0f, (float)Render2D::Features }, TintLayersStack.Peek()); + return + { + point, + Half2(uv), + color * TintLayersStack.Peek(), + { 0.0f, (float)Render2D::Features }, + ClipLayersStack.Peek().Mask + }; +} + void WriteTri(const Float2& p0, const Float2& p1, const Float2& p2, const Float2& uv0, const Float2& uv1, const Float2& uv2, const Color& color0, const Color& color1, const Color& color2) { Render2DVertex tris[3]; @@ -316,15 +332,24 @@ void WriteRect(const Rectangle& rect, const Color& color1, const Color& color2, const Float2 uvUpperLeft = Float2::Zero; const Float2 uvBottomRight = Float2::One; - Render2DVertex quad[4]; - quad[0] = MakeVertex(rect.GetBottomRight(), uvBottomRight, color3); - quad[1] = MakeVertex(rect.GetBottomLeft(), Float2(uvUpperLeft.X, uvBottomRight.Y), color4); - quad[2] = MakeVertex(rect.GetUpperLeft(), uvUpperLeft, color1); - quad[3] = MakeVertex(rect.GetUpperRight(), Float2(uvBottomRight.X, uvUpperLeft.Y), color2); - VB.Write(quad, sizeof(quad)); + Render2DVertex* quad = (Render2DVertex*)VB.WriteReserve(sizeof(Render2DVertex) * 4); + //Render2DVertex quad[4]; + quad[0] = MakeTransformedVertex(rect.GetBottomRight(), uvBottomRight, color3); + quad[1] = MakeTransformedVertex(rect.GetBottomLeft(), Float2(uvUpperLeft.X, uvBottomRight.Y), color4); + quad[2] = MakeTransformedVertex(rect.GetUpperLeft(), uvUpperLeft, color1); + quad[3] = MakeTransformedVertex(rect.GetUpperRight(), Float2(uvBottomRight.X, uvUpperLeft.Y), color2); + //VB.Write(quad, sizeof(quad)); - uint32 indices[6]; - RENDER2D_WRITE_IB_QUAD(indices); + //uint32 indices[6]; + uint32* indices = (uint32*)IB.WriteReserve(sizeof(uint32) * 6); + indices[0] = VBIndex + 0; + indices[1] = VBIndex + 1; + indices[2] = VBIndex + 2; + indices[3] = VBIndex + 2; + indices[4] = VBIndex + 3; + indices[5] = VBIndex + 0; + //IB.Write(indices, sizeof(indices)); + //RENDER2D_WRITE_IB_QUAD(indices); VBIndex += 4; IBIndex += 6; @@ -332,15 +357,24 @@ void WriteRect(const Rectangle& rect, const Color& color1, const Color& color2, void WriteRect(const Rectangle& rect, const Color& color, const Float2& uvUpperLeft, const Float2& uvBottomRight) { - Render2DVertex quad[4]; - quad[0] = MakeVertex(rect.GetBottomRight(), uvBottomRight, color); - quad[1] = MakeVertex(rect.GetBottomLeft(), Float2(uvUpperLeft.X, uvBottomRight.Y), color); - quad[2] = MakeVertex(rect.GetUpperLeft(), uvUpperLeft, color); - quad[3] = MakeVertex(rect.GetUpperRight(), Float2(uvBottomRight.X, uvUpperLeft.Y), color); - VB.Write(quad, sizeof(quad)); + Render2DVertex* quad = (Render2DVertex*)VB.WriteReserve(sizeof(Render2DVertex) * 4); + //Render2DVertex quad[4]; + quad[0] = MakeTransformedVertex(rect.GetBottomRight(), uvBottomRight, color); + quad[1] = MakeTransformedVertex(rect.GetBottomLeft(), Float2(uvUpperLeft.X, uvBottomRight.Y), color); + quad[2] = MakeTransformedVertex(rect.GetUpperLeft(), uvUpperLeft, color); + quad[3] = MakeTransformedVertex(rect.GetUpperRight(), Float2(uvBottomRight.X, uvUpperLeft.Y), color); + //VB.Write(quad, sizeof(quad)); - uint32 indices[6]; - RENDER2D_WRITE_IB_QUAD(indices); + //uint32 indices[6]; + uint32* indices = (uint32*)IB.WriteReserve(sizeof(uint32) * 6); + indices[0] = VBIndex + 0; + indices[1] = VBIndex + 1; + indices[2] = VBIndex + 2; + indices[3] = VBIndex + 2; + indices[4] = VBIndex + 3; + indices[5] = VBIndex + 0; + //IB.Write(indices, sizeof(indices)); + //RENDER2D_WRITE_IB_QUAD(indices); VBIndex += 4; IBIndex += 6;