switcher.h revision cba6806c373c29c8dc066b563679186d859ad0fb
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync/* $Id$ */
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync/** @file
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync * VBox D3D8/9 dll switcher
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync */
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync/*
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync * Copyright (C) 2009 Sun Microsystems, Inc.
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync *
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync * Sun Microsystems, Inc. confidential
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync * All rights reserved
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) \
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync dispatch.p##name = (name##Proc) GetProcAddress(hdll, #name);
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
cba6806c373c29c8dc066b563679186d859ad0fbvboxsync#endif /* #ifndef ___CROPENGL_SWITCHER_H_ */