diff --git a/Diamond/Render/RenderGroup.cs b/Diamond/Render/RenderGroup.cs
index 121783f..0e2bd0f 100644
--- a/Diamond/Render/RenderGroup.cs
+++ b/Diamond/Render/RenderGroup.cs
@@ -1,5 +1,4 @@
-using System;
-using Diamond.Buffers;
+using Diamond.Buffers;
using Diamond.Shaders;
using Diamond.Textures;
using Diamond.Util;
@@ -7,25 +6,55 @@ using OpenTK.Graphics.OpenGL4;
namespace Diamond.Render
{
- public class RenderGroup
+ ///
+ /// Manage a group of buffers, ranges, and uniforms to render
+ ///
+ /// The type of data to use as Instance information
+ /// The type of data to use as Vertex information
+ public class RenderGroup where TInstance : struct where TVertex : struct
{
- public SubArray Tiles;
- public Mesh Mesh;
+ ///
+ /// The range of instance values to render
+ ///
+ public SubArray Instances;
+ ///
+ /// The range of vertex values to render
+ ///
+ public Mesh Vertices;
- public Buffer TileBuffer;
- public Buffer MeshBuffer;
+ ///
+ /// The buffer to use for instance data
+ ///
+ public Buffer InstanceBuffer;
+ ///
+ /// The buffer to use for instance data
+ ///
+ public Buffer VertexBuffer;
+ ///
+ /// The program to use to render this Rendergroup
+ ///
public Program Program;
+
+ ///
+ /// The Texture to use for this Rendergroup
+ ///
public Texture Texture;
+ ///
+ /// View and Projection information for this Rendergroup
+ ///
public Camera Camera;
+ ///
+ /// Draw this rendergroup using the predefined settings.
+ ///
public void Draw()
{
Program.Use();
- TileBuffer.PointTo(Program);
- MeshBuffer.PointTo(Program);
+ InstanceBuffer.PointTo(Program);
+ VertexBuffer.PointTo(Program);
Texture.Bind(0);
@@ -40,7 +69,7 @@ namespace Diamond.Render
if (projLoc.HasValue)
GL.UniformMatrix4(projLoc.Value, false, ref Camera.Projection);
- Mesh.DrawInstanced(Tiles);
+ Vertices.DrawInstanced(Instances);
}
}
}
\ No newline at end of file
diff --git a/Diamond/Util/Mesh.cs b/Diamond/Util/Mesh.cs
index 112960c..2b81c1b 100644
--- a/Diamond/Util/Mesh.cs
+++ b/Diamond/Util/Mesh.cs
@@ -2,6 +2,7 @@
using System.IO;
using System.Linq;
using Diamond.Buffers;
+using NLog;
using OpenTK;
using OpenTK.Graphics.OpenGL4;
@@ -9,6 +10,8 @@ namespace Diamond.Util
{
public class Mesh where T : struct
{
+ private static readonly Logger Logger = LogManager.GetLogger("Mesh");
+
public SubArray Vertices;
public PrimitiveType Primitive;
@@ -45,6 +48,11 @@ namespace Diamond.Util
{
var tiVdi = VertexDataInfo.GetInfo();
+ if (tiVdi.Divisor == 0)
+ {
+ Logger.Error("Cannot render mesh with instances of type {0} - Divisor is 0", typeof(TI).Name);
+ }
+
tVdi.EnableVertexPointers();
tiVdi.EnableVertexPointers();
diff --git a/hexworld/HexRender.cs b/hexworld/HexRender.cs
index 061be22..2e75920 100644
--- a/hexworld/HexRender.cs
+++ b/hexworld/HexRender.cs
@@ -28,7 +28,7 @@ namespace hexworld
private Buffer _meshBuffer;
private Buffer _tileBuffer;
- private RenderGroup _renderGroup;
+ private RenderGroup _renderGroup;
protected override void OnClosed(EventArgs e)
{
@@ -105,15 +105,15 @@ namespace hexworld
_camera = new Camera();
- _renderGroup = new RenderGroup()
+ _renderGroup = new RenderGroup()
{
Camera = _camera,
- Mesh = _cubeMesh,
- MeshBuffer = _meshBuffer,
+ Vertices = _cubeMesh,
+ VertexBuffer = _meshBuffer,
Program = _texPgm,
Texture = _grassTex,
- TileBuffer = _tileBuffer,
- Tiles = _floorTiles
+ InstanceBuffer = _tileBuffer,
+ Instances = _floorTiles
};
}