Advertisement
Guest User

VectorBufferObject.cs

a guest
Apr 10th, 2015
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.62 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.Serialization.Formatters.Binary;
  6. using System.IO;
  7.  
  8. using OpenTK;
  9. using OpenTK.Graphics;
  10. using OpenTK.Graphics.OpenGL;
  11.  
  12. namespace OpenTKProj
  13. {
  14.     class VertexBufferObject
  15.     {
  16.         uint _uiBuffer;
  17.         BufferTarget _iBufferType;
  18.         List<float> _data;
  19.  
  20.         bool _bDataUploaded;
  21.  
  22.         public VertexBufferObject()
  23.         {
  24.             _data = new List<float>();
  25.         }
  26.  
  27.         public void createVBO()
  28.         {
  29.            GL.GenBuffers(1, out _uiBuffer);
  30.         }
  31.  
  32.         public void releaseVBO()
  33.         {
  34.             GL.DeleteBuffers(1, ref _uiBuffer);
  35.             _bDataUploaded = false;
  36.             _data.Clear();
  37.         }
  38.  
  39.         public IntPtr mapBufferToMemory(BufferAccess usageHint)
  40.         {
  41.             if(_bDataUploaded)
  42.             {
  43.                 return GL.MapBuffer(_iBufferType, usageHint);
  44.             }
  45.             return IntPtr.Zero;
  46.         }
  47.  
  48.         public IntPtr mapSubBufferToMemory(BufferAccessMask usageHint, uint offset, uint length)
  49.         {
  50.             if (_bDataUploaded)
  51.             {
  52.                 return GL.MapBufferRange(_iBufferType, (IntPtr)offset, (IntPtr)length, usageHint);
  53.             }
  54.             return IntPtr.Zero;
  55.         }
  56.  
  57.         public void unmapBuffer()
  58.         {
  59.             GL.UnmapBuffer(_iBufferType);
  60.         }
  61.  
  62.         public void bindVBO(BufferTarget bufferType = BufferTarget.ArrayBuffer)
  63.         {
  64.             _iBufferType = bufferType;
  65.             GL.BindBuffer(_iBufferType, _uiBuffer);
  66.         }
  67.  
  68.         public void uploadDataToGPU(BufferUsageHint usageHint = BufferUsageHint.StaticDraw)
  69.         {
  70.             float[] dataArray = _data.ToArray();
  71.             GL.BufferData(_iBufferType, (IntPtr)(dataArray.Length*sizeof(float)), dataArray, usageHint);
  72.             _data.Clear();
  73.         }
  74.  
  75.         public void addData(float[] items)
  76.         {
  77.             _data.AddRange(items);
  78.         }
  79.  
  80.         public void addData(Vector3 v3)
  81.         {
  82.                 addData(new float[] {v3.X, v3.Y, v3.X});
  83.         }
  84.  
  85.         public void addData(Vector2 v2)
  86.         {
  87.                 addData(new float[] {v2.X, v2.Y});
  88.         }
  89.  
  90.         public IntPtr getDataPointer()
  91.         {
  92.             if(_bDataUploaded)
  93.             {
  94.                 float[] dataArray = _data.ToArray();
  95.                 return (IntPtr)(dataArray.Length * sizeof(float));
  96.             }
  97.             return IntPtr.Zero;
  98.         }
  99.  
  100.         public uint getBuffer()
  101.         {
  102.             return _uiBuffer;
  103.         }
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement