From d5fbd2001b0ad3591a7f969dfd75c809ab55b40e Mon Sep 17 00:00:00 2001 From: Kae <80987908+Novaenia@users.noreply.github.com> Date: Fri, 30 Jun 2023 04:34:10 +1000 Subject: RenderPrimitive micro-optimizations --- source/windowing/StarGuiContext.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'source/windowing/StarGuiContext.cpp') diff --git a/source/windowing/StarGuiContext.cpp b/source/windowing/StarGuiContext.cpp index e080ecf..9f19294 100644 --- a/source/windowing/StarGuiContext.cpp +++ b/source/windowing/StarGuiContext.cpp @@ -140,23 +140,24 @@ Vec2U GuiContext::textureSize(AssetPath const& texName) { } void GuiContext::drawQuad(RectF const& screenCoords, Vec4B const& color) { - renderer()->render(renderFlatRect(screenCoords, color, 0.0f)); + renderer()->immediatePrimitives().emplace_back(std::in_place_type_t(), screenCoords, color, 0.0f); } void GuiContext::drawQuad(AssetPath const& texName, RectF const& screenCoords, Vec4B const& color) { - renderer()->render(renderTexturedRect(assetTextureGroup()->loadTexture(texName), screenCoords, color, 0.0f)); + renderer()->immediatePrimitives().emplace_back(std::in_place_type_t(), assetTextureGroup()->loadTexture(texName), screenCoords, color, 0.0f); } void GuiContext::drawQuad(AssetPath const& texName, Vec2F const& screenPos, int pixelRatio, Vec4B const& color) { - renderer()->render(renderTexturedRect(assetTextureGroup()->loadTexture(texName), screenPos, pixelRatio, color, 0.0f)); + renderer()->immediatePrimitives().emplace_back(std::in_place_type_t(), assetTextureGroup()->loadTexture(texName), screenPos, pixelRatio, color, 0.0f); } void GuiContext::drawQuad(AssetPath const& texName, RectF const& texCoords, RectF const& screenCoords, Vec4B const& color) { - renderer()->render(RenderQuad{assetTextureGroup()->loadTexture(texName), - RenderVertex{Vec2F(screenCoords.xMin(), screenCoords.yMin()), Vec2F(texCoords.xMin(), texCoords.yMin()), color, 0.0f}, - RenderVertex{Vec2F(screenCoords.xMax(), screenCoords.yMin()), Vec2F(texCoords.xMax(), texCoords.yMin()), color, 0.0f}, - RenderVertex{Vec2F(screenCoords.xMax(), screenCoords.yMax()), Vec2F(texCoords.xMax(), texCoords.yMax()), color, 0.0f}, - RenderVertex{Vec2F(screenCoords.xMin(), screenCoords.yMax()), Vec2F(texCoords.xMin(), texCoords.yMax()), color, 0.0f}}); + renderer()->immediatePrimitives().emplace_back(std::in_place_type_t(), assetTextureGroup()->loadTexture(texName), + screenCoords.min(), texCoords.min(), + Vec2F(screenCoords.xMax(), screenCoords.yMin()), Vec2F(texCoords.xMax(), texCoords.yMin()), + screenCoords.max(), texCoords.max(), + Vec2F(screenCoords.xMin(), screenCoords.yMax()), Vec2F(texCoords.xMin(), texCoords.yMax()), + color, 0.0f); } void GuiContext::drawDrawable(Drawable drawable, Vec2F const& screenPos, int pixelRatio, Vec4B const& color) { @@ -171,11 +172,12 @@ void GuiContext::drawDrawable(Drawable drawable, Vec2F const& screenPos, int pix void GuiContext::drawLine(Vec2F const& begin, Vec2F const end, Vec4B const& color, float lineWidth) { Vec2F left = vnorm(Vec2F(end) - Vec2F(begin)).rot90() * lineWidth / 2.0f; - renderer()->render(RenderQuad{{}, - RenderVertex{Vec2F(begin) + left, Vec2F(), color, 0.0f}, - RenderVertex{Vec2F(begin) - left, Vec2F(), color, 0.0f}, - RenderVertex{Vec2F(end) - left, Vec2F(), color, 0.0f}, - RenderVertex{Vec2F(end) + left, Vec2F(), color, 0.0f}}); + renderer()->immediatePrimitives().emplace_back(std::in_place_type_t(), + begin + left, + begin - left, + end - left, + end + left, + color, 0.0f); } void GuiContext::drawPolyLines(PolyF const& poly, Vec4B const& color, float lineWidth) { @@ -184,11 +186,9 @@ void GuiContext::drawPolyLines(PolyF const& poly, Vec4B const& color, float line } void GuiContext::drawTriangles(List> const& triangles, Vec4B const& color) { - for (auto poly : triangles) { - renderer()->render(RenderTriangle{{}, - RenderVertex{get<0>(poly), Vec2F(), color, 0.0f}, - RenderVertex{get<1>(poly), Vec2F(), color, 0.0f}, - RenderVertex{get<2>(poly), Vec2F(), color, 0.0f}}); + for (auto& poly : triangles) { + renderer()->immediatePrimitives().emplace_back(std::in_place_type_t(), + get<0>(poly), get<1>(poly), get<2>(poly), color, 0.0f); } } -- cgit v1.2.3