From 18fd48d562f2e98c8dbb3c8b9e241a2c95c717f2 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 12 Jul 2018 12:07:33 -0700 Subject: [PATCH] Guard BindBuffer/BufferData calls for empty arrays - Issue MatterHackers/MCCentral#3843 Crash when model is floating above plate with no supports --- .../GCodeRenderer/GCodeVertexBuffer.cs | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/MatterControl.OpenGL/GCodeRenderer/GCodeVertexBuffer.cs b/MatterControl.OpenGL/GCodeRenderer/GCodeVertexBuffer.cs index e1f20cb19..f0f8f75d6 100644 --- a/MatterControl.OpenGL/GCodeRenderer/GCodeVertexBuffer.cs +++ b/MatterControl.OpenGL/GCodeRenderer/GCodeVertexBuffer.cs @@ -49,23 +49,29 @@ namespace MatterHackers.GCodeVisualizer // Set vertex data myVertexLength = colorData.Length; - GL.BindBuffer(BufferTarget.ArrayBuffer, myVertexId); - unsafe + if (myVertexLength > 0) { - fixed (ColorVertexData* dataPointer = colorData) + GL.BindBuffer(BufferTarget.ArrayBuffer, myVertexId); + unsafe { - GL.BufferData(BufferTarget.ArrayBuffer, colorData.Length * ColorVertexData.Stride, (IntPtr)dataPointer, BufferUsageHint.StaticDraw); + 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 + if (myIndexLength > 0) { - fixed (int* dataPointer = indexData) + GL.BindBuffer(BufferTarget.ElementArrayBuffer, myIndexId); + unsafe { - GL.BufferData(BufferTarget.ElementArrayBuffer, indexData.Length * sizeof(int), (IntPtr)dataPointer, BufferUsageHint.StaticDraw); + fixed (int* dataPointer = indexData) + { + GL.BufferData(BufferTarget.ElementArrayBuffer, indexData.Length * sizeof(int), (IntPtr)dataPointer, BufferUsageHint.StaticDraw); + } } } }