/// <summary> /// Sets the keyboard up (key release) callback for the current window. /// </summary> /// <param name="func"> /// The new keyboard up callback function. See <see cref="KeyboardUpCallback" />. /// </param> /// <remarks> /// <para> /// <b>glutKeyboardUpFunc</b> sets the keyboard up (key release) callback for the /// current window. When a user types into the window, each key release matching /// an ASCII character will generate a keyboard up callback. The <i>key</i> /// callback parameter is the generated ASCII character. The state of modifier /// keys such as Shift cannot be determined directly; their only effect will be on /// the returned ASCII data. The <i>x</i> and <i>y</i> callback parameters /// indicate the mouse location in window relative coordinates when the key was /// pressed. When a new window is created, no keyboard callback is initially /// registered, and ASCII key strokes in the window are ignored. Passing /// <c>null</c> to <b>glutKeyboardUpFunc</b> disables the generation of /// keyboard up callbacks. /// </para> /// <para> /// During a keyboard up callback, <see cref="glutGetModifiers" /> may be called /// to determine the state of modifier keys when the keystroke generating the /// callback occurred. /// </para> /// <para> /// To avoid the reporting of key release/press pairs due to auto repeat, use /// <see cref="glutIgnoreKeyRepeat" /> to ignore auto repeated keystrokes. /// </para> /// <para> /// There is no guarantee that the keyboard press callback will match the exact /// ASCII character as the keyboard up callback. For example, the key down may /// be for a lowercase b, but the key release may report an uppercase B if the /// shift state has changed. The same applies to symbols and control characters. /// The precise behavior is window system dependent. /// </para> /// <para> /// Use <see cref="glutSpecialUpFunc" /> for a means to detect non-ASCII key /// release. /// </para> /// </remarks> /// <seealso cref="KeyboardUpCallback" /> /// <seealso cref="glutButtonBoxFunc" /> /// <seealso cref="glutCreateWindow" /> /// <seealso cref="glutGetModifiers" /> /// <seealso cref="glutIgnoreKeyRepeat" /> /// <seealso cref="glutKeyboardFunc" /> /// <seealso cref="glutMouseFunc" /> /// <seealso cref="glutSpaceballButtonFunc" /> /// <seealso cref="glutSpecialFunc" /> /// <seealso cref="glutSpecialUpFunc" /> /// <seealso cref="glutTabletButtonFunc" /> // GLUTAPI void APIENTRY glutKeyboardUpFunc(void (GLUTCALLBACK *func)(unsigned char key, int x, int y)); public static void glutKeyboardUpFunc([In] KeyboardUpCallback func) { keyboardUpCallback = func; __glutKeyboardUpFunc(keyboardUpCallback); }
private static extern void __glutKeyboardUpFunc(KeyboardUpCallback func);