NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #2295 most downloaded on NuGet
The Open Toolkit is set of fast, low-level C# bindings for OpenGL, OpenGL ES, OpenAL and OpenCL. It runs on all major platforms and powers hundreds of apps, games and scientific research. It provides bindings for GLFW windowing, input and a game loop, and is the perfect start for your own game engine. OpenTK comes with simple and easy to follow tutorials for learning *modern* OpenGL. These are written by the community and represent all of the best practices to get you started. Learn how to use OpenTK here: https://opentk.net/learn/index.html Sample projects that accompany the tutorial can be found here: https://github.com/opentk/LearnOpenTK We have a very active discord server, if you need help, want to help, or are just curious, come join us! https://discord.gg/6HqD48s
Last release 2 years ago
no release in 18 months
Release timing varies
gaps range from 8 days to 12 months
Some releases are documented
notes for 22 of 51 stable releases
4 versions withdrawn
withdrawn after publishing
127 years old
65 releases · first in 1900
BREAKING: Made Matrix3/4.CreateFromQuaternion and Matrix3x4/4x3.CreateFromQuaternion produce idential results for non-normalized quaternions. (@Noggin
BREAKING: Made Matrix3/4.CreateFromQuaternion and Matrix3x4/4x3.CreateFromQuaternion produce idential results for non-normalized quaternions. (@NogginBops)
API: Add explicit casts to and from System.Numerics types. (@DamienIsPoggers, @NogginBops)
API: Added VectorN.Round/Ceiling/Floor/Truncate element-wise functions. (@NogginBops)
API: Add ShaderStorageBufferBinding, ShaderStorageBufferStart, and ShaderStorageBufferSize to GetIndexedPName. (@NogginBops)
API: Add MathHelper.RadToDeg(d) and MathHelper.DegToRad(d) constants for conversion between radians and degrees. (@DamienIsPoggers)
API: Add support for the ALC_SOFT_loopback OpenAL extension through OpenTK.Audio.OpenAL.ALC.Loopback. (@NogginBops)
FIX: Update OpenTK.redist.glfw to GLFW 3.4 so that the GLFW 3.4 apis work properly. (@NogginBops)
FIX: Optimized VectorN.this[int i] and MatrixN.this[int row, int col] indexers. (@NogginBops)
FIX: Made Color4.FromHsv and Color4.FromHsl work correctly when hue is 1. (@NogginBops)
FIX: Updated OpenAL DllNotFoundException exception message to mention having to install OpenAL. (@NogginBops)
FIX: The documentation for NativeWindowSettings.RenderFrequency now correctly refers to UpdateFrequency instead of UpdateFrame. (@NogginBops)
One column per quarter.
Fix issue where the OpenTK.Mathematics nuget package referenced System.Runtime.CompilerServices.Unsafe version 5.0.0 but the compiled OpenTK.Mathemati
Fix issue where the OpenTK.Mathematics nuget package referenced System.Runtime.CompilerServices.Unsafe version 5.0.0 but the compiled OpenTK.Mathematics.dll assembly referenced version 6.0.0. Causing runtime crashes in some circumstances. The OpenTK.Mathematics nuget package now correctly requires version 6.0.0. (@NogginBops)
Made nuget package builds "deterministic". (@NogginBops) Fix assembly versions to match OpenTK release version. (@NogginBops)
Made nuget package builds "deterministic". (@NogginBops) Fix assembly versions to match OpenTK release version. (@NogginBops)
…a window to fullscreen. (@NogginBops) API: Deprecate Matrix4(d).ExtractProjection. (@NogginBops) API: Added Matrix4(d).ExtractPerspectiveOffCenter/Ext…
BREAKING: Made NativeWindow able to run on Wayland (when running on Wayland NativeWindow will default to Wayland, use OPENTK_4_USE_WAYLAND=0 or set the X11 glfw hint to use X11/Xwayland). (@NogginBops)
BREAKING: Change type of NativeWindow.CurrentMonitor property from MonitorHandle to MonitorInfo. (@NogginBops)
BREAKING: Changed EGL bindings to DllImport libEGL instead of libEGL.dll (shouldn't be breaking in most cases). (@NogginBops)
BREAKING: Removed leftover module references to libGLESv2.dll (and opengl32.dll and GLESv1_CM) in OpenTK.Graphics.dll which was causing build errors in net8.0-macos projects. (these references are never used by OpenTK so they shoudn't be there, this might break something in very specific circumstances)(@NogginBops)
BREAKING: MathHelper.Lerp no longer clamps t to [0, 1] range. (@NogginBops)
API: Upgrade to GLFW 3.4. (@NogginBops)
API: Updated OpenGL bindings to contain the latest definitions without breaking 4.8.2 compatibility (this includes OpenGLES 3.1 and 3.2). (@NogginBops)
API: Add NativeWindow.MakeFullscreen method to more seamlessly transition a window to fullscreen. (@NogginBops)
API: Deprecate Matrix4(d).ExtractProjection. (@NogginBops)
API: Added Matrix4(d).ExtractPerspectiveOffCenter/ExtractPerspectiveFieldOfView to extract projection matrix parameters from perspective projections. (@NogginBops)
API: Added Matrix4(d).ExtractOrthographicOffCenter/ExtractOrthographic to extract projection matrix parameters from orthographic projections. (@NogginBops)
API: Add matrix swizzle functions Matrix2/3/4(d).Swizzle/Swizzled/CreateSwizzle. (@NogginBops)
API: Added MouseCursor.PointingHand/ResizeEW/ResizeNS/ResizeNWSE/ResizeNESW/ResizeAll/NotAllowed standard mouse cursors. (@NogginBops)
API: Added VectorN.Slerp (spherical interpolation) and VectorN.Elerp (exponential interpolation) functions. (@NogginBops)
API: Added NativeWindow.AlwaysOnTop property to set if a window should always be visible. (@NogginBops)
API: Added NativeWindow.MousePassthrough property to set if the window should be transparent to mouse interactions. (@NogginBops)
API: Added CusorState.Confined to be able to confine the mouse cursor to the window content area. (@NogginBops)
API: Implemented Matrix3(d).Column1/2/3, Matrix4x3(d).Column1/2/3 and ``Matrix3x4(d).Column1/2/3/4property setters. (@NogginBops) API: MakeNativeWindowthrow explicitInvalidOperationExceptionorOutOfMemoryExceptionifglfwCreateWindowfails. (@NogginBops) API: Added a few missing constants to the EGL bindings. (@NogginBops) API: DeprecateNativeWindow.CurrentMonitorproperty setter. (@NogginBops) API: ImplementedMatrix2/3/4(d).Transposed/Invertedfor matrix types that where missing them. (@NogginBops) API: DeprecateMatrix4d.Scale/RotateX/RotateY/RotateZ/Rotate/Frustum/Perspectiveuse the Create*functions instead. (@NogginBops) API: DeprecateEffectSlotInteger.AuxiliarySendAutoin favor ofEffectSlotBoolean.AuxiliarySendAuto. (@NogginBops) FIX: Fix wglDXCloseDeviceNV argument name, from dxDevicetohDecvice. (@NogginBops) FIX: All assemblies are now signed. (@RFBomb, @NogginBops) FIX: Fixed nuget package metadata. (@NogginBops) FIX: OpenTK.Graphicsnow contains proper debug info, the code is still generated but might improve debug experience. (@NogginBops) FIX: Fix issue whereNativeWindowSettings.StartVisible=falsewithNativeWindowSettings.StartFocused=true` would create a visible window. (@NogginBops)
FIX: Updated links in README to link to the website tutorial. (@NogginBops)
FIX: Added basic README to nuget packages. (@NogginBops)
FIX: Fix GLFW calling convention when on 32-bit windows, this was causing a StackOverflowException. (@NogginBops)
FIX: Improved a bunch of OpenAL documentation. (@NogginBops)
…a window to fullscreen. (@NogginBops) API: Deprecate Matrix4(d).ExtractProjection. (@NogginBops) API: Added Matrix4(d).ExtractPerspectiveOffCenter/Ext…
BREAKING: Made NativeWindow able to run on Wayland (when running on Wayland NativeWindow will default to Wayland, use OPENTK_4_USE_WAYLAND=0 or set the X11 glfw hint to use X11/Xwayland). (@NogginBops)
BREAKING: Change type of NativeWindow.CurrentMonitor property from MonitorHandle to MonitorInfo. (@NogginBops)
BREAKING: Changed EGL bindings to DllImport libEGL instead of libEGL.dll (shouldn't be breaking in most cases). (@NogginBops)
BREAKING: Removed leftover module references to libGLESv2.dll (and opengl32.dll and GLESv1_CM) in OpenTK.Graphics.dll which was causing build errors in net8.0-macos projects. (these references are never used by OpenTK so they shoudn't be there, this might break something in very specific circumstances)(@NogginBops)
BREAKING: MathHelper.Lerp no longer clamps t to [0, 1] range. (@NogginBops)
API: Upgrade to GLFW 3.4. (@NogginBops)
API: Updated OpenGL bindings to contain the latest definitions without breaking 4.8.2 compatibility (this includes OpenGLES 3.1 and 3.2). (@NogginBops)
API: Add NativeWindow.MakeFullscreen method to more seamlessly transition a window to fullscreen. (@NogginBops)
API: Deprecate Matrix4(d).ExtractProjection. (@NogginBops)
API: Added Matrix4(d).ExtractPerspectiveOffCenter/ExtractPerspectiveFieldOfView to extract projection matrix parameters from perspective projections. (@NogginBops)
API: Added Matrix4(d).ExtractOrthographicOffCenter/ExtractOrthographic to extract projection matrix parameters from orthographic projections. (@NogginBops)
API: Add matrix swizzle functions Matrix2/3/4(d).Swizzle/Swizzled/CreateSwizzle. (@NogginBops)
API: Added MouseCursor.PointingHand/ResizeEW/ResizeNS/ResizeNWSE/ResizeNESW/ResizeAll/NotAllowed standard mouse cursors. (@NogginBops)
API: Added VectorN.Slerp (spherical interpolation) and VectorN.Elerp (exponential interpolation) functions. (@NogginBops)
API: Added NativeWindow.AlwaysOnTop property to set if a window should always be visible. (@NogginBops)
API: Added NativeWindow.MousePassthrough property to set if the window should be transparent to mouse interactions. (@NogginBops)
API: Added CusorState.Confined to be able to confine the mouse cursor to the window content area. (@NogginBops)
API: Implemented Matrix3(d).Column1/2/3, Matrix4x3(d).Column1/2/3 and ``Matrix3x4(d).Column1/2/3/4property setters. (@NogginBops) API: MakeNativeWindowthrow explicitInvalidOperationExceptionorOutOfMemoryExceptionifglfwCreateWindowfails. (@NogginBops) API: Added a few missing constants to the EGL bindings. (@NogginBops) API: DeprecateNativeWindow.CurrentMonitorproperty setter. (@NogginBops) API: ImplementedMatrix2/3/4(d).Transposed/Invertedfor matrix types that where missing them. (@NogginBops) API: DeprecateMatrix4d.Scale/RotateX/RotateY/RotateZ/Rotate/Frustum/Perspectiveuse the Create*functions instead. (@NogginBops) API: DeprecateEffectSlotInteger.AuxiliarySendAutoin favor ofEffectSlotBoolean.AuxiliarySendAuto. (@NogginBops) FIX: Fix wglDXCloseDeviceNV argument name, from dxDevicetohDecvice. (@NogginBops) FIX: All assemblies are now signed. (@RFBomb, @NogginBops) FIX: Fixed nuget package metadata. (@NogginBops) FIX: OpenTK.Graphicsnow contains proper debug info, the code is still generated but might improve debug experience. (@NogginBops) FIX: Fix issue whereNativeWindowSettings.StartVisible=falsewithNativeWindowSettings.StartFocused=true` would create a visible window. (@NogginBops)
FIX: Updated links in README to link to the website tutorial. (@NogginBops)
FIX: Added basic README to nuget packages. (@NogginBops)
FIX: Fix GLFW calling convention when on 32-bit windows, this was causing a StackOverflowException. (@NogginBops)
FIX: Improved a bunch of OpenAL documentation. (@NogginBops)
FIX: Fixed issue where setting NativeWindow.WindowState = WindowState.Normal while fullscreen would not exit fullscreen. (@Th3Dilli) API: Added Native
FIX: Fixed issue where setting NativeWindow.WindowState = WindowState.Normal while fullscreen would not exit fullscreen. (@Th3Dilli)
API: Added NativeWindow.FramebufferSize, NativeWindow.OnFramebufferResize, and NativeWindow.FramebufferResize to be able to properly get the framebuffer size of the window (useful on macos where framebuffer size is not equal to client size). (@NogginBops)
API: Added GameWindowSettings.Win32SuspendTimerOnDrag propery that allows the internal timer to be suspended while the window is moved or resized. Without this dragging the window will cause an abnormally large time delta since the last frame. (@MV10)
API: Made NativeWindowSettings.Size obsolete in favour of NativeWindowSettings.ClientSize (NativeWindowSettings.Size has always set the client size of the window, this namechange just makes this clear). (@MV10)
API: Added ability to override OpenAL and OpenCL native library search path by setting OpenALLibraryNameContainer.OverridePath or OpenCLLibraryNameContainer.OverridePath. (@NogginBops)
API: Added NativeWindowSettings.AutoIconify and NativeWindow.AutoIconify property to control if the window gets minimized if it loses focus while fullscreen. (@MV10)
API: Added missing enums to GetPName. (@BoyBaykiller)
FIX: Fixed an issue where creating a NativeWindow on wayland would freeze in the constructor. (@Th3Dilli)
BREAKING: Re-implemented Box2/3.Inflate to work like System.Drawing.Rectangle.Inflate. The old behaviour can be found using Box2/3.Extend, as the previous obsoletion message stated. (@MV10, @NogginBops)
Add example of how to implement IBindingsContext in the documentation comments on IBindingsContext. (@utkumaden)
Internal changes to make the build system simpler and easier to modify. (@NogginBops)
Internal changes from Math to MathF where appropriate. (@MV10)
(@NogginBops) FIX: Fixed typo in deprecation message for GameWindow.RenderFrequency. (@postmeback)
API: Added NativeWindow.HasTransparentFramebuffer to be able to check if a transparent framebuffer was created successfully. (@NogginBops)
API: Added missing enum entries in OpenCL.ContextProperties. (@NogginBops)
FIX: NativeWindowSettings.StartVisible = false has been fixed and should now work as expected. (@NogginBops)
FIX: Fixed issue where JoystickState.GetAxis returned buttons instead of axes. (@NogginBops)
FIX: Fixed issue where self-contained dotnet publish would break due to duplicate libglfw.so files. (@Th3Dilli)
FIX: Setting NativeWindow.WindowState will now be reflected in OnResize event caused by it. (@NogginBops)
FIX: GameWindow.UpdateTime is now correctly updated, fixing an issue that first appeared in 4.7.1. (@NogginBops)
FIX: Fixed typo in deprecation message for GameWindow.RenderFrequency. (@postmeback)
BREAKING: Renamed the OpenTK.OpenAL assembly to OpenTK.Audio.OpenAL to match the namespace. (@NogginBops) BREAKING: Make OpenAL extensions nested clas
BREAKING: Renamed the OpenTK.OpenAL assembly to OpenTK.Audio.OpenAL to match the namespace. (@NogginBops)
BREAKING: Make OpenAL extensions nested classes of AL and ALC instead of being namespaces to more closely match the OpenGL bindings. (@NogginBops)
BREAKING: Removed AL.BindBufferToSource, AL.GetSourceState, AL.GetSourceType, and ALC.GetAvailableSamples that doesn't exist in the OpenAL API (use AL.Get* and ALC.Get* instead). (@Khhs167, @NogginBops)
BREAKING: NativeWindow.Location, NativeWindow.Size, and NativeWindow.Bounds now correctly refer to the external size and location of the window. (@NogginBops)
BREAKING: Removed a few functions marked [Obsolete] since at least 4.7.2 but some even older. (@NogginBops)
BREAKING: Removed OpenTK.Core.Utils.Swap<T>, use MathHelper.Swap<T> instead. (@NogginBops)
API: Rename Box.Inflate to Box.Extend, and mark Box.Inflate as obsolete so we can change the behavior of Box.Inflate in future versions. (@NogginBops)
API: Added GameWindow.TimeSinceLastUpdate() and GameWindow.ResetTimeSinceLastUpdate() which are useful when dealing with the modal move/resize loop on windows. (@NogginBops)
API: Added NativeWindow.RawMouseInput and NativeWindow.SupportsRawMouseInput for activating raw mouse input. (@NogginBops)
API: Added opt-in preliminary GLFW Wayland support through the environment variable OPENTK_4_USE_WAYLAND (it's broken when used with GameWindow or NativeWindow in this version). (@NogginBops)
API: Updated the GameWindow run loop to be much more accurate. Exposed GameWindow.ExpectedSchedulerPeriod to tell OpenTK how accurate Thread.Sleep can be expected to be (this defaults to good defaults for Windows, Linux, and macos). (@NogginBops)
FIX: Cleaned up some internal OpenGL definitions (doesn't change any bindings). (@BoyBayKiller)
API: Expose MouseCursor.StandardShape as public. (@NogginBops)
API: Add VectorNi.EuclideanLengthSquared. (@NogginBops)
FIX: Added helpful exception message to NativeWindow when running with trimmed assemblies with a workaround for the issue. (@NogginBops)
FIX: Fixed an issue where starting NativeWindow as a fullscreen window and then going to a normal window would throw an exception. (@NogginBops)
FIX: ToString() on all math types no longer throw NullReferenceException. (@NogginBops)
FIX: ToString() on all math types no longer throw NullReferenceException. (@NogginBops)
BREAKING: Changed the default value of NativeWindowSettings.Flags from ContextFlags.Default to ContextFlags.ForwardCompatible for better out of the bo
BREAKING: Changed the default value of NativeWindowSettings.Flags from ContextFlags.Default to ContextFlags.ForwardCompatible for better out of the box macos support. (@NogginBops)
API: Added NativeWindowSettings.TransparentFramebuffer and NativeWindowSettings.VSync. (@NogginBops)
API: Component-wise Lerp methods for float and double vector types. (@g7ChoGXh)
API: Implemented IFormattable for most OpenTK.Mathematics types. (@g7ChoGXh)
API: Add bindings for EXT_fragment_shading_rate. (@BoyBaykiller)
API: Added casts from Vector2i and Vector2 to System.Drawing.Point/System.Drawing.Size and System.Drawing.PointF/System.Drawing.SizeF respectively. (@NogginBops)
API: Added missing entries in SizedInternalFormat. (@BoyBaykiller)
API: BinaryFormat now contains the ShaderBinaryFormatSpirV enum value. (@NogginBops)
FIX: Many fixes related to NativeWindow.WindowState. Most notably, going from fullscreen to maximized and back works correctly. (@NogginBops)
FIX: MonitorInfo.WorkArea now gives the correct values. (@utkumaden)
FIX: Spelling and formatting corrections in documentation. (@sg-wizard-maker)
FIX: Math types now change their formatting when CurrentCulture is changed. (@g7ChoGXh)
FIX: Matrix4x3/Matrix4x3d now print their final row. (@NogginBops)
FIX: On Windows, setting GameWindowSettings.UpdateFrequency and GameWindowSettings.RenderFrequency should be more accurate. For details see documentation for GameWindow.Run(). (@NogginBops)
The OpenTK solution should now build directly in Visual Studio with no need to run build.cmd any more. (@NogginBops)
API: Deprecated Box.Contains function in favor of Box.ContainsInclusive and Box.ContainsExclusive to explicitly state if the box boundary should be co…
BREAKING: Removed the ALTest class from the OpenAL namespace. This was an internal test class that was accidentally included in the package. (@NogginBops)
API: Deprecated Box.Contains function in favor of Box.ContainsInclusive and Box.ContainsExclusive to explicitly state if the box boundary should be considered contained. (@NogginBops, @Oribow)
API: Exposed EGL bindings to match the WGL bindings. (@NogginBops)
API: Box2, Box2d, Box2i, Box3, Box3d, and Box3i now support XML serialization. (@NogginBops)
API: Added ProgramBinaryLength to the GetProgramParameterName enum. (@NogginBops)
FIX: MathHelper.ClampAngle and MathHelper.ClampRadians now return correct results. (@FlashX64)
FIX: MathHelper.NormalizeRadians now return correct results. (@FlashX64)
FIX: OpenAL now correctly loads on FreeBSD. (@Partmedia)
Clarify in the readme that running on Windows requires "Visual C++ Redistributable 2015" (@NogginBops)
Update to GLFW 3.3.8 (@NogginBops)
FIX: Updated OpenTK.redist.glfw nuget reference to the latest version (3.3.7.27), the previous 3.3.7.25 had issues on linux.
OpenTK.redist.glfw nuget reference to the latest version (3.3.7.27), the previous 3.3.7.25 had issues on linux.API: Added overloads for Vector2i, Vector3i, and Vector4i to GL.Uniform and GL.ProgramUniform family of functions. (@NogginBops)
API: Added overloads for Vector2i, Vector3i, and Vector4i to GL.Uniform and GL.ProgramUniform family of functions. (@NogginBops)
API: Added overloads for non-symmetric matrices to GL.Uniform family of functions to the OpenTK.Graphics.OpenGL4 namespace. (@NogginBops)
API: Added IsButtonPressed and IsButtonReleased to JoystickState, to match KeyboardState and MouseState. (@g7ChoGXh)
API: Added GL_KHR_shader_subgroup to the bindings. (@BoyBaykiller)
FIX: Fixed race condition in RethrowCallbackExceptionsIfNeeded where some uncaught exceptions in callbacks could be lost. (@NogginBops, @seanofw)
FIX: Fixed issue where NativeWindow.OnClosing and NativeWindow.Closing wheren't called when calling NativeWindow.Close(). (@NogginBops)
FIX: Made CL.EnqueueReadBuffer<T>() use the correct sizeof(T) instead of sizeof(float). This caused issues where the wrong number of bytes where sent, possibly leading to an access violation. (@NogginBops, @Ed-Silver)
API: Deprecated NativeWindow.CursorVisible and NativeWindow.CursorGrabbed in favor of a unified NativeWindow.CursorState that disallows invalid combin…
BREAKING: Fixed issue where the QuaternionD(double, double, double) ctor produced the wrong quaternion. It now produces the same quaternion as Quaterion(float, float, float). (@NogginBops)
BREAKING: Fixed QuaterionD.ToEulerAngles to now produce the correct result. It now matches the result from Quaterion.ToEulerAngles. (@NogginBops)
API: Deprecated NativeWindow.CursorVisible and NativeWindow.CursorGrabbed in favor of a unified NativeWindow.CursorState that disallows invalid combinations. (@NogginBops)
API: Added NativeWindowSettings.SrgbCapable to be able to create a default framebuffer with sRGB capabilities. (@NogginBops)
API: Added glfw native access funtions added in glfw 3.1. (@NogginBops)
API: Added MinimumSize and MaximumSize properties to NativeWindow and NativeWindowSettings. (@toasty1307)
API: Added NativeWindow.ProcessWindowEvents static function for processing events manually. Prefer this function (with NativeWindow.ProcessInputEvents) in a multi-window setup. (@NogginBops)
API: Exposed NativeWindow.ProcessInputEvents() so multi-window setups can update input state of all windows before handling events (using NativeWindow.ProcessWindowEvents). (@NogginBops)
API: Added a proper "main thread" check for glfw. To turn this off, GLFWProvider.CheckForMainThread can be set to false. (@NogginBops)
API: Added all missing enums to SizedInternalFormat. (@NogginBops)
API: Added TextureCubeMapArray to TextureTarget3d. (@NogginBops)
API: Added ParameterBuffer to BufferTarget. (@NogginBops)
API: Added overloads to MultiDrawElementsIndirectCount that takes the proper DrawElementsType enum as an argument. (@NogginBops)
API: Added overloads to VertexAttribIFormat and VertexAttribLFormat that take VertexAttribIntegerType and VertexAttributeDoubleType respectively. (@BoyBaykiller)
API: Added bindings for NV_mesh_shader, NV_shading_rate, NV_primitive_shading_rate, NV_representative_fragment_test and NV_scissor_exclusive extensions. (@BoyBaykiller)
API: Enums should now be documented with their minimum version or extension requirements. These are not guaranteed to be 100% accurate but should mostly correct. (@NogginBops)
API: Added RawMouseMotionAttribute enum, to be able to control raw mouse motion from GLFW.
Fix issue where limiting framerate would cause issues with input functions like JoystickState.WasButtonPressed whould have an incorrect value (@NogginBops).
Updated GLFW to 3.3.7. This should fix an issue where UTF-16 code points where sent to OnTextInput causing it to crash. (@NogginBops, @g7ChoGXh)
If the update loop gets too far behind it no longer tries to make up for lost time. This was typically caused by resizing the window, and or closing the lid of a laptop. (@daerogami)
OpenTK no longer put an upper limit on the System.Runtime.CompilerServices.Unsafe package. (@NogginBops)
Fixed so NativeWindowSettings.DepthBits and NativeWindowSettings.StencilBits actually affect the resulting backbuffer format. (@NogginBops)
Fixed an issue in Box3i.Contains(Vector3i) where one of the comparisons where wrong, causing incorrect results. (@BlakkM9)
Fixed an issue where Vector3i.ComponentMin returned one of the input arguments instead of the proper result. (@Oribow)
Fixed OpenAL Buffer(int, BufferLoopPoint, ReadOnlySpan<int>) overload to no longer crash. (@NogginBops)
Deprecated the Closed event and then OnClosed virtual method, they where never called and now we explicitly say so. (@NogginBops)
BREAKING: Simplifications to the Monitors api, hopefully it's easier to work with now. Old functions are marked [Obsolete] with directions for equivalent operations with the new API. (@NogginBops)
BREAKING: Changed Span<T> to ReadOnlySpan<T> in OpenAL bindings where appropriate. (@NogginBops)
API: Add more information to MonitorInfo such as human-readable names and supported video modes. (@NogginBops, @utkumaden)
API: Added component-wise division operators for vector types (@NogginBops, @wildniklin)
API: Added missing One and Zero static readonly fields to Vector3i (@NogginBops, @wildniklin)
API: Implemented AL_SOFT_loop_points OpenAL extension. (@NogginBops)
Passing ContextAPI.NoAPI in NativeWindowSettings.ContextAPI will not create an OpenGL context. This allows you to use NativeWindow to create a vulkan context, see #1334. (@arakis, @NogginBops)
Added warning to documentation that ClientSize will not be guaranteed to have updated values in the OnMaximized and OnMinimized callbacks. (@NogginBops, @wo80)
Updated to GLFW 3.3.5. (@NogginBops)
FIX: Fix invalid IL generation for some edge case GL ES functions, AOT compiling OpenTK now works correctly!! (@NogginBops, thanks @jkotas for helping me understand the issue)
FIX: Fix Box3 documentation referencing 2D concepts. (@CaiB)
FIX: Fixed MathHelper.MapRange so that it no longer always throws division by zero exceptions. (@jdmisek)
FIX: Fixed OnUnload so that it's acutally called in all cases when closing the window. (@NogginBops, @adfcf)
FIX: Wrap all callbacks in exception handlers that will then rethrow these exceptions at the end of NativeWindow.ProcessEvents() so that exceptions don't unwind into native calls which is a problem on non-windows platforms. (@NogginBops, @PJB3005)
FIX: Fix NativeWindow.IsExiting and NativeWindow.Exists so that they actually contain correct values. (@NogginBops)
FIX: Fix Box2d.Translate and Box2i.Translate, this fix also fixes setting the Box2d.Center and Box2i.Center properties. (@NogginBops, @yts233)
FIX: Made JoystickCallback still work when multiple windows are used. (@TheBlubb14)
FIX: The MonitorCallback no longer gets garbage collected and crashes the program when called. (@NogginBops)
Deprecated the Closed event and then OnClosed virtual method, they where never called and now we explicitly say so. (@NogginBops)
Deprecated NativeWindowSettings.IsFullscreen, use NativeWindowSettings.WindowState instead. (@NogginBops)
Deprecated NativeWindowSettings.IsMultiThreaded, Render/Update split isn't a great idea then multithreading and users can easily spin up an "update" thread themselves. (@NogginBops)
This released was built using a broken build script. 4.7.1 is released with a fixed build script and the change log for 4.7.1 is identical to this ver
This released was built using a broken build script. 4.7.1 is released with a fixed build script and the change log for 4.7.1 is identical to this version except the fix to the build script.
FIX: Fixed closing window causing AccessViolations on windows and other crashes on other platforms. (@NogginBops)
FIX: Fixed arithmetic overflow issue in Box2i.Center and Box3i.Center introduced when making them return correct values.
Box2i.Center and Box3i.Center introduced when making them return correct values.API: Added settings in NativeWindowSettings for controlling backbuffer parameters such as DepthBits and StencilBits. (@deccer)
API: Added settings in NativeWindowSettings for controlling backbuffer parameters such as DepthBits and StencilBits. (@deccer)
API: Added SwapInterval to IGraphicsContext and moved VSync property from GameWindow to NativeWindow to allow for more control over vsync. (@softwareantics)
Updated GLFW to 3.3.4. (@NogginBops)
FIX: Fixed Box2i.Center and Box3i.Center returning wrong values. (@NogginBops, thanks @g7ChoGXh for the bug report)
FIX: Implemented proper disposing of NativeWindow. (@NogginBops, thanks @xiejiang2014 for the bug report)
FIX: Fixed calling conventions on glfw callbacks in 32-bit builds. (@NogginBops)
FIX: Made it so that the singular check in Matrix4.Invert is the same between platforms. In particular this fixes an issue where the singular check wa
FIX: Made it so that the singular check in Matrix4.Invert is the same between platforms.
In particular this fixes an issue where the singular check was too aggressive in the SSE3 path. (@NogginBops)
FIX: Made checking for OpenAL extensions not crash if the extension wasn't present. (@NogginBops)
FIX: Fix to the rewriter to not generate invalid IL on some GLES functions. (@NogginBops)
Updated CONTRIBUTING.md to not contain broken links. (@asears)
FIX: Fixed an issue where Matrix4.Invert threw an exception if the matrix determinant was negative. (@NogginBops, thanks for reporting @ghidosoft)
Matrix4.Invert threw an exception if the matrix determinant was negative. (@NogginBops, thanks for reporting @ghidosoft)FIX: The package should now be built corretly and work on .net core 3.1 and up. (@PJB)
FIX: Made OpenTK.Mathematics work on .net standard 2.1 and .net core 3.1 which broke with 4.6.0. (@PJB)
OpenTK.Mathematics work on .net standard 2.1 and .net core 3.1 which broke with 4.6.0. (@PJB)API: Added cl_khr_gl_sharing extension for OpenCL which allows OpenCL x OpenGL interop. (@NepNet)
API: Added cl_khr_gl_sharing extension for OpenCL which allows OpenCL x OpenGL interop. (@NepNet)
FIX: Removed allocations from Matrix4.Invert and Matrix3.Invert and made them about 90% faster. (@NogginBops)
API: Introduced GameWindow.UpdateTime to match GameWindow.RenderTime. (@NogginBops)
API: Introduced GameWindow.UpdateTime to match GameWindow.RenderTime. (@NogginBops)
API: Added GLFW functions for getting platform dependent opengl context pointers. (@NogginBops)
FIX: GameWindow.RenderTime now gets updated correctly. (@NogginBops)
FIX: Actually assign APIVersion property in NativeWindow. (@BroMandarin)
FIX: The MouseWheelEventArgs in OnMouseWheel now correctly returns a delta instead of an accumulated offset. (@GeorchW)
FIX: Some overloads for AL.DeleteSources where calling alDeleteBuffers instead of alDeleteSources. (@NogginBops)
API: Added properties ButtonCount, AxisCount, and HatCount to JoystickState (@Ferpsalerp)
API: Add new Monitor Info API (@utkumaden)
Fix WindowState and StartVisible to behave correctly on MS Windows (@seanofw)
Fix scrolling getting lost between frames (@NogginBops)
Fix ContextProfile documentation to be correct (@NogginBops)
Fix Quaternion -> Matrix3/Matrix4 conversions (@NogginBops)
Fix wrong binding code generation on some locales (@ahmetsait)
API: Add WGL Bindings + dx_interop extensions.
API: Add Euclidian/Manhattan Distance to Vector2/3/4i (@NogginBops)
API: Add Vector Range Mapping (@NogginBops)
Optimized Quaternion to Matrix3/Matrix4 conversions (~80% faster) (@NogginBops)
API: Switched the type of OpenCL blocking argument to bool (@NepNet)
API: Add casting from one VectorX to another VectorX (@imkSushi)
Improvements & fixes for window state transitions (@KinsonDigital)
Fix generator.bind command line handling (@HowToDoThis)
NativeWindow disposal improvements (@KinsonDigital)
Fix JoystickState ToString (@albfan)
Fix to scroll wheel effecting mouse position (@NogginBops)
Window border bug fix (@KinsonDigital)
Added IsKeyPressed/IsKeyReleased to KeyboardState (@NogginBops)
Fixed delta mouse position (@strexicious)
Fixed scrolling so that you can actually detect per frame deltas (@NogginBops)
Added scroll data to MouseState (@NogginBops)
Fix StartVisible = false not working (@FriendlyChicken)
Huge thanks and congratulations to the entire OpenTK Community for getting this release together.
Key changes:
OpenTK 4.0.0 is entirely MIT licensed.
Full Log:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →