protected override void CreateTexture() { if (ControlTexture != null && !ControlTexture.IsDisposed && Size != TextureSize) { ControlTexture.Dispose(); } if (ControlTexture == null || ControlTexture.IsDisposed) { DXManager.ControlList.Add(this); ControlTexture = new Texture(DXManager.Device, Size.Width, Size.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); TextureSize = Size; } Surface oldSurface = DXManager.CurrentSurface; Surface surface = ControlTexture.GetSurfaceLevel(0); DXManager.SetSurface(surface); DXManager.Device.Clear(ClearFlags.Target, BackColour.ToRawColorBGRA(), 0, 0); BeforeDrawControl(); DrawChildControls(); AfterDrawControl(); DXManager.Sprite.Flush(); DXManager.SetSurface(oldSurface); TextureValid = true; surface.Dispose(); }
protected virtual void CreateTexture() { if (ControlTexture == null || ControlTexture.IsDisposed) { DXManager.ControlList.Add(this); ControlTexture = new Texture(DXManager.Device, Size.Width, Size.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default); TextureSize = Size; } Surface oldSurface = DXManager.CurrentSurface; Surface surface = ControlTexture.GetSurfaceLevel(0); DXManager.SetSurface(surface); DXManager.Device.Clear(ClearFlags.Target, BackColour.ToRawColorBGRA(), 0, 0); DXManager.SetSurface(oldSurface); TextureValid = true; surface.Dispose(); }
public Mesh GenerateTerrain() { PerlinNoise noise = new PerlinNoise(NoiseSeed); List <Vertex> vertices = new List <Vertex>(); List <int> indices = new List <int>(); for (int i = 0; i < (TerrainRadius * 2) + 1; i++) { for (int j = 0; j < (TerrainRadius * 2) + 1; j++) { float vertexY = Multiplier * noise.Noise(i, j, TerrainRadius * 2 + 1, TerrainRadius * 2 + 1, Frequency); vertexY = Math.Clamp(vertexY, LowerCutoff, UpperCutoff) * FuncMultiplier.GetValue(i - TerrainRadius, j - TerrainRadius); vertices.Add(new Vertex { Position = new Vector3(i - TerrainRadius, vertexY, j - TerrainRadius), Colour = Vector3.Lerp(FrontColour.ToVector(), BackColour.ToVector(), (float)i / TerrainRadius) }); if (i > 0 && j > 0) { int currentPoint = i * (TerrainRadius * 2 + 1) + j; int prevPoint = currentPoint - 1; int prevRowPoint = (i - 1) * (TerrainRadius * 2 + 1) + j; int prevRowPrevPoint = prevRowPoint - 1; // Adding a new square. indices.Add(currentPoint); indices.Add(prevPoint); indices.Add(prevRowPoint); indices.Add(prevRowPoint); indices.Add(prevPoint); indices.Add(prevRowPrevPoint); } } } return(new Mesh(vertices.ToArray(), indices.ToArray(), Matrix4.CreateScale(Scale, 1, Scale))); }