Commit Graph

47 Commits

Author SHA1 Message Date
Andrey Gusev 82f3446c5d winemac.drv: Fix a typo in WARN() message.
Signed-off-by: Andrey Gusev <andrey.goosev@gmail.com>
Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-06-24 00:07:02 +09:00
Ken Thomases d91e568635 winemac: Mirror the hierarchy of Win32 child windows with Cocoa views.
This only really affects OpenGL child windows.  GDI rendering to the window
surface is still only blitted to the window's content view.  The descendant
views don't draw and so are transparent, letting the content view show through.

Using Cocoa views for child windows fixes a problem where changes to the
position and visibility of child GL windows didn't properly affect the Cocoa GL
view.  Hiding, showing, and moving the top-level window affected the Cocoa
window and thus, indirectly, the GL view.  Moving the child GL window itself
was propagated to the GL view, so that worked.  But hiding, showing, or moving
any of the intervening ancestors of the child GL window didn't properly affect
the GL view.  Neither did hiding or showing the child GL window itself.

This also slightly improves the clipping of the GL view by its ancestors,
although it still doesn't work quite right due to Cocoa bugs.  There are also
remaining bugs with z-order among multiple GL views and clipping by overlapping
siblings.  I hope to eventually fix those using Core Animation layers, for
which this is a prerequisite.

Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-05-14 14:39:54 +09:00
Ken Thomases eef99122f7 winemac: Change macdrv_create_view() to not add the new view to a window's content view.
Callers can use macdrv_set_view_superview() to do that separately.

Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-05-14 14:39:54 +09:00
Ken Thomases ca49b8070c winemac: Create views hidden initially and add macdrv_set_view_hidden() to change that.
Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-05-14 14:39:54 +09:00
Ken Thomases 587bdb8db7 winemac: Change macdrv_set_view_window_and_frame() to macdrv_set_view_frame().
Remove the no-longer-used functionality of potentially moving the view from one
window to another.  That has been taken over by macdrv_set_view_superview().

Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-05-14 14:39:53 +09:00
Ken Thomases 8223756ba4 winemac: Add function macdrv_set_view_superview().
This allows for nesting views in a hierarchy rather than only ever adding them
as direct subviews of the window content view.  This functionality will be used
in subsequent commits.

This takes over some of the functionality of macdrv_set_view_window_and_frame(),
which will be removed in a subsequent commit.

Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-05-14 14:39:53 +09:00
Ken Thomases 1c94bf396f winemac: Add support for a high-resolution ("Retina") rendering mode.
When this Retina mode is enabled and the primary display is in the user's
default configuration, Wine gets told that screen and window sizes and mouse
coordinates are twice what Cocoa reports them as in its virtual coordinate
system ("points").  The Windows apps then renders at that high resolution and
the Mac driver blits it to screen.  If the screen is actually a Retina display
in a high-DPI mode, then this extra detail will be preserved.  Otherwise, the
rendering will be downsampled and blurry.

This is intended to be combined with increasing the Windows DPI, as via winecfg.
If that is doubled to 192, then, in theory, graphical elements will remain the
same visual size on screen but be rendered with finer detail.  Unfortunately,
many Windows programs don't correctly handle non-standard DPI so the results
are not always perfect.

The registry setting to enable Retina mode is:

[HKEY_CURRENT_USER\Software\Wine\Mac Driver]
"RetinaMode"="y"

Note that this setting is not looked for in the AppDefaults\<exe name> key
because it doesn't make sense for only some processes in a Wine session to see
the high-resolution sizes and coordinates.

Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-05-06 11:45:24 +09:00
Ken Thomases 1df961bd3d winemac: Implement the WGL_WINE_query_renderer extension.
Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-05-04 01:03:28 +09:00
Charles Davis 1eeec9513c Revert "winemac.drv: Actually make the GL context current even if no drawables were given.".
This reverts commits 38f579f9ba and
02416314ab.

No extant application uses this, nor are the wined3d maintainers
interested in using it.

