diff --git a/src/SlatedGameToolkit.Framework/Graphics/Render/Camera.cs b/src/SlatedGameToolkit.Framework/Graphics/Render/Camera.cs index 10016c2..6b99d80 100644 --- a/src/SlatedGameToolkit.Framework/Graphics/Render/Camera.cs +++ b/src/SlatedGameToolkit.Framework/Graphics/Render/Camera.cs @@ -47,7 +47,6 @@ namespace SlatedGameToolkit.Framework.Graphics.Render return Vector3.Cross(CameraFront, -CameraRight); } } - public event EventHandler projectionUpdateEvent; public bool Orthographic { get { @@ -158,6 +157,18 @@ namespace SlatedGameToolkit.Framework.Graphics.Render public Vector3 MoveTo { get; set; } + /// + /// Whether or not the projection has changed from the last time it was read. + /// + /// A bool value indicating if the projection matrix has changed from the last retrieval. + public bool ProjectionChanged { get => projectionUpdated; } + + /// + /// Whether or not the camera view has changed from the last time it was read. + /// + /// A bool value indicating if the matrix has change from the last retrieval. + public bool ViewChanged { get => viewUpdated; } + public Camera(float width, float height) { if (width <= 0) throw new ArgumentException("Width can't be less than or equal to 0."); if (height <= 0) throw new ArgumentException("Height can't be less than or equal to 0."); @@ -165,9 +176,5 @@ namespace SlatedGameToolkit.Framework.Graphics.Render this.Height = height; this.CameraFront = -Vector3.UnitZ; } - - private void OnProjectionUpdated() { - projectionUpdateEvent?.Invoke(this, new EventArgs()); - } } } \ No newline at end of file diff --git a/src/SlatedGameToolkit.Framework/Graphics/Render/MeshBatch.cs b/src/SlatedGameToolkit.Framework/Graphics/Render/MeshBatch.cs index 774becb..0ebe499 100644 --- a/src/SlatedGameToolkit.Framework/Graphics/Render/MeshBatch.cs +++ b/src/SlatedGameToolkit.Framework/Graphics/Render/MeshBatch.cs @@ -32,8 +32,8 @@ namespace SlatedGameToolkit.Framework.Graphics.Render public MeshBatch(Camera camera, RenderProgram renderProgram = null, uint BatchVertexSize = 4096) { if (renderProgram == null) { - VertexShader vert = new VertexShader(EmbeddedResourceUtils.ReadEmbeddedResourceText("default.vert")); - FragmentShader frag = new FragmentShader(EmbeddedResourceUtils.ReadEmbeddedResourceText("default.frag")); + VertexShader vert = new VertexShader(EmbeddedResUtils.ReadEmbeddedResourceText("default.vert")); + FragmentShader frag = new FragmentShader(EmbeddedResUtils.ReadEmbeddedResourceText("default.frag")); renderProgram = new RenderProgram(null, vert, frag); } this.renderProgram = renderProgram; @@ -56,7 +56,6 @@ namespace SlatedGameToolkit.Framework.Graphics.Render texturedALoc = GLContext.GetUniformLocation(renderProgram.Handle, "textured"); vertexBuffers.defineVertexAttributes(definitions: definitions); - camera.projectionUpdateEvent += ProjectionMatrixChanged; GLContext.UniformMatrix4fv(projALoc, 1, false, camera.ProjectionMatrix.ToColumnMajorArray()); } @@ -146,17 +145,14 @@ namespace SlatedGameToolkit.Framework.Graphics.Render vertexBuffers.BufferVertices(data, true); vertexBuffers.BufferIndices(indices, true); GLContext.UniformMatrix4fv(modelALoc, 1, false, modelsMatrix.ToColumnMajorArray()); - GLContext.UniformMatrix4fv(viewALoc, 1, false, camera.ViewMatrix.ToColumnMajorArray()); + if (camera.ViewChanged) GLContext.UniformMatrix4fv(viewALoc, 1, false, camera.ViewMatrix.ToColumnMajorArray()); + if (camera.ProjectionChanged) GLContext.UniformMatrix4fv(projALoc, 1, false, camera.ProjectionMatrix.ToColumnMajorArray()); GLContext.MultiDrawElementsBaseVertex(PrimitiveType.Triangles, lengths, DrawElementsType.UnsignedInt, indiceOffsets, offsetIndex, verticeOffsets); dataIndex = 0; indicesIndex = 0; offsetIndex = 0; } - private void ProjectionMatrixChanged(object sender, EventArgs args) { - GLContext.UniformMatrix4fv(projALoc, 1, false, camera.ProjectionMatrix.ToColumnMajorArray()); - } - protected virtual void Dispose(bool disposing) { if (!disposed) @@ -173,7 +169,6 @@ namespace SlatedGameToolkit.Framework.Graphics.Render indices = null; lengths = null; verticeOffsets = null; - camera.projectionUpdateEvent -= ProjectionMatrixChanged; } }