From 71f84a37e2303cd0292745abbbb80b8a2f09666d Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 12 Jul 2018 12:01:44 -0700 Subject: [PATCH] Make VertexBuffer arrays immutable, remove setter methods --- .../GCodeRenderer/GCodeVertexBuffer.cs | 91 +++++++++---------- 1 file changed, 43 insertions(+), 48 deletions(-) diff --git a/MatterControl.OpenGL/GCodeRenderer/GCodeVertexBuffer.cs b/MatterControl.OpenGL/GCodeRenderer/GCodeVertexBuffer.cs index eb7692435..ec473f4a2 100644 --- a/MatterControl.OpenGL/GCodeRenderer/GCodeVertexBuffer.cs +++ b/MatterControl.OpenGL/GCodeRenderer/GCodeVertexBuffer.cs @@ -1,8 +1,5 @@ -using MatterHackers.Agg.UI; -using MatterHackers.RenderOpenGl.OpenGl; - -/* -Copyright (c) 2014, Lars Brubaker +/* +Copyright (c) 2018, Lars Brubaker, John Lewin All rights reserved. Redistribution and use in source and binary forms, with or without @@ -31,20 +28,46 @@ either expressed or implied, of the FreeBSD Project. */ using System; +using MatterHackers.Agg.UI; +using MatterHackers.RenderOpenGl.OpenGl; namespace MatterHackers.GCodeVisualizer { public class GCodeVertexBuffer : IDisposable { - public int myIndexId; - public int myIndexLength; - public BeginMode myMode = BeginMode.Triangles; - public int myVertexId; - public int myVertexLength; - public GCodeVertexBuffer() + private int myIndexId; + private int myIndexLength; + private BeginMode pointMode = BeginMode.Triangles; + + private int myVertexId; + private int myVertexLength; + + public GCodeVertexBuffer(int[] indexData, ColorVertexData[] colorData) { GL.GenBuffers(1, out myVertexId); GL.GenBuffers(1, out myIndexId); + + // Set vertex data + myVertexLength = colorData.Length; + GL.BindBuffer(BufferTarget.ArrayBuffer, myVertexId); + unsafe + { + fixed (ColorVertexData* dataPointer = colorData) + { + GL.BufferData(BufferTarget.ArrayBuffer, colorData.Length * ColorVertexData.Stride, (IntPtr)dataPointer, BufferUsageHint.StaticDraw); + } + } + + // Set index data + myIndexLength = indexData.Length; + GL.BindBuffer(BufferTarget.ElementArrayBuffer, myIndexId); + unsafe + { + fixed (int* dataPointer = indexData) + { + GL.BufferData(BufferTarget.ElementArrayBuffer, indexData.Length * sizeof(int), (IntPtr)dataPointer, BufferUsageHint.StaticDraw); + } + } } public void Dispose() @@ -53,6 +76,7 @@ namespace MatterHackers.GCodeVisualizer { int holdVertexId = myVertexId; int holdIndexId = myIndexId; + UiThread.RunOnIdle(() => { GL.DeleteBuffers(1, ref holdVertexId); @@ -85,7 +109,14 @@ namespace MatterHackers.GCodeVisualizer GL.NormalPointer(NormalPointerType.Float, ColorVertexData.Stride, new IntPtr(4)); GL.VertexPointer(3, VertexPointerType.Float, ColorVertexData.Stride, new IntPtr(4 + 3 * 4)); - GL.DrawRangeElements(myMode, 0, myIndexLength, count, DrawElementsType.UnsignedInt, new IntPtr(offset * 4)); + // ** Draw ** + GL.DrawRangeElements( + pointMode, + 0, + myIndexLength, + count, + DrawElementsType.UnsignedInt, + new IntPtr(offset * 4)); GL.BindBuffer(BufferTarget.ArrayBuffer, 0); GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0); @@ -96,41 +127,5 @@ namespace MatterHackers.GCodeVisualizer GL.DisableClientState(ArrayCap.NormalArray); GL.DisableClientState(ArrayCap.ColorArray); } - - public void SetIndexData(int[] data) - { - SetIndexData(data, data.Length); - } - - public void SetIndexData(int[] data, int count) - { - myIndexLength = count; - GL.BindBuffer(BufferTarget.ElementArrayBuffer, myIndexId); - unsafe - { - fixed (int* dataPointer = data) - { - GL.BufferData(BufferTarget.ElementArrayBuffer, data.Length * sizeof(int), (IntPtr)dataPointer, BufferUsageHint.StaticDraw); - } - } - } - - public void SetVertexData(ColorVertexData[] data) - { - SetVertexData(data, data.Length); - } - - public void SetVertexData(ColorVertexData[] data, int count) - { - myVertexLength = count; - GL.BindBuffer(BufferTarget.ArrayBuffer, myVertexId); - unsafe - { - fixed (ColorVertexData* dataPointer = data) - { - GL.BufferData(BufferTarget.ArrayBuffer, data.Length * ColorVertexData.Stride, (IntPtr)dataPointer, BufferUsageHint.StaticDraw); - } - } - } } } \ No newline at end of file