diff options
| -rw-r--r-- | indra/newview/lldrawpoolterrain.h | 1 | ||||
| -rw-r--r-- | indra/newview/llsurfacepatch.cpp | 9 | ||||
| -rw-r--r-- | indra/newview/llsurfacepatch.h | 2 | ||||
| -rw-r--r-- | indra/newview/llterrainpaintmap.cpp | 3 | ||||
| -rw-r--r-- | indra/newview/llvosurfacepatch.cpp | 51 | ||||
| -rw-r--r-- | indra/newview/llvosurfacepatch.h | 4 | 
6 files changed, 53 insertions, 17 deletions
| diff --git a/indra/newview/lldrawpoolterrain.h b/indra/newview/lldrawpoolterrain.h index 5380463d01..23cf253b6a 100644 --- a/indra/newview/lldrawpoolterrain.h +++ b/indra/newview/lldrawpoolterrain.h @@ -38,6 +38,7 @@ public:          VERTEX_DATA_MASK = LLVertexBuffer::MAP_VERTEX |                      LLVertexBuffer::MAP_NORMAL |                      LLVertexBuffer::MAP_TANGENT | // Only PBR terrain uses this currently +                    LLVertexBuffer::MAP_TEXCOORD0 | // Ownership overlay                      LLVertexBuffer::MAP_TEXCOORD1      }; diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp index 4315c4c6b0..6f99da5957 100644 --- a/indra/newview/llsurfacepatch.cpp +++ b/indra/newview/llsurfacepatch.cpp @@ -201,7 +201,7 @@ LLVector2 LLSurfacePatch::getTexCoords(const U32 x, const U32 y) const  void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 *vertex, LLVector3 *normal, -                          LLVector2 *tex1) const +                          LLVector2* tex0, LLVector2 *tex1) const  {      if (!mSurfacep || !mSurfacep->getRegion() || !mSurfacep->getGridsPerEdge() || !mVObjp)      { @@ -210,6 +210,7 @@ void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3      llassert_always(vertex && normal && tex1);      U32 surface_stride = mSurfacep->getGridsPerEdge(); +    U32 texture_stride = mSurfacep->getGridsPerEdge() - 1;      U32 point_offset = x + y*surface_stride;      *normal = getNormal(x, y); @@ -220,6 +221,12 @@ void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3      pos_agent.mV[VZ]  = *(mDataZ + point_offset);      *vertex     = pos_agent-mVObjp->getRegion()->getOriginAgent(); +    // tex0 is used for ownership overlay +    LLVector3 rel_pos = pos_agent - mSurfacep->getOriginAgent(); +    LLVector3 tex_pos = rel_pos * (1.f / (texture_stride * mSurfacep->getMetersPerGrid())); +    tex0->mV[0] = tex_pos.mV[0]; +    tex0->mV[1] = tex_pos.mV[1]; +      tex1->mV[0] = mSurfacep->getRegion()->getCompositionXY(llfloor(mOriginRegion.mV[0])+x, llfloor(mOriginRegion.mV[1])+y);      const F32 xyScale = 4.9215f*7.f; //0.93284f; diff --git a/indra/newview/llsurfacepatch.h b/indra/newview/llsurfacepatch.h index f4831487c1..505fc8c24c 100644 --- a/indra/newview/llsurfacepatch.h +++ b/indra/newview/llsurfacepatch.h @@ -116,7 +116,7 @@ public:      void calcNormalFlat(LLVector3& normal_out, const U32 x, const U32 y, const U32 index /* 0 or 1 */);      void eval(const U32 x, const U32 y, const U32 stride, -                LLVector3 *vertex, LLVector3 *normal, LLVector2 *tex1) const; +                LLVector3 *vertex, LLVector3 *normal, LLVector2* tex0, LLVector2 *tex1) const; diff --git a/indra/newview/llterrainpaintmap.cpp b/indra/newview/llterrainpaintmap.cpp index 8ccde74c93..c7a82013e4 100644 --- a/indra/newview/llterrainpaintmap.cpp +++ b/indra/newview/llterrainpaintmap.cpp @@ -204,8 +204,9 @@ bool LLTerrainPaintMap::bakeHeightNoiseIntoPBRPaintMapRGB(const LLViewerRegion&                      {                          LLVector3 scratch3;                          LLVector3 pos3; +                        LLVector2 tex0_temp;                          LLVector2 tex1_temp; -                        patch->eval(i, j, stride, &pos3, &scratch3, &tex1_temp); +                        patch->eval(i, j, stride, &pos3, &scratch3, &tex0_temp, &tex1_temp);                          (*pos++).set(pos3.mV[VX], pos3.mV[VY], pos3.mV[VZ]);                          *tex1++ = tex1_temp;                          vertex_total++; diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp index 294d36b0a9..bc326a74a8 100644 --- a/indra/newview/llvosurfacepatch.cpp +++ b/indra/newview/llvosurfacepatch.cpp @@ -245,6 +245,7 @@ bool LLVOSurfacePatch::updateLOD()  void LLVOSurfacePatch::getTerrainGeometry(LLStrider<LLVector3> &verticesp,                                                LLStrider<LLVector3> &normalsp, +                                              LLStrider<LLVector2> &texCoords0p,                                                LLStrider<LLVector2> &texCoords1p,                                                LLStrider<U16> &indicesp)  { @@ -259,18 +260,21 @@ void LLVOSurfacePatch::getTerrainGeometry(LLStrider<LLVector3> &verticesp,      updateMainGeometry(facep,                      verticesp,                      normalsp, +                    texCoords0p,                      texCoords1p,                      indicesp,                      index_offset);      updateNorthGeometry(facep,                          verticesp,                          normalsp, +                        texCoords0p,                          texCoords1p,                          indicesp,                          index_offset);      updateEastGeometry(facep,                          verticesp,                          normalsp, +                        texCoords0p,                          texCoords1p,                          indicesp,                          index_offset); @@ -279,6 +283,7 @@ void LLVOSurfacePatch::getTerrainGeometry(LLStrider<LLVector3> &verticesp,  void LLVOSurfacePatch::updateMainGeometry(LLFace *facep,                                          LLStrider<LLVector3> &verticesp,                                          LLStrider<LLVector3> &normalsp, +                                        LLStrider<LLVector2> &texCoords0p,                                          LLStrider<LLVector2> &texCoords1p,                                          LLStrider<U16> &indicesp,                                          U32 &index_offset) @@ -317,9 +322,10 @@ void LLVOSurfacePatch::updateMainGeometry(LLFace *facep,              {                  x = i * render_stride;                  y = j * render_stride; -                mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +                mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());                  verticesp++;                  normalsp++; +                texCoords0p++;                  texCoords1p++;              }          } @@ -381,6 +387,7 @@ void LLVOSurfacePatch::updateMainGeometry(LLFace *facep,  void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,                                          LLStrider<LLVector3> &verticesp,                                          LLStrider<LLVector3> &normalsp, +                                        LLStrider<LLVector2> &texCoords0p,                                          LLStrider<LLVector2> &texCoords1p,                                          LLStrider<U16> &indicesp,                                          U32 &index_offset) @@ -414,9 +421,10 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,              x = i * render_stride;              y = 16 - render_stride; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          } @@ -425,9 +433,10 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,          {              x = i * render_stride;              y = 16; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          } @@ -460,9 +469,10 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,              x = i * render_stride;              y = 16 - render_stride; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          } @@ -472,9 +482,10 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,              x = i * render_stride;              y = 16; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          } @@ -514,9 +525,10 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,              x = i * north_stride;              y = 16 - render_stride; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          } @@ -526,9 +538,10 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,              x = i * north_stride;              y = 16; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          } @@ -564,6 +577,7 @@ void LLVOSurfacePatch::updateNorthGeometry(LLFace *facep,  void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,                                            LLStrider<LLVector3> &verticesp,                                            LLStrider<LLVector3> &normalsp, +                                          LLStrider<LLVector2> &texCoords0p,                                            LLStrider<LLVector2> &texCoords1p,                                            LLStrider<U16> &indicesp,                                            U32 &index_offset) @@ -592,9 +606,10 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,              x = 16 - render_stride;              y = i * render_stride; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          } @@ -603,9 +618,10 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,          {              x = 16;              y = i * render_stride; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          } @@ -638,9 +654,10 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,              x = 16 - render_stride;              y = i * render_stride; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          }          // Iterate through the east patch's points @@ -649,9 +666,10 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,              x = 16;              y = i * render_stride; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          } @@ -690,9 +708,10 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,              x = 16 - render_stride;              y = i * east_stride; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          }          // Iterate through the east patch's points @@ -701,9 +720,10 @@ void LLVOSurfacePatch::updateEastGeometry(LLFace *facep,              x = 16;              y = i * east_stride; -            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords1p.get()); +            mPatchp->eval(x, y, render_stride, verticesp.get(), normalsp.get(), texCoords0p.get(), texCoords1p.get());              verticesp++;              normalsp++; +            texCoords0p++;              texCoords1p++;          } @@ -1022,12 +1042,14 @@ void LLTerrainPartition::getGeometry(LLSpatialGroup* group)      LLStrider<LLVector3> vertices_start;      LLStrider<LLVector3> normals_start;      LLStrider<LLVector4a> tangents_start; +    LLStrider<LLVector2> texcoords0_start; // ownership overlay      LLStrider<LLVector2> texcoords2_start;      LLStrider<U16> indices_start;      llassert_always(buffer->getVertexStrider(vertices_start));      llassert_always(buffer->getNormalStrider(normals_start));      llassert_always(buffer->getTangentStrider(tangents_start)); +    llassert_always(buffer->getTexCoord0Strider(texcoords0_start));      llassert_always(buffer->getTexCoord1Strider(texcoords2_start));      llassert_always(buffer->getIndexStrider(indices_start)); @@ -1037,6 +1059,7 @@ void LLTerrainPartition::getGeometry(LLSpatialGroup* group)      {          LLStrider<LLVector3> vertices = vertices_start;          LLStrider<LLVector3> normals = normals_start; +        LLStrider<LLVector2> texcoords0 = texcoords0_start;          LLStrider<LLVector2> texcoords2 = texcoords2_start;          LLStrider<U16> indices = indices_start; @@ -1049,7 +1072,7 @@ void LLTerrainPartition::getGeometry(LLSpatialGroup* group)              facep->setVertexBuffer(buffer);              LLVOSurfacePatch* patchp = (LLVOSurfacePatch*) facep->getViewerObject(); -            patchp->getTerrainGeometry(vertices, normals, texcoords2, indices); +            patchp->getTerrainGeometry(vertices, normals, texcoords0, texcoords2, indices);              indices_index += facep->getIndicesCount();              index_offset += facep->getGeomCount(); diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h index af5f05774b..c93a58d2d9 100644 --- a/indra/newview/llvosurfacepatch.h +++ b/indra/newview/llvosurfacepatch.h @@ -57,6 +57,7 @@ public:      /*virtual*/ void        updateFaceSize(S32 idx);      void getTerrainGeometry(LLStrider<LLVector3> &verticesp,                                  LLStrider<LLVector3> &normalsp, +                                LLStrider<LLVector2> &texCoords0p,                                  LLStrider<LLVector2> &texCoords1p,                                  LLStrider<U16> &indicesp); @@ -109,18 +110,21 @@ protected:      void updateMainGeometry(LLFace *facep,                         LLStrider<LLVector3> &verticesp,                         LLStrider<LLVector3> &normalsp, +                       LLStrider<LLVector2> &texCoords0p,                         LLStrider<LLVector2> &texCoords1p,                         LLStrider<U16> &indicesp,                         U32 &index_offset);      void updateNorthGeometry(LLFace *facep,                         LLStrider<LLVector3> &verticesp,                         LLStrider<LLVector3> &normalsp, +                       LLStrider<LLVector2> &texCoords0p,                         LLStrider<LLVector2> &texCoords1p,                         LLStrider<U16> &indicesp,                         U32 &index_offset);      void updateEastGeometry(LLFace *facep,                         LLStrider<LLVector3> &verticesp,                         LLStrider<LLVector3> &normalsp, +                       LLStrider<LLVector2> &texCoords0p,                         LLStrider<LLVector2> &texCoords1p,                         LLStrider<U16> &indicesp,                         U32 &index_offset); | 
