diff options
| author | mobserveur <mobserveur@gmail.com> | 2024-05-27 05:08:01 +0200 | 
|---|---|---|
| committer | mobserveur <mobserveur@gmail.com> | 2024-06-13 08:18:15 +0200 | 
| commit | bb55d25d47849b82de7877ca68d7451d69428c3a (patch) | |
| tree | 2e060963d39b2d8eb685736f505113307226825b /indra | |
| parent | 162c87a0a852952cf8dca05d37211403612a9933 (diff) | |
fixed tracker beacon performance issue on apple silicon macs
tracking beacon was causing extreme lag on apple silicon macs
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/lltracker.cpp | 106 | 
1 files changed, 64 insertions, 42 deletions
| diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp index 56263f1afe..d794d7d690 100644 --- a/indra/newview/lltracker.cpp +++ b/indra/newview/lltracker.cpp @@ -489,11 +489,22 @@ void draw_shockwave(F32 center_z, F32 t, S32 steps, LLColor4 color)      gGL.end();  } +  void LLTracker::drawBeacon(LLVector3 pos_agent, std::string direction, LLColor4 fogged_color, F32 dist)  { +#if LL_DARWIN +    const U32 BEACON_VERTS = 16; +#else      const U32 BEACON_VERTS = 256; +#endif +      F32 step; +    LLColor4 c_col         = LLColor4(1, 1, 1, 1); +    LLColor4 col_next      = LLColor4(1, 1, 1, 1); +    LLColor4 col_edge      = LLColor4(1, 1, 1, 0); +    LLColor4 col_edge_next = LLColor4(1, 1, 1, 0); +      gGL.matrixMode(LLRender::MM_MODELVIEW);      gGL.pushMatrix(); @@ -509,51 +520,62 @@ void LLTracker::drawBeacon(LLVector3 pos_agent, std::string direction, LLColor4          step = pos_agent.mV[2] / BEACON_VERTS;      } -        gGL.color4fv(fogged_color.mV); +    gGL.color4fv(fogged_color.mV); -        LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis(); -        F32 t = gRenderStartTime.getElapsedTimeF32(); +    LLVector3 x_axis = LLViewerCamera::getInstance()->getLeftAxis(); +    F32 t = gRenderStartTime.getElapsedTimeF32(); -        for (U32 i = 0; i < BEACON_VERTS; i++) -        { -            F32 x = x_axis.mV[0]; -            F32 y = x_axis.mV[1]; - -            F32 z = i * step; -            F32 z_next = (i+1)*step; - -        bool tracking_avatar = getTrackingStatus() == TRACKING_AVATAR; -        F32 a = pulse_func(t, z, tracking_avatar, direction); -        F32 an = pulse_func(t, z_next, tracking_avatar, direction); - -            LLColor4 c_col = fogged_color + LLColor4(a,a,a,a); -            LLColor4 col_next = fogged_color + LLColor4(an,an,an,an); -            LLColor4 col_edge = fogged_color * LLColor4(a,a,a,0.0f); -            LLColor4 col_edge_next = fogged_color * LLColor4(an,an,an,0.0f); - -            a *= 2.f; -        a += 1.0f; - -            an *= 2.f; -        an += 1.0f; - -            gGL.begin(LLRender::TRIANGLE_STRIP); -            gGL.color4fv(col_edge.mV); -            gGL.vertex3f(-x*a, -y*a, z); -            gGL.color4fv(col_edge_next.mV); -            gGL.vertex3f(-x*an, -y*an, z_next); - -            gGL.color4fv(c_col.mV); -            gGL.vertex3f(0, 0, z); -            gGL.color4fv(col_next.mV); -            gGL.vertex3f(0, 0, z_next); - -            gGL.color4fv(col_edge.mV); -            gGL.vertex3f(x*a,y*a,z); -            gGL.color4fv(col_edge_next.mV); -            gGL.vertex3f(x*an,y*an,z_next); -        gGL.end(); +    F32 x = x_axis.mV[0]; +    F32 y = x_axis.mV[1]; +    F32 z = 0.0f; +    F32 z_next; + +    F32 a,an; +    F32 xa,ya; +    F32 xan,yan; + +    bool tracking_avatar = getTrackingStatus() == TRACKING_AVATAR; + +    gGL.begin(LLRender::TRIANGLE_STRIP); + +    for (U32 i = 0; i < BEACON_VERTS; i++) +    { +        z = i * step; +        z_next = z + step; + +        a = pulse_func(t, z, tracking_avatar, direction); +        an = pulse_func(t, z_next, tracking_avatar, direction); + +        c_col = fogged_color + LLColor4(a, a, a, a); +        col_next = fogged_color + LLColor4(an, an, an, an); +        col_edge = fogged_color * LLColor4(a, a, a, 0.0f); +        col_edge_next = fogged_color * LLColor4(an, an, an, 0.0f); + +        a = a + a + 1.f; +        an = an + an + 1.0f; + +        xa = x*a; +        ya = y*a; +        xan = x*an; +        yan = y*an; + +        gGL.color4fv(col_edge.mV); +        gGL.vertex3f(-xa, -ya, z); +        gGL.color4fv(col_edge_next.mV); +        gGL.vertex3f(-xan, -yan, z_next); + +        gGL.color4fv(c_col.mV); +        gGL.vertex3f(0, 0, z); +        gGL.color4fv(col_next.mV); +        gGL.vertex3f(0, 0, z_next); + +        gGL.color4fv(col_edge.mV); +        gGL.vertex3f(xa, ya, z); +        gGL.color4fv(col_edge_next.mV); +        gGL.vertex3f(xan, yan, z_next);      } + +    gGL.end();      gGL.popMatrix();  } | 
