System.Buffer.BlockCopy C# (CSharp) Méthode

BlockCopy() private méthode

private BlockCopy ( Array src, int srcOffset, Array dst, int dstOffset, int count ) : void
src Array
srcOffset int
dst Array
dstOffset int
count int
Résultat void
        public static extern void BlockCopy(Array src, int srcOffset,
            Array dst, int dstOffset, int count);

Usage Example

Exemple #1
0
        public void UpdateBufferForBlock(int program, string nameBlock)
        {
            int index_SLI = GL.GetUniformBlockIndex(program, nameBlock);

            if (index_SLI != -1)
            {
                GL.GetActiveUniformBlock(program, index_SLI, ActiveUniformBlockParameter.UniformBlockDataSize, out blockSizeLightInfo);
                byte[]   blockBuffer = new byte[blockSizeLightInfo];
                string[] names       = { nameBlock + ".position_lgh", nameBlock + ".intensity_lgh", nameBlock + ".direction_lgh", nameBlock + ".exponent_lgh", nameBlock + ".cutoff_lgh" };
                int[]    indices     = new int[5];
                GL.GetUniformIndices(program, 5, names, indices);
                int[] offset = new int[5];
                GL.GetActiveUniforms(program, 5, indices, ActiveUniformParameter.UniformOffset, offset);

                float[] position_lgh  = { Position.X, Position.Y, Position.Z, 0.0f };
                float[] intensity_lgh = { DiffusionIntensity.X, DiffusionIntensity.Y, DiffusionIntensity.Z }; //интенсивность света
                float[] direction_lgh = { LightVecNormalized.X, LightVecNormalized.Y, LightVecNormalized.Z }; //направление света
                float[] exponent      = { 1.0f };                                                             // Экспанента углового ослабления света
                float[] cutoff        = { 30f };                                                              //угол отсечения

                Buffer.BlockCopy(position_lgh, 0, blockBuffer, offset[0], position_lgh.Length * sizeof(float));
                Buffer.BlockCopy(intensity_lgh, 0, blockBuffer, offset[1], intensity_lgh.Length * sizeof(float));
                Buffer.BlockCopy(direction_lgh, 0, blockBuffer, offset[2], direction_lgh.Length * sizeof(float));
                Buffer.BlockCopy(exponent, 0, blockBuffer, offset[3], exponent.Length * sizeof(float));
                Buffer.BlockCopy(cutoff, 0, blockBuffer, offset[4], cutoff.Length * sizeof(float));

                GL.BindBuffer(BufferTarget.UniformBuffer, uboLightInfo);
                GL.BufferSubData(BufferTarget.UniformBuffer, (IntPtr)0, blockSizeLightInfo, blockBuffer);
            }
        }
All Usage Examples Of System.Buffer::BlockCopy