Signed-off-by: Charles Davis <cdavis5x@gmail.com>
Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-03-01 01:50:06 +09:00
Charles Davis 02416314ab winemac.drv: Actually make the GL context current even if no drawables were given.
The spec for GL_ARB_framebuffer_object (and thus, OpenGL 3.x and up) is
quite clear on what happens when a context is made current with no
drawable(s). In fact, the WGL_ARB_create_context extension amends
WGL_ARB_make_current_read (as well as the base spec for wglMakeCurrent)
specifically to allow this.

Signed-off-by: Charles Davis <cdavis5x@gmail.com>
Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-02-19 11:19:00 +09:00
Charles Davis d8eac06940 winemac.drv: Don't bother storing the OpenGL version.
Signed-off-by: Charles Davis <cdavis5x@gmail.com>
Signed-off-by: Ken Thomases <ken@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
2016-02-16 12:01:57 +09:00
Ken Thomases 47708c2635 winemac: Add a new registry setting, OpenGLSurfaceMode, to control how GL surfaces relate to the window.
The default behavior is that GL surfaces are on top of all non-GL content in
the window.  This maximizes the performance for the common case of games, but
clipping by parents, siblings, and child windows isn't respected.

Setting OpenGLSurfaceMode to "behind" pushes the GL surface to be behind the
Mac window.  The window has transparent holes punched through it so that the GL
surface shows through.  USER32 and the wineserver take care of making sure the
holes are only where the GL windows would be unclipped and unoccluded.  Because
the OS X window server has to composite the GL surface with the window, this
limits the framerate.

Since the Mac driver has no server-side rendering path, GDI rendering to a
window which has a GL surface doesn't work.  As a partial workaround, mostly
for cases where a GL surface is created but never used, setting
OpenGLSurfaceMode to "transparent" allows the GDI rendering to show through the
transparent parts of the GL surface.  The GDI rendering is drawn to the
top-level window's surface as normal.  (The behavior of user32 to exclude the
portion covered by a GL window from GDI rendering is disabled.)  The GL surface
is in front of the window but potentially wholly or partially transparent.  It
is composited with the window behind it.

