diff --git a/Program.cs b/Program.cs index ced04e4..f71bf55 100644 --- a/Program.cs +++ b/Program.cs @@ -167,19 +167,6 @@ public class Photo { public Texture Texture() { if (texture == placeholder && image != null) { - IPath yourPolygon = new Star(x: 2000.0f, y: 1000.0f, prongs: 5, innerRadii: 20.0f, outerRadii: 50.0f, angle: Util.PI); - image.Mutate(x => x.Fill(Color.White, yourPolygon)); - Font font = SystemFonts.CreateFont("Impact", 120); - TextOptions options = new(font) { - WrappingLength = image.Width, - HorizontalAlignment = HorizontalAlignment.Center, - Origin = new PointF(image.Width / 2, image.Height / 2 - 60), - }; - string text = "oh no i made a memegen"; - IBrush brush = Brushes.Solid(Color.White); - IPen pen = Pens.Solid(Color.Black, 2.5f); - image.Mutate(x => x.DrawText(options, text, brush, pen)); - Console.WriteLine("making texture for " + file); texture = new Texture(image); image.Dispose(); image = null; @@ -198,7 +185,10 @@ public class Texture : IDisposable { image.CopyPixelDataTo(pixelBytes); Handle = GL.GenTexture(); - Console.WriteLine("GL.GenTexture #" + Handle); + if (Handle > maxHandle) { + Console.WriteLine("GL.GenTexture #" + Handle); + maxHandle = Handle; + } GL.ActiveTexture(TextureUnit.Texture0); GL.BindTexture(TextureTarget.Texture2D, Handle); GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, Size.X, Size.Y, 0, PixelFormat.Rgba, PixelType.UnsignedByte, pixelBytes); @@ -213,6 +203,7 @@ public class Texture : IDisposable { //GL.GenerateMipmap(GenerateMipmapTarget.Texture2D); } + private static int maxHandle = -1; private bool disposedValue = false; protected virtual void Dispose(bool disposing) { @@ -265,6 +256,33 @@ public static class Util { public static Box2i makeBox(int left, int top, int width, int height) { return new Box2i(left, top, left + width, top + height); } + + public static Image makeImage(float width, float height) { + return new((int) Math.Ceiling(width), (int) Math.Ceiling(height), new Rgba32(0x00, 0x00, 0x00, 0x00)); + } + + public static Texture renderText(string text) { + Font font = SystemFonts.CreateFont("Consolas", 36, FontStyle.Bold); + TextOptions options = new(font); + FontRectangle size = TextMeasurer.Measure(text, new TextOptions(font)); + Image image = makeImage(size.Width, size.Height); + IBrush brush = Brushes.Solid(Color.White); + IPen pen = Pens.Solid(Color.Black, 1f); + image.Mutate(x => x.DrawText(options, text, brush, pen)); + Texture texture = new Texture(image); + image.Dispose(); + return texture; + } + + public static Texture renderStar(float radius) { + IPath path = new Star(x: radius, y: radius, prongs: 5, innerRadii: radius * 0.4f, outerRadii: radius, angle: Util.PI); + Image image = makeImage(path.Bounds.Width, path.Bounds.Height); + image.Mutate(x => x.Fill(Color.White, path)); + Texture texture = new Texture(image); + image.Dispose(); + return texture; + } + } public class Game : GameWindow { @@ -372,6 +390,9 @@ public class Game : GameWindow { GL.ClearColor(0f, 0f, 0f, 1f); + GL.Enable(EnableCap.Blend); + GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha); + VertexArrayObject = GL.GenVertexArray(); GL.BindVertexArray(VertexArrayObject); @@ -450,6 +471,10 @@ public class Game : GameWindow { DrawBox(box, 3, Color4.White); } } + Texture label = Util.renderText("hello world what is going on"); + // Texture label = Util.renderStar(10); + DrawTexture(label, Util.makeBox(10, 10, label.Size.X, label.Size.Y)); + label.Dispose(); SwapBuffers(); }