/* * OpenGL function forwarding to the display driver * * Copyright (c) 1999 Lionel Ulmer * Copyright (c) 2005 Raphael Junqueira * Copyright (c) 2006 Roderick Colenbrander * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "config.h" #include "wine/port.h" #include #include #include #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winerror.h" #include "gdi.h" #include "gdi_private.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(wgl); static HDC default_hdc = 0; /* We route all wgl functions from opengl32.dll through gdi32.dll to * the display driver. Various wgl calls have a hDC as one of their parameters. * Using DC_GetDCPtr we get access to the functions exported by the driver. * Some functions don't receive a hDC. This function creates a global hdc and * if there's already a global hdc, it returns it. */ static DC* OPENGL_GetDefaultDC() { if(!default_hdc) default_hdc = CreateDCA("DISPLAY", NULL, NULL, NULL); return DC_GetDCPtr(default_hdc); } /*********************************************************************** * wglCreateContext (OPENGL32.@) */ HGLRC WINAPI wglCreateContext(HDC hdc) { HGLRC ret = 0; DC * dc = DC_GetDCPtr( hdc ); TRACE("(%p)\n",hdc); if (!dc) return 0; if (!dc->funcs->pwglCreateContext) FIXME(" :stub\n"); else ret = dc->funcs->pwglCreateContext(dc->physDev); GDI_ReleaseObj( hdc ); return ret; } /*********************************************************************** * wglMakeCurrent (OPENGL32.@) */ BOOL WINAPI wglMakeCurrent(HDC hdc, HGLRC hglrc) { BOOL ret = FALSE; DC * dc = NULL; /* When the context hglrc is NULL, the HDC is ignored and can be NULL. * In that case use the global hDC to get access to the driver. */ if(hglrc == NULL) dc = OPENGL_GetDefaultDC(); else dc = DC_GetDCPtr( hdc ); TRACE("hdc: (%p), hglrc: (%p)\n", hdc, hglrc); if (!dc) return FALSE; if (!dc->funcs->pwglMakeCurrent) FIXME(" :stub\n"); else ret = dc->funcs->pwglMakeCurrent(dc->physDev,hglrc); if(hglrc == NULL) GDI_ReleaseObj(default_hdc); else GDI_ReleaseObj(hdc); return ret; } /*********************************************************************** * wglUseFontBitmapsA (OPENGL32.@) */ BOOL WINAPI wglUseFontBitmapsA(HDC hdc, DWORD first, DWORD count, DWORD listBase) { BOOL ret = FALSE; DC * dc = DC_GetDCPtr( hdc ); TRACE("(%p, %d, %d, %d)\n", hdc, first, count, listBase); if (!dc) return FALSE; if (!dc->funcs->pwglUseFontBitmapsA) FIXME(" :stub\n"); else ret = dc->funcs->pwglUseFontBitmapsA(dc->physDev, first, count, listBase); GDI_ReleaseObj( hdc); return ret; } /*********************************************************************** * wglUseFontBitmapsW (OPENGL32.@) */ BOOL WINAPI wglUseFontBitmapsW(HDC hdc, DWORD first, DWORD count, DWORD listBase) { BOOL ret = FALSE; DC * dc = DC_GetDCPtr( hdc ); TRACE("(%p, %d, %d, %d)\n", hdc, first, count, listBase); if (!dc) return FALSE; if (!dc->funcs->pwglUseFontBitmapsW) FIXME(" :stub\n"); else ret = dc->funcs->pwglUseFontBitmapsW(dc->physDev, first, count, listBase); GDI_ReleaseObj( hdc); return ret; }