mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
4.0 KiB
190 lines
4.0 KiB
/******************************Module*Header*******************************\
|
|
* Module Name: wglcli.c
|
|
*
|
|
* Routines to support OpenGL client implementation.
|
|
*
|
|
* Created: 01-17-1995
|
|
* Author: Hock San Lee [hockl]
|
|
*
|
|
* Copyright (c) 1995 Microsoft Corporation
|
|
\**************************************************************************/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
#ifdef _CLIENTSIDE_
|
|
|
|
#include <wingdip.h>
|
|
|
|
#include <glp.h>
|
|
#include <gldci.h>
|
|
#include <glgenwin.h>
|
|
|
|
#include "wgldef.h"
|
|
|
|
PGLDRIVER pgldrvLoadInstalledDriver(HDC hdc);
|
|
|
|
#define MAX_GENERIC_PFD 24
|
|
|
|
// Mirror code from gre\rcobj.cxx
|
|
// Need DC and RC validation similar to those of DCOBJ and RCOBJ!!!
|
|
|
|
HANDLE __wglCreateContext(HDC hdc, HDC hdcSrvIn, LONG iLayerPlane)
|
|
{
|
|
HANDLE hrcSrv;
|
|
|
|
if (hdcSrvIn != NULL)
|
|
{
|
|
hdc = hdcSrvIn;
|
|
}
|
|
|
|
if (hrcSrv = (HANDLE) glsrvCreateContext(hdc, (HGLRC) 0, iLayerPlane))
|
|
return(hrcSrv);
|
|
|
|
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
|
|
return((HANDLE) 0);
|
|
}
|
|
|
|
BOOL __wglDeleteContext(HANDLE hrcSrv)
|
|
{
|
|
wglValidateWndobjs();
|
|
return(glsrvDeleteContext((PVOID) hrcSrv));
|
|
}
|
|
|
|
BOOL __wglMakeCurrent(HDC hdc, HANDLE hrcSrv, HDC hdcSrvIn)
|
|
{
|
|
BOOL bRet = FALSE;
|
|
ULONG iError = ERROR_INVALID_HANDLE; // Default error code
|
|
GLGENwindow *pwnd;
|
|
|
|
wglValidateWndobjs();
|
|
|
|
if (!hrcSrv)
|
|
{
|
|
glsrvLoseCurrent(GLTEB_SRVCONTEXT());
|
|
return(TRUE);
|
|
}
|
|
|
|
if (hdcSrvIn == NULL)
|
|
{
|
|
pwnd = pwndGetFromDC(hdc);
|
|
|
|
if (pwnd != (GLGENwindow *) NULL)
|
|
{
|
|
iError = ERROR_NOT_ENOUGH_MEMORY;
|
|
bRet = glsrvMakeCurrent(hdc, pwnd->hwnd, (PVOID) hrcSrv,
|
|
pwnd, pwnd->ipfd);
|
|
pwndRelease(pwnd);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
pwnd = pwndGetFromDC(hdc);
|
|
|
|
iError = ERROR_NOT_ENOUGH_MEMORY;
|
|
bRet = glsrvMakeCurrent(hdcSrvIn, NULL, (PVOID) hrcSrv,
|
|
pwnd, 0);
|
|
|
|
if (pwnd != (GLGENwindow *) NULL)
|
|
{
|
|
pwndRelease(pwnd);
|
|
}
|
|
}
|
|
|
|
if (!bRet)
|
|
SetLastError(iError);
|
|
|
|
return(bRet);
|
|
}
|
|
|
|
BOOL __wglShareLists(HANDLE hrcSrvShare, HANDLE hrcSrvSource)
|
|
{
|
|
ULONG iError;
|
|
|
|
iError = glsrvShareLists((VOID *) hrcSrvShare, (VOID *) hrcSrvSource);
|
|
|
|
if (iError == ERROR_SUCCESS)
|
|
return(TRUE);
|
|
else
|
|
{
|
|
SetLastError(iError);
|
|
return(FALSE);
|
|
}
|
|
}
|
|
|
|
BOOL __wglAttention()
|
|
{
|
|
return
|
|
(
|
|
glsrvAttention((VOID *) NULL, (VOID *) GLTEB_SRVCONTEXT(),
|
|
(VOID *) NULL, (VOID *) NULL)
|
|
);
|
|
}
|
|
|
|
int WINAPI __DrvDescribePixelFormat(HDC hdc, int ipfd, UINT cjpfd,
|
|
LPPIXELFORMATDESCRIPTOR ppfd)
|
|
{
|
|
#ifdef _WIN95_
|
|
int iRet = 0;
|
|
PGLDRIVER pglDriver;
|
|
|
|
if ((pglDriver = pgldrvLoadInstalledDriver(hdc)) &&
|
|
pglDriver->pfnDrvDescribePixelFormat != NULL)
|
|
{
|
|
iRet = pglDriver->pfnDrvDescribePixelFormat(hdc, ipfd, cjpfd, ppfd);
|
|
}
|
|
return iRet;
|
|
#else
|
|
return GdiDescribePixelFormat(hdc, ipfd, cjpfd, ppfd);
|
|
#endif
|
|
}
|
|
|
|
BOOL WINAPI __DrvSetPixelFormat(HDC hdc, int ipfd, PVOID *pwnd)
|
|
{
|
|
BOOL bRet = FALSE;
|
|
PGLDRIVER pglDriver = NULL;
|
|
|
|
#ifdef _WIN95_
|
|
if ((pglDriver = pgldrvLoadInstalledDriver(hdc)) &&
|
|
pglDriver->pfnDrvSetPixelFormat != NULL)
|
|
{
|
|
bRet = pglDriver->pfnDrvSetPixelFormat(hdc, ipfd);
|
|
}
|
|
|
|
#else
|
|
bRet = GdiSetPixelFormat(hdc, ipfd);
|
|
if (bRet)
|
|
{
|
|
pglDriver = pgldrvLoadInstalledDriver(hdc);
|
|
}
|
|
#endif
|
|
|
|
if ( bRet && pglDriver && pwnd )
|
|
((GLGENwindow *) pwnd)->pvDriver = (PVOID) pglDriver;
|
|
|
|
return bRet;
|
|
}
|
|
|
|
BOOL WINAPI __DrvSwapBuffers(HDC hdc)
|
|
{
|
|
#ifdef _WIN95_
|
|
BOOL bRet = FALSE;
|
|
PGLDRIVER pglDriver;
|
|
|
|
if ((pglDriver = pgldrvLoadInstalledDriver(hdc)) &&
|
|
pglDriver->pfnDrvSwapBuffers != NULL)
|
|
{
|
|
bRet = pglDriver->pfnDrvSwapBuffers(hdc);
|
|
}
|
|
return bRet;
|
|
#else
|
|
return GdiSwapBuffers(hdc);
|
|
#endif
|
|
}
|
|
|
|
BOOL __wglCopyContext(HANDLE hrcSrvSrc, HANDLE hrcSrvDest, UINT fuFlags)
|
|
{
|
|
return glsrvCopyContext((VOID *) hrcSrvSrc, (VOID *) hrcSrvDest, fuFlags);
|
|
}
|
|
|
|
#endif // _CLIENTSIDE_
|