cosmetics on terrain patchs

This commit is contained in:
UbitUmarov
2019-01-20 20:58:27 +00:00
parent 3bfa278984
commit 0c38d52538
12 changed files with 598 additions and 635 deletions

View File

@@ -103,8 +103,8 @@ namespace OpenSim.Framework
/// <summary>Finished, Same Sim</summary>
FinishedViaSameSim = 1 << 29,
/// <summary>Agent coming into the grid from another grid</summary>
ViaHGLogin = 1 << 30
ViaHGLogin = 1 << 30,
notViaHGLogin = 0xbffffff
}
}
}

View File

@@ -1146,8 +1146,8 @@ namespace OpenSim.Framework
bool CanSendLayerData();
void SendLayerData(float[] map);
void SendLayerData(int px, int py, float[] map);
void SendLayerData();
void SendLayerData(int[] map);
void SendWindData(int version, Vector2[] windSpeeds);
void SendCloudData(int version, float[] cloudCover);

View File

@@ -82,7 +82,7 @@ namespace OpenSim.Framework
public abstract double[,] GetDoubles();
public abstract void GetPatchMinMax(int px, int py, out float zmin, out float zmax);
public abstract void GetPatchBlock(ref float[] block, int px, int py, float sub, float premult);
public abstract void GetPatchBlock(float[] block, int px, int py, float sub, float premult);
public abstract TerrainData Clone();
}
@@ -279,34 +279,47 @@ namespace OpenSim.Framework
return ret;
}
public override void GetPatchMinMax(int px, int py, out float zmin, out float zmax)
public override unsafe void GetPatchMinMax(int px, int py, out float zmin, out float zmax)
{
zmax = float.MinValue;
zmin = float.MaxValue;
int startx = px * 16;
int stride = m_heightmap.GetLength(1);
int startx = px * 16 * stride;
int endx = (px + 1) * 16 * stride;
int starty = py * 16;
for (int i = startx; i < startx + 16; i++)
fixed (float* map = m_heightmap)
{
for (int j = starty; j < starty + 16; j++)
for (int i = startx; i < endx; i += stride)
{
float val = m_heightmap[i, j];
if (val > zmax) zmax = val;
if (val < zmin) zmin = val;
float* p = &map[i];
for (int j = starty; j < starty + 16; j++)
{
float val = p[j];
if (val > zmax) zmax = val;
if (val < zmin) zmin = val;
}
}
}
}
public override void GetPatchBlock(ref float[] block, int px, int py, float sub, float premult)
public override unsafe void GetPatchBlock(float[] _block, int px, int py, float sub, float premult)
{
int k = 0;
int startX = px * 16;
int stride = m_heightmap.GetLength(1);
int startX = px * 16 * stride;
int endX = (px + 1) * 16 * stride;
int startY = py * 16;
for (int y = startY; y < startY + 16; y++)
fixed(float* block = _block, map = m_heightmap)
{
for (int x = startX; x < startX + 16; x++)
for (int y = startY; y < startY + 16; y++)
{
block[k++] = (m_heightmap[x, y] - sub) * premult;
for (int x = startX; x < endX; x += stride)
{
block[k++] = (map[x + y] - sub) * premult;
}
}
}
}