Migrate to Factory/Wrapper - HexRender complete
This commit is contained in:
@@ -16,6 +16,6 @@
|
|||||||
|
|
||||||
<rules>
|
<rules>
|
||||||
<logger name="*" minlevel="Info" writeTo="file"/>
|
<logger name="*" minlevel="Info" writeTo="file"/>
|
||||||
<logger name="*" minlevel="Debug" writeTo="debug"/>
|
<logger name="*" minlevel="Trace" writeTo="debug"/>
|
||||||
</rules>
|
</rules>
|
||||||
</nlog>
|
</nlog>
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ namespace Diamond.Shaders
|
|||||||
{
|
{
|
||||||
if (shaders == null)
|
if (shaders == null)
|
||||||
{
|
{
|
||||||
Logger.Error("Cannot create a program with no shaders.");
|
Logger.Error("Cannot create program {0} with no shaders.", name);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,7 +134,16 @@ namespace Diamond.Shaders
|
|||||||
Logger.Debug("Created {0}", service);
|
Logger.Debug("Created {0}", service);
|
||||||
|
|
||||||
foreach (var shader in shaders)
|
foreach (var shader in shaders)
|
||||||
|
{
|
||||||
|
if (shader == null)
|
||||||
|
{
|
||||||
|
Logger.Error("One or more shaders failed to compile - cannot create program {0}", name);
|
||||||
|
service.Dispose();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
wrapper.Attach((ShaderWrapper) shader.Wrapper);
|
wrapper.Attach((ShaderWrapper) shader.Wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
service.Link();
|
service.Link();
|
||||||
|
|
||||||
@@ -162,7 +171,9 @@ namespace Diamond.Shaders
|
|||||||
return FromShaders(name, shaderList);
|
return FromShaders(name, shaderList);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Program FromFiles(string name, params string[] paths) => FromShaders(name, paths.Select(Shader.FromFile));
|
public static Program FromFiles(string name, params string[] paths) => FromShaders(name,
|
||||||
|
paths.Select(Shader.FromFile));
|
||||||
|
|
||||||
public static Program FromFiles(params string[] paths) => FromShaders(paths.Select(Shader.FromFile));
|
public static Program FromFiles(params string[] paths) => FromShaders(paths.Select(Shader.FromFile));
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -73,9 +73,6 @@ namespace hexworld
|
|||||||
_doorTex = Texture.FromFile("res/door.png");
|
_doorTex = Texture.FromFile("res/door.png");
|
||||||
_grassTex = Texture.FromFile("res/grass.png");
|
_grassTex = Texture.FromFile("res/grass.png");
|
||||||
|
|
||||||
_meshBuffer = new GLBuffer<ObjVertex>(BufferTarget.ArrayBuffer);
|
|
||||||
_tileBuffer = new GLBuffer<TileData>(BufferTarget.ArrayBuffer, BufferUsageHint.DynamicDraw);
|
|
||||||
|
|
||||||
var dir = "res";
|
var dir = "res";
|
||||||
|
|
||||||
var json = JObject.Parse(File.ReadAllText("res/level.json"));
|
var json = JObject.Parse(File.ReadAllText("res/level.json"));
|
||||||
@@ -93,8 +90,6 @@ namespace hexworld
|
|||||||
_doorTiles = allTiles[0];
|
_doorTiles = allTiles[0];
|
||||||
_floorTiles = allTiles[1];
|
_floorTiles = allTiles[1];
|
||||||
|
|
||||||
_tileBuffer.Data(SubArray.Join(_doorTiles, _floorTiles));
|
|
||||||
|
|
||||||
var cubeMesh = json["models"]
|
var cubeMesh = json["models"]
|
||||||
.Select(path => (string) path)
|
.Select(path => (string) path)
|
||||||
.Select(path => Path.Combine(dir, path))
|
.Select(path => Path.Combine(dir, path))
|
||||||
@@ -104,12 +99,10 @@ namespace hexworld
|
|||||||
|
|
||||||
_cubeMesh = cubeMesh;
|
_cubeMesh = cubeMesh;
|
||||||
|
|
||||||
_meshBuffer.Data(cubeMesh.Vertices.ToArray());
|
_tileBuffer = GLBuffer.FromData(SubArray.Join(_doorTiles, _floorTiles), BufferTarget.ArrayBuffer,
|
||||||
|
BufferUsageHint.DynamicDraw, "tile");
|
||||||
// meshes, tiles, etc
|
_meshBuffer = GLBuffer.FromData(cubeMesh.Vertices.ToArray(), BufferTarget.ArrayBuffer,
|
||||||
|
BufferUsageHint.StaticDraw, "mesh");
|
||||||
// can still use JObject queries to keep it short,
|
|
||||||
// but don't use Level. hat structure is broken
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnUpdateFrame(FrameEventArgs e)
|
protected override void OnUpdateFrame(FrameEventArgs e)
|
||||||
@@ -137,18 +130,29 @@ namespace hexworld
|
|||||||
GL.Enable(EnableCap.Blend);
|
GL.Enable(EnableCap.Blend);
|
||||||
GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
|
GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
|
||||||
|
|
||||||
_texPgm.Use();
|
|
||||||
|
|
||||||
_texPgm.SetAttribPointers(_meshBuffer);
|
if (_texPgm != null)
|
||||||
_texPgm.SetAttribPointers(_tileBuffer);
|
{
|
||||||
|
_texPgm.Use();
|
||||||
|
|
||||||
_grassTex.Bind(0);
|
_meshBuffer.PointTo(_texPgm);
|
||||||
|
_tileBuffer.PointTo(_texPgm);
|
||||||
|
|
||||||
GL.Uniform1(_texPgm.GetUniform("tex"), 0);
|
_grassTex.Bind(0);
|
||||||
GL.UniformMatrix4(_texPgm.GetUniform("view"), false, ref _view);
|
|
||||||
GL.UniformMatrix4(_texPgm.GetUniform("proj"), false, ref _proj);
|
|
||||||
|
|
||||||
_cubeMesh.DrawInstanced(_floorTiles);
|
var texLoc = _texPgm.UniformLocation("tex");
|
||||||
|
var viewLoc = _texPgm.UniformLocation("view");
|
||||||
|
var projLoc = _texPgm.UniformLocation("proj");
|
||||||
|
|
||||||
|
if (texLoc.HasValue)
|
||||||
|
GL.Uniform1(texLoc.Value, 0);
|
||||||
|
if (viewLoc.HasValue)
|
||||||
|
GL.UniformMatrix4(viewLoc.Value, false, ref _view);
|
||||||
|
if (projLoc.HasValue)
|
||||||
|
GL.UniformMatrix4(projLoc.Value, false, ref _proj);
|
||||||
|
|
||||||
|
_cubeMesh.DrawInstanced(_floorTiles);
|
||||||
|
}
|
||||||
|
|
||||||
SwapBuffers();
|
SwapBuffers();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user