switcher.h revision 7be8d76da2c10d927dc85d0076a40cda027f15e6
af062818b47340eef15700d2f0211576ba3506eevboxsync/* $Id$ */
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync/** @file
af062818b47340eef15700d2f0211576ba3506eevboxsync * VBox D3D8/9 dll switcher
af062818b47340eef15700d2f0211576ba3506eevboxsync */
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync/*
af062818b47340eef15700d2f0211576ba3506eevboxsync * Copyright (C) 2009 Sun Microsystems, Inc.
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
af062818b47340eef15700d2f0211576ba3506eevboxsync * available from http://www.virtualbox.org. This file is free software;
af062818b47340eef15700d2f0211576ba3506eevboxsync * you can redistribute it and/or modify it under the terms of the GNU
af062818b47340eef15700d2f0211576ba3506eevboxsync * General Public License (GPL) as published by the Free Software
af062818b47340eef15700d2f0211576ba3506eevboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
af062818b47340eef15700d2f0211576ba3506eevboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
af062818b47340eef15700d2f0211576ba3506eevboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
af062818b47340eef15700d2f0211576ba3506eevboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
af062818b47340eef15700d2f0211576ba3506eevboxsync * additional information or have any questions.
af062818b47340eef15700d2f0211576ba3506eevboxsync */
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#ifndef ___CROPENGL_SWITCHER_H_
af062818b47340eef15700d2f0211576ba3506eevboxsync#define ___CROPENGL_SWITCHER_H_
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsynctypedef BOOL (APIENTRY *DrvValidateVersionProc)(DWORD version);
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SW_FILLPROC(dispatch, hdll, name) \
af062818b47340eef15700d2f0211576ba3506eevboxsync dispatch.p##name = (name##Proc) GetProcAddress(hdll, #name);
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SW_DISPINIT(dispatch) \
af062818b47340eef15700d2f0211576ba3506eevboxsync { \
af062818b47340eef15700d2f0211576ba3506eevboxsync if (!dispatch.initialized) \
af062818b47340eef15700d2f0211576ba3506eevboxsync { \
af062818b47340eef15700d2f0211576ba3506eevboxsync InitD3DExports(dispatch.vboxName, dispatch.msName); \
af062818b47340eef15700d2f0211576ba3506eevboxsync dispatch.initialized = 1; \
af062818b47340eef15700d2f0211576ba3506eevboxsync } \
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SW_CHECKRET(dispatch, func, failret) \
af062818b47340eef15700d2f0211576ba3506eevboxsync { \
af062818b47340eef15700d2f0211576ba3506eevboxsync SW_DISPINIT(dispatch) \
af062818b47340eef15700d2f0211576ba3506eevboxsync if (!dispatch.p##func) \
af062818b47340eef15700d2f0211576ba3506eevboxsync return failret; \
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#define SW_CHECKCALL(dispatch, func) \
af062818b47340eef15700d2f0211576ba3506eevboxsync { \
af062818b47340eef15700d2f0211576ba3506eevboxsync SW_DISPINIT(dispatch) \
af062818b47340eef15700d2f0211576ba3506eevboxsync if (!dispatch.p##func) return; \
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncextern BOOL IsVBox3DEnabled(void);
af062818b47340eef15700d2f0211576ba3506eevboxsyncextern BOOL CheckOptions(void);
af062818b47340eef15700d2f0211576ba3506eevboxsyncextern void FillD3DExports(HANDLE hDLL);
af062818b47340eef15700d2f0211576ba3506eevboxsyncextern void InitD3DExports(const char *vboxName, const char *msName);
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#endif /* #ifndef ___CROPENGL_SWITCHER_H_ */