From e75946daa07844c379573b0c5540e29694ebe402 Mon Sep 17 00:00:00 2001 From: Rye Mutt <rye@alchemyviewer.org> Date: Fri, 25 Sep 2020 21:43:32 -0400 Subject: [PATCH] Revert "Abandon all hope. Make LLRender2D mostly static variables to reduce overhead caused by getInstance locking" This reverts commit 778f41e61937aecf1f041309960be5677e8cf5e8. --- indra/llrender/llrender2dutils.cpp | 62 ++++++++++++------------------ indra/llrender/llrender2dutils.h | 20 +++++----- indra/llrender/lluiimage.cpp | 8 ++-- indra/llui/llui.h | 20 +++++----- 4 files changed, 49 insertions(+), 61 deletions(-) diff --git a/indra/llrender/llrender2dutils.cpp b/indra/llrender/llrender2dutils.cpp index cfffd456d00..04fa76511d9 100644 --- a/indra/llrender/llrender2dutils.cpp +++ b/indra/llrender/llrender2dutils.cpp @@ -106,10 +106,11 @@ void gl_rect_2d_offset_local( S32 left, S32 top, S32 right, S32 bottom, S32 pixe top += LLFontGL::sCurOrigin.mY; gGL.loadUIIdentity(); - gl_rect_2d(llfloor((F32)left * LLRender2D::sGLScaleFactor.mV[VX]) - pixel_offset, - llfloor((F32)top * LLRender2D::sGLScaleFactor.mV[VY]) + pixel_offset, - llfloor((F32)right * LLRender2D::sGLScaleFactor.mV[VX]) + pixel_offset, - llfloor((F32)bottom * LLRender2D::sGLScaleFactor.mV[VY]) - pixel_offset, + LLRender2D *r2d_inst = LLRender2D::getInstance(); + gl_rect_2d(llfloor((F32)left * r2d_inst->mGLScaleFactor.mV[VX]) - pixel_offset, + llfloor((F32)top * r2d_inst->mGLScaleFactor.mV[VY]) + pixel_offset, + llfloor((F32)right * r2d_inst->mGLScaleFactor.mV[VX]) + pixel_offset, + llfloor((F32)bottom * r2d_inst->mGLScaleFactor.mV[VY]) - pixel_offset, filled); gGL.popUIMatrix(); } @@ -798,7 +799,7 @@ void gl_stippled_line_3d( const LLVector3& start, const LLVector3& end, const LL } gGL.end(); - LLRender2D::setLineWidth(1.f); + LLRender2D::getInstance()->setLineWidth(1.f); } void gl_arc_2d(F32 center_x, F32 center_y, F32 radius, S32 steps, BOOL filled, F32 start_angle, F32 end_angle) @@ -965,7 +966,7 @@ void gl_rect_2d_checkerboard(const LLRect& rect, GLfloat alpha) } else { //polygon stipple is deprecated, use "Checker" texture - LLPointer<LLUIImage> img = LLRender2D::getUIImage("Checker"); + LLPointer<LLUIImage> img = LLRender2D::getInstance()->getUIImage("Checker"); gGL.getTexUnit(0)->bind(img->getImage()); gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_WRAP); gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_POINT); @@ -1565,29 +1566,26 @@ void gl_segmented_rect_3d_tex(const LLRectf& clip_rect, const LLRectf& center_uv } -LLVector2 LLRender2D::sGLScaleFactor = { 1.f, 1.f }; -LLImageProviderInterface* LLRender2D::sImageProvider = nullptr; - LLRender2D::LLRender2D(LLImageProviderInterface* image_provider) { - sGLScaleFactor = LLVector2(1.f, 1.f); - sImageProvider = image_provider; - if(sImageProvider) + mGLScaleFactor = LLVector2(1.f, 1.f); + mImageProvider = image_provider; + if(mImageProvider) { - sImageProvider->addOnRemovalCallback(resetProvider); + mImageProvider->addOnRemovalCallback(resetProvider); } } LLRender2D::~LLRender2D() { - if(sImageProvider) + if(mImageProvider) { - sImageProvider->cleanUp(); - sImageProvider->deleteOnRemovalCallback(resetProvider); + mImageProvider->cleanUp(); + mImageProvider->deleteOnRemovalCallback(resetProvider); } } -// static + void LLRender2D::translate(F32 x, F32 y, F32 z) { gGL.translateUI(x,y,z); @@ -1596,26 +1594,20 @@ void LLRender2D::translate(F32 x, F32 y, F32 z) LLFontGL::sCurDepth += z; } -// static void LLRender2D::pushMatrix() { gGL.pushUIMatrix(); - LLFontGL::sOriginStack.emplace_back(std::make_pair(LLFontGL::sCurOrigin, LLFontGL::sCurDepth)); + LLFontGL::sOriginStack.push_back(std::make_pair(LLFontGL::sCurOrigin, LLFontGL::sCurDepth)); } -// static void LLRender2D::popMatrix() { gGL.popUIMatrix(); - { - const auto& origin_pair = LLFontGL::sOriginStack.back(); - LLFontGL::sCurOrigin = origin_pair.first; - LLFontGL::sCurDepth = origin_pair.second; - } + LLFontGL::sCurOrigin = LLFontGL::sOriginStack.back().first; + LLFontGL::sCurDepth = LLFontGL::sOriginStack.back().second; LLFontGL::sOriginStack.pop_back(); } -// static void LLRender2D::loadIdentity() { gGL.loadUIIdentity(); @@ -1624,24 +1616,21 @@ void LLRender2D::loadIdentity() LLFontGL::sCurDepth = 0.f; } -// static void LLRender2D::setScaleFactor(const LLVector2 &scale_factor) { - sGLScaleFactor = scale_factor; + mGLScaleFactor = scale_factor; } -// static void LLRender2D::setLineWidth(F32 width) { - gGL.setLineWidth(width * lerp(sGLScaleFactor.mV[VX], sGLScaleFactor.mV[VY], 0.5f)); + gGL.setLineWidth(width * lerp(mGLScaleFactor.mV[VX], mGLScaleFactor.mV[VY], 0.5f)); } -// static LLPointer<LLUIImage> LLRender2D::getUIImageByID(const LLUUID& image_id, S32 priority) { - if (sImageProvider) + if (mImageProvider) { - return sImageProvider->getUIImageByID(image_id, priority); + return mImageProvider->getUIImageByID(image_id, priority); } else { @@ -1649,11 +1638,10 @@ LLPointer<LLUIImage> LLRender2D::getUIImageByID(const LLUUID& image_id, S32 prio } } -// static LLPointer<LLUIImage> LLRender2D::getUIImage(const std::string& name, S32 priority) { - if (!name.empty() && sImageProvider) - return sImageProvider->getUIImage(name, priority); + if (!name.empty() && mImageProvider) + return mImageProvider->getUIImage(name, priority); else return NULL; } @@ -1663,7 +1651,7 @@ void LLRender2D::resetProvider() { if (LLRender2D::instanceExists()) { - LLRender2D::sImageProvider = NULL; + LLRender2D::getInstance()->mImageProvider = NULL; } } diff --git a/indra/llrender/llrender2dutils.h b/indra/llrender/llrender2dutils.h index dc5e66eb646..3428067e71f 100644 --- a/indra/llrender/llrender2dutils.h +++ b/indra/llrender/llrender2dutils.h @@ -127,18 +127,18 @@ class LLRender2D final : public LLParamSingleton<LLRender2D> LOG_CLASS(LLRender2D); ~LLRender2D(); public: - static void pushMatrix(); - static void popMatrix(); - static void loadIdentity(); - static void translate(F32 x, F32 y, F32 z = 0.0f); + void pushMatrix(); + void popMatrix(); + void loadIdentity(); + void translate(F32 x, F32 y, F32 z = 0.0f); - static void setLineWidth(F32 width); - static void setScaleFactor(const LLVector2& scale_factor); + void setLineWidth(F32 width); + void setScaleFactor(const LLVector2& scale_factor); - static LLPointer<LLUIImage> getUIImageByID(const LLUUID& image_id, S32 priority = 0); - static LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority = 0); + LLPointer<LLUIImage> getUIImageByID(const LLUUID& image_id, S32 priority = 0); + LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority = 0); - static LLVector2 sGLScaleFactor; + LLVector2 mGLScaleFactor; protected: // since LLRender2D has no control of image provider's lifecycle @@ -147,7 +147,7 @@ class LLRender2D final : public LLParamSingleton<LLRender2D> static void resetProvider(); private: - static LLImageProviderInterface* sImageProvider; + LLImageProviderInterface* mImageProvider; }; class LLImageProviderInterface diff --git a/indra/llrender/lluiimage.cpp b/indra/llrender/lluiimage.cpp index 361b1b354f3..424672fe8ec 100644 --- a/indra/llrender/lluiimage.cpp +++ b/indra/llrender/lluiimage.cpp @@ -81,10 +81,10 @@ void LLUIImage::draw3D(const LLVector3& origin_agent, const LLVector3& x_axis, c } } - LLRender2D::pushMatrix(); + LLRender2D::getInstance()->pushMatrix(); { LLVector3 rect_origin = origin_agent + (rect.mLeft * x_axis) + (rect.mBottom * y_axis); - LLRender2D::translate(rect_origin.mV[VX], + LLRender2D::getInstance()->translate(rect_origin.mV[VX], rect_origin.mV[VY], rect_origin.mV[VZ]); gGL.getTexUnit(0)->bind(getImage()); @@ -103,7 +103,7 @@ void LLUIImage::draw3D(const LLVector3& origin_agent, const LLVector3& x_axis, c rect.getWidth() * x_axis, rect.getHeight() * y_axis); - }LLRender2D::popMatrix(); + } LLRender2D::getInstance()->popMatrix(); } //#include "lluiimage.inl" @@ -138,7 +138,7 @@ namespace LLInitParam return; } - LLUIImage* imagep = LLRender2D::getUIImage(name()); + LLUIImage* imagep = LLRender2D::getInstance()->getUIImage(name()); if (imagep) { updateValue(imagep); diff --git a/indra/llui/llui.h b/indra/llui/llui.h index 946136ff439..1ce436cad14 100644 --- a/indra/llui/llui.h +++ b/indra/llui/llui.h @@ -313,18 +313,18 @@ class LLUI final : public LLParamSingleton<LLUI> void positionViewNearMouse(LLView* view, S32 spawn_x = S32_MAX, S32 spawn_y = S32_MAX); // LLRender2D wrappers - static void pushMatrix() { LLRender2D::pushMatrix(); } - static void popMatrix() { LLRender2D::popMatrix(); } - static void loadIdentity() { LLRender2D::loadIdentity(); } - static void translate(F32 x, F32 y, F32 z = 0.0f) { LLRender2D::translate(x, y, z); } - - static LLVector2& getScaleFactor() { return LLRender2D::sGLScaleFactor; } - static void setScaleFactor(const LLVector2& scale_factor) { LLRender2D::setScaleFactor(scale_factor); } - static void setLineWidth(F32 width) { LLRender2D::setLineWidth(width); } + static void pushMatrix() { LLRender2D::getInstance()->pushMatrix(); } + static void popMatrix() { LLRender2D::getInstance()->popMatrix(); } + static void loadIdentity() { LLRender2D::getInstance()->loadIdentity(); } + static void translate(F32 x, F32 y, F32 z = 0.0f) { LLRender2D::getInstance()->translate(x, y, z); } + + static LLVector2& getScaleFactor() { return LLRender2D::getInstance()->mGLScaleFactor; } + static void setScaleFactor(const LLVector2& scale_factor) { LLRender2D::getInstance()->setScaleFactor(scale_factor); } + static void setLineWidth(F32 width) { LLRender2D::getInstance()->setLineWidth(width); } static LLPointer<LLUIImage> getUIImageByID(const LLUUID& image_id, S32 priority = 0) - { return LLRender2D::getUIImageByID(image_id, priority); } + { return LLRender2D::getInstance()->getUIImageByID(image_id, priority); } static LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority = 0) - { return LLRender2D::getUIImage(name, priority); } + { return LLRender2D::getInstance()->getUIImage(name, priority); } // // Data -- GitLab