+ Mesh updating
This commit is contained in:
parent
9fa1ac6ad9
commit
58c5bafa1b
4 changed files with 70 additions and 18 deletions
|
|
@ -103,6 +103,29 @@ namespace SM.OGL.Mesh
|
||||||
GL.BindVertexArray(0);
|
GL.BindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This updates the parts of the mesh, that needs updating.
|
||||||
|
/// </summary>
|
||||||
|
public void Update()
|
||||||
|
{
|
||||||
|
if (!WasCompiled)
|
||||||
|
{
|
||||||
|
Compile();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GL.BindVertexArray(_id);
|
||||||
|
|
||||||
|
UpdateBoundingBox();
|
||||||
|
|
||||||
|
foreach(var attrib in Attributes)
|
||||||
|
{
|
||||||
|
if (attrib.ConnectedVBO == null || !attrib.ConnectedVBO.Active || !attrib.ConnectedVBO.CanBeUpdated) continue;
|
||||||
|
attrib.ConnectedVBO.Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void Dispose()
|
public override void Dispose()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
#region usings
|
#region usings
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
|
|
@ -14,6 +15,11 @@ namespace SM.OGL.Mesh
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class VBO : List<float>
|
public class VBO : List<float>
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The ID for the buffer.
|
||||||
|
/// </summary>
|
||||||
|
public int BufferID { get; private set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Specifies the expected usage pattern of the data store.
|
/// Specifies the expected usage pattern of the data store.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -51,6 +57,11 @@ namespace SM.OGL.Mesh
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public VertexAttribPointerType PointerType;
|
public VertexAttribPointerType PointerType;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If true it can be updated, otherwise it will get ignored, when the mesh gets updated.
|
||||||
|
/// </summary>
|
||||||
|
public bool CanBeUpdated = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generates a VBO for inserting mesh data.
|
/// Generates a VBO for inserting mesh data.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -91,12 +102,18 @@ namespace SM.OGL.Mesh
|
||||||
Normalised = normalised;
|
Normalised = normalised;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Add(float x)
|
||||||
|
{
|
||||||
|
CanBeUpdated = true;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds two values to the VBO.
|
/// Adds two values to the VBO.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void Add(float x, float y)
|
public void Add(float x, float y)
|
||||||
{
|
{
|
||||||
AddRange(new[] {x, y});
|
AddRange(new[] {x, y});
|
||||||
|
CanBeUpdated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -105,6 +122,7 @@ namespace SM.OGL.Mesh
|
||||||
public void Add(float x, float y, float z)
|
public void Add(float x, float y, float z)
|
||||||
{
|
{
|
||||||
AddRange(new[] {x, y, z});
|
AddRange(new[] {x, y, z});
|
||||||
|
CanBeUpdated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -113,6 +131,7 @@ namespace SM.OGL.Mesh
|
||||||
public void Add(float x, float y, float z, float w)
|
public void Add(float x, float y, float z, float w)
|
||||||
{
|
{
|
||||||
AddRange(new[] {x, y, z, w});
|
AddRange(new[] {x, y, z, w});
|
||||||
|
CanBeUpdated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -205,13 +224,23 @@ namespace SM.OGL.Mesh
|
||||||
|
|
||||||
var data = ToArray();
|
var data = ToArray();
|
||||||
|
|
||||||
var buffer = GL.GenBuffer();
|
BufferID = GL.GenBuffer();
|
||||||
GL.BindBuffer(BufferTarget.ArrayBuffer, buffer);
|
GL.BindBuffer(BufferTarget.ArrayBuffer, BufferID);
|
||||||
GL.BufferData(BufferTarget.ArrayBuffer, data.Length * sizeof(float), data, BufferUsageHint);
|
GL.BufferData(BufferTarget.ArrayBuffer, data.Length * sizeof(float), data, BufferUsageHint);
|
||||||
|
|
||||||
GL.VertexAttribPointer(attribID, PointerSize, PointerType, Normalised, PointerStride, PointerOffset);
|
GL.VertexAttribPointer(attribID, PointerSize, PointerType, Normalised, PointerStride, PointerOffset);
|
||||||
GL.EnableVertexAttribArray(attribID);
|
GL.EnableVertexAttribArray(attribID);
|
||||||
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
|
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
|
||||||
|
|
||||||
|
CanBeUpdated = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void Update()
|
||||||
|
{
|
||||||
|
var data = ToArray();
|
||||||
|
|
||||||
|
GL.BindBuffer(BufferTarget.ArrayBuffer, BufferID);
|
||||||
|
GL.BufferSubData(BufferTarget.ArrayBuffer, IntPtr.Zero, data.Length * sizeof(float), data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4,9 +4,12 @@ using OpenTK;
|
||||||
using OpenTK.Graphics;
|
using OpenTK.Graphics;
|
||||||
using OpenTK.Input;
|
using OpenTK.Input;
|
||||||
using SM.Base;
|
using SM.Base;
|
||||||
|
using SM.Base.Time;
|
||||||
using SM.Base.Window;
|
using SM.Base.Window;
|
||||||
using SM2D;
|
using SM2D;
|
||||||
|
using SM2D.Controls;
|
||||||
using SM2D.Drawing;
|
using SM2D.Drawing;
|
||||||
|
using SM2D.Object;
|
||||||
using SM2D.Pipelines;
|
using SM2D.Pipelines;
|
||||||
using SM2D.Scene;
|
using SM2D.Scene;
|
||||||
using Font = SM.Base.Drawing.Text.Font;
|
using Font = SM.Base.Drawing.Text.Font;
|
||||||
|
|
@ -19,6 +22,7 @@ namespace SM_TEST
|
||||||
static Scene scene;
|
static Scene scene;
|
||||||
private static Font font;
|
private static Font font;
|
||||||
private static GLWindow window;
|
private static GLWindow window;
|
||||||
|
private static PolyLine line;
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
window = new GLWindow();
|
window = new GLWindow();
|
||||||
|
|
@ -26,15 +30,14 @@ namespace SM_TEST
|
||||||
window.SetRenderPipeline(new TestRenderPipeline());
|
window.SetRenderPipeline(new TestRenderPipeline());
|
||||||
|
|
||||||
window.SetScene(scene = new Scene());
|
window.SetScene(scene = new Scene());
|
||||||
scene.Objects.Add(new DrawObject2D());
|
|
||||||
scene.Objects.Add(new DrawObject2D()
|
line = new PolyLine(new Vector2[] { Vector2.Zero, Vector2.One }, PolyLineType.Connected);
|
||||||
|
var display = new DrawObject2D()
|
||||||
{
|
{
|
||||||
Transform =
|
Mesh = line
|
||||||
{
|
};
|
||||||
Position = new SM.Base.Types.CVector2(20,20),
|
display.Transform.Size.Set(1);
|
||||||
ZIndex = new SM.Base.Types.CVector1(1)
|
scene.Objects.Add(display);
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
window.UpdateFrame += WindowOnUpdateFrame;
|
window.UpdateFrame += WindowOnUpdateFrame;
|
||||||
window.Run();
|
window.Run();
|
||||||
|
|
@ -44,13 +47,10 @@ namespace SM_TEST
|
||||||
|
|
||||||
private static void WindowOnUpdateFrame(object sender, FrameEventArgs e)
|
private static void WindowOnUpdateFrame(object sender, FrameEventArgs e)
|
||||||
{
|
{
|
||||||
if (SM.Base.Controls.Keyboard.IsDown(Key.F, true))
|
|
||||||
{
|
line.Vertex.RemoveRange(3, 3);
|
||||||
window.WindowFlags = WindowFlags.ExclusiveFullscreen;
|
line.Vertex.Add(Mouse2D.InWorld(window.ViewportCamera as Camera), 0);
|
||||||
window.ChangeFullscreenResolution(DisplayDevice.Default.SelectResolution(1280,720, DisplayDevice.Default.BitsPerPixel, DisplayDevice.Default.RefreshRate));
|
line.Update();
|
||||||
}
|
|
||||||
if (SM.Base.Controls.Keyboard.IsDown(Key.W, true)) window.WindowFlags = WindowFlags.Window;
|
|
||||||
if (SM.Base.Controls.Keyboard.IsDown(Key.B, true)) window.WindowFlags = WindowFlags.BorderlessWindow;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ namespace SM_TEST
|
||||||
Framebuffers.Add(_postBuffer);
|
Framebuffers.Add(_postBuffer);
|
||||||
_bloom = new BloomEffect(_postBuffer, hdr: true, .5f)
|
_bloom = new BloomEffect(_postBuffer, hdr: true, .5f)
|
||||||
{
|
{
|
||||||
Threshold = .8f,
|
Threshold = .5f,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue