thefiddler [Sat, 28 Dec 2013 00:14:59 +0000 (01:14 +0100)]
[Graphics] Improved support for external OpenGL contexts
When combining OpenTK with a third-party OpenGL toolkit, it is now
possible to implement a suitable GetAddress() and GetCurrentContext()
implementation in terms of the third-party toolkit. If no
implementation is specified, then OpenTK will try to guess the most
suitable implementation within its own platform backends.
If no custom implementation is defined, and if no suitable
implementation can be found, then OpenTK will throw a
PlatformNotSupportedException. If a suitable implementation is found or
defined, then OpenTK will attempt to load OpenGL entry points using
that implementation.
In this case third-party toolkit remains solely responsible for
managing its context via its MakeCurrent(), SwapBuffers(), etc
implementations.
thefiddler [Sat, 28 Dec 2013 00:09:59 +0000 (01:09 +0100)]
[Dummy] Improved thread-safety; added entry-point loader
DummyGLContext will now attempt to load OpenGL and OpenGL ES entry
points when a suitable OpenGL context is current on the calling thread.
This allows OpenTK to be used on contexts created through third-party
toolkits.
thefiddler [Sat, 28 Dec 2013 00:08:24 +0000 (01:08 +0100)]
[Platform] Added internal CreateGetAddress() function
CreateGetAddress() constructs a GraphicsContext.GetAddressDelegate that
is suitable for the current platform. This can be used when combining
OpenTK with an OpenGL context created through a third-party toolkit.
thefiddler [Sat, 28 Dec 2013 00:06:33 +0000 (01:06 +0100)]
[Mac] Moved GetAddress implementation to its own class
The functions defined in libdl.dylib are useful in more places than
just AglContext. Moving them to their own class ensures we can access
these from wherever we might need them.
thefiddler [Sat, 28 Dec 2013 00:04:46 +0000 (01:04 +0100)]
[SDL2] Added missing [SuppressUnamangedCodeSecurity] attribute
thefiddler [Sat, 28 Dec 2013 00:04:22 +0000 (01:04 +0100)]
[Mac] Use Cgl.GetCurrentContext instead of Agl
CGL appears to work with both AGL and NSOpenGL contexts, whereas AGL is
limited to AGL contexts. This allows us to be more flexible in terms of
implementation (i.e. we can use Cgl.GetCurrentContext to retrieve a
handle to a context created through SDL, which uses NSOpenGL
internally.)
thefiddler [Fri, 27 Dec 2013 12:01:21 +0000 (14:01 +0200)]
[X11] Improve GraphicsMode fallback (fixes issue #23)
When the user requests a GraphicsMode that is not directly supported
by the GPU/drivers, we should relax the requested parameters until
we find a supported mode. An exception should only be thrown when
there is no usable mode.
This makes the X11 backend match the behavior of Windows. The SDL/X11
backend works a little bit differently, in that it falls back to the
a default mode directly if the requested mode is not available. There
is nothing we can do about that.
thefiddler [Fri, 27 Dec 2013 11:31:51 +0000 (13:31 +0200)]
[X11] Fixed border size on Gnome 3
The _NET_FRAME_EXTENTS atom is implemented differently by
different window managers, when window decorations are hidden
with Motif. Unity returns a 0 size, while Gnome 3 returns the
previous size.
This patch removes that ambiguity: when decorations are hidden,
border size becomes zero. This should work everywhere, unless
some window manager decides to troll us by decorating the window
when we explicitly request no decorations. Sigh...
thefiddler [Fri, 27 Dec 2013 10:10:41 +0000 (11:10 +0100)]
[Input] Do not crash with scancodes > 255
thefiddler [Fri, 27 Dec 2013 10:07:38 +0000 (11:07 +0100)]
[X11] Allow resizing with fixed borders
Windows can now be resized programmatically, even when they have
WindowBorder.Fixed. All resizing logic is now consolidated in the
Bounds property, and ConfigureNotify messages are now handled
correctly depending on their source (StructureNotify or
SubStructureNotify.)
thefiddler [Wed, 25 Dec 2013 10:46:02 +0000 (11:46 +0100)]
Implemented X11 KeyDown/KeyUp events and reduced code duplication
thefiddler [Wed, 25 Dec 2013 10:14:30 +0000 (11:14 +0100)]
Do not raise KeyPress for control characters
parallels [Wed, 25 Dec 2013 10:11:29 +0000 (11:11 +0100)]
Ignore *.pidb files from MonoDevelop 2.x
thefiddler [Mon, 23 Dec 2013 20:43:17 +0000 (21:43 +0100)]
Removed unused constructors
thefiddler [Mon, 23 Dec 2013 20:42:16 +0000 (21:42 +0100)]
Added Compositing and FrameworkScaled flags
thefiddler [Mon, 23 Dec 2013 19:40:27 +0000 (20:40 +0100)]
Fixed OpenTK/Carbon key repeat behavior to match the other backends
thefiddler [Mon, 23 Dec 2013 19:21:02 +0000 (20:21 +0100)]
Fixed GameWindow.{Bounds, Location, Size, X, Y} setters on OpenTK/Carbon
thefiddler [Mon, 23 Dec 2013 18:32:16 +0000 (19:32 +0100)]
Implemented KeyDown & KeyUp events on OpenTK/Carbon
Stefanos A. [Sun, 22 Dec 2013 14:40:01 +0000 (15:40 +0100)]
Remove bogus GraphicsMode.Index check. Fixes #22
GraphicsMode.Index is set by the platform-specific context constructor,
which is invoked after the X11GLControl constructor. It does not make
sense to check GraphicsMode.Index in the X11GLControl constructor, as it
is never set at that point.
Stefanos A [Sun, 22 Dec 2013 10:16:10 +0000 (11:16 +0100)]
Merge branch 'wgl_issue21'. Fixes issue #21
Stefanos A. [Sun, 22 Dec 2013 10:10:05 +0000 (11:10 +0100)]
Fixed crash in MakeCurrent(null)
MakeCurrent(null) should set the bound device context to zero.
Stefanos A. [Sun, 22 Dec 2013 09:35:05 +0000 (10:35 +0100)]
Added WGL_DRAW_TO_WINDOW_ARB flag
Without this flag, OpenGL rendering does not work as expected.
Additionally, all WGL_ARB_pixel_format attributes are expected to be
specified in key-value pairs. Fixed double-buffering and stereoscoping
rendering attributes.
Stefanos A. [Sun, 22 Dec 2013 08:20:40 +0000 (09:20 +0100)]
Improved WGL mode selection
Fixed WGL_ARB_pixel_format attribute selection for doublebuffering,
stereoscopic rendering and hardware acceleration. Implemented
minimization strategy to select the optimal PixelFormatDescriptor in the
fallback path.
Stefanos A. [Sat, 21 Dec 2013 22:35:55 +0000 (23:35 +0100)]
Fixed DescribePixelFormatPFD
When using the PFD codepath, we now call DescribePixelFormat to retrieve
an exact interpretation of the pixel format selected by the driver.
Stefanos A. [Sat, 21 Dec 2013 21:43:35 +0000 (22:43 +0100)]
Prioritize accelerated formats first
Instead of creating a list of all available formats and iterating
through that, we let the driver decide which is the best accelerated
format to use for the user parameters. If no such format exists, we fall
back to generic acceleration or software acceleration, in turn.
This affects issue #21
Stefanos A. [Sat, 21 Dec 2013 21:41:35 +0000 (22:41 +0100)]
Turn 1-element array to ref/out param
Stefanos A. [Sat, 21 Dec 2013 21:41:10 +0000 (22:41 +0100)]
Display renderer information
Stefanos A. [Fri, 20 Dec 2013 23:50:25 +0000 (00:50 +0100)]
Implemented KeyDown and KeyUp messages
Stefanos A. [Fri, 20 Dec 2013 23:43:05 +0000 (00:43 +0100)]
Clean fix issue #19
Isolate and commit fix for issue #19 without potential for regressions.
Stefanos A [Fri, 20 Dec 2013 23:41:55 +0000 (00:41 +0100)]
Revert "Fix issue #19"
This reverts commit
2c14ec5f800b8ef6527f05ba26d6c6cca4b417d8.
Stefanos A. [Fri, 20 Dec 2013 22:31:42 +0000 (23:31 +0100)]
Fix issue #19
Don't filter window messages passed to our window (see
http://blogs.msdn.com/b/oldnewthing/archive/2005/02/09/369804.aspx).
Additionally, return the correct values for all messages we are actually
handling and clean up unmanaged memory after we are done with the
window.
Stefanos A. [Fri, 20 Dec 2013 22:29:47 +0000 (23:29 +0100)]
Explicitly set WindowProcedure calling convention
Stefanos A. [Fri, 20 Dec 2013 07:42:36 +0000 (08:42 +0100)]
Simplify ProcessEvents implementation
Instead of combining PeekMessage+GetMessage, we can simply call
PeekMessage(Remove) to achieve the same effect. This also allows us to
remove the IsIdle property, which is no longer used anywhere.
Stefanos A. [Thu, 19 Dec 2013 09:39:36 +0000 (10:39 +0100)]
Threads with message pump require STA comparment
May affect issue #19
Stefanos A. [Wed, 18 Dec 2013 13:51:00 +0000 (14:51 +0100)]
Replace Wgl.GetCurrentDC with cached dc
with
Stefanos A. [Wed, 18 Dec 2013 13:29:18 +0000 (14:29 +0100)]
No point in using 16bpp color
Stefanos A. [Wed, 18 Dec 2013 13:29:06 +0000 (14:29 +0100)]
Cleaned up temporary context construction
The temporary context is now retained until the actual context has been
constructed. If we don't do this, then WGL_ARB_create_context may fail
to work correctly on specific GPUs (e.g. Intel). This may affect issue
#19.
Stefanos A. [Wed, 18 Dec 2013 13:16:49 +0000 (14:16 +0100)]
Fixed GetModesARB implementation
The correct way to query number of available pixel formats is to use
Wgl.Arb.GetPixelFormatAttrib(NumberPixelFormatsArb), not
Wgl.Arb.ChoosePixelFormats. This fixes an issue where Intel drivers
would fail to report any pixel formats in GetModesARB, even when
WGL_ARB_pixel_format is supported.
Stefanos A. [Tue, 17 Dec 2013 22:31:04 +0000 (23:31 +0100)]
Minor code cleanup
Stefanos A. [Tue, 17 Dec 2013 21:35:30 +0000 (22:35 +0100)]
Use gdi32 implementations of functions
Several functions are defined in both gdi32 and opengl32. Using the
opengl32/wgl versions did not appear to help with issue #19. Let's use
the gdi32 version instead, as suggested here:
https://www.opengl.org/wiki/Platform_specifics:_Windows#The_WGL_functions
Stefanos A. [Tue, 17 Dec 2013 20:24:25 +0000 (21:24 +0100)]
Load opengl32.dll before gdi32.dll
According to
http://stackoverflow.com/questions/199016/wglcreatecontext-in-c-sharp-failing-but-not-in-managed-c,
opengl32.dll must be loaded before gdi32.dll. Affect issue #19.
Stefanos A. [Tue, 17 Dec 2013 15:40:15 +0000 (16:40 +0100)]
Minor code cleanup
No need to wrap Wgl.DescribePixelFormat, just call it directly.
Stefanos A. [Tue, 17 Dec 2013 15:39:45 +0000 (16:39 +0100)]
Use opengl32 instead of gdi32 throughout
Since we are dynamically loading opengl32.dll, we are supposed to use
the wgl version of functions that exist in both opengl32 and gdi32 dlls.
Stefanos A. [Tue, 17 Dec 2013 15:38:56 +0000 (16:38 +0100)]
Corrected the entrypoint for wglChoosePixelFormat
Stefanos A. [Tue, 17 Dec 2013 11:09:00 +0000 (12:09 +0100)]
Clean up shader error detection
Stefanos A. [Mon, 16 Dec 2013 11:43:11 +0000 (12:43 +0100)]
Updated author information (2/2)
Stefanos A. [Mon, 16 Dec 2013 10:07:05 +0000 (11:07 +0100)]
Updated author information
Stefanos A. [Mon, 16 Dec 2013 09:44:37 +0000 (10:44 +0100)]
Use 16bit depth in GraphicsMode.Default
16bits appear to be better supported than 24bits on virtual machines.
Stefanos A. [Mon, 16 Dec 2013 09:43:56 +0000 (10:43 +0100)]
GraphicsContext cannot be released by finalizer
On many/most platforms, GraphicsContexts can only be released by the
thread where they are current. This means that the user must call
GraphicsContext.Dispose() or risk a resource leak.
Since we cannot release contexts on the finalizer thread, we should keep
strong references, instead of weak references, until the user explicitly
calls Dispose().
This patch fixes issues with SDL2 crashing when running the MonoGame
WindowsGL test suite.
Stefanos A. [Mon, 16 Dec 2013 09:39:54 +0000 (10:39 +0100)]
Improved diagnostics
This helps when tracking down GraphicsContext-related issues in SDL2.
Stefanos A. [Mon, 16 Dec 2013 09:39:11 +0000 (10:39 +0100)]
Added hack for MonoGame compatibility
MonoGame uses reflection to access internal APIs. We need to keep these
available until this is fixed downstream.
Stefanos A. [Mon, 16 Dec 2013 09:37:59 +0000 (10:37 +0100)]
Protect against recursion in Closing event
Misbehaving clients that shall not be named here may call
GameWindow.Close() inside the GameWindow.Closing event. This causes
recursion in SDL2, crashing the application.
This patch adds a guard to protect against recursion when calling
GameWindow.Close().
Stefanos A [Mon, 16 Dec 2013 00:55:05 +0000 (01:55 +0100)]
Added overloads for compatibility with svn r3127
Several projects are still using the last svn revision from the
sourceforge repository (r3127). These overloads provide an upgrade path
from r3127 to OpenTK 1.1.
Stefanos A [Sun, 15 Dec 2013 22:18:33 +0000 (23:18 +0100)]
Normalized xml doc file paths
Stefanos A [Sun, 15 Dec 2013 22:08:53 +0000 (23:08 +0100)]
Removed lib/ and *.nupkg from zip archive
Stefanos A [Sun, 15 Dec 2013 22:08:19 +0000 (23:08 +0100)]
Fixed build order in Nsis configuration
Stefanos A [Sun, 15 Dec 2013 22:07:56 +0000 (23:07 +0100)]
Added Dependencies folder to Nsis installer
Stefanos A [Sun, 15 Dec 2013 21:33:28 +0000 (22:33 +0100)]
Fixed build in Nsis configuration
Stefanos A [Sun, 15 Dec 2013 21:32:32 +0000 (22:32 +0100)]
Updated OpenGL documentation to Khronos r24522
Stefanos A [Sun, 15 Dec 2013 21:02:32 +0000 (22:02 +0100)]
Fixed deprecation warning
Stefanos A [Sun, 15 Dec 2013 21:02:21 +0000 (22:02 +0100)]
Eliminated cls-compliance warnings in BlittableValueType
Stefanos A [Sun, 15 Dec 2013 21:02:08 +0000 (22:02 +0100)]
Eliminated cls-compliance warnings in the math library
Stefanos A [Sun, 15 Dec 2013 21:01:45 +0000 (22:01 +0100)]
Eliminated CLS-compliance warnings in the bindings
Stefanos A [Sun, 15 Dec 2013 19:57:25 +0000 (20:57 +0100)]
Fixed memory corruption on string return type marshaling
Stefanos A [Sun, 15 Dec 2013 17:30:47 +0000 (18:30 +0100)]
Merge branch 'no-reflect' of https://github.com/opentk/opentk
Conflicts:
OpenTK.sln
parallels [Sun, 15 Dec 2013 17:27:24 +0000 (18:27 +0100)]
Compatibility fixes for Mono 2.10
The Mono 2.10 compiler fails when compiling extern methods that are not
marked as DllImport. We fix that by adding a method body that throws a
NotImplementedException instead.
Additionally, MonoDevelop 2.8 cannot open sln files with ToolsVersion 12.
The fix is to change ToolsVersion to 11.
Stefanos A [Sun, 15 Dec 2013 16:37:25 +0000 (17:37 +0100)]
Merge branch 'no-reflect'
Conflicts:
OpenTK.sln
Source/Bind/FuncProcessor.cs
Source/OpenTK/Graphics/ES11/ES11.cs
Source/OpenTK/Graphics/ES11/ES11Core.cs
Source/OpenTK/Graphics/ES11/ES11Delegates.cs
Source/OpenTK/Graphics/ES20/ES20.cs
Source/OpenTK/Graphics/OpenGL/GL.cs
Source/OpenTK/Graphics/OpenGL/GLCore.cs
Source/OpenTK/Graphics/OpenGL/GLDelegates.cs
Source/OpenTK/Graphics/OpenGL/GLObsolete.cs
Stefanos A [Sun, 15 Dec 2013 15:58:33 +0000 (16:58 +0100)]
Maintain backwards compatibility with 1.1
Stefanos A [Sun, 15 Dec 2013 15:36:37 +0000 (16:36 +0100)]
Merge master into no-reflect
Stefanos A. [Sun, 15 Dec 2013 14:36:24 +0000 (15:36 +0100)]
Build UpdateVersion before OpenTK
Stefanos A. [Sun, 15 Dec 2013 14:36:12 +0000 (15:36 +0100)]
Generate debug symbols in release builds
Stefanos A. [Sun, 15 Dec 2013 14:35:57 +0000 (15:35 +0100)]
Improved WindowState changes on SDL2 backend
SDL2 fails to report several different WindowState changes. OpenTK uses
a number of hacks to make it work to some extent, however real fixes
will have to be implemented upstream.
Stefanos A [Sun, 15 Dec 2013 12:51:29 +0000 (13:51 +0100)]
Merge branch 'sdlres'
Stefanos A. [Sun, 15 Dec 2013 12:47:29 +0000 (13:47 +0100)]
Updated solution to VS2013 format.
Stefanos A. [Sun, 15 Dec 2013 12:47:19 +0000 (13:47 +0100)]
Added nuget.exe to project items
Stefanos A. [Sun, 15 Dec 2013 12:36:00 +0000 (13:36 +0100)]
Committed nuget cmdline tool to source control
This appears to be the simplest (only?) way to use nuget in a
cross-platform manner.
Stefanos A [Sun, 15 Dec 2013 12:23:16 +0000 (13:23 +0100)]
Merge branch 'nuget'
Stefanos A [Sun, 15 Dec 2013 12:21:22 +0000 (13:21 +0100)]
Add OpenTK.dll.config as content
Stefanos A [Sun, 15 Dec 2013 12:05:06 +0000 (13:05 +0100)]
MonoDevelop insists on making these changes
Stefanos A [Sun, 15 Dec 2013 12:04:29 +0000 (13:04 +0100)]
Updated description
Stefanos A [Sun, 15 Dec 2013 12:03:56 +0000 (13:03 +0100)]
Generate nuget package for OpenTK.GLControl
Stefanos A [Sun, 15 Dec 2013 12:01:39 +0000 (13:01 +0100)]
Generate xml documentation for OpenTK.GLControl
Stefanos A [Sun, 15 Dec 2013 11:02:43 +0000 (12:02 +0100)]
Improved nuget version information
Stefanos A [Sun, 15 Dec 2013 11:02:01 +0000 (12:02 +0100)]
Do not commit build timestamp to repository
Stefanos A [Sun, 15 Dec 2013 11:01:26 +0000 (12:01 +0100)]
Generate both build timestamp and version information
parallels [Sat, 14 Dec 2013 10:54:55 +0000 (11:54 +0100)]
Delay VisualInfo construction (fixes #17)
In OpenTK 1.1, GraphicsMode queries the platform for a mode id lazily.
By delaying VisualInfo selection until the GraphicsContext is constructed
we ensure that a concrete GraphicsMode is selected and ready for use.
Stefanos A [Fri, 13 Dec 2013 23:20:39 +0000 (00:20 +0100)]
Copy build artifact to root directory regardless of artifact name
Stefanos A [Fri, 13 Dec 2013 23:19:18 +0000 (00:19 +0100)]
Added release notes for OpenTK
Stefanos A [Fri, 13 Dec 2013 23:19:03 +0000 (00:19 +0100)]
Added nuget lib directory to gitignore
Stefanos A [Fri, 13 Dec 2013 09:52:11 +0000 (10:52 +0100)]
Added nuget build target to OpenTK.sln
Stefanos A [Fri, 13 Dec 2013 09:51:34 +0000 (10:51 +0100)]
Added nuget build target
This will create a nupkg file for OpenTK and copy it to the base
directory. Version information is currently hardcoded to 1.1 (this
should be fixed.)
Stefanos A [Thu, 12 Dec 2013 23:07:13 +0000 (00:07 +0100)]
Implemented resolution change workaround on SDL2
SDL2 does not support changing display resolutions independently of an
SDL window. As a workaround, if the user uses ChangeResolution and then
makes a GameWindow fullscreen, we use old-style SDL fullscreen which
changes the resolution. If the user makes a GameWindow fullscreen
without calling ChangeResolution first, we use the new
fullscreen-desktop mode to match the other OpenTK backends.
Stefanos A [Mon, 9 Dec 2013 22:46:07 +0000 (23:46 +0100)]
Cache size of char
BlittableValueType<char> caches the size of the type parameter. This
way, we avoid calling Marshal.SizeOf repeatedly for every keyboard
event.
Stefanos A [Mon, 9 Dec 2013 22:44:51 +0000 (23:44 +0100)]
Eliminated memory allocations in Keyboard events
Stefanos A [Mon, 9 Dec 2013 22:43:36 +0000 (23:43 +0100)]
Do not generate KeyPress events for non-printable characters
Stefanos A [Sun, 8 Dec 2013 20:07:46 +0000 (21:07 +0100)]
Merge branch 'enumfix'
Stefanos A [Sun, 8 Dec 2013 15:20:30 +0000 (16:20 +0100)]
Regenerated bindings
Stefanos A [Sun, 8 Dec 2013 15:20:22 +0000 (16:20 +0100)]
Added overloads for compatibility with 1.0 and 1.1 APIs
Stefanos A [Sun, 8 Dec 2013 15:20:04 +0000 (16:20 +0100)]
Maintain Obsolete property when cloning a function
Stefanos A [Sun, 8 Dec 2013 15:19:46 +0000 (16:19 +0100)]
Create convenience overloads based on wrappers, not entry points
It makes sense to generate convenience overloads for each relevant
wrapper function, instead of each entry point. This way, we generate
convenience overloads for every wrapper in overrides.xml (even wrappers
for background compatibility), which would otherwise be ignored.