Make VertexBuffer arrays immutable, remove setter methods

This commit is contained in:
John Lewin 2018-07-12 12:01:44 -07:00
parent 3b0978f136
commit 71f84a37e2

View file

@ -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);
}
}
}
}
}