BasicOpenGL.axaml代码
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="AvaloniaUI.BasicOpenGL" xmlns:local="using:AvaloniaUI" Title="BasicOpenGL"> <Grid> <local:OpenTkGlControl/> </Grid> </Window>
BasicOpenGL.axaml.cs代码
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using Avalonia.OpenGL;
using Avalonia.OpenGL.Controls;
using Avalonia.Rendering;
using Avalonia.Threading;
using OpenTK;
using OpenTK.Graphics.OpenGL;
using System;
namespace AvaloniaUI;
public sealed class OpenTkGlControl : OpenGlControlBase
{
private double t;
protected override void OnOpenGlInit(GlInterface gl)
{
GL.LoadBindings(new BindingsContext(gl));
GL.Disable(EnableCap.DepthTest);
}
protected override void OnOpenGlDeinit(GlInterface gl)
{
// Release GL resources here.
}
protected override void OnOpenGlRender(GlInterface gl, int fb)
{
if (!IsVisible)
return;
RequestNextFrameRendering();
t += 0.016;
var r = 0.3f + 0.3f * (float)Math.Sin(t);
var g = 0.3f + 0.3f * (float)Math.Sin(t + 2);
var b = 0.3f + 0.3f * (float)Math.Sin(t + 4);
var width = Math.Max(1, (int)Bounds.Width);
var height = Math.Max(1, (int)Bounds.Height);
GL.Viewport(0, 0, width, height);
GL.ClearColor(r, g, b, 1f);
GL.Clear(ClearBufferMask.ColorBufferBit);
}
private sealed class BindingsContext(GlInterface gl) : IBindingsContext
{
public IntPtr GetProcAddress(string procName) => gl.GetProcAddress(procName);
}
}
public partial class BasicOpenGL : Window
{
public BasicOpenGL()
{
InitializeComponent();
}
}
运行效果

浙公网安备 33010602011771号