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(); } }
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; } }
private static void AddToVbo() { var vbo = _vao.VerticesVbo; vbo.Bind(BufferTarget.ArrayBuffer); vbo.SetData(BufferTarget.ArrayBuffer, GenerateFloatArray(), BufferUsageHint.StreamDraw); VertexBufferObject.Unbind(BufferTarget.ArrayBuffer); }
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); }
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); }
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); }
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; }
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(); } }
public void Unbind() { vertices.Unbind(); }
public void Update(Mesh3V3N mesh) { _vertexBuffer.Bind(); _vertexBuffer.Data(mesh.Vertices, BufferUsageHint.StaticDraw); _vertexBuffer.Unbind(); }