📄 dglwgl.c
字号:
} } // if (!(dwFlags & PFD_STEREO_DONTCARE)) { if ((dwFlags & PFD_STEREO) != (ppfdCandidate.dwFlags & PFD_STEREO)) { continue; }// } if (ppfd->iPixelType==PFD_TYPE_RGBA && ppfd->cAlphaBits && !ppfdCandidate.cAlphaBits) { continue; } if (ppfd->iPixelType==PFD_TYPE_RGBA && ppfd->cAccumBits && !ppfdCandidate.cAccumBits) { continue; } if (ppfd->cDepthBits && !ppfdCandidate.cDepthBits) { continue; } if (ppfd->cStencilBits && !ppfdCandidate.cStencilBits) { continue; } if (ppfd->cAuxBuffers && !ppfdCandidate.cAuxBuffers) { continue; } /* ** See if candidate is better than the previous best choice */ if (bestIndex == -1) { ppfdBest = ppfdCandidate; bestIndex = i; continue; } if ((ppfd->cColorBits > ppfdBest.cColorBits && ppfdCandidate.cColorBits > ppfdBest.cColorBits) || (ppfd->cColorBits <= ppfdCandidate.cColorBits && ppfdCandidate.cColorBits < ppfdBest.cColorBits)) { ppfdBest = ppfdCandidate; bestIndex = i; continue; } if (ppfd->iPixelType==PFD_TYPE_RGBA && ppfd->cAlphaBits && ppfdCandidate.cAlphaBits > ppfdBest.cAlphaBits) { ppfdBest = ppfdCandidate; bestIndex = i; continue; } if (ppfd->iPixelType==PFD_TYPE_RGBA && ppfd->cAccumBits && ppfdCandidate.cAccumBits > ppfdBest.cAccumBits) { ppfdBest = ppfdCandidate; bestIndex = i; continue; } if ((ppfd->cDepthBits > ppfdBest.cDepthBits && ppfdCandidate.cDepthBits > ppfdBest.cDepthBits) || (ppfd->cDepthBits <= ppfdCandidate.cDepthBits && ppfdCandidate.cDepthBits < ppfdBest.cDepthBits)) { ppfdBest = ppfdCandidate; bestIndex = i; continue; } if (ppfd->cStencilBits && ppfdCandidate.cStencilBits > ppfdBest.cStencilBits) { ppfdBest = ppfdCandidate; bestIndex = i; continue; } if (ppfd->cAuxBuffers && ppfdCandidate.cAuxBuffers > ppfdBest.cAuxBuffers) { ppfdBest = ppfdCandidate; bestIndex = i; continue; } } if (bestIndex != -1) { ddlogPrintf(DDLOG_SYSTEM, "Pixel Format %d chosen as best match", bestIndex+1); return bestIndex + 1; } // Return the pixelformat that has the most capabilities. // ** NOTE: This is only possible due to the way the list // of pixelformats is built. ** // Now picks best pixelformat. KeithH bestIndex = numPixelFormats; // most capable double buffer format ddlogPrintf(DDLOG_SYSTEM, "Pixel Format %d chosen by default", bestIndex); return (bestIndex);}// ***********************************************************************BOOL APIENTRY _GLD_WGL_EXPORT(CopyContext)( HGLRC a, HGLRC b, UINT c){ // Validate license if (!dglValidate()) return FALSE; UNSUPPORTED("wglCopyContext") return FALSE; // Failed}// ***********************************************************************HGLRC APIENTRY _GLD_WGL_EXPORT(CreateContext)( HDC a){ int ipf; // Validate license if (!dglValidate()) return 0; // Check that the current PFD is valid ipf = dglGetPixelFormat(); if (!IsValidPFD(ipf)) return (HGLRC)0; return dglCreateContext(a, &glb.lpPF[ipf-1]);}// ***********************************************************************HGLRC APIENTRY _GLD_WGL_EXPORT(CreateLayerContext)( HDC a, int b){ // Validate license if (!dglValidate()) return 0; UNSUPPORTED("wglCreateLayerContext") return NULL; // Failed}// ***********************************************************************BOOL APIENTRY _GLD_WGL_EXPORT(DeleteContext)( HGLRC a){ // Validate license if (!dglValidate()) return FALSE; return dglDeleteContext(a);}// ***********************************************************************BOOL APIENTRY _GLD_WGL_EXPORT(DescribeLayerPlane)( HDC hDC, int iPixelFormat, int iLayerPlane, UINT nBytes, LPLAYERPLANEDESCRIPTOR plpd){ // Validate license if (!dglValidate()) return FALSE; UNSUPPORTED("DGL_DescribeLayerPlane")// gldLogPrintf(GLDLOG_INFO, "DescribeLayerPlane: %d, %d", iPixelFormat, iLayerPlane); return FALSE;}// ***********************************************************************int APIENTRY _GLD_WGL_EXPORT(DescribePixelFormat)( HDC a, int b, UINT c, LPPIXELFORMATDESCRIPTOR d){ UINT nSize; // Validate license if (!dglValidate()) return 0; if (d == NULL) // Calling app requires max number of PF's return glb.nPixelFormatCount; // The supplied buffer may be larger than the info that we // will be copying. if (c > sizeof(PIXELFORMATDESCRIPTOR)) nSize = sizeof(PIXELFORMATDESCRIPTOR); else nSize = c; // Setup an empty PFD before doing validation check memset(d, 0, nSize); d->nSize = nSize; d->nVersion = 1; if (!IsValidPFD(b)) return 0; // Bail if PFD index is invalid memcpy(d, &glb.lpPF[b-1].pfd, nSize); return glb.nPixelFormatCount;}// ***********************************************************************HGLRC APIENTRY _GLD_WGL_EXPORT(GetCurrentContext)(void){ // Validate license if (!dglValidate()) return 0; return dglGetCurrentContext();}// ***********************************************************************HDC APIENTRY _GLD_WGL_EXPORT(GetCurrentDC)(void){ // Validate license if (!dglValidate()) return 0; return dglGetCurrentDC();}// ***********************************************************************PROC APIENTRY _GLD_WGL_EXPORT(GetDefaultProcAddress)( LPCSTR a){ // Validate license if (!dglValidate()) return NULL; UNSUPPORTED("DGL_GetDefaultProcAddress") return NULL;}// ***********************************************************************int APIENTRY _GLD_WGL_EXPORT(GetLayerPaletteEntries)( HDC a, int b, int c, int d, COLORREF *e){ // Validate license if (!dglValidate()) return 0; UNSUPPORTED("DGL_GetLayerPaletteEntries") return 0;}// ***********************************************************************int APIENTRY _GLD_WGL_EXPORT(GetPixelFormat)( HDC a){ // Validate license if (!dglValidate()) return 0; return dglGetPixelFormat();}// ***********************************************************************PROC APIENTRY _GLD_WGL_EXPORT(GetProcAddress)( LPCSTR a){ PROC dglGetProcAddressD3D(LPCSTR a); // Validate license if (!dglValidate()) return NULL;#ifdef _USE_GLD3_WGL return _gldDriver.wglGetProcAddress(a);#else return dglGetProcAddressD3D(a);#endif}// ***********************************************************************BOOL APIENTRY _GLD_WGL_EXPORT(MakeCurrent)( HDC a, HGLRC b){ // Validate license if (!dglValidate()) return FALSE; return dglMakeCurrent(a, b);}// ***********************************************************************BOOL APIENTRY _GLD_WGL_EXPORT(RealizeLayerPalette)( HDC a, int b, BOOL c){ // Validate license if (!dglValidate()) return FALSE; UNSUPPORTED("DGL_RealizeLayerPalette") return FALSE;}// ***********************************************************************int APIENTRY _GLD_WGL_EXPORT(SetLayerPaletteEntries)( HDC a, int b, int c, int d, CONST COLORREF *e){ // Validate license if (!dglValidate()) return 0; UNSUPPORTED("DGL_SetLayerPaletteEntries") return 0;}// ***********************************************************************BOOL APIENTRY _GLD_WGL_EXPORT(SetPixelFormat)( HDC a, int b, CONST PIXELFORMATDESCRIPTOR *c){ // Validate license if (!dglValidate()) return FALSE; if (IsValidPFD(b)) { ddlogPrintf(DDLOG_SYSTEM, "SetPixelFormat: PixelFormat %d has been set", b); dglSetPixelFormat(b); return TRUE; } else { ddlogPrintf(DDLOG_ERROR, "SetPixelFormat: PixelFormat %d is invalid and cannot be set", b); return FALSE; }}// ***********************************************************************/* * Share lists between two gl_context structures. * This was added for WIN32 WGL function support, since wglShareLists() * must be called *after* wglCreateContext() with valid GLRCs. (DaveM) *///// Copied from GLD2.x. KeithH//static GLboolean _gldShareLists( GLcontext *ctx1, GLcontext *ctx2){ /* Sanity check context pointers */ if (ctx1 == NULL || ctx2 == NULL) return GL_FALSE; /* Sanity check shared list pointers */ if (ctx1->Shared == NULL || ctx2->Shared == NULL) return GL_FALSE; /* Decrement reference count on sharee to release previous list */ ctx2->Shared->RefCount--;#if 0 /* 3DStudio exits on this memory release */ if (ctx2->Shared->RefCount == 0) free_shared_state(ctx2, ctx2->Shared);#endif /* Re-assign list from sharer to sharee and increment reference count */ ctx2->Shared = ctx1->Shared; ctx1->Shared->RefCount++; return GL_TRUE;}// ***********************************************************************BOOL APIENTRY _GLD_WGL_EXPORT(ShareLists)( HGLRC a, HGLRC b){ DGL_ctx *dgl1, *dgl2; // Validate license if (!dglValidate()) return FALSE; // Mesa supports shared lists, but you need to supply the shared // GL context info when calling gl_create_context(). An auxiliary // function gl_share_lists() has been added to update the shared // list info after the GL contexts have been created. (DaveM) dgl1 = dglGetContextAddress(a); dgl2 = dglGetContextAddress(b); if (dgl1->bAllocated && dgl2->bAllocated) {#ifdef _USE_GLD3_WGL return _gldShareLists(dgl1->glCtx, dgl2->glCtx);#else return (*mesaFuncs.gl_share_lists)(dgl1->glCtx, dgl2->glCtx);#endif } return FALSE;}// ***********************************************************************BOOL APIENTRY _GLD_WGL_EXPORT(SwapBuffers)( HDC a){ // Validate license if (!dglValidate()) return FALSE; return dglSwapBuffers(a);}// ***********************************************************************BOOL APIENTRY _GLD_WGL_EXPORT(SwapLayerBuffers)( HDC a, UINT b){ // Validate license if (!dglValidate()) return FALSE; return dglSwapBuffers(a);}// ***********************************************************************// ***********************************************************************// Note: This ResizeBuffers() function may be called from// either MESA glViewport() or GLD wglMakeCurrent().BOOL dglWglResizeBuffers( GLcontext *ctx, BOOL bDefaultDriver){ DGL_ctx *dgl = NULL; RECT rcScreenRect; DWORD dwWidth; DWORD dwHeight; DDSURFACEDESC2 ddsd2; DDSCAPS2 ddscaps2; IDirectDrawClipper *lpddClipper = NULL; DWORD dwFlags; HRESULT hResult; DWORD dwMemoryType; int i; struct gl_texture_object *tObj; struct gl_texture_image *image; BOOL bWasFullscreen; BOOL bSaveDesktop; BOOL bFullScrnWin = FALSE; DDSURFACEDESC2 ddsd2DisplayMode;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -