Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.IO;
- using OpenTK;
- using OpenTK.Graphics;
- using OpenTK.Graphics.OpenGL;
- namespace OpenTKProj
- {
- class VertexBufferObject
- {
- uint _uiBuffer;
- BufferTarget _iBufferType;
- List<float> _data;
- bool _bDataUploaded;
- public VertexBufferObject()
- {
- _data = new List<float>();
- }
- public void createVBO()
- {
- GL.GenBuffers(1, out _uiBuffer);
- }
- public void releaseVBO()
- {
- GL.DeleteBuffers(1, ref _uiBuffer);
- _bDataUploaded = false;
- _data.Clear();
- }
- public IntPtr mapBufferToMemory(BufferAccess usageHint)
- {
- if(_bDataUploaded)
- {
- return GL.MapBuffer(_iBufferType, usageHint);
- }
- return IntPtr.Zero;
- }
- public IntPtr mapSubBufferToMemory(BufferAccessMask usageHint, uint offset, uint length)
- {
- if (_bDataUploaded)
- {
- return GL.MapBufferRange(_iBufferType, (IntPtr)offset, (IntPtr)length, usageHint);
- }
- return IntPtr.Zero;
- }
- public void unmapBuffer()
- {
- GL.UnmapBuffer(_iBufferType);
- }
- public void bindVBO(BufferTarget bufferType = BufferTarget.ArrayBuffer)
- {
- _iBufferType = bufferType;
- GL.BindBuffer(_iBufferType, _uiBuffer);
- }
- public void uploadDataToGPU(BufferUsageHint usageHint = BufferUsageHint.StaticDraw)
- {
- float[] dataArray = _data.ToArray();
- GL.BufferData(_iBufferType, (IntPtr)(dataArray.Length*sizeof(float)), dataArray, usageHint);
- _data.Clear();
- }
- public void addData(float[] items)
- {
- _data.AddRange(items);
- }
- public void addData(Vector3 v3)
- {
- addData(new float[] {v3.X, v3.Y, v3.X});
- }
- public void addData(Vector2 v2)
- {
- addData(new float[] {v2.X, v2.Y});
- }
- public IntPtr getDataPointer()
- {
- if(_bDataUploaded)
- {
- float[] dataArray = _data.ToArray();
- return (IntPtr)(dataArray.Length * sizeof(float));
- }
- return IntPtr.Zero;
- }
- public uint getBuffer()
- {
- return _uiBuffer;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement