All Versions
Latest Version
Avg Release Cycle
13 days
Latest Release

Changelog History
Page 1

  • v4.7.4 Changes

    • 🛠 FIX: Updated OpenTK.redist.glfw nuget reference to the latest version (, the previous had issues on linux.
  • v4.7.3 Changes

    • 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)

  • v4.7.2 Changes

    • 💥 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)

  • v4.7.1 Changes

    • 💥 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)

  • v4.7.0 Changes

    🚀 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.

  • v4.6.7 Changes

    • 🛠 FIX: Fixed closing window causing AccessViolations on windows and other crashes on other platforms. (@NogginBops)
  • v4.6.6 Changes

    • 🛠 FIX: Fixed arithmetic overflow issue in Box2i.Center and Box3i.Center introduced when making them return correct values.
  • v4.6.5 Changes

    • 🏁 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)

  • v4.6.4 Changes

    • 🛠 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 to not contain broken links. (@asears)

  • v4.6.3 Changes

    • 🛠 FIX: Fixed an issue where Matrix4.Invert threw an exception if the matrix determinant was negative. (@NogginBops, thanks for reporting @ghidosoft)