using Dashboard.BlurgText; using Dashboard.BlurgText.OpenGL; using Dashboard.Controls; using Dashboard.Drawing; using Dashboard.Events; using Dashboard.OpenGL; using Dashboard.OpenTK.PAL2; using Dashboard.Pal; using Dashboard.StbImage; using OpenTK.Graphics.OpenGL; using OpenTK.Mathematics; using OpenTK.Platform; using TK = OpenTK.Platform.Toolkit; Application app = new Pal2Application(new ToolkitOptions() { ApplicationName = "DashTerm", Windows = new ToolkitOptions.WindowsOptions() { EnableVisualStyles = true, IsDPIAware = true, }, FeatureFlags = ToolkitFlags.EnableOpenGL, }) { GraphicsApiHints = new OpenGLGraphicsApiHints() { Version = new Version(4, 1), ForwardCompatibleFlag = true, DebugFlag = true, Profile = OpenGLProfile.Core, sRGBFramebuffer = true, SwapMethod = ContextSwapMethod.Undefined, RedColorBits = 8, GreenColorBits = 8, BlueColorBits = 8, AlphaColorBits = 8, Multisamples = 0, SupportTransparentFramebufferX11 = true, } }; CancellationTokenSource source = new CancellationTokenSource(); app.Initialize(); app.ExtensionRequire(); app.ExtensionLoad(new BlurgTextExtension(new BlurgTextExtensionFactory())); PhysicalWindow window = (PhysicalWindow)app.CreatePhysicalWindow(); MessageBox box = MessageBox.Create(window, "Are you sure you want to exit?", "Confirm Exit", MessageBoxIcon.Question, MessageBoxButtons.YesNo); // window.Title = "DashTerm"; TK.Window.SetMinClientSize(window.WindowHandle, 300, 200); TK.Window.SetClientSize(window.WindowHandle, new Vector2i(320, 240)); TK.Window.SetBorderStyle(window.WindowHandle, WindowBorderStyle.ResizableBorder); // TK.Window.SetTransparencyMode(wnd, WindowTransparencyMode.TransparentFramebuffer, 0.1f); GLDeviceContext context = (GLDeviceContext)window.DeviceContext; context.GLContext.MakeCurrent(); context.GLContext.SwapGroup.SwapInterval = 1; GL.Disable(EnableCap.DepthTest); GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha); GL.ColorMask(true, true, true, true); TK.Window.SetMode(window.WindowHandle, WindowMode.Normal); window.DeviceContext.ExtensionRequire().ScaleOverride = 1.5f; IDirectRendering direct = window.DeviceContext.ExtensionRequire(); IBuffer vertex = direct.CreateBuffer(BufferAccessPattern.Static, 1024); float[] vertices = new float[] { // x, y, z, _, r, g, b, a -0.5f, -0.5f, 0.0f, 0.0f, 1, 0, 0, 1, +0.5f, -0.5f, 0.0f, 0.0f, 0, 1, 0, 1, +0.0f, +0.5f, 0.0f, 0.0f, 0, 0, 1, 1, }; vertex.Write(0, vertices); IShader shader = direct.CreatePipeline(new GlslShaderCreateInfo() { VertexShader = """ #version 410 layout (location = 0) in vec3 apos; layout (location = 1) in vec4 acolor; out vec4 vcolor; void main() { gl_Position = vec4(apos, 1); vcolor = acolor; } """, FragmentShader = """ #version 410 in vec4 vcolor; out vec4 fcolor; void main() { fcolor = vcolor; } """, }); DrawCall call = new DrawCall(MeshPrimitive.Triangle, vertex, 0, 3) { ShaderPipeline = shader, Attributes = [ new VertexAttribute(0, 3, VertexAttributeType.Float, 0, 8 * sizeof(float)), new VertexAttribute(1, 4, VertexAttributeType.Float, 4 * sizeof(float), 8 * sizeof(float)) ], }; window.EventRaised += (sender, eventArgs) => { if (eventArgs is not PaintEventArgs paint) return; paint.DeviceContext.ExtensionRequire().Draw(call); }; app.Run(true, source.Token); class BlurgTextExtensionFactory : IBlurgDcExtensionFactory { public BlurgDcExtension CreateExtension(BlurgTextExtension appExtension, DeviceContext dc) { return new BlurgGLExtension(); } };