CSharpGL.Data2Buffer.GenVertexBuffer C# (CSharp) Метод

GenVertexBuffer() публичный статический Метод

生成顶点属性Buffer。描述顶点的位置或颜色或UV等各种属性。

每个VertexBuffer仅描述其中一个属性。

Vertex Buffer Object that describes vertex' property(position, color, uv coordinate, etc.).

Each VertexBuffer describes only 1 property.

public static GenVertexBuffer ( this array, VBOConfig config, string varNameInVertexShader, BufferUsage usage, uint instancedDivisor, int patchVertexes ) : VertexBuffer
array this
config VBOConfig This decides parameters' values in glVertexAttribPointer(attributeLocation, size, type, false, 0, IntPtr.Zero);
varNameInVertexShader string 此顶点属性VBO对应于vertex shader中的哪个in变量?Mapping variable's name in vertex shader.
usage BufferUsage
instancedDivisor uint 0: not instanced. 1: instanced divisor is 1.
patchVertexes int How many vertexes makes a patch? No patch if is 0.
Результат VertexBuffer
        public static VertexBuffer GenVertexBuffer(this UnmanagedArrayBase array, VBOConfig config, string varNameInVertexShader, BufferUsage usage, uint instancedDivisor = 0, int patchVertexes = 0)
        {
            if (glGenBuffers == null)
            {
                InitFunctions();
            }

            uint[] buffers = new uint[1];
            glGenBuffers(1, buffers);
            const uint target = OpenGL.GL_ARRAY_BUFFER;
            glBindBuffer(target, buffers[0]);
            glBufferData(target, array.ByteLength, array.Header, (uint)usage);
            glBindBuffer(target, 0);

            var buffer = new VertexBuffer(
                buffers[0], config, varNameInVertexShader, array.Length, array.ByteLength, instancedDivisor, patchVertexes);

            return buffer;
        }

Usage Example

Пример #1
0
        internal VertexBuffer GetVertexAttributeBuffer()
        {
            if (this.vertexBuffer == null)
            {
                GCHandle pinned = GCHandle.Alloc(this.array, GCHandleType.Pinned);
                IntPtr   header = Marshal.UnsafeAddrOfPinnedArrayElement(array, 0);
                this.vertexBuffer = Data2Buffer.GenVertexBuffer(header, length, byteLength, config, varNameInVertexShader, usage, instancedDivisor, patchVertexes);
                pinned.Free();
            }

            return(this.vertexBuffer);
        }