The GL surface is initially cleared to be completely transparent.  So, if
no GL rendering is done, the window will appear as though the GL surface didn't
exist.
2015-09-15 16:59:03 +09:00
Matteo Bruni d584651960 winemac: Implement wglCreateContextAttribsARB.
It also allows to create core profile contexts.
2015-01-08 17:29:11 +01:00
Ken Thomases fc37ed94d8 winemac: Improve handling of swap interval with respect to pbuffers, clamping to 0. 2014-03-24 11:46:22 +01:00
Ken Thomases 10f50b89c6 winemac: Don't recreate the GL view when the pixel format is set again.
It's not necessary.  Unlike with X11, on Mac OS X the pixel format doesn't affect
the properties of windows and views.  The pixel format is a property of the GL
context, which can attach to any view.
2014-03-24 11:46:16 +01:00
Ken Thomases 15612dd762 winemac: Make the swap interval a property of the window, not the context. 2014-03-21 11:16:58 +01:00
Ken Thomases 5943c58094 winemac: Fix wglSwapBuffers() to operate on the HDC, not the current GL context. 2014-03-21 11:16:54 +01:00
Ken Thomases f4b41eeb17 winemac: Eliminate unused "hdc" field of OpenGL context structure. 2014-01-16 10:55:16 +01:00
Frédéric Delanoy f2e1589b34 winemac.drv: Constify a character string. 2013-12-19 17:09:08 +01:00
Rico Schüller 2fa9b7ebb5 opengl32: Use opengl xml registry files. 2013-11-05 20:38:21 +01:00
Ken Thomases 742c48b348 winemac: Disable software GL rendering unless it's enabled via a new registry setting, AllowSoftwareRendering. 2013-10-22 16:37:40 +02:00
Frédéric Delanoy 510e30bd63 winemac.drv: Use BOOL type where appropriate. 2013-10-09 10:08:34 +02:00
Ken Thomases 53036b6917 winemac: Trace the pixel format in DescribePixelFormat(). 2013-09-12 11:08:23 +02:00
Ken Thomases a300efc852 winemac: Return failure from DescribePixelFormat() for invalid pixel format.
Also use the proper function for checking the format and looking up the
internal format description.
2013-09-12 11:08:19 +02:00
Ken Thomases d33a4da5ed winemac: Restrict DescribePixelFormat() to displayable pixel formats. 2013-09-12 11:07:58 +02:00
Charles Davis 8a041504c8 winemac.drv: Advertise some legacy WGL extensions in the GL_EXTENSIONS string. 2013-08-16 11:55:23 +02:00
Charles Davis 05a68dbc55 winemac.drv: Also return the number of pixel formats if the caller didn't supply a PIXELFORMATDESCRIPTOR. 2013-07-27 12:14:46 -05:00
Ken Thomases 9e878cb92c winemac: Add registry setting to disable vertical sync. 2013-07-02 10:07:57 +02:00
Ken Thomases b7c7d09470 winemac: Add registry setting to control glFlush() skipping for single-buffer contexts and disable it by default. 2013-07-02 10:05:35 +02:00
Ken Thomases 967a49fcb2 winemac: Force swap interval to 0 for single-buffered contexts to avoid vsync'ed flushes. 2013-07-02 10:05:07 +02:00
Ken Thomases 3c7bc8202c winemac: Avoid overdriving single-buffered GL if possible; the system throttles us.
Use glFlushRenderAPPLE(), if available, instead of glFlush() calls less
than 1/60th of a second since the last.
2013-06-21 11:57:42 +02:00
Ken Thomases a8efa5271b winemac: Fix off-by-one errors when indexing into pixel_formats array with 1-based pixel format number. 2013-06-21 11:56:37 +02:00
Ken Thomases 3964f805cc winemac: Change some run-time asserts to compile-time. 2013-05-06 11:37:44 +02:00
Ken Thomases a34168edaa winemac: Fix an off-by-one error in macdrv_wglChoosePixelFormatARB(). 2013-04-25 11:45:11 +02:00
Ken Thomases dfa2ba390d winemac: Improve logging from wglChoosePixelFormatARB() and wglGetPixelFormatAttribivARB(). 2013-04-25 11:45:07 +02:00
Francois Gouget 2baecad2c5 Assorted spelling fixes. 2013-04-18 19:13:16 +02:00
Ken Thomases 81d1bfd65d winemac: Set the ordering of color modes explicitly to reduce chance of picking an odd one. 2013-03-27 20:12:28 +01:00
Ken Thomases 484cf761fc winemac: Use kCGLPFANoRecovery for accelerated pixel formats in create_context(). 2013-03-27 20:12:28 +01:00
Ken Thomases 3158fd764d winemac: Don't read an array at index -1 in debugstr_pf(). 2013-03-25 14:09:25 +01:00
C.W. Betts c333c6ea6c winemac: Fix compilation on Lion and later. 2013-03-08 11:00:30 +01:00
Ken Thomases 3f807e7a1a winemac: Implement WGL_EXT_swap_control. 2013-03-06 12:57:26 +01:00
Ken Thomases 9c29be680c winemac: Implement WGL_NV_render_texture_rectangle. 2013-03-06 12:57:21 +01:00
Ken Thomases 8bbf09b412 winemac: Implement WGL_ARB_render_texture. 2013-03-06 12:57:17 +01:00
Ken Thomases be7231bea3 winemac: Implement WGL_ARB_pbuffer. 2013-03-06 12:57:11 +01:00
Ken Thomases 0ce3761655 winemac: Implement WGL_ARB_pixel_format and enable dependent extensions. 2013-03-06 12:57:04 +01:00
Ken Thomases 8d0d95c033 winemac: Implement WGL_ARB_make_current_read. 2013-03-06 12:56:43 +01:00
Ken Thomases 3f3ee6393d winemac: Implement OpenGL support. 2013-03-06 12:56:12 +01:00