Make VertexBuffer arrays immutable, remove setter methods
This commit is contained in:
parent
3b0978f136
commit
71f84a37e2
1 changed files with 43 additions and 48 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue