private void InitTextures() { var i = byte.MaxValue + 1; var perm2 = new byte[i, i, 4]; for (var y = 0; y < i; y++) { for (var x = 0; x < i; x++) { var a = _perm[x] + y; perm2[y, x, 0] = (byte)_perm[a]; perm2[y, x, 1] = (byte)_perm[a + 1]; var b = _perm[x + 1] + y; perm2[y, x, 2] = (byte)_perm[b]; perm2[y, x, 3] = (byte)_perm[b + 1]; } } _perm2D = new Texture2D(i, i, 4, typeof(byte)); _perm2D.Activate(); GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, i, i, PixelFormat.Rgba, PixelType.Byte, perm2); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat); _permGrad3 = new Texture1D(i, 3, typeof(OpenTK.Half)); var pg3 = _perm.SelectMany(x => new[] { (float)_grad3[x % 16, 0], (float)_grad3[x % 16, 1], (float)_grad3[x % 16, 2], }).ToArray(); _permGrad3.Activate(); GL.TexSubImage1D(TextureTarget.Texture1D, 0, 0, i, PixelFormat.Rgb, PixelType.Float, pg3); GL.TexParameter(TextureTarget.Texture1D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); GL.TexParameter(TextureTarget.Texture1D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest); GL.TexParameter(TextureTarget.Texture1D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat); }
public ClipmapLevel(int level, float scale, Clipmap clipmap, ClipmapLevel parent) { _d = clipmap.DValue; _n = _d - 1; _cache = new float[_d, _d]; _clipmap = clipmap; _parent = parent; _level = level; _scaleInt = 1 << _level; Scale = scale * _scaleInt; Heightmap = new Texture2D(_d, _d, 3, typeof(float)); Heightmap.Activate(); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest); Heightmap.Finish(); }