Commit graph

5266 commits

Author SHA1 Message Date
thefiddler
bb741579c6 Merge pull request #56 from l3m/matrix4d-axis-angle
Updated Matrix4d.FromAxisAngle to mirror the Matrix4 version.
2014-02-06 10:33:09 +01:00
thefiddler
2bcf153475 [GL] Fixed invalid IL instruction in Get*() and Delete*() functions 2014-02-04 16:07:58 +01:00
thefiddler
d8eda71a2c [GL] Added missing ActiveUniformType.FloatMat3x2 token 2014-02-04 14:26:52 +01:00
Jonas Boesch
e2ecba7274 Updated Matrix4d.FromAxisAngle to mirror the Matrix4 version. 2014-02-04 14:03:59 +01:00
thefiddler
6856fe5e71 Merged remote-tracking branch 'l3m/matrix4d-quat-fix' into develop
Updated the Matrix4d CreateFromQuaternion methods to actually create
Matrix4d. They now mirror the Matrix4 CreateFromQuaternion methods,
just using doubles and the -d classes.

Previously, Matrix4d.CreateFromQuaterion actually created a Matrix4
from a single-precision Quaterion.
2014-02-03 11:11:36 +01:00
Stefanos A.
d0522f1073 [Win] Do not create second WinMMJoystick instance 2014-02-01 16:03:07 +01:00
Stefanos A.
45df508f8f [Win] Query WinMM joysticks on devicechange event 2014-02-01 16:02:02 +01:00
Stefanos A.
2d110728aa [Win] Cache WinMM joystick capabilities 2014-02-01 16:01:33 +01:00
Stefanos A.
2dee96d918 [Input] Fixed SetButton index check 2014-01-31 16:40:57 +01:00
Stefanos A.
4fceca2f80 [Input] Fixed compilation error 2014-01-31 16:37:36 +01:00
thefiddler
5145ebceb7 [Mac] Implemented JoystickHat support 2014-01-31 16:17:04 +01:00
thefiddler
a7228274aa [Input] Added JoystickCapabilities.HatCount 2014-01-31 15:40:07 +01:00
thefiddler
168c45f0e2 [SDL2] Implemented support for hat state 2014-01-31 15:03:51 +01:00
thefiddler
801d6ead04 [Input] Added hat state to JoystickState 2014-01-31 15:03:30 +01:00
thefiddler
0cacdf6ae4 [Input] Do not use a bitfield for hat position
Using a bitfield does not save storage space in this case, and also
stops pattern matching from working (switch() statement in C# or match
… with expressions in F#.)
2014-01-31 15:03:19 +01:00
thefiddler
a4ce2182d2 [Input] Added JoystickHatState structure 2014-01-31 15:01:35 +01:00
thefiddler
5fe2d60857 [Input] Added structures for joystick hat input 2014-01-30 17:40:26 +01:00
thefiddler
41a23ca371 [Input] Fixed off-by-one error in internal max axes/buttons 2014-01-30 17:36:59 +01:00
Stefanos A.
0e7f237d5e [Examples] BindAttribLocation must precede LinkProgram 2014-01-30 11:42:07 +01:00
Stefanos A.
bc95477488 [Examples] Updated to use 1.1 API 2014-01-30 11:40:01 +01:00
thefiddler
71d6da80de [Win] Faster WinMM GetCapabilities() and GetState()
joyGetDevCaps() is an extremely slow call that allocates memory.
WinMMJoystick is now caching its results for a significant speedup in
Joystick.GetCapabilities() and GetState().

The cache is updated whenever a joystick device is removed. WIP to
handle device added notifications.
2014-01-30 10:18:11 +01:00
thefiddler
eeaa3276f1 [Input] Implemented axis-button mappings 2014-01-29 10:39:18 +01:00
thefiddler
ef429aff01 [Input] Added support for JoystickButtons 16-31 2014-01-29 10:28:06 +01:00
thefiddler
c73e4785cd Merge remote-tracking branch 'cwassall/develop' into develop 2014-01-26 12:19:51 +01:00
thefiddler
b9426006ef [GLControl] Warn when accessing GL properties on non-current context 2014-01-26 11:08:08 +01:00
thefiddler
c9a86a63ab [GLControl] Use IGraphicsContext.SwapInterval to get/set vsync
This patch fixes warnings related to the deprecated
IGraphicsContext.VSync property.
2014-01-26 10:39:39 +01:00
thefiddler
24be068742 [GLControl] Clarified docs regarding multiple contexts 2014-01-26 10:36:52 +01:00
thefiddler
cd42f92c12 [Input] Corrected GamePadState range to byte [0,255] 2014-01-25 17:05:06 +01:00
Stefanos A.
06a3d7e1a7 [OpenTK] Don't skip AA modes in RelaxGraphicsMode
Previously, specifying an odd AA mode (e.g. 5x) would have been relaxed
to 0x. Now, it will be correctly relaxed to 4x.
2014-01-22 23:25:11 +01:00
thefiddler
417a6bedc1 [SDL2] Use RelaxGraphicsMode to find optimal mode
For SDL2, RelaxGraphicsMode requires us to clear context attributes
between consecutive attempts. This is implemented by calling
ClearGLAttributes().
2014-01-22 11:37:37 +01:00
thefiddler
0575e63a27 [Max] Use RelaxGraphicsMode to find optimal mode 2014-01-22 11:03:40 +01:00
thefiddler
6ba475e23f [Win] Use RelaxGraphicsMode to find optimal mode 2014-01-22 10:49:55 +01:00
thefiddler
615df9201b [OpenTK] Moved RelaxGraphicsMode to Utilities
This functionality is useful for all platform backends and is not
specific to the X11 backend.
2014-01-22 10:49:27 +01:00
thefiddler
6f3951e825 [OpenTK] Allow a GraphicsMode.Buffers value of 0
0 in this case means “don’t care”.
2014-01-22 10:48:40 +01:00
thefiddler
ff36f0f35a [OpenTK] Clamp max AA level to 64x
This protects against a potential denial-of-service issue during mode
selection, where the platform backend will try to reduce AA level until
a supported mode is found.
2014-01-22 10:35:08 +01:00
thefiddler
2b6aec3b23 [OpenTK] Removed unused GraphicsMode field 2014-01-22 10:31:01 +01:00
Stefanos A.
770b697583 [Win] Clear extension list on reload 2014-01-21 09:04:27 +01:00
Stefanos A.
88ae446781 [Win] Removed WGL delegates in favor of calli 2014-01-21 09:00:57 +01:00
Stefanos A.
5379deaf63 [Win] Implemented calli-based interop for WGL 2014-01-21 09:00:25 +01:00
cwassall
7b591962e8 Change original_resolution field to a property
As the original_resolution field needs to be accessed from outside the
module, it should be an internal property as opposed to an internal
field
2014-01-20 12:51:55 +00:00
cwassall
5f6c8e654c Remember DisplayDevice original resolutions
When refreshing the AvailableDevices list, it is important to set the
original resolution on any DisplayDevices that were previously available
to allow the RestoreResolution() method to work correctly.
2014-01-19 19:44:12 +00:00
Stefanos A.
c2e3328f59 [GLControl] Use dummy context in design mode
Creating a GraphicsContext with null parameters is not a guarantee that
we will get a dummy context that does not call any OpenGL functions. We
need to explicitly define and construct a dummy context that is safe to
use inside the designer.

Affects issue #49
2014-01-18 18:33:25 +01:00
Stefanos A.
b87b9e0a27 [Win] Fix X1/X2 mouse buttons (fixes issue #27) 2014-01-16 17:16:03 +01:00
Stefanos A.
8cb3538767 [Examples] Move UTF8 sample to Test folder 2014-01-16 14:37:27 +01:00
Stefanos A
51e99fe638 Merge branch 'utf8_test' of https://github.com/ganaware/opentk into utf8 2014-01-16 14:33:15 +01:00
Stefanos A.
b9f57ba4d2 [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.
2014-01-16 14:32:11 +01:00
Stefanos A
606b4ddcd1 Merge branch 'develop' of https://github.com/opentk/opentk into utf8 2014-01-16 11:44:34 +01:00
Stefanos A
9268b5ed7f Merge branch 'develop' into utf8 2014-01-16 11:39:22 +01:00
Nayuta Taga
b15f91a0f2 shader source with Japanese comment test 2014-01-16 18:27:32 +09:00
Nayuta Taga
1929cf60fa Merge branch 'utf8' into utf8_test 2014-01-16 18:05:03 +09:00
thefiddler
44e2576c86 [OpenTK] Protect against invalid axis/button ids 2014-01-15 01:24:20 +01:00
thefiddler
e6a9adf494 [OpenTK] Fixed polling 2014-01-15 01:19:45 +01:00
thefiddler
e7f037b0a2 [OpenTK] Fixed legacy joystick hotplugging & events 2014-01-15 01:13:39 +01:00
thefiddler
df7d7ae8eb [Linux] Implemented joystick guid detection 2014-01-15 00:57:28 +01:00
thefiddler
73e3b66038 [OpenTK] Use LegacyJoystickDriver for IJoystickDriver implementation 2014-01-14 23:53:24 +01:00
thefiddler
fb917a6d89 [Linux] Implemented joystick hotplugging 2014-01-14 23:51:31 +01:00
thefiddler
4ca8c78764 [OpenTK] Suggest alternative to obsolete INativeWindow.InputDriver property 2014-01-14 23:40:23 +01:00
Stefanos A.
4473c8373e [X11] Implemented joystick hotplugging
This is a work in progress.
2014-01-14 18:37:16 +01:00
Stefanos A.
b004dc7a0a [X11] Added INotify.cs to project files 2014-01-14 18:36:36 +01:00
Stefanos A.
4203c14b22 [X11] Removed IJoystickDriver from X11Joystick
Legacy IJoystickDriver support is now implemented through a
LegacyJoystickDriver instance.
2014-01-14 18:36:19 +01:00
Stefanos A
f3036e5f10 Merge branch 'develop' into linux_joystick 2014-01-14 18:26:05 +01:00
Stefanos A
cb4e4d5e72 Merge branch 'legacy_joystick' into linux_joystick 2014-01-14 18:17:05 +01:00
Stefanos A.
d467629ad8 [Linux] Added INotify bindings
These are not currently used.
2014-01-14 18:15:53 +01:00
Stefanos A
962a9f7733 Merge branch 'issue43_unstablefps' into develop 2014-01-14 14:21:19 +01:00
Stefanos A.
0c9b612bff [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.
2014-01-14 14:20:38 +01:00
Stefanos A.
1f44cf27a1 [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.
2014-01-14 13:55:24 +01:00
Stefanos A.
95d71bc0cc [OpenTK] Respect a TargetUpdatePeriod of zero 2014-01-14 13:33:41 +01:00
Stefanos A.
7b98255626 [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.
2014-01-14 13:27:09 +01:00
Stefanos A.
97e49b76b2 [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.
2014-01-14 13:04:30 +01:00
Stefanos A.
3eccb89821 [OpenTK] Remove Thread.Sleep() from loop timing 2014-01-13 11:36:56 +01:00
Stefanos A.
b3554bb74c [OpenTK] Simplified update and render loops 2014-01-13 11:22:33 +01:00
thefiddler
7afe48c979 [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.
2014-01-12 22:05:15 +01:00
Stefanos A.
fca9f930e4 [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
2014-01-12 21:37:18 +01:00
Stefanos A.
c31f64f7e1 [OpenTK] Frameskip needs TargetUpdateFrequency!=0 2014-01-11 01:46:38 +01:00
Stefanos A.
19eb72b3a9 [OpenTK] Fixed Utilities.CreateSdl2WindowInfo
Utilities.CreateSdl2WindowInfo should store the specified windowHandle
directly instead of trying to call SDL.SDL.CreateWindowFrom.
2014-01-10 16:56:26 +01:00
Stefanos A.
aff9719872 [SDL2] Implemented GetWindowWMInfo 2014-01-10 16:55:20 +01:00
Stefanos A.
bdfcf43e0b [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
2014-01-10 15:41:57 +01:00
Stefanos A.
ef5aedba6f [Win] More robust WGL extension detection
Affects issue #42 and issue #45
2014-01-10 09:24:59 +01:00
thefiddler
a4d2a31386 [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
2014-01-09 23:36:28 +01:00
Stefanos A.
7f64945079 [OpenTK] Do not raise *Frame events when time = 0
Affects issue #40
2014-01-09 00:51:09 +01:00
Stefanos A.
28ac3cec0b [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.
2014-01-09 00:14:25 +01:00
Stefanos A.
1b3b510376 [Win] Check registry keys before accessing
Fixes crashes when using OpenTK over the Remote Desktop Client for Mac
(version 2010).
2014-01-09 00:10:41 +01:00
Stefanos A.
4af9d30ccb [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.
2014-01-08 22:29:22 +01:00
Stefanos A.
51ad513dbb [Win] Do not overload internal SetWindowLong
The internal function is now appended with "Internal".
2014-01-08 19:22:03 +01:00
Stefanos A.
7363cfee7b [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.
2014-01-08 19:21:29 +01:00
Stefanos A.
51baed7286 [Win] Remove unnecessary #if clauses 2014-01-08 00:45:42 +01:00
Stefanos A.
e260a42954 [Win] Refactor huge wndproc into functions 2014-01-08 00:02:27 +01:00
Stefanos A.
a961fb3db3 [Examples] Added keys to modify timing
Use [ and ] to decrease and increase the UpdateFrame frequency.
Use < and > to decrease and increase the RenderFrame frequency.
2014-01-07 22:09:52 +01:00
Stefanos A.
b6a806a568 [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.
2014-01-07 22:09:02 +01:00
Stefanos A.
6e03d501ae [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.
2014-01-07 15:55:11 +01:00
thefiddler
251f5717ae [Examples] Improve timing information; add vsync toggle 2014-01-07 09:12:35 +01:00
thefiddler
99df27b635 [OpenTK] Corrected GameWindow.Update/RenderFrequency information 2014-01-07 09:11:55 +01:00
thefiddler
56a3dd91e5 [OpenTK] Implemented GameWindow.UpdateTime and RenderTime properties 2014-01-07 09:09:43 +01:00
thefiddler
3856fcd48e [OpenTK] More robust timing for UpdateFrame and RenderFrame
FrameEventArgs.Time should no longer drift from clock time measured
outside GameWindow.
2014-01-07 08:52:02 +01:00
thefiddler
c5dcc8a93b [Examples] Calculate timing information in GameWindowStates 2014-01-07 01:01:00 +01:00
thefiddler
d49dacb5b3 [Examples] Cleaned up input device printing in GameWindowStates 2014-01-07 00:48:09 +01:00
thefiddler
94c3c24bfb [OpenTK] Platform backends should inherit from PlatformFactoryBase
This reduces code duplication wrt deprecated interfaces and common
support code between backends.
2014-01-06 14:49:05 +01:00
thefiddler
d84be0d594 [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.
2014-01-06 14:47:58 +01:00
thefiddler
a94a293732 [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.
2014-01-06 14:25:05 +01:00
Stefanos A.
83f54f70aa [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)
2014-01-06 01:57:54 +01:00