protected override void SetDataInternal <T>(T[] data, BufferDataUsage usage) { // ohhh yeahh int size = data.Length * Marshal.SizeOf(typeof(T)); GCHandle ptr = GCHandle.Alloc(data, GCHandleType.Pinned); try { Internal.OpenGL.Methods.glBufferData(OpenGLEngine.BufferTargetToGLBufferTarget(_target), size, ptr.AddrOfPinnedObject(), OpenGLEngine.BufferDataUsageToGLBufferDataUsage(usage)); } finally { ptr.Free(); } Internal.OpenGL.Methods.glErrorToException(); }
internal static Constants.GLBufferDataUsage BufferDataUsageToGLBufferDataUsage(BufferDataUsage usage) { switch (usage) { case BufferDataUsage.DynamicCopy: return(Constants.GLBufferDataUsage.DynamicCopy); case BufferDataUsage.DynamicDraw: return(Constants.GLBufferDataUsage.DynamicDraw); case BufferDataUsage.DynamicRead: return(Constants.GLBufferDataUsage.DynamicRead); case BufferDataUsage.StaticCopy: return(Constants.GLBufferDataUsage.StaticCopy); case BufferDataUsage.StaticDraw: return(Constants.GLBufferDataUsage.StaticDraw); case BufferDataUsage.StaticRead: return(Constants.GLBufferDataUsage.StaticRead); case BufferDataUsage.StreamCopy: return(Constants.GLBufferDataUsage.StreamCopy); case BufferDataUsage.StreamDraw: return(Constants.GLBufferDataUsage.StreamDraw); case BufferDataUsage.StreamRead: return(Constants.GLBufferDataUsage.StreamRead); } throw new InvalidEnumerationException(); }
public void SetData <T>(T[] data, BufferDataUsage usage) { SetDataInternal <T>(data, usage); }
protected abstract void SetDataInternal <T>(T[] data, BufferDataUsage usage);