Beispiel #1
0
        public void SetVertices(Vector3f[] verts)
        {
            if (fVertexBufferObject != null)
            {
                fVertexBufferObject.Dispose();
                fVertexBufferObject = null;
            }


            // Write the vertex data to the buffer
            GCHandle dataPtr = GCHandle.Alloc(verts, GCHandleType.Pinned);
            int dataSize = Marshal.SizeOf(typeof(Vector3f)) * verts.Length;
            fVertexBufferObject = new VertexBufferObject(GI);
            fVertexBufferObject.Bind();
            fVertexBufferObject.Size = dataSize;
            
            try
            {
                fVertexBufferObject.Bind();
                fVertexBufferObject.Write(dataPtr.AddrOfPinnedObject(), 0, dataSize);
            }
            finally
            {
                fVertexBufferObject.Unbind();
                dataPtr.Free();
            }
       }
Beispiel #2
0
        private void Generate()
        {
            _shader = ShaderManager.GetOrCreateShader("slab_block", Shaders.slab_vertex, Shaders.slab_fragment);
            foreach (var face in BlockFaceMethods.All)
            {
                var vao = BlockFaceVertices.CreateVao(face, SlabHeight);
                vao.Bind();
                var vbo = new VertexBufferObject();
                vao.LinkBuffer(vbo);
                vbo.Bind(BufferTarget.ArrayBuffer);
                vbo.SetData(BufferTarget.ArrayBuffer, MaxFaces * InstanceFloatDataLength, BufferUsageHint.StreamDraw);
                var builder = new AttributePointerBuilder(vao, InstanceDataLength, 3);
                builder.AddPointer(3, true);
                builder.AddPointer(1, true);
                builder.AddPointer(1, true);
                builder.AddPointer(1, true);
                builder.AddPointer(1, true);
                builder.AddPointer(1, true);
                VertexBufferObject.Unbind(BufferTarget.ArrayBuffer);
                VertexArrayObject.Unbind();

                var i = (int)face;

                _vaos[i]        = vao;
                _dataBuffers[i] = vbo;
                var mapper = _mappers[i];
                mapper.Vao = vao;
                mapper.Vbo = vbo;
            }
        }
Beispiel #3
0
        private static void AddToVbo()
        {
            var vbo = _vao.VerticesVbo;

            vbo.Bind(BufferTarget.ArrayBuffer);
            vbo.SetData(BufferTarget.ArrayBuffer, GenerateFloatArray(), BufferUsageHint.StreamDraw);
            VertexBufferObject.Unbind(BufferTarget.ArrayBuffer);
        }
Beispiel #4
0
            public void CreateAttribute(int attribute, float[] data, int attrSize)
            {
                VertexBufferObject dataVbo = VertexBufferObject.Create(BufferTarget.ArrayBuffer);

                dataVbo.Bind();
                dataVbo.StoreData(data);
                GL.VertexAttribPointer(attribute, attrSize, VertexAttribPointerType.Float, false, attrSize * BYTES_PER_FLOAT, 0);
                dataVbo.Unbind();
                _dataVbos.Add(dataVbo);
            }
Beispiel #5
0
            public void CreateIntAttribute(int attribute, int[] data, int attrSize)
            {
                VertexBufferObject dataVbo = VertexBufferObject.Create(BufferTarget.ArrayBuffer);

                dataVbo.Bind();
                dataVbo.StoreData(data);
                GL.VertexAttribIPointer(attribute, attrSize, VertexAttribIntegerType.Int, attrSize * BYTES_PER_INT, System.IntPtr.Zero);

                dataVbo.Unbind();
                _dataVbos.Add(dataVbo);
            }
