BOOL LLSurfacePatch::updateTexture() { if (mSTexUpdate) // Update texture as needed { F32 meters_per_grid = getSurface()->getMetersPerGrid(); F32 grids_per_patch_edge = (F32)getSurface()->getGridsPerPatchEdge(); if ((!getNeighborPatch(EAST) || getNeighborPatch(EAST)->getHasReceivedData()) && (!getNeighborPatch(WEST) || getNeighborPatch(WEST)->getHasReceivedData()) && (!getNeighborPatch(SOUTH) || getNeighborPatch(SOUTH)->getHasReceivedData()) && (!getNeighborPatch(NORTH) || getNeighborPatch(NORTH)->getHasReceivedData())) { LLViewerRegion *regionp = getSurface()->getRegion(); LLVector3d origin_region = getOriginGlobal() - getSurface()->getOriginGlobal(); // Have to figure out a better way to deal with these edge conditions... LLVLComposition* comp = regionp->getComposition(); if (!mHeightsGenerated) { F32 patch_size = meters_per_grid*(grids_per_patch_edge+1); if (comp->generateHeights((F32)origin_region[VX], (F32)origin_region[VY], patch_size, patch_size)) { mHeightsGenerated = TRUE; } else { return FALSE; } } if (comp->generateComposition()) { if (mVObjp) { mVObjp->dirtyGeom(); } updateCompositionStats(); F32 tex_patch_size = meters_per_grid*grids_per_patch_edge; if (comp->generateTexture((F32)origin_region[VX], (F32)origin_region[VY], tex_patch_size, tex_patch_size)) { mSTexUpdate = FALSE; // Also generate the water texture mSurfacep->generateWaterTexture((F32)origin_region.mdV[VX], (F32)origin_region.mdV[VY], tex_patch_size, tex_patch_size); return TRUE; } } } return FALSE; } else { return TRUE; } }
void LLSurfacePatch::updateGL() { F32 meters_per_grid = getSurface()->getMetersPerGrid(); F32 grids_per_patch_edge = (F32)getSurface()->getGridsPerPatchEdge(); LLViewerRegion *regionp = getSurface()->getRegion(); LLVector3d origin_region = getOriginGlobal() - getSurface()->getOriginGlobal(); LLVLComposition* comp = regionp->getComposition(); updateCompositionStats(); F32 tex_patch_size = meters_per_grid*grids_per_patch_edge; if (comp->generateTexture((F32)origin_region[VX], (F32)origin_region[VY], tex_patch_size, tex_patch_size)) { mSTexUpdate = FALSE; // Also generate the water texture mSurfacep->generateWaterTexture((F32)origin_region.mdV[VX], (F32)origin_region.mdV[VY], tex_patch_size, tex_patch_size); } }