diff options
Diffstat (limited to 'mesalib/src/mesa/drivers/windows/gldirect/dll_main.c')
-rw-r--r-- | mesalib/src/mesa/drivers/windows/gldirect/dll_main.c | 817 |
1 files changed, 0 insertions, 817 deletions
diff --git a/mesalib/src/mesa/drivers/windows/gldirect/dll_main.c b/mesalib/src/mesa/drivers/windows/gldirect/dll_main.c deleted file mode 100644 index 1d7ac64f4..000000000 --- a/mesalib/src/mesa/drivers/windows/gldirect/dll_main.c +++ /dev/null @@ -1,817 +0,0 @@ -/**************************************************************************** -* -* Mesa 3-D graphics library -* Direct3D Driver Interface -* -* ======================================================================== -* -* Copyright (C) 1991-2004 SciTech Software, Inc. All rights reserved. -* -* 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 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 -* SCITECH SOFTWARE INC 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. -* -* ====================================================================== -* -* Language: ANSI C -* Environment: Windows 9x (Win32) -* -* Description: Win32 DllMain functions. -* -****************************************************************************/ - -// INITGUID must only be defined once. -// Don't put it in a shared header file! -// GLD3 uses dxguid.lib, so INITGUID must *not* be used! -#ifndef _USE_GLD3_WGL -#define INITGUID -#endif // _USE_GLD3_WGL - -#include "dllmain.h" - -//#include "snap/graphics.h" -//#include "drvlib/os/os.h" - -#ifdef _USE_GLD3_WGL -typedef void (APIENTRY *LPDGLSPLASHSCREEN)(int, int, char*); -#include "gld_driver.h" -#endif - -// *********************************************************************** - -BOOL bInitialized = FALSE; // callback driver initialized? -BOOL bExited = FALSE; // callback driver exited this instance? -HINSTANCE hInstanceDll = NULL; // DLL instance handle - -static BOOL bDriverValidated = FALSE; // prior validation status -static BOOL bSplashScreen = TRUE; // Splash Screen ? -static BOOL bValidINIFound = FALSE; // Have we found a valid INI file? - -HHOOK hKeyHook = NULL; // global keyboard handler hook - -// Multi-threaded support needs to be reflected in Mesa code. (DaveM) -int _gld_bMultiThreaded = FALSE; - -// *********************************************************************** - -DWORD dwLogging = 0; // Logging flag -DWORD dwDebugLevel = 0; // Log debug level - -char szLogPath[_MAX_PATH] = {"\0"}; // Log file path -char szSNAPPath[_MAX_PATH] = {"\0"}; // SNAP driver path - -#ifndef _USE_GLD3_WGL -DGL_wglFuncs wglFuncs = { - sizeof(DGL_wglFuncs), - DGL_ChoosePixelFormat, - DGL_CopyContext, - DGL_CreateContext, - DGL_CreateLayerContext, - DGL_DeleteContext, - DGL_DescribeLayerPlane, - DGL_DescribePixelFormat, - DGL_GetCurrentContext, - DGL_GetCurrentDC, - DGL_GetDefaultProcAddress, - DGL_GetLayerPaletteEntries, - DGL_GetPixelFormat, - DGL_GetProcAddress, - DGL_MakeCurrent, - DGL_RealizeLayerPalette, - DGL_SetLayerPaletteEntries, - DGL_SetPixelFormat, - DGL_ShareLists, - DGL_SwapBuffers, - DGL_SwapLayerBuffers, - DGL_UseFontBitmapsA, - DGL_UseFontBitmapsW, - DGL_UseFontOutlinesA, - DGL_UseFontOutlinesW, -}; - -DGL_mesaFuncs mesaFuncs = { - sizeof(DGL_mesaFuncs), -}; -#endif // _USE_GLD3_WGL - -// *********************************************************************** - -typedef struct { - DWORD dwDriver; // 0=SciTech SW, 1=Direct3D SW, 2=Direct3D HW - BOOL bMipmapping; // 0=off, 1=on - BOOL bMultitexture; // 0=off, 1=on - BOOL bWaitForRetrace; // 0=off, 1=on - BOOL bFullscreenBlit; // 0=off, 1=on - BOOL bFastFPU; // 0=off, 1=on - BOOL bDirectDrawPersistant;// 0=off, 1=on - BOOL bPersistantBuffers; // 0=off, 1=on - DWORD dwLogging; // 0=off, 1=normal, 2=crash-proof - DWORD dwLoggingSeverity; // 0=all, 1=warnings+errors, 2=errors only - BOOL bMessageBoxWarnings;// 0=off, 1=on - BOOL bMultiThreaded; // 0=off, 1=on - BOOL bAppCustomizations; // 0=off, 1=on - BOOL bHotKeySupport; // 0=off, 1=on - BOOL bSplashScreen; // 0=off, 1=on - -#ifdef _USE_GLD3_WGL - // - // New for GLDirect 3.0 - // - DWORD dwAdapter; // DX8 adpater ordinal - DWORD dwTnL; // Transform & Lighting type - DWORD dwMultisample; // DX8 multisample type -#endif // _USE_GLD3_WGL -} INI_settings; - -static INI_settings ini; - -// *********************************************************************** - -BOOL APIENTRY DGL_initDriver( -#ifdef _USE_GLD3_WGL - void) -{ -#else - DGL_wglFuncs *lpWglFuncs, - DGL_mesaFuncs *lpMesaFuncs) -{ - // Check for valid pointers - if ((lpWglFuncs == NULL) || (lpMesaFuncs == NULL)) - return FALSE; - - // Check for valid structs - if (lpWglFuncs->dwSize != sizeof(DGL_wglFuncs)) { - return FALSE; - } - - // Check for valid structs - if (lpMesaFuncs->dwSize != sizeof(DGL_mesaFuncs)) { - return FALSE; - } - - // Copy the Mesa functions - memcpy(&mesaFuncs, lpMesaFuncs, sizeof(DGL_mesaFuncs)); - - // Pass back the wgl functions - memcpy(lpWglFuncs, &wglFuncs, sizeof(DGL_wglFuncs)); -#endif // _USE_GLD3_WGL - - // Finally initialize the callback driver - if (!dglInitDriver()) - return FALSE; - - return TRUE; -}; - -// *********************************************************************** - -BOOL ReadINIFile( - HINSTANCE hInstance) -{ - char szModuleFilename[MAX_PATH]; - char szSystemDirectory[MAX_PATH]; - const char szSectionName[] = "Config"; - char szINIFile[MAX_PATH]; - int pos; - - // Now using the DLL module handle. KeithH, 24/May/2000. - // Addendum: GetModuleFileName(NULL, ... returns process filename, - // GetModuleFileName(hModule, ... returns DLL filename, - - // Get the dll path and filename. - GetModuleFileName(hInstance, &szModuleFilename[0], MAX_PATH); // NULL for current process - // Get the System directory. - GetSystemDirectory(&szSystemDirectory[0], MAX_PATH); - - // Test to see if DLL is in system directory. - if (strnicmp(szModuleFilename, szSystemDirectory, strlen(szSystemDirectory))==0) { - // DLL *is* in system directory. - // Return FALSE to indicate that registry keys should be read. - return FALSE; - } - - // Compose filename of INI file - strcpy(szINIFile, szModuleFilename); - pos = strlen(szINIFile); - while (szINIFile[pos] != '\\') { - pos--; - } - szINIFile[pos+1] = '\0'; - // Use run-time DLL path for log file too - strcpy(szLogPath, szINIFile); - szLogPath[pos] = '\0'; - // Complete full INI file path - strcat(szINIFile, "gldirect.ini"); - - // Read settings from private INI file. - // Note that defaults are contained in the calls. - ini.dwDriver = GetPrivateProfileInt(szSectionName, "dwDriver", 2, szINIFile); - ini.bMipmapping = GetPrivateProfileInt(szSectionName, "bMipmapping", 1, szINIFile); - ini.bMultitexture = GetPrivateProfileInt(szSectionName, "bMultitexture", 1, szINIFile); - ini.bWaitForRetrace = GetPrivateProfileInt(szSectionName, "bWaitForRetrace", 0, szINIFile); - ini.bFullscreenBlit = GetPrivateProfileInt(szSectionName, "bFullscreenBlit", 0, szINIFile); - ini.bFastFPU = GetPrivateProfileInt(szSectionName, "bFastFPU", 1, szINIFile); - ini.bDirectDrawPersistant = GetPrivateProfileInt(szSectionName, "bPersistantDisplay", 0, szINIFile); - ini.bPersistantBuffers = GetPrivateProfileInt(szSectionName, "bPersistantResources", 0, szINIFile); - ini.dwLogging = GetPrivateProfileInt(szSectionName, "dwLogging", 0, szINIFile); - ini.dwLoggingSeverity = GetPrivateProfileInt(szSectionName, "dwLoggingSeverity", 0, szINIFile); - ini.bMessageBoxWarnings = GetPrivateProfileInt(szSectionName, "bMessageBoxWarnings", 0, szINIFile); - ini.bMultiThreaded = GetPrivateProfileInt(szSectionName, "bMultiThreaded", 0, szINIFile); - ini.bAppCustomizations = GetPrivateProfileInt(szSectionName, "bAppCustomizations", 1, szINIFile); - ini.bHotKeySupport = GetPrivateProfileInt(szSectionName, "bHotKeySupport", 0, szINIFile); - ini.bSplashScreen = GetPrivateProfileInt(szSectionName, "bSplashScreen", 1, szINIFile); - -#ifdef _USE_GLD3_WGL - // New for GLDirect 3.x - ini.dwAdapter = GetPrivateProfileInt(szSectionName, "dwAdapter", 0, szINIFile); - // dwTnL now defaults to zero (chooses TnL at runtime). KeithH - ini.dwTnL = GetPrivateProfileInt(szSectionName, "dwTnL", 0, szINIFile); - ini.dwMultisample = GetPrivateProfileInt(szSectionName, "dwMultisample", 0, szINIFile); -#endif - - return TRUE; -} - -// *********************************************************************** - -BOOL dllReadRegistry( - HINSTANCE hInstance) -{ - // Read settings from INI file, if available - bValidINIFound = FALSE; - if (ReadINIFile(hInstance)) { - const char *szRendering[3] = { - "SciTech Software Renderer", - "Direct3D MMX Software Renderer", - "Direct3D Hardware Renderer" - }; - // Set globals - glb.bPrimary = 1; - glb.bHardware = (ini.dwDriver == 2) ? 1 : 0; -#ifndef _USE_GLD3_WGL - memset(&glb.ddGuid, 0, sizeof(glb.ddGuid)); - glb.d3dGuid = (ini.dwDriver == 2) ? IID_IDirect3DHALDevice : IID_IDirect3DRGBDevice; -#endif // _USE_GLD3_WGL - strcpy(glb.szDDName, "Primary"); - strcpy(glb.szD3DName, szRendering[ini.dwDriver]); - glb.dwRendering = ini.dwDriver; - glb.bUseMipmaps = ini.bMipmapping; - glb.bMultitexture = ini.bMultitexture; - glb.bWaitForRetrace = ini.bWaitForRetrace; - glb.bFullscreenBlit = ini.bFullscreenBlit; - glb.bFastFPU = ini.bFastFPU; - glb.bDirectDrawPersistant = ini.bDirectDrawPersistant; - glb.bPersistantBuffers = ini.bPersistantBuffers; - dwLogging = ini.dwLogging; - dwDebugLevel = ini.dwLoggingSeverity; - glb.bMessageBoxWarnings = ini.bMessageBoxWarnings; - glb.bMultiThreaded = ini.bMultiThreaded; - glb.bAppCustomizations = ini.bAppCustomizations; - glb.bHotKeySupport = ini.bHotKeySupport; - bSplashScreen = ini.bSplashScreen; -#ifdef _USE_GLD3_WGL - // New for GLDirect 3.x - glb.dwAdapter = ini.dwAdapter; - glb.dwDriver = ini.dwDriver; - glb.dwTnL = ini.dwTnL; - glb.dwMultisample = ini.dwMultisample; -#endif - bValidINIFound = TRUE; - return TRUE; - } - // Read settings from registry - else { - HKEY hReg; - DWORD cbValSize; - DWORD dwType = REG_SZ; // Registry data type for strings - BOOL bRegistryError; - BOOL bSuccess; - -#define REG_READ_DWORD(a, b) \ - cbValSize = sizeof(b); \ - if (ERROR_SUCCESS != RegQueryValueEx( hReg, (a), \ - NULL, NULL, (LPBYTE)&(b), &cbValSize )) \ - bRegistryError = TRUE; - -#define REG_READ_DEVICEID(a, b) \ - cbValSize = MAX_DDDEVICEID_STRING; \ - if(ERROR_SUCCESS != RegQueryValueEx(hReg, (a), 0, &dwType, \ - (LPBYTE)&(b), &cbValSize)) \ - bRegistryError = TRUE; - -#define REG_READ_STRING(a, b) \ - cbValSize = sizeof((b)); \ - if(ERROR_SUCCESS != RegQueryValueEx(hReg, (a), 0, &dwType, \ - (LPBYTE)&(b), &cbValSize)) \ - bRegistryError = TRUE; - - // Read settings from the registry. - - // Open the registry key for the current user if it exists. - bSuccess = (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, - DIRECTGL_REG_SETTINGS_KEY, - 0, - KEY_READ, - &hReg)); - // Otherwise open the registry key for the local machine. - if (!bSuccess) - bSuccess = (ERROR_SUCCESS == RegOpenKeyEx(DIRECTGL_REG_KEY_ROOT, - DIRECTGL_REG_SETTINGS_KEY, - 0, - KEY_READ, - &hReg)); - if (!bSuccess) - return FALSE; - - bRegistryError = FALSE; - - REG_READ_DWORD(DIRECTGL_REG_SETTING_PRIMARY, glb.bPrimary); - REG_READ_DWORD(DIRECTGL_REG_SETTING_D3D_HW, glb.bHardware); -#ifndef _USE_GLD3_WGL - REG_READ_DWORD(DIRECTGL_REG_SETTING_DD_GUID, glb.ddGuid); - REG_READ_DWORD(DIRECTGL_REG_SETTING_D3D_GUID, glb.d3dGuid); -#endif // _USE_GLD3_WGL - REG_READ_DWORD(DIRECTGL_REG_SETTING_LOGGING, dwLogging); - REG_READ_DWORD(DIRECTGL_REG_SETTING_DEBUGLEVEL, dwDebugLevel); - REG_READ_DWORD(DIRECTGL_REG_SETTING_RENDERING, glb.dwRendering); - REG_READ_DWORD(DIRECTGL_REG_SETTING_MULTITEXTURE, glb.bMultitexture); - REG_READ_DWORD(DIRECTGL_REG_SETTING_WAITFORRETRACE, glb.bWaitForRetrace); - REG_READ_DWORD(DIRECTGL_REG_SETTING_FULLSCREENBLIT, glb.bFullscreenBlit); - REG_READ_DWORD(DIRECTGL_REG_SETTING_USEMIPMAPS, glb.bUseMipmaps); - - REG_READ_DEVICEID(DIRECTGL_REG_SETTING_DD_NAME, glb.szDDName); - REG_READ_DEVICEID(DIRECTGL_REG_SETTING_D3D_NAME, glb.szD3DName); - - REG_READ_DWORD(DIRECTGL_REG_SETTING_MSGBOXWARNINGS, glb.bMessageBoxWarnings); - REG_READ_DWORD(DIRECTGL_REG_SETTING_PERSISTDISPLAY, glb.bDirectDrawPersistant); - REG_READ_DWORD(DIRECTGL_REG_SETTING_PERSISTBUFFERS, glb.bPersistantBuffers); - REG_READ_DWORD(DIRECTGL_REG_SETTING_FASTFPU, glb.bFastFPU); - REG_READ_DWORD(DIRECTGL_REG_SETTING_HOTKEYS, glb.bHotKeySupport); - REG_READ_DWORD(DIRECTGL_REG_SETTING_MULTITHREAD, glb.bMultiThreaded); - REG_READ_DWORD(DIRECTGL_REG_SETTING_APPCUSTOM, glb.bAppCustomizations); - REG_READ_DWORD(DIRECTGL_REG_SETTING_SPLASHSCREEN, bSplashScreen); - -#ifdef _USE_GLD3_WGL - // New for GLDirect 3.x - glb.dwDriver = glb.dwRendering; - REG_READ_DWORD(DIRECTGL_REG_SETTING_ADAPTER, glb.dwAdapter); - REG_READ_DWORD(DIRECTGL_REG_SETTING_TNL, glb.dwTnL); - REG_READ_DWORD(DIRECTGL_REG_SETTING_MULTISAMPLE, glb.dwMultisample); -#endif - - RegCloseKey(hReg); - - // Open the global registry key for GLDirect - bSuccess = (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, - DIRECTGL_REG_SETTINGS_KEY, - 0, - KEY_READ, - &hReg)); - if (bSuccess) { - // Read the installation path for GLDirect - REG_READ_STRING("InstallLocation",szLogPath); - RegCloseKey(hReg); - } - - if (bRegistryError || !bSuccess) - return FALSE; - else - - return TRUE; - -#undef REG_READ_DWORD -#undef REG_READ_DEVICEID -#undef REG_READ_STRING - } -} - -// *********************************************************************** - -BOOL dllWriteRegistry( - void ) -{ - HKEY hReg; - DWORD dwCreateDisposition, cbValSize; - BOOL bRegistryError = FALSE; - -#define REG_WRITE_DWORD(a, b) \ - cbValSize = sizeof(b); \ - if (ERROR_SUCCESS != RegSetValueEx( hReg, (a), \ - 0, REG_DWORD, (LPBYTE)&(b), cbValSize )) \ - bRegistryError = TRUE; - - if (ERROR_SUCCESS == RegCreateKeyEx( DIRECTGL_REG_KEY_ROOT, DIRECTGL_REG_SETTINGS_KEY, - 0, NULL, 0, KEY_WRITE, NULL, &hReg, - &dwCreateDisposition )) { - RegFlushKey(hReg); // Make sure keys are written to disk - RegCloseKey(hReg); - hReg = NULL; - } - - if (bRegistryError) - return FALSE; - else - return TRUE; - -#undef REG_WRITE_DWORD -} - -// *********************************************************************** - -void dglInitHotKeys(HINSTANCE hInstance) -{ - // Hot-Key support at all? - if (!glb.bHotKeySupport) - return; - - // Install global keyboard interceptor - hKeyHook = SetWindowsHookEx(WH_KEYBOARD, dglKeyProc, hInstance, 0); -} - -// *********************************************************************** - -void dglExitHotKeys(void) -{ - // Hot-Key support at all? - if (!glb.bHotKeySupport) - return; - - // Remove global keyboard interceptor - if (hKeyHook) - UnhookWindowsHookEx(hKeyHook); - hKeyHook = NULL; -} - -// *********************************************************************** - -// Note: This app-customization step must be performed in both the main -// OpenGL32 driver and the callback driver DLLs for multithreading option. -void dglSetAppCustomizations(void) -{ - char szModuleFileName[MAX_PATH]; - int iSize = MAX_PATH; - - // Get the currently loaded EXE filename. - GetModuleFileName(NULL, &szModuleFileName[0], MAX_PATH); // NULL for current process - strupr(szModuleFileName); - iSize = strlen(szModuleFileName); - - // Check for specific EXEs and adjust global settings accordingly - - // NOTE: In GLD3.x "bDirectDrawPersistant" corresponds to IDirect3D8 and - // "bPersistantBuffers" corresponds to IDirect3DDevice8. KeithH - - // Case 1: 3DStudio must be multi-threaded - // Added: Discreet GMAX (3DStudio MAX 4 for gamers. KeithH) - if (strstr(szModuleFileName, "3DSMAX.EXE") - || strstr(szModuleFileName, "3DSVIZ.EXE") - || strstr(szModuleFileName, "GMAX.EXE")) { - glb.bMultiThreaded = TRUE; - glb.bDirectDrawPersistant = FALSE; - glb.bPersistantBuffers = FALSE; - return; - } - - // Case 2: Solid Edge must use pre-allocated resources for all GLRCs - if (strstr(szModuleFileName, "PART.EXE") - || strstr(szModuleFileName, "ASSEMBL.EXE") - || strstr(szModuleFileName, "DRAFT.EXE") - || strstr(szModuleFileName, "SMARTVW.EXE") - || strstr(szModuleFileName, "SMETAL.EXE")) { - glb.bMultiThreaded = FALSE; - glb.bDirectDrawPersistant = TRUE; - glb.bPersistantBuffers = FALSE; - return; - } - - // Case 3: Sudden Depth creates and destroys GLRCs on paint commands - if (strstr(szModuleFileName, "SUDDEPTH.EXE") - || strstr(szModuleFileName, "SUDDEMO.EXE")) { - glb.bMultiThreaded = FALSE; - glb.bDirectDrawPersistant = TRUE; - glb.bPersistantBuffers = TRUE; - glb.bFullscreenBlit = TRUE; - return; - } - - // Case 4: StereoGraphics test apps create and destroy GLRCs on paint commands - if (strstr(szModuleFileName, "REDBLUE.EXE") - || strstr(szModuleFileName, "DIAGNOSE.EXE")) { - glb.bMultiThreaded = FALSE; - glb.bDirectDrawPersistant = TRUE; - glb.bPersistantBuffers = TRUE; - return; - } - - // Case 5: Pipes screen savers share multiple GLRCs for same window - if (strstr(szModuleFileName, "PIPES.SCR") - || (strstr(szModuleFileName, "PIPES") && strstr(szModuleFileName, ".SCR"))) { - glb.bMultiThreaded = FALSE; - glb.bDirectDrawPersistant = TRUE; - glb.bPersistantBuffers = TRUE; - return; - } - - // Case 6: AutoVue uses sub-viewport ops which are temporarily broken in stereo window - if (strstr(szModuleFileName, "AVWIN.EXE")) { - glb.bMultiThreaded = FALSE; - glb.bDirectDrawPersistant = TRUE; - glb.bPersistantBuffers = TRUE; - return; - } - // Case 7: Quake3 is waiting for DDraw objects to be released at exit - if (strstr(szModuleFileName, "QUAKE")) { - glb.bMultiThreaded = FALSE; - glb.bDirectDrawPersistant = FALSE; - glb.bPersistantBuffers = FALSE; - glb.bFullscreenBlit = FALSE; - return; - } - // Case 8: Reflection GLX server is unable to switch contexts at run-time - if (strstr(szModuleFileName, "RX.EXE")) { - glb.bMultiThreaded = FALSE; - glb.bMessageBoxWarnings = FALSE; - return; - } - // Case 9: Original AutoCAD 2000 must share DDraw objects across GLRCs - if (strstr(szModuleFileName, "ACAD.EXE")) { - glb.bFastFPU = FALSE; - if (GetModuleHandle("wopengl6.hdi") != NULL) { - glb.bMultiThreaded = FALSE; - glb.bDirectDrawPersistant = TRUE; - glb.bPersistantBuffers = FALSE; - } - return; - } -} - -// *********************************************************************** - -BOOL dglInitDriver(void) -{ - UCHAR szExeName[MAX_PATH]; - const char *szRendering[] = { - "Mesa Software", - "Direct3D RGB SW", - "Direct3D HW", - }; - static BOOL bWarnOnce = FALSE; - - // Already initialized? - if (bInitialized) - return TRUE; - - // Moved from DllMain DLL_PROCESS_ATTACH: - - // (Re-)Init defaults - dglInitGlobals(); - - // Read registry or INI file settings - if (!dllReadRegistry(hInstanceDll)) { - if (!bWarnOnce) - MessageBox( NULL, "GLDirect has not been configured.\n\n" - "Please run the configuration program\n" - "before using GLDirect with applications.\n", - "GLDirect", MB_OK | MB_ICONWARNING); - bWarnOnce = TRUE; - return FALSE; - } - -#ifdef _USE_GLD3_WGL - // Must do this as early as possible. - // Need to read regkeys/ini-file first though. - gldInitDriverPointers(glb.dwDriver); - - // Create private driver globals - _gldDriver.CreatePrivateGlobals(); -#endif - // Overide settings with application customizations - if (glb.bAppCustomizations) - dglSetAppCustomizations(); - -//#ifndef _USE_GLD3_WGL - // Set the global memory type to either sysmem or vidmem - glb.dwMemoryType = glb.bHardware ? DDSCAPS_VIDEOMEMORY : DDSCAPS_SYSTEMMEMORY; -//#endif - - // Multi-threaded support overides persistant display support - if (glb.bMultiThreaded) - glb.bDirectDrawPersistant = glb.bPersistantBuffers = FALSE; - - // Multi-threaded support needs to be reflected in Mesa code. (DaveM) - _gld_bMultiThreaded = glb.bMultiThreaded; - - // Start logging - ddlogPathOption(szLogPath); - ddlogWarnOption(glb.bMessageBoxWarnings); - ddlogOpen((DDLOG_loggingMethodType)dwLogging, - (DDLOG_severityType)dwDebugLevel); - - // Obtain the name of the calling app - ddlogMessage(DDLOG_SYSTEM, "Driver : SciTech GLDirect 4.0\n"); - GetModuleFileName(NULL, szExeName, sizeof(szExeName)); - ddlogPrintf(DDLOG_SYSTEM, "Executable : %s", szExeName); - - ddlogPrintf(DDLOG_SYSTEM, "DirectDraw device: %s", glb.szDDName); - ddlogPrintf(DDLOG_SYSTEM, "Direct3D driver : %s", glb.szD3DName); - - ddlogPrintf(DDLOG_SYSTEM, "Rendering type : %s", szRendering[glb.dwRendering]); - - ddlogPrintf(DDLOG_SYSTEM, "Multithreaded : %s", glb.bMultiThreaded ? "Enabled" : "Disabled"); - ddlogPrintf(DDLOG_SYSTEM, "Display resources: %s", glb.bDirectDrawPersistant ? "Persistant" : "Instanced"); - ddlogPrintf(DDLOG_SYSTEM, "Buffer resources : %s", glb.bPersistantBuffers ? "Persistant" : "Instanced"); - - dglInitContextState(); - dglBuildPixelFormatList(); - //dglBuildTextureFormatList(); - - // D3D callback driver is now successfully initialized - bInitialized = TRUE; - // D3D callback driver is now ready to be exited - bExited = FALSE; - - return TRUE; -} - -// *********************************************************************** - -void dglExitDriver(void) -{ - - // Only need to clean up once per instance: - // May be called implicitly from DLL_PROCESS_DETACH, - // or explicitly from DGL_exitDriver(). - if (bExited) - return; - bExited = TRUE; - - // DDraw objects may be invalid when DLL unloads. -__try { - - // Clean-up sequence (moved from DLL_PROCESS_DETACH) -#ifndef _USE_GLD3_WGL - dglReleaseTextureFormatList(); -#endif - dglReleasePixelFormatList(); - dglDeleteContextState(); - -#ifdef _USE_GLD3_WGL - _gldDriver.DestroyPrivateGlobals(); -#endif - -} -__except(EXCEPTION_EXECUTE_HANDLER) { - ddlogPrintf(DDLOG_WARN, "Exception raised in dglExitDriver."); -} - - // Close the log file - ddlogClose(); -} - -// *********************************************************************** - -int WINAPI DllMain( - HINSTANCE hInstance, - DWORD fdwReason, - PVOID pvReserved) -{ - switch (fdwReason) { - case DLL_PROCESS_ATTACH: - // Cache DLL instance handle - hInstanceDll = hInstance; - - // Flag that callback driver has yet to be initialized - bInitialized = bExited = FALSE; - -#ifndef _USE_GLD3_WGL - // Init internal Mesa function pointers - memset(&mesaFuncs, 0, sizeof(DGL_mesaFuncs)); -#endif // _USE_GLD3_WGL - - // Init defaults - dglInitGlobals(); - - // Defer rest of DLL initialization to 1st WGL function call - break; - - case DLL_PROCESS_DETACH: - // Call exit clean-up sequence - dglExitDriver(); - break; - } - - return TRUE; -} - -// *********************************************************************** - -void APIENTRY DGL_exitDriver(void) -{ - // Call exit clean-up sequence - dglExitDriver(); -} - -// *********************************************************************** - -void APIENTRY DGL_reinitDriver(void) -{ - // Force init sequence again - bInitialized = bExited = FALSE; - dglInitDriver(); -} - -// *********************************************************************** - -int WINAPI DllInitialize( - HINSTANCE hInstance, - DWORD fdwReason, - PVOID pvReserved) -{ - // Some Watcom compiled executables require this. - return DllMain(hInstance, fdwReason, pvReserved); -} - -// *********************************************************************** - -void DGL_LoadSplashScreen(int piReg, char* pszUser) -{ - HINSTANCE hSplashDll = NULL; - LPDGLSPLASHSCREEN dglSplashScreen = NULL; - static BOOL bOnce = FALSE; - static int iReg = 0; - static char szUser[255] = {"\0"}; - - // Display splash screen at all? - if (!bSplashScreen) - return; - - // Only display splash screen once - if (bOnce) - return; - bOnce = TRUE; - - // Make local copy of string for passing to DLL - if (pszUser) - strcpy(szUser, pszUser); - iReg = piReg; - - // Load Splash Screen DLL - // (If it fails to load for any reason, we don't care...) - hSplashDll = LoadLibrary("gldsplash.dll"); - if (hSplashDll) { - // Execute the Splash Screen function - dglSplashScreen = (LPDGLSPLASHSCREEN)GetProcAddress(hSplashDll, "GLDSplashScreen"); - if (dglSplashScreen) - (*dglSplashScreen)(1, iReg, szUser); - // Don't unload the DLL since splash screen dialog is modeless now - } -} - -// *********************************************************************** - -BOOL dglValidate() -{ - char *szCaption = "SciTech GLDirect Driver"; - UINT uType = MB_OK | MB_ICONEXCLAMATION; - -#ifdef _USE_GLD3_WGL - // (Re)build pixelformat list - if (glb.bPixelformatsDirty) - _gldDriver.BuildPixelformatList(); -#endif - - // Check to see if we have already validated - if (bDriverValidated && bInitialized) - return TRUE; - - // Since all (most) the WGL functions must be validated at this point, - // this also insure that the callback driver is completely initialized. - if (!bInitialized) - if (!dglInitDriver()) { - MessageBox(NULL, - "The GLDirect driver could not initialize.\n\n" - "Please run the configuration program to\n" - "properly configure the driver, or else\n" - "re-run the installation program.", szCaption, uType); - _exit(1); // Bail - } - - return TRUE; -} - -// *********************************************************************** - |