From 0c94b168d2beaacca0599f98ef11e695fb13a44f Mon Sep 17 00:00:00 2001 From: avery Date: Tue, 10 Mar 2026 21:03:03 -0400 Subject: [PATCH] 2D Renderer V1.0B --- .idea/.idea.2DRenderer/.idea/.gitignore | 13 + .../.idea/dictionaries/project.xml | 7 + .idea/.idea.2DRenderer/.idea/indexLayout.xml | 8 + .idea/.idea.2DRenderer/.idea/misc.xml | 14 + .idea/.idea.2DRenderer/.idea/vcs.xml | 6 + 2DRenderer.sln | 16 + 2DRenderer.sln.DotSettings.user | 2 + 2DRenderer/2DRenderer.csproj | 26 + 2DRenderer/Camera2D.cs | 209 +++++++ 2DRenderer/Fragment.glsl | 22 + 2DRenderer/MarkerAttributes.cs | 9 + 2DRenderer/Renderer2DProfile.cs | 114 ++++ 2DRenderer/Sprite2D.cs | 167 ++++++ 2DRenderer/SpriteSheet2D.cs | 29 + 2DRenderer/Texture2D.cs | 63 ++ 2DRenderer/Vertex.glsl | 33 ++ .../bin/Debug/net9.0/2DRenderer.deps.json | 296 ++++++++++ 2DRenderer/bin/Debug/net9.0/2DRenderer.dll | Bin 0 -> 19968 bytes 2DRenderer/bin/Debug/net9.0/2DRenderer.pdb | Bin 0 -> 15324 bytes .../bin/Debug/net9.0/AwperativeKernel.dll | Bin 0 -> 35840 bytes .../bin/Debug/net9.0/AwperativeKernel.pdb | Bin 0 -> 23136 bytes .../obj/2DRenderer.csproj.nuget.dgspec.json | 77 +++ .../obj/2DRenderer.csproj.nuget.g.props | 15 + .../obj/2DRenderer.csproj.nuget.g.targets | 2 + ...CoreApp,Version=v9.0.AssemblyAttributes.cs | 4 + .../Debug/net9.0/2DRenderer.AssemblyInfo.cs | 22 + .../2DRenderer.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 15 + .../Debug/net9.0/2DRenderer.GlobalUsings.g.cs | 8 + .../obj/Debug/net9.0/2DRenderer.assets.cache | Bin 0 -> 8759 bytes .../2DRenderer.csproj.AssemblyReference.cache | Bin 0 -> 5560 bytes .../2DRenderer.csproj.CoreCompileInputs.cache | 1 + .../2DRenderer.csproj.FileListAbsolute.txt | 15 + .../Debug/net9.0/2DRenderer.csproj.Up2Date | 0 2DRenderer/obj/Debug/net9.0/2DRenderer.dll | Bin 0 -> 19968 bytes 2DRenderer/obj/Debug/net9.0/2DRenderer.pdb | Bin 0 -> 15324 bytes .../obj/Debug/net9.0/ref/2DRenderer.dll | Bin 0 -> 11264 bytes .../obj/Debug/net9.0/refint/2DRenderer.dll | Bin 0 -> 11264 bytes 2DRenderer/obj/project.assets.json | 539 ++++++++++++++++++ 2DRenderer/obj/project.nuget.cache | 23 + 2DRenderer/obj/project.packagespec.json | 1 + 2DRenderer/obj/rider.project.model.nuget.info | 1 + 2DRenderer/obj/rider.project.restore.info | 1 + 43 files changed, 1759 insertions(+) create mode 100644 .idea/.idea.2DRenderer/.idea/.gitignore create mode 100644 .idea/.idea.2DRenderer/.idea/dictionaries/project.xml create mode 100644 .idea/.idea.2DRenderer/.idea/indexLayout.xml create mode 100644 .idea/.idea.2DRenderer/.idea/misc.xml create mode 100644 .idea/.idea.2DRenderer/.idea/vcs.xml create mode 100644 2DRenderer.sln create mode 100644 2DRenderer.sln.DotSettings.user create mode 100644 2DRenderer/2DRenderer.csproj create mode 100644 2DRenderer/Camera2D.cs create mode 100644 2DRenderer/Fragment.glsl create mode 100644 2DRenderer/MarkerAttributes.cs create mode 100644 2DRenderer/Renderer2DProfile.cs create mode 100644 2DRenderer/Sprite2D.cs create mode 100644 2DRenderer/SpriteSheet2D.cs create mode 100644 2DRenderer/Texture2D.cs create mode 100644 2DRenderer/Vertex.glsl create mode 100644 2DRenderer/bin/Debug/net9.0/2DRenderer.deps.json create mode 100644 2DRenderer/bin/Debug/net9.0/2DRenderer.dll create mode 100644 2DRenderer/bin/Debug/net9.0/2DRenderer.pdb create mode 100644 2DRenderer/bin/Debug/net9.0/AwperativeKernel.dll create mode 100644 2DRenderer/bin/Debug/net9.0/AwperativeKernel.pdb create mode 100644 2DRenderer/obj/2DRenderer.csproj.nuget.dgspec.json create mode 100644 2DRenderer/obj/2DRenderer.csproj.nuget.g.props create mode 100644 2DRenderer/obj/2DRenderer.csproj.nuget.g.targets create mode 100644 2DRenderer/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs create mode 100644 2DRenderer/obj/Debug/net9.0/2DRenderer.AssemblyInfo.cs create mode 100644 2DRenderer/obj/Debug/net9.0/2DRenderer.AssemblyInfoInputs.cache create mode 100644 2DRenderer/obj/Debug/net9.0/2DRenderer.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 2DRenderer/obj/Debug/net9.0/2DRenderer.GlobalUsings.g.cs create mode 100644 2DRenderer/obj/Debug/net9.0/2DRenderer.assets.cache create mode 100644 2DRenderer/obj/Debug/net9.0/2DRenderer.csproj.AssemblyReference.cache create mode 100644 2DRenderer/obj/Debug/net9.0/2DRenderer.csproj.CoreCompileInputs.cache create mode 100644 2DRenderer/obj/Debug/net9.0/2DRenderer.csproj.FileListAbsolute.txt create mode 100644 2DRenderer/obj/Debug/net9.0/2DRenderer.csproj.Up2Date create mode 100644 2DRenderer/obj/Debug/net9.0/2DRenderer.dll create mode 100644 2DRenderer/obj/Debug/net9.0/2DRenderer.pdb create mode 100644 2DRenderer/obj/Debug/net9.0/ref/2DRenderer.dll create mode 100644 2DRenderer/obj/Debug/net9.0/refint/2DRenderer.dll create mode 100644 2DRenderer/obj/project.assets.json create mode 100644 2DRenderer/obj/project.nuget.cache create mode 100644 2DRenderer/obj/project.packagespec.json create mode 100644 2DRenderer/obj/rider.project.model.nuget.info create mode 100644 2DRenderer/obj/rider.project.restore.info diff --git a/.idea/.idea.2DRenderer/.idea/.gitignore b/.idea/.idea.2DRenderer/.idea/.gitignore new file mode 100644 index 0000000..60463c8 --- /dev/null +++ b/.idea/.idea.2DRenderer/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/modules.xml +/projectSettingsUpdater.xml +/contentModel.xml +/.idea.2DRenderer.iml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.idea.2DRenderer/.idea/dictionaries/project.xml b/.idea/.idea.2DRenderer/.idea/dictionaries/project.xml new file mode 100644 index 0000000..505a707 --- /dev/null +++ b/.idea/.idea.2DRenderer/.idea/dictionaries/project.xml @@ -0,0 +1,7 @@ + + + + awperative + + + \ No newline at end of file diff --git a/.idea/.idea.2DRenderer/.idea/indexLayout.xml b/.idea/.idea.2DRenderer/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/.idea/.idea.2DRenderer/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/.idea.2DRenderer/.idea/misc.xml b/.idea/.idea.2DRenderer/.idea/misc.xml new file mode 100644 index 0000000..104c42f --- /dev/null +++ b/.idea/.idea.2DRenderer/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/.idea/.idea.2DRenderer/.idea/vcs.xml b/.idea/.idea.2DRenderer/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/.idea.2DRenderer/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/2DRenderer.sln b/2DRenderer.sln new file mode 100644 index 0000000..2fd4334 --- /dev/null +++ b/2DRenderer.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "2DRenderer", "2DRenderer\2DRenderer.csproj", "{FC946AFB-4F3F-459B-8EBB-9AADEE689FEA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FC946AFB-4F3F-459B-8EBB-9AADEE689FEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC946AFB-4F3F-459B-8EBB-9AADEE689FEA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC946AFB-4F3F-459B-8EBB-9AADEE689FEA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC946AFB-4F3F-459B-8EBB-9AADEE689FEA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/2DRenderer.sln.DotSettings.user b/2DRenderer.sln.DotSettings.user new file mode 100644 index 0000000..ee7002e --- /dev/null +++ b/2DRenderer.sln.DotSettings.user @@ -0,0 +1,2 @@ + + True \ No newline at end of file diff --git a/2DRenderer/2DRenderer.csproj b/2DRenderer/2DRenderer.csproj new file mode 100644 index 0000000..8fc8b29 --- /dev/null +++ b/2DRenderer/2DRenderer.csproj @@ -0,0 +1,26 @@ + + + + net9.0 + _2DRenderer + enable + enable + + + + + + + + + + + + + + + ..\..\..\Build\Kernel\net8.0\AwperativeKernel.dll + + + + diff --git a/2DRenderer/Camera2D.cs b/2DRenderer/Camera2D.cs new file mode 100644 index 0000000..55c2069 --- /dev/null +++ b/2DRenderer/Camera2D.cs @@ -0,0 +1,209 @@ +using System.Reflection; +using AwperativeKernel; +using OpenTK.Graphics.OpenGL; +using OpenTK.Mathematics; +using OpenTK.Windowing.Common; +using StbImageSharp; + + +namespace Awperative.Renderer2D; + + +public class Camera2D : Component, IDisposable +{ + + + + /// Handle of the vertex array object + [MarkerAttributes.GLHandle] + internal int vertexArray; + + /// Handle of the buffer where all the instances are stored + [MarkerAttributes.GLHandle] + internal int instanceBuffer; + + + /// All sprites the camera is currently rendering + public List Sprites = []; + + /// Information on how sprite textures are organized, each index has a number corresponding to the amount of sprites with each texture + public List TextureGroups = []; + + + /// Background color of the camera + public static Color4 Background { + get => _background; + set { + _background = value; + GL.ClearColor(_background); + } + } private static Color4 _background; + + + + + + /// Initializes the camera! + public void Create() { + + instanceBuffer = GL.GenBuffer(); + GL.BindBuffer(BufferTarget.ArrayBuffer, instanceBuffer); + GL.BufferData(BufferTarget.ArrayBuffer, 0, 0, BufferUsage.DynamicDraw); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + + #region Vertex Array Object + + vertexArray = GL.GenVertexArray(); + GL.BindVertexArray(vertexArray); + + GL.BindBuffer(BufferTarget.ArrayBuffer, Renderer2DProfile.VertexBufferHandle); + GL.VertexAttribPointer(0, 2, VertexAttribPointerType.Float, false, 2 * sizeof(float), 0); + GL.EnableVertexAttribArray(0); + + + GL.BindBuffer(BufferTarget.ArrayBuffer, instanceBuffer); + + + GL.VertexAttribPointer(1, 2, VertexAttribPointerType.Float, false, 9 * sizeof(float), 0); + GL.EnableVertexAttribArray(1); + GL.VertexAttribDivisor(1, 1); + + GL.VertexAttribPointer(2, 2, VertexAttribPointerType.Float, false, 9 * sizeof(float), 2 * sizeof(float)); + GL.EnableVertexAttribArray(2); + GL.VertexAttribDivisor(2, 1); + + GL.VertexAttribPointer(3, 1, VertexAttribPointerType.Float, false, 9 * sizeof(float), 4 * sizeof(float)); + GL.EnableVertexAttribArray(3); + GL.VertexAttribDivisor(3, 1); + + GL.VertexAttribPointer(4, 4, VertexAttribPointerType.Float, false, 9 * sizeof(float), 5 * sizeof(float)); + GL.EnableVertexAttribArray(4); + GL.VertexAttribDivisor(4, 1); + + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + GL.BindVertexArray(0); + + #endregion + + OnResize(new ResizeEventArgs(AwperativeBase.Size.X, AwperativeBase.Size.Y)); + AwperativeBase.Resize += OnResize; + + MapTextures(); + } + + + + /// Clears OpenGL of leftover buffers + public void Dispose() { + GL.DeleteBuffer(instanceBuffer); + GL.DeleteVertexArray(vertexArray); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + GL.BindVertexArray(0); + GC.SuppressFinalize(this); + } + + + + /// Fixes viewport info and updates uniforms + private void OnResize(ResizeEventArgs e) { + GL.Viewport(0, 0, e.Width, e.Height); + int uniform = GL.GetUniformLocation(Renderer2DProfile.ProgramHandle, "viewport"); + GL.UseProgram(Renderer2DProfile.ProgramHandle); + GL.Uniform2f(uniform, e.Width, e.Height); + GL.UseProgram(0); + } + + + /// Registers a sprite into the camera + internal void Add(Sprite2D sprite) { + sprite.Index = Sprites.Count; + Sprites.Add(sprite); + + MapTextures(); + } + + + /// Removes a sprite from the camera + internal void Remove(Sprite2D __sprite) { + Sprites.Remove(__sprite); + + MapTextures(); + } + + + /// Maps textures and updates the OpenGL buffer! Also sorts all sprites belonging to the camera by texture order; to minimize swapping + public void MapTextures() { + + List InstanceData = []; + + Sprites.Sort(Renderer2DProfile.TextureSorter); + TextureGroups.Clear(); + + Texture2D currentTexture = null; + int currentCount = 0; + + for(int i = 0; i < Sprites.Count; i++) { + if (Sprites[i].source != null) { + //todo: tex crop + if (currentTexture == null) { + currentTexture = Sprites[i].source; + } else if (Sprites[i].source != currentTexture) { + + if (currentTexture.Handle != -1) { + TextureGroups.Add(currentCount); + } + + currentTexture = Sprites[i].source; + currentCount = 0; + } + + InstanceData.AddRange([Sprites[i].X, Sprites[i].Y, Sprites[i].Width, Sprites[i].Height, Sprites[i].Rotation, + Sprites[i].cropX, Sprites[i].cropY, Sprites[i].cropWidth, Sprites[i].cropHeight + ]); + } else { + InstanceData.AddRange([..new int[9]]); + } + + Sprites[i].Index = i; + currentCount++; + } + + TextureGroups.Add(currentCount); + + GL.BindBuffer(BufferTarget.ArrayBuffer, instanceBuffer); + GL.BufferData(BufferTarget.ArrayBuffer, InstanceData.Count * sizeof(float), InstanceData.ToArray(), BufferUsage.DynamicDraw); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + } + + + + /// Draws all the sprites belonging to the camera + public void Draw() { + + GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); + GL.ActiveTexture(TextureUnit.Texture0); + + int instances = 0; + foreach (int group in TextureGroups) { + + Texture2D tex = Sprites[instances].source; + if(tex == null) continue; + + GL.BindTexture(TextureTarget.Texture2d, tex.Handle); + + GL.UseProgram(Renderer2DProfile.ProgramHandle); + GL.BindVertexArray(vertexArray); + GL.BindBuffer(BufferTarget.ElementArrayBuffer, Renderer2DProfile.IndexBufferHandle); + GL.DrawElementsInstancedBaseInstance(PrimitiveType.Triangles, 6, DrawElementsType.UnsignedInt, 0, group, (uint) instances); + instances += group; + + GL.BindVertexArray(0); + GL.UseProgram(0); + } + + AwperativeBase.SwapBuffers(); + } + + + +} \ No newline at end of file diff --git a/2DRenderer/Fragment.glsl b/2DRenderer/Fragment.glsl new file mode 100644 index 0000000..c0faee4 --- /dev/null +++ b/2DRenderer/Fragment.glsl @@ -0,0 +1,22 @@ +#version 330 core + +out vec4 fragColor; + +in vec2 texuv; +in vec4 crop; + +uniform sampler2D ftexture; + +void main() { + + float fixX = texuv.x / 2 + .5; + float fixY = texuv.y / 2 + .5f; + + float cropX = fixX * crop.z; + float cropY = fixY * crop.w; + + float offX = cropX + crop.x; + float offY = cropY + crop.y; + + fragColor = texture(ftexture, vec2(offX, offY)); +} diff --git a/2DRenderer/MarkerAttributes.cs b/2DRenderer/MarkerAttributes.cs new file mode 100644 index 0000000..3144745 --- /dev/null +++ b/2DRenderer/MarkerAttributes.cs @@ -0,0 +1,9 @@ +namespace Awperative.Renderer2D; + + +public static class MarkerAttributes +{ + /// Shows that the given object is an OpenGL handle + [AttributeUsage(AttributeTargets.All)] + public class GLHandle : Attribute {} +} \ No newline at end of file diff --git a/2DRenderer/Renderer2DProfile.cs b/2DRenderer/Renderer2DProfile.cs new file mode 100644 index 0000000..a258cf2 --- /dev/null +++ b/2DRenderer/Renderer2DProfile.cs @@ -0,0 +1,114 @@ +using System.Reflection; +using OpenTK.Graphics.OpenGL; + + +namespace Awperative.Renderer2D; + + +public static class Renderer2DProfile +{ + /// Handle of index buffer + [MarkerAttributes.GLHandle] + public static readonly int IndexBufferHandle; + + /// Vertex buffer handle + [MarkerAttributes.GLHandle] + public static readonly int VertexBufferHandle; + + + + /// Program handle + [MarkerAttributes.GLHandle] + public static readonly int ProgramHandle; + + public static readonly float[] Vertices = [ + 1, 1, + -1, 1, + 1, -1, + -1, -1 + ]; + + public static readonly int[] Indices = [ + 3, 2, 1, + 1, 0, 2 + ]; + + public static readonly Comparer TextureSorter = Comparer.Create((a, b) => { + + if(a.source == b.source) return 0; + if (a.source == null) return -1; + if (b.source == null) return 1; + + int result = a.source.Handle.CompareTo(b.source.Handle); + return result != 0 ? result : a.GetHashCode().CompareTo(b.GetHashCode()); + }); + + static Renderer2DProfile() { + + #region Shader And Program Creation + + ProgramHandle = GL.CreateProgram(); + GL.UseProgram(ProgramHandle); + + + Assembly currentAssembly = Assembly.GetExecutingAssembly(); + + + int vertexShader, fragmentShader; + + using (StreamReader vertexStreamReader = new(currentAssembly.GetManifestResourceStream("_2DRenderer.Vertex.glsl"))) { + vertexShader = GL.CreateShader(ShaderType.VertexShader); + GL.ShaderSource(vertexShader, vertexStreamReader.ReadToEnd()); + GL.CompileShader(vertexShader); + GL.AttachShader(ProgramHandle, vertexShader); + } + + using (StreamReader fragmentStreamReader = new(currentAssembly.GetManifestResourceStream("_2DRenderer.Fragment.glsl"))) { + fragmentShader = GL.CreateShader(ShaderType.FragmentShader); + GL.ShaderSource(fragmentShader, fragmentStreamReader.ReadToEnd()); + GL.CompileShader(fragmentShader); + GL.AttachShader(ProgramHandle, fragmentShader); + } + + GL.LinkProgram(ProgramHandle); + + GL.DetachShader(ProgramHandle, vertexShader); + GL.DeleteShader(vertexShader); + + GL.DetachShader(ProgramHandle, fragmentShader); + GL.DeleteShader(fragmentShader); + + GL.Uniform1i(GL.GetUniformLocation(ProgramHandle, "ftexture"), 0); + GL.UseProgram(0); + + + #endregion + + #region Buffer Creation + + + IndexBufferHandle = GL.GenBuffer(); + GL.BindBuffer(BufferTarget.ElementArrayBuffer, IndexBufferHandle); + GL.BufferData(BufferTarget.ElementArrayBuffer, Indices.Length * sizeof(int), Indices, BufferUsage.StaticDraw); + GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0); + + VertexBufferHandle = GL.GenBuffer(); + GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferHandle); + GL.BufferData(BufferTarget.ArrayBuffer, Vertices.Length * sizeof(float), Vertices, BufferUsage.DynamicDraw); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + + + #endregion + + } + + public static void Dispose() { + GL.DeleteProgram(ProgramHandle); + + GL.DeleteBuffer(IndexBufferHandle); + GL.DeleteBuffer(VertexBufferHandle); + + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + } + +} \ No newline at end of file diff --git a/2DRenderer/Sprite2D.cs b/2DRenderer/Sprite2D.cs new file mode 100644 index 0000000..439c5a4 --- /dev/null +++ b/2DRenderer/Sprite2D.cs @@ -0,0 +1,167 @@ +using AwperativeKernel; +using OpenTK.Graphics.OpenGLES2; +using OpenTK.Graphics.Wgl; + + +namespace Awperative.Renderer2D; + + +public class Sprite2D : Component +{ + + //vec4 color, vec2 pos, vec2 scale, float rot + //9 THINGS + + public float X { + get => _x; + set { + _x = value; + GL.BindBuffer(BufferTarget.ArrayBuffer, cam.instanceBuffer); + GL.BufferSubData(BufferTarget.ArrayBuffer, Index * 9 * sizeof(float), sizeof(float), in _x); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + } + } private float _x; + + + + public float Y { + get => _y; + set { + _y = value; + GL.BindBuffer(BufferTarget.ArrayBuffer, cam.instanceBuffer); + GL.BufferSubData(BufferTarget.ArrayBuffer, Index * 9 * sizeof(float) + sizeof(float), sizeof(float), in _y); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + } + } private float _y; + + + + public float Width { + get => _width; + set { + _width = value; + GL.BindBuffer(BufferTarget.ArrayBuffer, cam.instanceBuffer); + GL.BufferSubData(BufferTarget.ArrayBuffer, Index * 9 * sizeof(float) + 2 * sizeof(float), sizeof(float), in _width); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + } + } private float _width; + + + + public float Height { + get => _height; + set { + _height = value; + GL.BindBuffer(BufferTarget.ArrayBuffer, cam.instanceBuffer); + GL.BufferSubData(BufferTarget.ArrayBuffer, Index * 9 * sizeof(float) + 3 * sizeof(float), sizeof(float), in _height); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + } + } private float _height; + + + + public float Rotation { + get => _rotation; + set { + _rotation = value; + GL.BindBuffer(BufferTarget.ArrayBuffer, cam.instanceBuffer); + GL.BufferSubData(BufferTarget.ArrayBuffer, Index * 9 * sizeof(float) + 4 * sizeof(float), sizeof(float), in _rotation); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + } + } private float _rotation; + + internal int Index; + + public Camera2D cam; + + public Texture2D source { get; private set; } + + public float cropX { + get => _cropX; + set { + _cropX = value; + GL.BindBuffer(BufferTarget.ArrayBuffer, cam.instanceBuffer); + GL.BufferSubData(BufferTarget.ArrayBuffer, Index * 9 * sizeof(float) + 5 * sizeof(float), sizeof(float), in _cropX); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + } + } private float _cropX; + + + public float cropY { + get => _cropY; + set { + _cropY = value; + GL.BindBuffer(BufferTarget.ArrayBuffer, cam.instanceBuffer); + GL.BufferSubData(BufferTarget.ArrayBuffer, Index * 9 * sizeof(float) + 6 * sizeof(float), sizeof(float), in _cropY); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + } + } private float _cropY; + + + + public float cropWidth { + get => _cropWidth; + set { + _cropWidth = value; + GL.BindBuffer(BufferTarget.ArrayBuffer, cam.instanceBuffer); + GL.BufferSubData(BufferTarget.ArrayBuffer, Index * 9 * sizeof(float) + 7 * sizeof(float), sizeof(float), in _cropWidth); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + } + } private float _cropWidth; + + + public float cropHeight { + get => _cropHeight; + set { + _cropHeight = value; + GL.BindBuffer(BufferTarget.ArrayBuffer, cam.instanceBuffer); + GL.BufferSubData(BufferTarget.ArrayBuffer, Index * 9 * sizeof(float) + 4 * sizeof(float), sizeof(float), in _cropHeight); + GL.BindBuffer(BufferTarget.ArrayBuffer, 0); + } + } private float _cropHeight; + + + public void Create() { + _x = 0; + _y = 0; + _width = 1; + _height = 1; + _rotation = 0; + source = new Texture2D(); + + _cropWidth = 1; + _cropHeight = 1; + _cropX = 0; + _cropY = 0; + + cam = Scene.Get(); + + if (cam == null) { + Debug.LogError("No Camera2D found!"); + }else cam.Add(this); + } + + //todo: add flipping sprites + //todo: particles and debugging + + public void SetTexture(Texture2D texture) { + source = texture; + } + + + public void CropToSheet(int __index) { + if (source is not SpriteSheet2D spriteSheet) return; + + int tilesPerRow = source.width / (spriteSheet.cellWidth + spriteSheet.tileSpacingX); + + + int x = __index % tilesPerRow * (spriteSheet.cellWidth + spriteSheet.tileSpacingX); + int y = __index / tilesPerRow * (spriteSheet.cellHeight + spriteSheet.tileSpacingY); + + cropX = (float) x / spriteSheet.width; + cropY = (float) y / spriteSheet.height; + + cropWidth = (float) spriteSheet.cellWidth / spriteSheet.width; + cropHeight = (float) spriteSheet.cellHeight / spriteSheet.height; + } +} \ No newline at end of file diff --git a/2DRenderer/SpriteSheet2D.cs b/2DRenderer/SpriteSheet2D.cs new file mode 100644 index 0000000..8589fb9 --- /dev/null +++ b/2DRenderer/SpriteSheet2D.cs @@ -0,0 +1,29 @@ +using AwperativeKernel; + + +namespace Awperative.Renderer2D; + + +public class SpriteSheet2D : Texture2D +{ + public int cellWidth; + public int cellHeight; + + public int tileSpacingX; + public int tileSpacingY; + + public SpriteSheet2D(string __path, int __cellWidth, int __cellHeight, int __tileSpacingX, int __tileSpacingY) : base(__path) { + float widthRatio = (float) width / __cellWidth; + float heightRatio = (float) height / __cellHeight; + + if (__tileSpacingX > width || __tileSpacingY > height) Debug.LogWarning("Spritesheet cell size is bigger than the source image!"); + if (Math.Truncate(widthRatio) != widthRatio || Math.Truncate(heightRatio) != heightRatio) Debug.LogWarning("Spritesheet cell size is not divisible by image size! Possible inconsistency when indexing the sheet!"); + + + cellWidth = __cellWidth; + cellHeight = __cellHeight; + + tileSpacingX = __tileSpacingX; + tileSpacingY = __tileSpacingY; + } +} \ No newline at end of file diff --git a/2DRenderer/Texture2D.cs b/2DRenderer/Texture2D.cs new file mode 100644 index 0000000..2ac6ec5 --- /dev/null +++ b/2DRenderer/Texture2D.cs @@ -0,0 +1,63 @@ +using OpenTK.Graphics.OpenGL; +using StbImageSharp; + + +namespace Awperative.Renderer2D; + + +/// Holds a reference to a texture stored in VRAM +public class Texture2D : IDisposable +{ + /// Handle of the object in open GL. + [MarkerAttributes.GLHandle] + public readonly int Handle; + + + /// Width of the source texture + public readonly int width; + + /// Height of the source texture + public readonly int height; + + + + /// Clears the used VRAM + public void Dispose() { + GL.DeleteTexture(Handle); + GL.BindTexture(TextureTarget.Texture2d, 0); + GC.SuppressFinalize(this); + } + + + + /// Loads and creates a texture from a given file path + public Texture2D(string path) { + ImageResult image = ImageResult.FromStream(File.OpenRead(path), ColorComponents.RedGreenBlueAlpha); + + width = image.Width; + height = image.Height; + + Handle = GL.GenTexture(); + GL.BindTexture(TextureTarget.Texture2d, Handle); + GL.TexImage2D(TextureTarget.Texture2d, 0, InternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, image.Data); + + GL.TexParameteri(TextureTarget.Texture2d, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); + GL.TexParameteri(TextureTarget.Texture2d, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest); + + GL.BindTexture(TextureTarget.Texture2d, 0); + } + + + + public Texture2D() { + width = 1; + height = 1; + + Handle = GL.GenTexture(); + GL.BindTexture(TextureTarget.Texture2d, Handle); + GL.TexImage2D(TextureTarget.Texture2d, 0, InternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, [0,0,0,0]); + + GL.BindTexture(TextureTarget.Texture2d, 0); + } + +} \ No newline at end of file diff --git a/2DRenderer/Vertex.glsl b/2DRenderer/Vertex.glsl new file mode 100644 index 0000000..db38957 --- /dev/null +++ b/2DRenderer/Vertex.glsl @@ -0,0 +1,33 @@ +#version 330 core + +layout (location = 0) in vec2 pos; +//instance color +layout (location = 1) in vec2 ipos; +layout (location = 2) in vec2 iscale; +layout (location = 3) in float irot; +layout (location = 4) in vec4 icrop; + +uniform vec2 viewport; + +out vec2 texuv; +out vec4 crop; + +void main() { + texuv = pos; + crop = icrop; + + float scaX = pos.x * iscale.x; + float scaY = pos.y * iscale.y; + + float rotX = scaX * cos(irot) - scaY * sin(irot); + float rotY = scaX * sin(irot) + scaY * cos(irot); + + float finX = rotX + ipos.x; + float finY = rotY + ipos.y; + + //todo: fix scaling matrix to prevent vertical crunch! + float reaX = finX / (viewport.x / viewport.y); + float reaY = finY / 1; + + gl_Position = vec4(reaX, reaY, 0, 1); +} diff --git a/2DRenderer/bin/Debug/net9.0/2DRenderer.deps.json b/2DRenderer/bin/Debug/net9.0/2DRenderer.deps.json new file mode 100644 index 0000000..3792eb7 --- /dev/null +++ b/2DRenderer/bin/Debug/net9.0/2DRenderer.deps.json @@ -0,0 +1,296 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v9.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v9.0": { + "2DRenderer/1.0.0": { + "dependencies": { + "OpenTK": "5.0.0-pre.15", + "StbImageSharp": "2.30.15", + "AwperativeKernel": "1.0.0.0" + }, + "runtime": { + "2DRenderer.dll": {} + } + }, + "OpenTK/5.0.0-pre.15": { + "dependencies": { + "OpenTK.Audio": "5.0.0-pre.15", + "OpenTK.Compute": "5.0.0-pre.15", + "OpenTK.Core": "5.0.0-pre.15", + "OpenTK.Graphics": "5.0.0-pre.15", + "OpenTK.Input": "5.0.0-pre.15", + "OpenTK.Mathematics": "5.0.0-pre.15", + "OpenTK.Platform": "5.0.0-pre.15", + "OpenTK.Windowing.Common": "5.0.0-pre.15", + "OpenTK.Windowing.Desktop": "5.0.0-pre.15", + "OpenTK.Windowing.GraphicsLibraryFramework": "5.0.0-pre.15" + } + }, + "OpenTK.Audio/5.0.0-pre.15": { + "dependencies": { + "OpenTK.Core": "5.0.0-pre.15", + "OpenTK.Mathematics": "5.0.0-pre.15" + }, + "runtime": { + "lib/net8.0/OpenTK.Audio.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "OpenTK.Compute/5.0.0-pre.15": { + "runtime": { + "lib/net8.0/OpenTK.Compute.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "OpenTK.Core/5.0.0-pre.15": { + "runtime": { + "lib/net8.0/OpenTK.Core.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "OpenTK.Graphics/5.0.0-pre.15": { + "dependencies": { + "OpenTK.Core": "5.0.0-pre.15", + "OpenTK.Mathematics": "5.0.0-pre.15" + }, + "runtime": { + "lib/net8.0/OpenTK.Graphics.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "OpenTK.Input/5.0.0-pre.15": { + "runtime": { + "lib/net8.0/OpenTK.Input.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "OpenTK.Mathematics/5.0.0-pre.15": { + "dependencies": { + "System.Runtime.CompilerServices.Unsafe": "6.0.0" + }, + "runtime": { + "lib/net8.0/OpenTK.Mathematics.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "OpenTK.Platform/5.0.0-pre.15": { + "runtime": { + "lib/net8.0/OpenTK.Platform.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "OpenTK.redist.glfw/3.4.0.44": { + "runtimeTargets": { + "runtimes/linux-x64/native/libglfw.so.3": { + "rid": "linux-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-arm64/native/libglfw.3.dylib": { + "rid": "osx-arm64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/osx-x64/native/libglfw.3.dylib": { + "rid": "osx-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/win-x64/native/glfw3.dll": { + "rid": "win-x64", + "assetType": "native", + "fileVersion": "0.0.0.0" + }, + "runtimes/win-x86/native/glfw3.dll": { + "rid": "win-x86", + "assetType": "native", + "fileVersion": "0.0.0.0" + } + } + }, + "OpenTK.Windowing.Common/5.0.0-pre.15": { + "dependencies": { + "OpenTK.Core": "5.0.0-pre.15", + "OpenTK.Mathematics": "5.0.0-pre.15" + }, + "runtime": { + "lib/net8.0/OpenTK.Windowing.Common.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "OpenTK.Windowing.Desktop/5.0.0-pre.15": { + "dependencies": { + "OpenTK.Core": "5.0.0-pre.15", + "OpenTK.Mathematics": "5.0.0-pre.15", + "OpenTK.Windowing.Common": "5.0.0-pre.15", + "OpenTK.Windowing.GraphicsLibraryFramework": "5.0.0-pre.15" + }, + "runtime": { + "lib/net8.0/OpenTK.Windowing.Desktop.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "OpenTK.Windowing.GraphicsLibraryFramework/5.0.0-pre.15": { + "dependencies": { + "OpenTK.Core": "5.0.0-pre.15", + "OpenTK.redist.glfw": "3.4.0.44" + }, + "runtime": { + "lib/net8.0/OpenTK.Windowing.GraphicsLibraryFramework.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.0.0" + } + } + }, + "StbImageSharp/2.30.15": { + "runtime": { + "lib/netstandard2.0/StbImageSharp.dll": { + "assemblyVersion": "2.30.15.0", + "fileVersion": "2.30.15.0" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": {}, + "AwperativeKernel/1.0.0.0": { + "runtime": { + "AwperativeKernel.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + } + } + }, + "libraries": { + "2DRenderer/1.0.0": { + "type": "project", + "serviceable": false, + "sha512": "" + }, + "OpenTK/5.0.0-pre.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CDGbelIIaGCBNPekNqh/zQsy63q+PTrVOWWWi7A3d/QrHVd0T5nDhSqqJpD77Xs/qHFRDhL1C3+Qh5CDYJyzig==", + "path": "opentk/5.0.0-pre.15", + "hashPath": "opentk.5.0.0-pre.15.nupkg.sha512" + }, + "OpenTK.Audio/5.0.0-pre.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-lX3FR1RvXz+xjEGl5MFvGWQg7M/z4qdeHB6vdI5F1K1ODyjeuDlSnEc7hjA9fSdmKKEq3K1yCcU4kGgs4UC0ZQ==", + "path": "opentk.audio/5.0.0-pre.15", + "hashPath": "opentk.audio.5.0.0-pre.15.nupkg.sha512" + }, + "OpenTK.Compute/5.0.0-pre.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uaT2JJGUEvlLYwKga5/cxAm7LiFdRKPjpWPE6tnhg2fYzHwX/6WfVCXU9xvYRLUqYHZIU7dYzJOzlXFZuDZNAw==", + "path": "opentk.compute/5.0.0-pre.15", + "hashPath": "opentk.compute.5.0.0-pre.15.nupkg.sha512" + }, + "OpenTK.Core/5.0.0-pre.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Y/sir5MXEoGB9b4bmCSXknEtjbBIoqaRaeW5XnhIvY8FWBEsxT21jqq5zF1/TXjyCdcNkcfzPq70T6P4FYE5uQ==", + "path": "opentk.core/5.0.0-pre.15", + "hashPath": "opentk.core.5.0.0-pre.15.nupkg.sha512" + }, + "OpenTK.Graphics/5.0.0-pre.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-0oobd6dbdmKazMiBtiExv8hzlcJIxkEAD/ozyGX2T0WYPCMv0iZXRqqFl/qJ+18tfhIGoQ7USIp5Sw9ZxhDgjA==", + "path": "opentk.graphics/5.0.0-pre.15", + "hashPath": "opentk.graphics.5.0.0-pre.15.nupkg.sha512" + }, + "OpenTK.Input/5.0.0-pre.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-O30U9gMveJW6bYPxxC7nYZVoViwlxpImMnIuWywcd1JnUfvScgDlWFwhPO7xBdaPu8FYa29N0yBRsl5eJufPcg==", + "path": "opentk.input/5.0.0-pre.15", + "hashPath": "opentk.input.5.0.0-pre.15.nupkg.sha512" + }, + "OpenTK.Mathematics/5.0.0-pre.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JFflFJNMLV0E/08bqsnzNXU/aUJJwy8xCZVU1ECMFvi1lKoCXi/FHSLJKW+s+p+bbTZ6HpPzdc+o4TBerecrjQ==", + "path": "opentk.mathematics/5.0.0-pre.15", + "hashPath": "opentk.mathematics.5.0.0-pre.15.nupkg.sha512" + }, + "OpenTK.Platform/5.0.0-pre.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5GCXACJm8ybTrumj2jb7c5oGNQyb/LwWCNbJsl72IeY/miBTMBPXM0RD8oXBXd/oH36pKz5EwzaRl/MT6/WajA==", + "path": "opentk.platform/5.0.0-pre.15", + "hashPath": "opentk.platform.5.0.0-pre.15.nupkg.sha512" + }, + "OpenTK.redist.glfw/3.4.0.44": { + "type": "package", + "serviceable": true, + "sha512": "sha512-HEjbdk0wWxSRrXHl3DSmrA8trecndgJpAHHloJJ1vPseNfeu/ynmrH/LturU1KguRn4r3IzZ81UIp5xRjnyahg==", + "path": "opentk.redist.glfw/3.4.0.44", + "hashPath": "opentk.redist.glfw.3.4.0.44.nupkg.sha512" + }, + "OpenTK.Windowing.Common/5.0.0-pre.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-wPoz4uW8f3/zNHFVSWgMQPx5yhzUBKlpwdJp5PDiemZyO63tBJKaaty3TIJakDDdG/TioSIjnQb0YY1tEBkjuA==", + "path": "opentk.windowing.common/5.0.0-pre.15", + "hashPath": "opentk.windowing.common.5.0.0-pre.15.nupkg.sha512" + }, + "OpenTK.Windowing.Desktop/5.0.0-pre.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Er5s+lSp5VwJ5NzrSjRMmhBpZdVGEFswuIE+joGtTUtIzznws6/Owi30tBaAC/byHHPrgH5hGegwlvEP5rDKRA==", + "path": "opentk.windowing.desktop/5.0.0-pre.15", + "hashPath": "opentk.windowing.desktop.5.0.0-pre.15.nupkg.sha512" + }, + "OpenTK.Windowing.GraphicsLibraryFramework/5.0.0-pre.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-o+t3c2tFiNpqkvTZ1tKw+Anjm76t+OvkiBVHUuSQ5WMBI/O+uzpZYEl0pdSRDpL3UT3udJkM8iefIqK2+YzAxA==", + "path": "opentk.windowing.graphicslibraryframework/5.0.0-pre.15", + "hashPath": "opentk.windowing.graphicslibraryframework.5.0.0-pre.15.nupkg.sha512" + }, + "StbImageSharp/2.30.15": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7QqbupVhz2kcFUPTgMw4iHR9rYDHGundzzee19Mwmd1typ2Lnv8EVJcLJxlkeBM2+4ex0NwsMtdbGSJctp1XCQ==", + "path": "stbimagesharp/2.30.15", + "hashPath": "stbimagesharp.2.30.15.nupkg.sha512" + }, + "System.Runtime.CompilerServices.Unsafe/6.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==", + "path": "system.runtime.compilerservices.unsafe/6.0.0", + "hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512" + }, + "AwperativeKernel/1.0.0.0": { + "type": "reference", + "serviceable": false, + "sha512": "" + } + } +} \ No newline at end of file diff --git a/2DRenderer/bin/Debug/net9.0/2DRenderer.dll b/2DRenderer/bin/Debug/net9.0/2DRenderer.dll new file mode 100644 index 0000000000000000000000000000000000000000..bf819028b0bdbce63962ab0e5f527b6b933aa3b3 GIT binary patch literal 19968 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 IKb!~tH(|EC3;+NC literal 0 HcmV?d00001 diff --git a/2DRenderer/bin/Debug/net9.0/2DRenderer.pdb b/2DRenderer/bin/Debug/net9.0/2DRenderer.pdb new file mode 100644 index 0000000000000000000000000000000000000000..796c18444f7407ec0a40eea71e463831f31afc50 GIT binary patch literal 15324 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 literal 0 HcmV?d00001 diff --git a/2DRenderer/bin/Debug/net9.0/AwperativeKernel.dll b/2DRenderer/bin/Debug/net9.0/AwperativeKernel.dll new file mode 100644 index 0000000000000000000000000000000000000000..cb290581b635f5d5a4f13be0b5a427be67393475 GIT binary patch literal 35840 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 literal 0 HcmV?d00001 diff --git a/2DRenderer/bin/Debug/net9.0/AwperativeKernel.pdb b/2DRenderer/bin/Debug/net9.0/AwperativeKernel.pdb new file mode 100644 index 0000000000000000000000000000000000000000..614ab423b2c08a85b8ca622a0cd5327fc3346f9b GIT binary patch literal 23136 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 + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + /home/avery/.nuget/packages/ + /home/avery/.nuget/packages/ + PackageReference + 6.14.0 + + + + + \ No newline at end of file diff --git a/2DRenderer/obj/2DRenderer.csproj.nuget.g.targets b/2DRenderer/obj/2DRenderer.csproj.nuget.g.targets new file mode 100644 index 0000000..3dc06ef --- /dev/null +++ b/2DRenderer/obj/2DRenderer.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/2DRenderer/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs b/2DRenderer/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs new file mode 100644 index 0000000..feda5e9 --- /dev/null +++ b/2DRenderer/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")] diff --git a/2DRenderer/obj/Debug/net9.0/2DRenderer.AssemblyInfo.cs b/2DRenderer/obj/Debug/net9.0/2DRenderer.AssemblyInfo.cs new file mode 100644 index 0000000..0989d59 --- /dev/null +++ b/2DRenderer/obj/Debug/net9.0/2DRenderer.AssemblyInfo.cs @@ -0,0 +1,22 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("2DRenderer")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] +[assembly: System.Reflection.AssemblyProductAttribute("2DRenderer")] +[assembly: System.Reflection.AssemblyTitleAttribute("2DRenderer")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/2DRenderer/obj/Debug/net9.0/2DRenderer.AssemblyInfoInputs.cache b/2DRenderer/obj/Debug/net9.0/2DRenderer.AssemblyInfoInputs.cache new file mode 100644 index 0000000..f64dc0f --- /dev/null +++ b/2DRenderer/obj/Debug/net9.0/2DRenderer.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +b66822f1dc2e7c7e4f084c2892a366b2fa05b69f96b4d07aaa7c3d805ea85175 diff --git a/2DRenderer/obj/Debug/net9.0/2DRenderer.GeneratedMSBuildEditorConfig.editorconfig b/2DRenderer/obj/Debug/net9.0/2DRenderer.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..91742f0 --- /dev/null +++ b/2DRenderer/obj/Debug/net9.0/2DRenderer.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,15 @@ +is_global = true +build_property.TargetFramework = net9.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = _2DRenderer +build_property.ProjectDir = /home/avery/Projects/Awperative/Modules/2DRenderer/2DRenderer/ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.EffectiveAnalysisLevelStyle = 9.0 +build_property.EnableCodeStyleSeverity = diff --git a/2DRenderer/obj/Debug/net9.0/2DRenderer.GlobalUsings.g.cs b/2DRenderer/obj/Debug/net9.0/2DRenderer.GlobalUsings.g.cs new file mode 100644 index 0000000..8578f3d --- /dev/null +++ b/2DRenderer/obj/Debug/net9.0/2DRenderer.GlobalUsings.g.cs @@ -0,0 +1,8 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/2DRenderer/obj/Debug/net9.0/2DRenderer.assets.cache b/2DRenderer/obj/Debug/net9.0/2DRenderer.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..a8eb3a4a543eb2a23c2e565e1c0df578ab42fbec GIT binary patch literal 8759 zcmd5?TW{P{5N;u9658|@dZFnRNtEvM=R{ zC;kRVNT@s^BqV+j61?%k3w#rwvzhgt-Sw*3Z7t2FXFTW3XM6n3cutq*=cW(s+qduE z|Ng%4)3wzasYg0sJ z)9_1cA~8d&xM8h{*bGA9CmV)UvYo)3Fh-5hkuVa*^$F8;R!m~jw|%6WL@AV z$3@=SHRYZUXFMOlIM2NeT`O4)BCpw{E=fD?^JvEBF^t!8T^uV+x4!1(+9Ex}Mh4wi_lsJt3kp4bYa zjr_P&_%Ea@+*B)YpeHjxPhtF^5zaVSaXccnbt?+Z8^+iuqp~=$eA|lb8=$o1WTilc z%Vfx1o|Z1(z+d9DGmxhZU6$iSct%w66UP%2BcbDpC>GJCQxvgL@?&dNn3Kev|SK(9S{VAkxS~5-pH?Xs?hbIylLdXfx^*n^5;=Ea0t7tZuFHYupo=*!T&b)9EZzFj#kDR>o+{2bhoB86T-4U{8zByTU zh@_c!PSP(AIWvHqoKvbue*>#gzdzMvF5IBk@}QeA)B%3-07NgGLh2BD>Ww-(rh*(>;9@_ zLz@Jo<4A#Xu0L*9lAK~7WwP-#)EKpF2MgfgCP zg<nLB zUk%hU(IGLQ-_xp_Vc={>7^sz^!(c+6r=o1RDrZ=DRZdu_#iGM93jH24Geg0dnNU#c zMTg=#^lhx_86wWygos))Iz%_1&-090uKF1k&g_JRS~WT>W6*cxtAJtS%um>;g`>kZ z4ty4_a}Ur4b^`wp-&gBj!j4G6m$L^Ee)V?QGJTSBwWhLzLQjBqP|oNq)4eU# z98v9x^R=ex6s@W*ZKvm=!CKi-()403)h^9CHMF_{qdGMjFzOVU*Xz~{)jG;HbZC0r zhR$%K`E2(jf755G(TeK+E@<{WsyjtJa{uD8T(05%Mb4H|_s%}Vgj}(;eTc5x*yNF& zy&f6c1BJNYg|1U{61O}nRvlm1-8U^a7QJ^x9Jrgp?z$J1L>Gm<*_?o?dR*5V*=x6Y z`ljPpB=^dp=#d$!Zzc%K3qjFxyAt3yjt81Jl&S)MxwJy4j>=|UWqVr%Gkd*MsLllG zdn7w@hI*J3U}~MpOL0;zoC$k1m&f*?G}Q&}*_v}KC`W2eDoDEcI#$&PB+ys$bt1`B z-4<34^s0JbC|^BrAgvKjRX>DTClbXZh{|W`uX5~ex=&WH@&6T^RYyd9mCEBvWm>aL zzw4mJvag~Uu3D~sNdU$9A}o$B)7~GyB6sZQ|~q! literal 0 HcmV?d00001 diff --git a/2DRenderer/obj/Debug/net9.0/2DRenderer.csproj.AssemblyReference.cache b/2DRenderer/obj/Debug/net9.0/2DRenderer.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..955ad3dc628a5fc8b0264b647f49a6e31b62c30c GIT binary patch literal 5560 zcmds*UuYaf9LINJT3gemHCigzN*)3#Nq6&yG^G+Grq?!2nxwg06B2BhyPe#vw>!I; zolQIyVh~H958|KtSW4dvRF3#mL=pO+h+utC(WId@AfgXi3W^U_XZB`q_wG_}+qyTAL*?=!#O%x|`W9g-x0<4VdjkOJor$ta`5d{=}(^X{< z5sY*NBYH?~4}6@vFRQu^05i9J{nnYq*VeZI0CxK}aw1p2G$j{UV7KaDXU?#9@d}O= zKi<}S8WCGFac_s*&VSmP`yHJ+1odL%Py+R~=20iEYl%UW88_1i_hLuaU5nefSpXWN z8Ji+Q9&<3&3!47hxmQr5Z7g&KfCbgw~rjo-)8ojguQ-K*IC$@Z+68tpBS+a z9v_q^G_0EQ8cxbbke#Nc1-9_7-sIZM+rK_}1-4Fp{~VXQgJ9n7$$M*9CPtW^G*zTm z?C{fPYh4mo~&&rXPErM)5xheLqkrcJekEk`L#q{j(NR2T%F5)JZjWW3)bsL!(U&i*SdAc0fC>L6n$iKt?+uZKxw zD<+$%G%Z6%)l8+Er{n<^M!BO~(Y3f&D#YyQE$L;xN?*6b`e|68FUtQ0(PW_4=`Z9ZW@xsm3H|suJ zYmvWLdgp`Hm0w2JC!1ECzu{wtukAbYZqwU8-db9|y0J4trhhih{WQ0hx&6=i>yg;- z=Tg_~ofS8nULJyx;4uAC=0+_{DVynut3B{wM`yhIklND~=K+K+tLub1fjNU1qV;!B&%8m`Z5rkj|LI zD3@NNLgzEfK7F>R5_*~vV7VPm@#atTGe<=byr&-^0$zLQ?xT_+<|}K*L{G+cRIJ4* zH+sK^WBVqi_oLABaa=?pbo*2@Tj41|t~fdmK=7WsV(q?Ys<{q3JWkP)`#gVJND7|e z`}djwI$Z)(#HX4>&x89y>TT6nCrTj6%n)dxd6T5WGxj!ULpcjaJqtecPlsm&^k+*V zaIdFJid@ai0zGsLsyQuA|KF^zXu w`hYLAEd^_t)E0 zzU8B@yI-n)LfQ0Eb>C<#6`V+#BgyD^a4?!knCakv5ll`dg0Vy}vb8rjZVnmYq9V@< zOZB!cqD_i}zHrCv+jeWeq;rCWN&`_hIGW@h8p1P(dlolQiNIB9H#69NaXkkJK3@*H z`UV!|zuBinG7Hx#=-tZ5EKvhH;^gZnkr%wxgG7BNmz{|Y66rbRI_OJs=y2MYPJ@0q z0)R5nSIcft;tCR79Zsf_Xjqnx;Ej?xh^K!kV6Xe zD)gT(R;iMUwlxAjpGXm0qWeDqb=>AzUX_Pju(4(fsk4j-Dg>P#s-e;bjnYtzzkX6f zP2e7cna<#+Z${$>7!5VEs9==6QsxOz@V}!hgc`LLS4ya%R;~@cQ$4^i)Rw7us34=L ztRko_ASzp0_DZOo1~)X60^828c!CtZ#w{OqT)vSKBK zp!MLCQEA`B!_yyf!gM!U?21Y zleELUjOA?O_rQ1-bC`%~&$%|6W2zsKgTH=CZAOtt${i|Xom+&80|;QJiD~Yk1%+ka zvZB>LgsGN7x48`kW;tB6;Dn>p>36QVh)W9=oKQ+#epg-Dse*-6+b5gJsaM$xZJGNH#Hq5fY@YTa*miVf`8-~+;8o1y z!FiBdG>=y*c$M>b3k7fSJl-O~tD47KEO<-i@sw$; z2N0QZ5K!||P7N(ato;;`fiUz_kUEf+;Vc{%Pg$cTrqELzF3vMT7}9QTT@g|6g! zn!d|pWe;nTu?bh9=z?oL{`lix6bFuSvRmM5d!1QQIg!6mVe1ttC6>sVa3+u))^l)&0&KWqOV>-BwnFVPi3=PMT`w zv^gQoxF*BWLxQD;vaIAjJ7boGk}PNqm{=QUd5nW6jkcuOgGXYB*h7p3-$F!$FhU4e z7B7>DTq@zkP=tNXvM6aD9I1q{(?&gJFjARHDXKq47$C;KO%3l8!jffAWKQqrx|1z&^fNSJ$08^Y@B-ZuZHkf~wZIsA1xJLdqFi)K|=U`w3f^k8Lvd1O2 zO=h2En+s%{TqA#*Sl06Pi}`2SMulvHYvgaE>@;mK|18_6l5KE}{B2+>lD8ksKg%|( z@!=YI+7M%}(wFhXRuOygb2!q(9JEl5enw|6I>>=)p&U|{0FS(y3L$-mDgcBE2y>?_ zVQ$+J<{`6C_AK_aQ<&K%+O9pwvt2#F5Nn}F!#*i_3n#^Cp8Hf=B+FD2sRdiu8srMu zpqS$hdJKl6h|d#fP@4p>H_7WV4N zb5Nx_VIb0_A6+|-1+Y=SCOQts933X@-9m(8%t zw0LMgo?5)Qq(Gttaj^@9XptMDOB7pFbsl6_sIG%-rRsAYWS^)$*Fo-g&5f{wH?g4u ztXFJL%H+;O%{?2q>A%2!o$U`@D+bLGI*4aw=n$Ys)yz-fd5|p!KFc_FNe#_0$_)tB zR$F4{BijncDGD$f(pV(Gp|GK5PXFdfHzJ-1+f^!#)U%Hqr_rT9;Vd?5kGFi zS}ZQxcC}nuTK@mQ$d|D%c7`yrwR`}x47HnIZ?%XNc@qq-X;KgH)5J{h)SN4cBe5D! zS&c`nSubga)5HYBF6~l_ei$=y@$C$1DpNP3Xuqet27fKWdbC;6CdR;1lc6vQo|7c4 z3brjs0J*lKms4ONE~r&BZ!PIHw4wLX4GN!>ad~l1wS*hO%?-_sYnbDr zIN;~8msyU0~T1f-Mx$wTR&NP<{E1UK&O8BG1zDjXQcGcus?U8JnKv z8{*~w3*%C;J=^(b$7ywu z0$wZNM*`Lh_`J{%5E@kA9&-5GJsO?w`d*=rK1W9#0eIlJFF+~BabFp&EAH}cq+8K3 zjV4OISE$k3#SDL=TKqkvtIPVa~!R=5otcEA-qX;4g%>MbL(+2tDX& zG52MIs5L0GeZzAbYW*uDHR?cr*`7Cu?Rf(u{`anSkB7cp#PDlw_U$*_-1?m^_RL?P zZYBL|@oV0tv_rHwB;b3Z-7g89=ZRM8z27TD7|=6f@HxU2jLa%^o4QWmb2vEG6>n2_ zV`K_x4pR5HY>Fi}3P~>x4NMJ#s-g;7DX4Xzc2gB6Z`Au6+`DNRA$LIMF|@gx&H<&O z-Wr6WfmrP!M|BB(9)Y?W)TOi#b^N$*pcS-PQ2&B@S?Ze^%0Ztl^(hW|pvb3S)Qi_4 zR-P{Ia`@>h&P|Rs8g%)THkuT0hk(EI^@0CW-!8!46eS(#Q+fNv}N9M!bBcp>b0QaRw*7DVUhKK*Xz4QOSjMICiM36I4EbtB!QX_)En zRkP$f%3(pRKu8hIQJwn;tez9pVJdXq<8acW7Ij>|$Kj&q1a%`-U_NM6x037KNdGIq zR1k)Os<;V|1jV@w_4F^O$3XqPMg0xR z3h1X6^#ha@Py+&iC0}qq=+J4kMZM%c2I?-0I#%+a!%g>F)Z-<`Kz(3Qzb$;w;h{fT z)V~!T1GR&f3+VhG&cARJ(p7?*(?4`R25Q(UI}TgCG+|Ls!xk@n-=f|`SrNTzQSYLx zh|aH-I)4p2eYD!5K7gG*y4#{&gq_9od5d}#b{5nBl$02w68cJ=&_Y*fk2y-{X^T2g zqF_l&pD)UUuLCrjp^hUuE84!z$Ze*iB35`xf<3;boY|FI&_< z>TOg_uUOP&3z+(eq?F$~E(i5p)##QC~t?4Mi*}06S}F zqokDYIPLL_JVqxyXmru~v~|C8rBs;8SRDqZ*( zx^t%`d6E0CsENK{QJ)DsM$PnyMQP|!D}7l|a>ljM*99eKTpK+%uj~hcI*g?H6mo@q zDKwySqHT6F{JO^QxPX%Xr@>L7;ar^d6?z()ReBB3K~I!m8$}PRyo>k;K!u(a?QSWy z?U7G~9zSodzi+^tqxF=wllD=}BAl^ZcftCeqJZZ;}o zn3Ijlw=fqQ6>_%$4k4x+l|tv`fMLwFM&&5xSfg@1=2oNf8s=1^avXE1QQ3ru^U_V2 zI}3>QSJ4>e$_jz6Al9=2E5==btY-xs#T-~c-$d-MpyP=7Iw4<2-$IPn(e;S!I(iK; zT}P}rru?z!Nx=VF^j*LsMSll)r{fjC!==oLmc9e{M$x-~jirA8Eb;x3W@tiFmAjQE zbzONt`3_dh2b6yXdp+u;{bq^qW zDMGtT{~S8+bbJvoT=XJfMEe2i-sF2lxsr93VqTX&Q2rLH z>{`*{CIM#z{7C63)zu;3%al0QifT2ce9!Y;dYv9AZB$>UJ3MXbnXz#?X!??)83)43EOt7PdUD*D#~%sV}R^oMUfufu6-BywBrfLH>uA6 zF7mvtex&@c@GZgly_yy~nFmyk=kE(`&ns7X&vkqa2?Oy=m#RmcEAa050q05@qfa@` zqrLQ9=PJPoW2gC^BTS|AA>d+K;0$AJSOQo}djXqi4Ddpl0_>#2fR_n=FJOnz+)0D< z8E2=^91%JX3(jG|c}Q>`7MzC#=Xp`4GwPqKOOVSHWM&n)ichPL zIA1`H`;Phpz<(C-BRAteD`9w|kl{zpmjRy>rSA*)p^*8hkeT!U7^TI|*8wjI{2Z{? z@h0G3>&*FGDZ?Hi6Lh=-e38JP6#Ng>cZ59-*ra0ZP+_?XxKCJEjGW77hXU~ZuvZaT zR>kNS0$%{A(n8VKGC&pko?`GT099mPKk!OG6>(Auyb4goUS%QhrGP4SD&@d~fGXl= z5nvr;RXQJ1D%R^|C~W{#k-w_}n-FU%qH87KTI@7bS|?5^>rq=p4mcn3U4U-4-(%p0|&O&ZFgx|NgX%=7b-Ew%2eOAbE4YqnGthfsZ&oMJzKiGkG^-XUKUNEsUr`ZmTx-LFgK0ClexSdJg(tR@%MsIAtv97s^dJ<{CtrJF~@3Qd5 zWOQOQHkb-Cy>U}lZ_^nnH?^Fhu(7SbBOV(`tZSj>_LlaB)!p6Q?d^?gB9YcL?Q6O^ zSGTuDTH87!O--xYy4xbno!#wSoz0Ey9nBk>THBhNIyyEqtp=xk!-f{>Xlicj?re#4 zwr}X@Zd=pd-qO|G9cf;T3LUGPS~hewwKlc3Hb>U9wYIl3wycRXcQi%1T3WhWo4QxG zHm;_%>(|iQ&F0W#+*nU*wrdAV0TA%d!)5%O{A@%eRW%Vchd&i z*h!sHj)tZP^%>JW1MBX4?KJF4lgGqBj7E6r9cMI{|7{DCy-5GIN z%;LN4maWrdxP;#K2xr)$gtK2>^5EW)cqUk7Y zm>eE9lD(4yIg~&LFvNprXkWOIO*n&0IA?ycg&jkArKNeNE6lnn+>`2^NeqrA%><@e zepNZrJSr#ESer5@lY_?kvHt!I(ZMkcXm`wr4~hKJXLcoqgk!j9Bxz296$CI*e64bhZg6Vy8zMFjSWCWT_zx=?DN8;$fO(bQ-se(q@v#f}t$ zo8XM?(FBm3JV-r}SZcydaZaR-n=XkahJb9JOr&GuhUkaI+9rQlYEeCy2GeqwEzT82 z5*RNB&!#;g5-ZDuS1?Sh}{UBTE8OAJ|dP{fGC44dNB08L06 z2{Xw?dyTY>rma$riENJG(IV+obP_+m9YhkN&ZNPQh%qoZGGZh*B+Y%o=bZ8l%E!nV~F|Jbqc;mdSX0KIfE%v%(#zlrcUKpXrOGb9MAZ zljvACkIp_bId-Z%k1IT#LRLPtuqQEWCdWm}j>bwo!$x{$ zJ63{JR=M73Fjjz&9Jv)Lghf4x#X^?^C3lwD zhH?fy%M`71oad95J{Qvf$~h)E0E{Hh69lV3xw{;vV%K30g(PG^S|z+M9~`v^q|q$F zYpk4Q6ti|T7AX~21fs>lxJfgC$rUjN$6!r%+F>U1CPQXvYhf40Vjt1Vl1U)BwIZ=8oZ6C^Ef5kzKG$SoH+y1aS0er_#%b#1?5s`_4s#A7c`!Zsv|!Vm z0S#U>2UE6DkyvyjVWtENNjElVq(pxNV#l@It#O2k%|ow|oD$`7(MRy&Ooe)zqZ2%` za2C{y{RZ=r@Ns6{OJSqN>q6HQ{NItp?;`qnDrU^dM%L-W4Qp%^BW?E}w~7^UruyK-^tNUsZ~(`u z5RG?>Z4GVXeW!(Q9rz?x7*0-@Am&7$DGr5pSEPN`M%*GeZC+x;Mn=;jWm%|P;4Feg zcumU@%OU$mWo>IbkrdM;k^_csG7dZJIVAF9=VUU8@yyrDj7ze^Br_JgeMWhEtvJhi z^Ap|wN%?%G?21mDoc@K%pY7?JuXd|}la^0dWNG4M@(LYU5e%B;6Z`f%eF&op=KSNy! zJ}l&>N%0N}FP(7E5?e+|_nGp^DczE0eb~S8(J7aM&gGI*GH(lEVFFK#YMA<>hv<1b$&%U@@dIgMftgR@b7k{o^lGlegP2JOS!VH59e(?s?CcuyUn z?cgTxUfBSb?=ap*^D_-N4Qd4MmQ%Q?`E>H#kjC2;8b^%;>gCk&4_kWDG%57c$}MO= zhHs49Wk zdv#Q((p@0*DxdxmmbAF`wFXuj0Rd~=7*vAa6SXDqyMaKmNx{eQ! z4n_BRwS|E$C9q&=K?x(?K$WhmxCF68*Ozz!bk!wjOX2I>Rc7dbD-^GWcF7P?D5_2we1pSHOfsbK~lw$b6F2#op3XH?hz?|F1_Tq_l zb^lxu0>Z~G)g_eUF}Fzfit(6RRKWv+!BW}db4y$e`~}VFQ37Ikd^(J&U>9ixPOn#0 z;pw6xR{^Y=Lj!@iMjyV^fk1=)xmNUQiL1OsaicrGMeA!&(?7S)Ki2^tVaQ$h48ukK zxh}n^ghOSnM}ha|l*RcfS;gq{3htu@ry~IM0!>#jiX7k2|J957Kjr_i=K}o?&+L!Z z?t1OQ0&C1Q@r1M$klGTjLtDbMaG|P!4CuJ49GbrYcMI;-pzB-;PfC0sk~Lj$CymFv$cq*l@dIc4!3Q(&1%Y4u zaI^3U9^k6%8=$a9UO+y^KMD{cD6~Yl6eakv4z8O(Eyt40b_Sc98-jzd-QzJQ)4?fY zuq8N*mmgS;&E$n15B_Tb@S1`+mQ7AwXpt>J-m0Q>Qod9QrlR~22VYHs!w}>X2nwgn z*idjBM}^R;-~mq%mjJ_YGnx(#$EJ4$*GaYE>0o`ZDOei}w_Z43WOqhnCL=N|WpV`B z7*-~9)(G3e`*St10IPz)?w}>G?-VuW@GxtU+G?em>0C7sU@cOcB`}k##`YV8EH{K~ zf7A&#hPaKoAS+t6>O#*!@o^S$m}flLT^@uBk4gyt{eXBI0>urh_`iD)V}jTE7kcXJ z?Nc{~5o4CGPGh!COjOFFw<$*^H5iR!1oKEW3n@8-F}#1tE7W4EY6-^JSvi3s?4GhV zx8Pebmx-@T3|jS0jUf?;@Pp_F2Ng?#wpwCNPH3PfJf;vvkktfZqG#cGqY4&}DvQiy zMdppGh*>Vl2g34t8-)=Q5)O3LPKoZqH!-#&=D3y5`bLgSw^;vaPpe!4|! zw^d+0_%}Ma*Y@5>@4rXC{7)Z@-?H(#y6YbI9Q$vhtfPL^95?EtaKlVJ-na5WKUJUo z*i$dRR;TK-Njeub2R>OZ(sg~pNF$x+l!YgT2B`Ov4tz!@tKmP`4RhzJ_7oS-{pd%_ ze|6}u2QEhk>}!nipiRwx+W(=54&-b^jr;Rg>`#-Ng-2?plD&pUa&Cb^$R&xH)^(lOoy9Dz(YKtZ(ptISD^@!22oKH7<_yd<;K*9ro-0r`Of;-zm=Wbp6lk IKb!~tH(|EC3;+NC literal 0 HcmV?d00001 diff --git a/2DRenderer/obj/Debug/net9.0/2DRenderer.pdb b/2DRenderer/obj/Debug/net9.0/2DRenderer.pdb new file mode 100644 index 0000000000000000000000000000000000000000..796c18444f7407ec0a40eea71e463831f31afc50 GIT binary patch literal 15324 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 literal 0 HcmV?d00001 diff --git a/2DRenderer/obj/Debug/net9.0/ref/2DRenderer.dll b/2DRenderer/obj/Debug/net9.0/ref/2DRenderer.dll new file mode 100644 index 0000000000000000000000000000000000000000..a3fbd58d112ea293d3d5c2f6095edc251567058b GIT binary patch literal 11264 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 5.0.0-pre.15", + "StbImageSharp >= 2.30.15" + ] + }, + "packageFolders": { + "/home/avery/.nuget/packages/": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "/home/avery/Projects/Awperative/Modules/2DRenderer/2DRenderer/2DRenderer.csproj", + "projectName": "2DRenderer", + "projectPath": "/home/avery/Projects/Awperative/Modules/2DRenderer/2DRenderer/2DRenderer.csproj", + "packagesPath": "/home/avery/.nuget/packages/", + "outputPath": "/home/avery/Projects/Awperative/Modules/2DRenderer/2DRenderer/obj/", + "projectStyle": "PackageReference", + "configFilePaths": [ + "/home/avery/.nuget/NuGet/NuGet.Config" + ], + "originalTargetFrameworks": [ + "net9.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "9.0.300" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "dependencies": { + "OpenTK": { + "target": "Package", + "version": "[5.0.0-pre.15, )" + }, + "StbImageSharp": { + "target": "Package", + "version": "[2.30.15, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "/home/avery/.dotnet/sdk/9.0.311/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/2DRenderer/obj/project.nuget.cache b/2DRenderer/obj/project.nuget.cache new file mode 100644 index 0000000..0b7d1c1 --- /dev/null +++ b/2DRenderer/obj/project.nuget.cache @@ -0,0 +1,23 @@ +{ + "version": 2, + "dgSpecHash": "gGxXlgQ9yFY=", + "success": true, + "projectFilePath": "/home/avery/Projects/Awperative/Modules/2DRenderer/2DRenderer/2DRenderer.csproj", + "expectedPackageFiles": [ + "/home/avery/.nuget/packages/opentk/5.0.0-pre.15/opentk.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.audio/5.0.0-pre.15/opentk.audio.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.compute/5.0.0-pre.15/opentk.compute.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.core/5.0.0-pre.15/opentk.core.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.graphics/5.0.0-pre.15/opentk.graphics.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.input/5.0.0-pre.15/opentk.input.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.mathematics/5.0.0-pre.15/opentk.mathematics.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.platform/5.0.0-pre.15/opentk.platform.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.redist.glfw/3.4.0.44/opentk.redist.glfw.3.4.0.44.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.windowing.common/5.0.0-pre.15/opentk.windowing.common.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.windowing.desktop/5.0.0-pre.15/opentk.windowing.desktop.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/opentk.windowing.graphicslibraryframework/5.0.0-pre.15/opentk.windowing.graphicslibraryframework.5.0.0-pre.15.nupkg.sha512", + "/home/avery/.nuget/packages/stbimagesharp/2.30.15/stbimagesharp.2.30.15.nupkg.sha512", + "/home/avery/.nuget/packages/system.runtime.compilerservices.unsafe/6.0.0/system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/2DRenderer/obj/project.packagespec.json b/2DRenderer/obj/project.packagespec.json new file mode 100644 index 0000000..3119540 --- /dev/null +++ b/2DRenderer/obj/project.packagespec.json @@ -0,0 +1 @@ +"restore":{"projectUniqueName":"/home/avery/Projects/Awperative/Modules/2DRenderer/2DRenderer/2DRenderer.csproj","projectName":"2DRenderer","projectPath":"/home/avery/Projects/Awperative/Modules/2DRenderer/2DRenderer/2DRenderer.csproj","outputPath":"/home/avery/Projects/Awperative/Modules/2DRenderer/2DRenderer/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net9.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net9.0":{"targetAlias":"net9.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"},"SdkAnalysisLevel":"9.0.300"}"frameworks":{"net9.0":{"targetAlias":"net9.0","dependencies":{"OpenTK":{"target":"Package","version":"[5.0.0-pre.15, )"},"StbImageSharp":{"target":"Package","version":"[2.30.15, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/home/avery/.dotnet/sdk/9.0.311/PortableRuntimeIdentifierGraph.json"}} \ No newline at end of file diff --git a/2DRenderer/obj/rider.project.model.nuget.info b/2DRenderer/obj/rider.project.model.nuget.info new file mode 100644 index 0000000..f51b420 --- /dev/null +++ b/2DRenderer/obj/rider.project.model.nuget.info @@ -0,0 +1 @@ +17729103684913577 \ No newline at end of file diff --git a/2DRenderer/obj/rider.project.restore.info b/2DRenderer/obj/rider.project.restore.info new file mode 100644 index 0000000..f51b420 --- /dev/null +++ b/2DRenderer/obj/rider.project.restore.info @@ -0,0 +1 @@ +17729103684913577 \ No newline at end of file