cba6806c373c29c8dc066b563679186d859ad0fbvboxsync/* $Id$ */
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync/** @file
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync * VBox D3D8/9 dll switcher
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync */
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2009-2012 Oracle Corporation
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync *
7be8d76da2c10d927dc85d0076a40cda027f15e6vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
7be8d76da2c10d927dc85d0076a40cda027f15e6vboxsync * available from http://www.virtualbox.org. This file is free software;
7be8d76da2c10d927dc85d0076a40cda027f15e6vboxsync * you can redistribute it and/or modify it under the terms of the GNU
7be8d76da2c10d927dc85d0076a40cda027f15e6vboxsync * General Public License (GPL) as published by the Free Software
7be8d76da2c10d927dc85d0076a40cda027f15e6vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
7be8d76da2c10d927dc85d0076a40cda027f15e6vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
7be8d76da2c10d927dc85d0076a40cda027f15e6vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync */
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync#ifndef ___CROPENGL_SWITCHER_H_
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync#define ___CROPENGL_SWITCHER_H_
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
cba6806c373c29c8dc066b563679186d859ad0fbvboxsynctypedef BOOL (APIENTRY *DrvValidateVersionProc)(DWORD version);
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync#define SW_FILLPROC(dispatch, hdll, name) \
0f4c42cc432d01dc2d69b4cbd2a44624e3ce6ce6vboxsync dispatch.p##name = ((hdll) != NULL) ? (name##Proc) GetProcAddress((hdll), #name) : vbox##name##Stub;
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync#define SW_DISPINIT(dispatch) \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync { \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync if (!dispatch.initialized) \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync { \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync InitD3DExports(dispatch.vboxName, dispatch.msName); \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync dispatch.initialized = 1; \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync } \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync }
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync#define SW_CHECKRET(dispatch, func, failret) \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync { \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync SW_DISPINIT(dispatch) \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync if (!dispatch.p##func) \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync return failret; \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync }
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync#define SW_CHECKCALL(dispatch, func) \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync { \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync SW_DISPINIT(dispatch) \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync if (!dispatch.p##func) return; \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync }
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
cba6806c373c29c8dc066b563679186d859ad0fbvboxsyncextern BOOL IsVBox3DEnabled(void);
cba6806c373c29c8dc066b563679186d859ad0fbvboxsyncextern BOOL CheckOptions(void);
cba6806c373c29c8dc066b563679186d859ad0fbvboxsyncextern void FillD3DExports(HANDLE hDLL);
cba6806c373c29c8dc066b563679186d859ad0fbvboxsyncextern void InitD3DExports(const char *vboxName, const char *msName);
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
0f4c42cc432d01dc2d69b4cbd2a44624e3ce6ce6vboxsync#endif /* #ifndef ___CROPENGL_SWITCHER_H_ */