| /************************************************************************** |
| * |
| * Copyright 2010 Luca Barbieri |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining |
| * a copy of this software and associated documentation files (the |
| * "Software"), to deal in the Software without restriction, including |
| * without limitation the rights to use, copy, modify, merge, publish, |
| * distribute, sublicense, and/or sell copies of the Software, and to |
| * permit persons to whom the Software is furnished to do so, subject to |
| * the following conditions: |
| * |
| * The above copyright notice and this permission notice (including the |
| * next paragraph) shall be included in all copies or substantial |
| * portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
| * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE |
| * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
| * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
| * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
| * |
| **************************************************************************/ |
| |
| /* Header for the Gallium extensions to DXGI */ |
| |
| import "galliumcom.idl"; |
| import "../d3dapi/dxgi.idl"; |
| |
| /* These calls set the display system that will be associated |
| * to new DXGI factories created with CreateDXGIFactory and |
| * CreateDXGIFactory1 by the current thread. |
| * |
| * Existing factories and DXGI objects created from them are |
| * not affected. |
| * |
| * Gallium DXGI has both per-thread and per-process settings. |
| * If the per-thread display system has been set (i.e. a function |
| * of these was called, and the last one called was not UseNothing), |
| * it will be used. |
| * Otherwise, the per-process display system will be used if set, or |
| * and other the factory creation call may either fail, or use an |
| * user-specified default.. |
| * |
| * The per-process setting can be altered by calling |
| * GalliumDXGIMakeDefault, which will set the per-process setting |
| * according to the current per-thread setting. |
| * |
| * GalliumDXGIUseNothing() is the initial state, which means that |
| * the per-process default should be used, and if that is "use nothing" |
| * too, the call will either fail or use a user-specified default. |
| * |
| * NOTE that setting the per-process default is NOT atomic and must |
| * not be done concurrently with other calls to GalliumDXGIMakeDefault, |
| * CreateDXGIFactory or CreateDXGIFactory1. |
| * |
| * The PFNHWNDRESOLVER function is passed HWNDs coming from |
| * the API user and must return window-system-specific values: |
| * - X11: Window* |
| * - GDI: HWND |
| */ |
| |
| [object, local, uuid("c22d2f85-f7dd-40b0-a50b-5d308f973c5e")] |
| interface IGalliumDXGIBackend : IUnknown |
| { |
| /* *present_cookie is set to a cookie that is passed to EndPresent |
| * |
| * *window and *rect are the window and subrectangle |
| * to present in. |
| * |
| * For X11, *window is a Window. |
| * For other systems, it will be the equivalent way to reference a window. |
| * |
| * The rectangle is clipped against the window size, so you can |
| * specify (0, 0, INT_MAX, INT_MAX) to use the whole window. |
| * |
| * rgndata is set to either NULL, or the region, in coordinates relative |
| * to the subrectangle, to clip presentation to. |
| * *rgndata is valid until EndPresent is called, at which point EndPresent |
| * may free the data. |
| * |
| * However, the rect field should still be set as normal if possible (especially |
| * the dimension).. |
| * |
| * If preserve_aspect_ratio is set, *rgndata will be ignored. This |
| * limitation may be lifted in future versions. |
| * |
| * If the window is fully obscured, return DXGI_STATUS_OCCLUDED. |
| * Everything else is ignored in that case. |
| * |
| * EndPresent is only called when S_OK is returned. |
| */ |
| HRESULT BeginPresent( |
| [in] HWND hwnd, |
| [out] void** present_cookie, |
| [out] void** window, |
| [out] RECT* rect, |
| [out] struct _RGNDATA** rgndata, |
| [out] BOOL* preserve_aspect_ratio |
| ); |
| |
| void EndPresent( |
| [in] HWND hwnd, |
| [out] void* present_cookie |
| ); |
| |
| /* If the window is fully obscured, return DXGI_STATUS_OCCLUDED, else S_OK */ |
| HRESULT TestPresent( |
| [in] HWND hwnd |
| ); |
| |
| /* Get size of rectangle that would be returned by BeginPresent */ |
| HRESULT GetPresentSize( |
| [in] HWND hwnd, |
| [out] unsigned* width, |
| [out] unsigned* height |
| ); |
| } |
| |
| void GalliumDXGIUseNothing(); |
| |
| /* only a subset of these may be available, depending on platform and compilation options */ |
| void GalliumDXGIUseX11Display(struct _XDisplay* dpy, IGalliumDXGIBackend* backend); |
| |
| /* these don't really work for now |
| void GalliumDXGIUseDRMCard(int fd); |
| void GalliumDXGIUseFBDev(int fd); |
| void GalliumDXGIUseHDC(HDC hdc, IGalliumDXGIGDIBackend* backend); |
| */ |
| |
| void GalliumDXGIMakeDefault(); |
| |