Stefanos A. [Thu, 16 Jan 2014 16:16:03 +0000 (17:16 +0100)]
[Win] Fix X1/X2 mouse buttons (fixes issue #27)
Stefanos A [Thu, 16 Jan 2014 13:38:18 +0000 (14:38 +0100)]
Merge branch 'utf8' into develop
Stefanos A. [Thu, 16 Jan 2014 13:37:27 +0000 (14:37 +0100)]
[Examples] Move UTF8 sample to Test folder
Stefanos A [Thu, 16 Jan 2014 13:33:15 +0000 (14:33 +0100)]
Merge branch 'utf8_test' of https://github.com/ganaware/opentk into utf8
Stefanos A. [Thu, 16 Jan 2014 13:32:11 +0000 (14:32 +0100)]
[OpenTK] Use ASCII encoding
Most OpenGL versions work with single-byte ASCII strings exclusively.
OpenGL 4.2 adds UTF8 encoded comments to GLSL shaders. Unfortunately,
UTF16 (.Net) to UTF8 conversions will usually modify the length of the
resulting byte array.
This is not currently possible to implement inside OpenTK, since the
binding generator does not know which length parameter corresponds to a
string parameter.
For this reason, and to maintain compatibility with older OpenGL
versions, we perform a destructive UTF16-to-ASCII encoding, which
replaces unsupported characters by '?'. This allows multi-byte post-4.2.
GLSL shaders to work as expected.
If non-destructive round-tripping of strings is required, the user will
have to use the IntPtr overload for string parameters and perform the
UTF16-to-UTF8 encoding/decoding manually. This need is very unlikely to
arise in practice.
Stefanos A [Thu, 16 Jan 2014 10:44:34 +0000 (11:44 +0100)]
Merge branch 'develop' of https://github.com/opentk/opentk into utf8
Stefanos A [Thu, 16 Jan 2014 10:39:22 +0000 (11:39 +0100)]
Merge branch 'develop' into utf8
Nayuta Taga [Thu, 16 Jan 2014 09:27:32 +0000 (18:27 +0900)]
shader source with Japanese comment test
Nayuta Taga [Thu, 16 Jan 2014 09:05:03 +0000 (18:05 +0900)]
Merge branch 'utf8' into utf8_test
Stefanos A. [Wed, 15 Jan 2014 13:16:00 +0000 (14:16 +0100)]
[Docs] Updated readme file for release
thefiddler [Wed, 15 Jan 2014 00:25:49 +0000 (01:25 +0100)]
Merge branch 'linux_joystick' into develop
thefiddler [Wed, 15 Jan 2014 00:24:20 +0000 (01:24 +0100)]
[OpenTK] Protect against invalid axis/button ids
thefiddler [Wed, 15 Jan 2014 00:19:45 +0000 (01:19 +0100)]
[OpenTK] Fixed polling
thefiddler [Wed, 15 Jan 2014 00:13:39 +0000 (01:13 +0100)]
[OpenTK] Fixed legacy joystick hotplugging & events
thefiddler [Tue, 14 Jan 2014 23:57:28 +0000 (00:57 +0100)]
[Linux] Implemented joystick guid detection
thefiddler [Tue, 14 Jan 2014 22:53:24 +0000 (23:53 +0100)]
[OpenTK] Use LegacyJoystickDriver for IJoystickDriver implementation
thefiddler [Tue, 14 Jan 2014 22:51:31 +0000 (23:51 +0100)]
[Linux] Implemented joystick hotplugging
thefiddler [Tue, 14 Jan 2014 22:40:23 +0000 (23:40 +0100)]
[OpenTK] Suggest alternative to obsolete INativeWindow.InputDriver property
Stefanos A. [Tue, 14 Jan 2014 17:37:16 +0000 (18:37 +0100)]
[X11] Implemented joystick hotplugging
This is a work in progress.
Stefanos A. [Tue, 14 Jan 2014 17:36:36 +0000 (18:36 +0100)]
[X11] Added INotify.cs to project files
Stefanos A. [Tue, 14 Jan 2014 17:36:19 +0000 (18:36 +0100)]
[X11] Removed IJoystickDriver from X11Joystick
Legacy IJoystickDriver support is now implemented through a
LegacyJoystickDriver instance.
Stefanos A [Tue, 14 Jan 2014 17:26:05 +0000 (18:26 +0100)]
Merge branch 'develop' into linux_joystick
Stefanos A [Tue, 14 Jan 2014 17:17:05 +0000 (18:17 +0100)]
Merge branch 'legacy_joystick' into linux_joystick
Stefanos A. [Tue, 14 Jan 2014 17:15:53 +0000 (18:15 +0100)]
[Linux] Added INotify bindings
These are not currently used.
Stefanos A [Tue, 14 Jan 2014 13:21:19 +0000 (14:21 +0100)]
Merge branch 'issue43_unstablefps' into develop
Stefanos A. [Tue, 14 Jan 2014 13:20:38 +0000 (14:20 +0100)]
[OpenTK] Increase max Update/RenderFrame rates
Given the new 144Hz monitors on the market today, it makes sense to
increase the Update/RenderFrame limit from 200Hz to 500Hz.
Stefanos A. [Tue, 14 Jan 2014 12:55:24 +0000 (13:55 +0100)]
[OpenTK] Do not hang when update rate too high
OpenTK will now detect when an UpdateFrame handler is consistently
taking too long to finish, and stop raising UpdateFrame events. This
gives ProcessEvents() a chance to execute and will protect the
application from hanging up.
Stefanos A. [Tue, 14 Jan 2014 12:33:41 +0000 (13:33 +0100)]
[OpenTK] Respect a TargetUpdatePeriod of zero
Stefanos A. [Tue, 14 Jan 2014 12:27:09 +0000 (13:27 +0100)]
[Examples] Improved timing display
GameWindowStates will now display the average fps and draw three moving
boxes based on different timing methods.
If the timing implementation in OpenTK is working correctly, all three
boxes should be moving at the same speed.
Stefanos A. [Tue, 14 Jan 2014 12:04:30 +0000 (13:04 +0100)]
[OpenTK] Fix UpdateFrame quantization error
The UpdateFrame event rate will now match TargetUpdatePeriod even if
vsync is enabled. Previously, it would be quantized to a multiple or
integer fraction of of the vsync rate.
Stefanos A. [Mon, 13 Jan 2014 10:36:56 +0000 (11:36 +0100)]
[OpenTK] Remove Thread.Sleep() from loop timing
Stefanos A. [Mon, 13 Jan 2014 10:22:33 +0000 (11:22 +0100)]
[OpenTK] Simplified update and render loops
thefiddler [Sun, 12 Jan 2014 21:05:15 +0000 (22:05 +0100)]
[Audio] Don't crash when Alc.GetString() returns null
Alc.GetString() could crash if the unmanaged code returned null due to
any kind of failure. This is now fixed and better documented.
Additionally, the array overload for Alc.GetString() will now correctly
forward the ‘device’ parameter to unmanaged code.
Stefanos A. [Sun, 12 Jan 2014 20:37:18 +0000 (21:37 +0100)]
[OpenTK] Fix UpdateFrame loop condition
Multiple UpdateFrame events should be raised to match the desired
TargetUpdateFrequency, when TargetUpdateFrequency > 0. The loop would
incorrectly check for TargetRenderFrequency instead.
Affects issue #43
Stefanos A. [Sat, 11 Jan 2014 00:46:38 +0000 (01:46 +0100)]
[OpenTK] Frameskip needs TargetUpdateFrequency!=0
Stefanos A. [Fri, 10 Jan 2014 15:56:26 +0000 (16:56 +0100)]
[OpenTK] Fixed Utilities.CreateSdl2WindowInfo
Utilities.CreateSdl2WindowInfo should store the specified windowHandle
directly instead of trying to call SDL.SDL.CreateWindowFrom.
Stefanos A. [Fri, 10 Jan 2014 15:55:20 +0000 (16:55 +0100)]
[SDL2] Implemented GetWindowWMInfo
Stefanos A. [Fri, 10 Jan 2014 14:41:57 +0000 (15:41 +0100)]
[Win] More robust pixel format selection
This patch adds more robust checks for WGL_ARB_pixel_format and
WGL_ARB_multisample before using the relevant extensions, and adds
checks whether Wgl.Arb.ChoosePixelFormat() returns a valid pixel format
before trying to use it (thanks to Repetier for catching this edge
case.)
Additionally, the ChoosePixelFormatPFD code-path now heavily penalizes
single-buffered modes when the user requests a double-buffered mode.
Affects issues #42 and #45
Stefanos A. [Fri, 10 Jan 2014 08:24:59 +0000 (09:24 +0100)]
[Win] More robust WGL extension detection
Affects issue #42 and issue #45
thefiddler [Thu, 9 Jan 2014 22:36:28 +0000 (23:36 +0100)]
[Mac] OpenGL 3.x/4.x require core profile flag
SDL will fail to construct an OpenGL 3.x/4.x context on Mac OS X,
unless ContextProfileFlags.CORE is specified.
Fixes issue #44
Upstream enhancement request at
https://bugzilla.libsdl.org/show_bug.cgi?id=2342
Stefanos A. [Wed, 8 Jan 2014 23:51:09 +0000 (00:51 +0100)]
[OpenTK] Do not raise *Frame events when time = 0
Affects issue #40
thefiddler [Wed, 8 Jan 2014 23:19:42 +0000 (00:19 +0100)]
Merge branch 'rdp' into develop
Stefanos A. [Wed, 8 Jan 2014 23:14:25 +0000 (00:14 +0100)]
[Win] Fix issue #35 (OpenTK over Remote Desktop)
When running over remote desktop without hardware acceleration, there
are no GraphicsModes that support desktop composition. This patch adds
logic to avoid requesting composition-capable modes when running over
RDP.
Additionally, it changes the mode selection logic to consider modes that
support features partially (e.g. 16bpp color instead of 32bpp), albeit
with a heavy penalty over fully supported modes.
Stefanos A. [Wed, 8 Jan 2014 23:10:41 +0000 (00:10 +0100)]
[Win] Check registry keys before accessing
Fixes crashes when using OpenTK over the Remote Desktop Client for Mac
(version 2010).
thefiddler [Wed, 8 Jan 2014 21:36:32 +0000 (13:36 -0800)]
Merge pull request #38 from opentk/issue34
Fix for issue #33 and issue #34
Stefanos A. [Wed, 8 Jan 2014 21:29:22 +0000 (22:29 +0100)]
[Win] Fix issue #33; fix issue #34
This patch adds a workaround for WM_STYLECHANGED messages that are not
delivered when running on Mono/Windows. If we detect Mono, then we call
HandleStyleChanged() directly in order to update the internal state of
our WinGLNative instance.
Stefanos A. [Wed, 8 Jan 2014 18:22:03 +0000 (19:22 +0100)]
[Win] Do not overload internal SetWindowLong
The internal function is now appended with "Internal".
Stefanos A. [Wed, 8 Jan 2014 18:21:29 +0000 (19:21 +0100)]
[Win] Do not unregister class twice
Only the parent window would register a class, but both the parent and
the child window would unregister it. This is now fixed.
Stefanos A. [Tue, 7 Jan 2014 23:45:42 +0000 (00:45 +0100)]
[Win] Remove unnecessary #if clauses
Stefanos A. [Tue, 7 Jan 2014 23:02:27 +0000 (00:02 +0100)]
[Win] Refactor huge wndproc into functions
thefiddler [Tue, 7 Jan 2014 21:19:22 +0000 (22:19 +0100)]
Merge branch 'timing' into develop
Stefanos A. [Tue, 7 Jan 2014 21:09:52 +0000 (22:09 +0100)]
[Examples] Added keys to modify timing
Use [ and ] to decrease and increase the UpdateFrame frequency.
Use < and > to decrease and increase the RenderFrame frequency.
Stefanos A. [Tue, 7 Jan 2014 21:09:02 +0000 (22:09 +0100)]
[OpenTK] Improved timing stability
OpenTK now directly calculates the elapsed time between UpdateFrame
(RenderFrame) events and compares that directly to TargetUpdatePeriod
(TargetRenderPeriod). This significantly simplifies the implementation
and improves timing stability.
Stefanos A. [Tue, 7 Jan 2014 14:55:11 +0000 (15:55 +0100)]
[OpenTK] Fixed Update/RenderTime calculation
These values should only be re-calculated when an Update/RenderFrame
event is raised. Otherwise, they should retain their previous values.
thefiddler [Tue, 7 Jan 2014 08:12:35 +0000 (09:12 +0100)]
[Examples] Improve timing information; add vsync toggle
thefiddler [Tue, 7 Jan 2014 08:11:55 +0000 (09:11 +0100)]
[OpenTK] Corrected GameWindow.Update/RenderFrequency information
thefiddler [Tue, 7 Jan 2014 08:09:43 +0000 (09:09 +0100)]
[OpenTK] Implemented GameWindow.UpdateTime and RenderTime properties
thefiddler [Tue, 7 Jan 2014 07:52:02 +0000 (08:52 +0100)]
[OpenTK] More robust timing for UpdateFrame and RenderFrame
FrameEventArgs.Time should no longer drift from clock time measured
outside GameWindow.
thefiddler [Tue, 7 Jan 2014 00:01:00 +0000 (01:01 +0100)]
[Examples] Calculate timing information in GameWindowStates
thefiddler [Mon, 6 Jan 2014 23:48:09 +0000 (00:48 +0100)]
[Examples] Cleaned up input device printing in GameWindowStates
thefiddler [Mon, 6 Jan 2014 13:49:05 +0000 (14:49 +0100)]
[OpenTK] Platform backends should inherit from PlatformFactoryBase
This reduces code duplication wrt deprecated interfaces and common
support code between backends.
thefiddler [Mon, 6 Jan 2014 13:47:58 +0000 (14:47 +0100)]
[OpenTK] Added base IPlatformFactory implementation
PlatformFactoryBase provides a common base interface for platform
backends. Platform backends should inherit from PlatformFactoryBase in
order to reduce code duplication.
thefiddler [Mon, 6 Jan 2014 13:25:05 +0000 (14:25 +0100)]
[Platform] Implemented legacy IJoystickDriver
LegacyJoystickDriver implements the legacy IJoystickDriver interface
(GameWindow.Joysticks) in terms of the new IJoystickDriver2 interface
(OpenTK.Input.Joystick).
This removes a large chunk of code from each platform backend, as they
no longer need to implement IJoystickDriver themselves. Additionally,
it adds support for device hot plugging which was previously missing.
Stefanos A. [Mon, 6 Jan 2014 00:57:54 +0000 (01:57 +0100)]
[OpenTK] Simplify and improve timing calculations
This patch modifies GameWindow.Run() to use a single stopwatch instead
of two separate stopwatches for timing UpdateFrame and RenderFrame
events.
It improves timing accuracy for issue #20 (FrameEventArgs.Time
Inconsistencies)
Stefanos A. [Mon, 6 Jan 2014 00:52:08 +0000 (01:52 +0100)]
[Math] Added MathHelper.Clamp
thefiddler [Sun, 5 Jan 2014 22:58:05 +0000 (23:58 +0100)]
[Mac] Do not store *State structs directly
Storing Mouse/KeyboardState structs directly makes updates more
difficult than they should be. It is simpler to create simple classes
instead.
thefiddler [Sun, 5 Jan 2014 22:50:17 +0000 (23:50 +0100)]
[Input] Added Keyboard/MouseState.SetIsConnected to mirror JoystickState
thefiddler [Sun, 5 Jan 2014 21:50:27 +0000 (22:50 +0100)]
Merge branch 'mac_joystick' into develop
thefiddler [Sun, 5 Jan 2014 21:44:58 +0000 (22:44 +0100)]
[Mac] Map GamePads, MultiAxisControllers and Wheels to joysticks
thefiddler [Sun, 5 Jan 2014 21:38:26 +0000 (22:38 +0100)]
[Mac] Call DeviceRemoved() in Dispose() event
The necessary cleanup code already exists in DeviceRemoved(). No need
to duplicate this in the Dispose() event.
thefiddler [Sun, 5 Jan 2014 21:36:01 +0000 (22:36 +0100)]
[Mac] Avoid IOHIDDeviceConformsTo call in DeviceRemoved handler
DeviceAdded already checks that devices conform to the desired usage
pages. Checking again in DeviceRemoved is unnecessary - if a device
exists, then it has already passed muster.
thefiddler [Sun, 5 Jan 2014 21:15:55 +0000 (22:15 +0100)]
[Mac] Implement Joystick.GetGuid()
thefiddler [Sun, 5 Jan 2014 21:06:19 +0000 (22:06 +0100)]
[Mac] Calculate joystick Guid for USB devices
thefiddler [Sun, 5 Jan 2014 21:05:54 +0000 (22:05 +0100)]
[Mac] Use out/ref parameters instead of unsafe pointers in bindings
thefiddler [Sun, 5 Jan 2014 20:53:28 +0000 (21:53 +0100)]
[Mac] Connect devices to first available index
thefiddler [Sun, 5 Jan 2014 20:32:24 +0000 (21:32 +0100)]
[Examples] Draw device index for Joysticks and GamePads
thefiddler [Sun, 5 Jan 2014 20:27:34 +0000 (21:27 +0100)]
[Mac] Do not call CFRelease on HID properties
HID properties are callee-owned and should not be released by the
caller. Fixes crash (memory corruption) on device hot plugging.
thefiddler [Sun, 5 Jan 2014 20:18:20 +0000 (21:18 +0100)]
[Mac] DllImport must be marked as extern
thefiddler [Sun, 5 Jan 2014 19:17:03 +0000 (20:17 +0100)]
[Mac] Correctly unschedule HIDManager from run loop
thefiddler [Sun, 5 Jan 2014 03:20:51 +0000 (04:20 +0100)]
[Mac] Don't let exceptions escape to unmanaged code
thefiddler [Sun, 5 Jan 2014 03:15:30 +0000 (04:15 +0100)]
[Mac] Fixed DllEntryPointNotFound crash on device unplugging
thefiddler [Sun, 5 Jan 2014 03:11:11 +0000 (04:11 +0100)]
[Mac] Implemented joystick buttons
thefiddler [Sun, 5 Jan 2014 02:54:53 +0000 (03:54 +0100)]
[Mac] Implemented joystick axis movement
thefiddler [Sun, 5 Jan 2014 02:54:34 +0000 (03:54 +0100)]
[Input] Added JoystickAxis/Button.Last; added JoystickAxis.Axis10.
JoystickAxis/Button.Last is used internally to allocate the correct
amount of storage for joystick axes and buttons. JoystickAxis.Axis10 is
required to support the maximum number of axes available on Mac OS X.
thefiddler [Sun, 5 Jan 2014 02:03:46 +0000 (03:03 +0100)]
[Mac] Implemented joystick device detection
thefiddler [Sun, 5 Jan 2014 01:42:47 +0000 (02:42 +0100)]
[Mac] Retrieve HID joystick name
thefiddler [Sun, 5 Jan 2014 01:42:33 +0000 (02:42 +0100)]
[Mac] Implemented necessary CFString methods
thefiddler [Sat, 4 Jan 2014 23:47:40 +0000 (00:47 +0100)]
[Mac] Construct JoystickDevice when joysticks are connected
thefiddler [Sat, 4 Jan 2014 23:46:59 +0000 (00:46 +0100)]
[Input] Allow extending JoystickDevice<>
thefiddler [Sat, 4 Jan 2014 23:00:49 +0000 (00:00 +0100)]
[Mac] Only add callbacks for recognized USB HID devices
thefiddler [Sat, 4 Jan 2014 22:58:59 +0000 (23:58 +0100)]
[Mac] Implement device added/removed events for joysticks
thefiddler [Sat, 4 Jan 2014 22:55:38 +0000 (23:55 +0100)]
[Mac] Add skeleton HID input implementation for joysticks
thefiddler [Fri, 3 Jan 2014 01:23:02 +0000 (02:23 +0100)]
Merge branch 'gamepad' into develop
Conflicts:
Source/OpenTK/OpenTK.csproj
thefiddler [Fri, 3 Jan 2014 01:18:28 +0000 (02:18 +0100)]
[Graphics] Added missing documentation comment
thefiddler [Fri, 3 Jan 2014 01:17:42 +0000 (02:17 +0100)]
[Input] Corrected malformed documentation comments
thefiddler [Fri, 3 Jan 2014 00:58:16 +0000 (01:58 +0100)]
[Input] Documented all public members
thefiddler [Fri, 3 Jan 2014 00:58:08 +0000 (01:58 +0100)]
[Input] Removed JoystickState.GetAxis(int) overload
thefiddler [Thu, 2 Jan 2014 18:52:00 +0000 (19:52 +0100)]
[Input] Added SetVibration() API skeleton
thefiddler [Thu, 2 Jan 2014 18:27:04 +0000 (19:27 +0100)]
[Input] GamePad and Joystick classes should be sealed
thefiddler [Thu, 2 Jan 2014 18:24:38 +0000 (19:24 +0100)]
[SDL2] Implemented PacketNumber property