示例#1
0
        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);
        }