Beispiel #6
0
        private static VertexArrayObject LoadVao()
        {
            var vao = new VertexArrayObject();
            var vbo = new VertexBufferObject();

            vao.Bind();
            vbo.Bind(BufferTarget.ArrayBuffer);
            vao.LinkBuffer(vbo);
            vbo.SetData(BufferTarget.ArrayBuffer, Vertices, BufferUsageHint.StaticDraw);
            var builder = new AttributePointerBuilder(vao, 3, 0);

            builder.AddPointer(3, false);
            VertexBufferObject.Unbind(BufferTarget.ArrayBuffer);
            VertexArrayObject.Unbind();
            return(vao);
        }
        public VertexArrayObject CreateAndSetupVertexArrayObject(VertexBufferObject<Vertex3V3N> vertexBuffer, VertexBufferObject<uint> elementBuffer)
        {
            var vertexArrayObject = _resourceFactory.CreateVertexArrayObject();

            vertexArrayObject.Bind();
            vertexBuffer.Bind();
            elementBuffer.Bind();

            var dummy = new Vertex3V3N();
            GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, dummy.SizeInBytes, dummy.PositionOffset);
            GL.EnableVertexAttribArray(0);

            GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, false, dummy.SizeInBytes, dummy.NormalOffset);
            GL.EnableVertexAttribArray(1);

            vertexArrayObject.Unbind();
            vertexBuffer.Unbind();
            elementBuffer.Unbind();

            return vertexArrayObject;
        }
        public VertexArrayObject CreateAndSetupVertexArrayObject(VertexBufferObject <Vertex3V3N> vertexBuffer, VertexBufferObject <uint> elementBuffer)
        {
            var vertexArrayObject = _resourceFactory.CreateVertexArrayObject();

            vertexArrayObject.Bind();
            vertexBuffer.Bind();
            elementBuffer.Bind();

            var dummy = new Vertex3V3N();

            GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, dummy.SizeInBytes, dummy.PositionOffset);
            GL.EnableVertexAttribArray(0);

            GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, false, dummy.SizeInBytes, dummy.NormalOffset);
            GL.EnableVertexAttribArray(1);

            vertexArrayObject.Unbind();
            vertexBuffer.Unbind();
            elementBuffer.Unbind();

            return(vertexArrayObject);
        }
Beispiel #9
0
        private void Generate()
        {
            _shader = ShaderManager.GetOrCreateShader("cubic_block", Shaders.block_vertex, Shaders.block_fragment);
            _vao    = new VertexArrayObject(GenTransformedVertices(), Indices);
            _vao.Bind();
            _dataBuffer = new VertexBufferObject();
            _vao.LinkBuffer(_dataBuffer);
            _dataBuffer.Bind(BufferTarget.ArrayBuffer);
            _dataBuffer.SetData(BufferTarget.ArrayBuffer, MaxBlocks * InstanceFloatDataLength,
                                BufferUsageHint.StreamDraw);
            var builder = new AttributePointerBuilder(_vao, InstanceDataLength, 3);

            builder.AddPointer(3, true);
            builder.AddPointer(1, true);
            builder.AddPointer(1, true);
            builder.AddPointer(1, true);
            builder.AddPointer(1, true);
            VertexBufferObject.Unbind(BufferTarget.ArrayBuffer);
            VertexArrayObject.Unbind();

            _mapper.Vao = _vao;
            _mapper.Vbo = _dataBuffer;
        }
Beispiel #10
0
        public void SetTextureCoordinates(TextureCoordinates[] coords)
        {
            if (fTextureBufferObject != null)
            {
                fTextureBufferObject.Dispose();
                fTextureBufferObject = null;
            }


            // Write the vertex data to the buffer
            GCHandle dataPtr = GCHandle.Alloc(coords, GCHandleType.Pinned);
            int dataSize = Marshal.SizeOf(typeof(TextureCoordinates)) * coords.Length;
            fTextureBufferObject = new VertexBufferObject(GI);
            fTextureBufferObject.Bind();
            fTextureBufferObject.Size = dataSize;

            try
            {
                fTextureBufferObject.Bind();
                fTextureBufferObject.Write(dataPtr.AddrOfPinnedObject(), 0, dataSize);
            }
            finally
            {
                fTextureBufferObject.Unbind();
                dataPtr.Free();
            }
        }
Beispiel #11
0
 public void Unbind()
 {
     vertices.Unbind();
 }
 public void Update(Mesh3V3N mesh)
 {
     _vertexBuffer.Bind();
     _vertexBuffer.Data(mesh.Vertices, BufferUsageHint.StaticDraw);
     _vertexBuffer.Unbind();
 }