⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gld_driver.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
字号:
/******************************************************************************                        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/2000/XP/XBox (Win32)** Description:  Driver functions and interfaces*****************************************************************************/#define STRICT#define WIN32_LEAN_AND_MEAN#include <windows.h>#include "gld_driver.h"#include "ddlog.h"#include "glheader.h"// For glGetString().#include "common_x86_asm.h"//---------------------------------------------------------------------------static char *szDriverError = "Driver used before initialisation!";// This holds our dynamically created OpenGL renderer string.// 256 chars should be plenty - remember that some apps display this.static char _gldRendererString[256];static char *szVendor = "SciTech Software, Inc.";//---------------------------------------------------------------------------extern BOOL gldGetDXErrorString_DX(HRESULT hr, char *buf, int nBufSize);extern BOOL gldCreateDrawable_MesaSW(DGL_ctx *ctx, BOOL bPersistantInterface, BOOL bPersistantBuffers);extern BOOL gldResizeDrawable_MesaSW(DGL_ctx *ctx, BOOL bDefaultDriver, BOOL bPersistantInterface, BOOL bPersistantBuffers);extern BOOL gldDestroyDrawable_MesaSW(DGL_ctx *ctx);extern BOOL gldCreatePrivateGlobals_MesaSW(void);extern BOOL gldDestroyPrivateGlobals_MesaSW(void);extern BOOL	gldBuildPixelformatList_MesaSW(void);extern BOOL gldInitialiseMesa_MesaSW(DGL_ctx *ctx);extern BOOL	gldSwapBuffers_MesaSW(DGL_ctx *ctx, HDC hDC, HWND hWnd);extern PROC	gldGetProcAddress_MesaSW(LPCSTR a);extern BOOL	gldGetDisplayMode_MesaSW(DGL_ctx *ctx, GLD_displayMode *glddm);extern BOOL gldCreateDrawable_DX(DGL_ctx *ctx, BOOL bPersistantInterface, BOOL bPersistantBuffers);extern BOOL gldResizeDrawable_DX(DGL_ctx *ctx, BOOL bDefaultDriver, BOOL bPersistantInterface, BOOL bPersistantBuffers);extern BOOL gldDestroyDrawable_DX(DGL_ctx *ctx);extern BOOL gldCreatePrivateGlobals_DX(void);extern BOOL gldDestroyPrivateGlobals_DX(void);extern BOOL	gldBuildPixelformatList_DX(void);extern BOOL gldInitialiseMesa_DX(DGL_ctx *ctx);extern BOOL	gldSwapBuffers_DX(DGL_ctx *ctx, HDC hDC, HWND hWnd);extern PROC	gldGetProcAddress_DX(LPCSTR a);extern BOOL	gldGetDisplayMode_DX(DGL_ctx *ctx, GLD_displayMode *glddm);//---------------------------------------------------------------------------// NOP functions. Called if proper driver functions are not set.//---------------------------------------------------------------------------static BOOL _gldDriverError(void){	ddlogMessage(DDLOG_CRITICAL, szDriverError);	return FALSE;}//---------------------------------------------------------------------------static BOOL _GetDXErrorString_ERROR(	HRESULT hr,	char *buf,	int nBufSize){	return _gldDriverError();}//---------------------------------------------------------------------------static BOOL _CreateDrawable_ERROR(	DGL_ctx *ctx,	BOOL bPersistantInterface,	BOOL bPersistantBuffers){	return _gldDriverError();}//---------------------------------------------------------------------------static BOOL _ResizeDrawable_ERROR(	DGL_ctx *ctx,	BOOL bDefaultDriver,	BOOL bPersistantInterface,	BOOL bPersistantBuffers){	return _gldDriverError();}//---------------------------------------------------------------------------static BOOL _DestroyDrawable_ERROR(	DGL_ctx *ctx){	return _gldDriverError();}//---------------------------------------------------------------------------static BOOL _CreatePrivateGlobals_ERROR(void){	return _gldDriverError();}//---------------------------------------------------------------------------static BOOL _DestroyPrivateGlobals_ERROR(void){	return _gldDriverError();}//---------------------------------------------------------------------------static BOOL _BuildPixelformatList_ERROR(void){	return _gldDriverError();}//---------------------------------------------------------------------------static BOOL _InitialiseMesa_ERROR(	DGL_ctx *ctx){	return _gldDriverError();}//---------------------------------------------------------------------------static BOOL	_SwapBuffers_ERROR(	DGL_ctx *ctx,	HDC hDC,	HWND hWnd){	return _gldDriverError();}//---------------------------------------------------------------------------static PROC _GetProcAddress_ERROR(	LPCSTR a){	_gldDriverError();	return NULL;}//---------------------------------------------------------------------------static BOOL	_GetDisplayMode_ERROR(	DGL_ctx *ctx,	GLD_displayMode *glddm){	return _gldDriverError();}//---------------------------------------------------------------------------// Functions useful to all drivers//---------------------------------------------------------------------------const GLubyte* _gldGetStringGeneric(	GLcontext *ctx,	GLenum name){	if (!ctx)		return NULL;	switch (name) {	case GL_RENDERER:		sprintf(_gldRendererString, "GLDirect 4.0 %s%s%s%s (%s %s)",			_mesa_x86_cpu_features	? "/x86"		: "",			cpu_has_mmx				? "/MMX"		: "",			cpu_has_3dnow			? "/3DNow!"		: "",			cpu_has_xmm				? "/SSE"		: "",			__DATE__, __TIME__);		return (const GLubyte *) _gldRendererString;	case GL_VENDOR:		return (const GLubyte *) szVendor;	default:		return NULL;	}}//---------------------------------------------------------------------------// Global driver function pointers, initially set to functions that// will report an error when called.//---------------------------------------------------------------------------GLD_driver _gldDriver = {	_GetDXErrorString_ERROR,	_CreateDrawable_ERROR,	_ResizeDrawable_ERROR,	_DestroyDrawable_ERROR,	_CreatePrivateGlobals_ERROR,	_DestroyPrivateGlobals_ERROR,	_BuildPixelformatList_ERROR,	_InitialiseMesa_ERROR,	_SwapBuffers_ERROR,	_GetProcAddress_ERROR,	_GetDisplayMode_ERROR};//---------------------------------------------------------------------------// Init function. Should be called as soon as regkeys/ini-settings are read.//---------------------------------------------------------------------------BOOL gldInitDriverPointers(	DWORD dwDriver){	_gldDriver.GetDXErrorString	= gldGetDXErrorString_DX;	if (dwDriver == GLDS_DRIVER_MESA_SW) {		// Mesa Software driver		_gldDriver.CreateDrawable			= gldCreateDrawable_MesaSW;		_gldDriver.ResizeDrawable			= gldResizeDrawable_MesaSW;		_gldDriver.DestroyDrawable			= gldDestroyDrawable_MesaSW;		_gldDriver.CreatePrivateGlobals		= gldCreatePrivateGlobals_MesaSW;		_gldDriver.DestroyPrivateGlobals	= gldDestroyPrivateGlobals_MesaSW;		_gldDriver.BuildPixelformatList		= gldBuildPixelformatList_MesaSW;		_gldDriver.InitialiseMesa			= gldInitialiseMesa_MesaSW;		_gldDriver.SwapBuffers				= gldSwapBuffers_MesaSW;		_gldDriver.wglGetProcAddress		= gldGetProcAddress_MesaSW;		_gldDriver.GetDisplayMode			= gldGetDisplayMode_MesaSW;		return TRUE;	}		if ((dwDriver == GLDS_DRIVER_REF) || (dwDriver == GLDS_DRIVER_HAL)) {		// Direct3D driver, either HW or SW		_gldDriver.CreateDrawable			= gldCreateDrawable_DX;		_gldDriver.ResizeDrawable			= gldResizeDrawable_DX;		_gldDriver.DestroyDrawable			= gldDestroyDrawable_DX;		_gldDriver.CreatePrivateGlobals		= gldCreatePrivateGlobals_DX;		_gldDriver.DestroyPrivateGlobals	= gldDestroyPrivateGlobals_DX;		_gldDriver.BuildPixelformatList		= gldBuildPixelformatList_DX;		_gldDriver.InitialiseMesa			= gldInitialiseMesa_DX;		_gldDriver.SwapBuffers				= gldSwapBuffers_DX;		_gldDriver.wglGetProcAddress		= gldGetProcAddress_DX;		_gldDriver.GetDisplayMode			= gldGetDisplayMode_DX;		return TRUE;	};	return FALSE;}//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -