1 /****************************************************************************
3 * Mesa 3-D graphics library
4 * Direct3D Driver Interface
6 * ========================================================================
8 * Copyright (C) 1991-2004 SciTech Software, Inc. All rights reserved.
10 * Permission is hereby granted, free of charge, to any person obtaining a
11 * copy of this software and associated documentation files (the "Software"),
12 * to deal in the Software without restriction, including without limitation
13 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
14 * and/or sell copies of the Software, and to permit persons to whom the
15 * Software is furnished to do so, subject to the following conditions:
17 * The above copyright notice and this permission notice shall be included
18 * in all copies or substantial portions of the Software.
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23 * SCITECH SOFTWARE INC BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
24 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
25 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28 * ======================================================================
31 * Environment: Windows 9x (Win32)
33 * Description: Useful generic macros.
35 ****************************************************************************/
42 // Define the relevant RELEASE macro depending on C or C++
43 #if !defined(__cplusplus) || defined(CINTERFACE)
45 #define RELEASE(x) if (x!=NULL) { x->lpVtbl->Release(x); x=NULL; }
48 #define RELEASE(x) if (x!=NULL) { x->Release(); x=NULL; }
51 // We don't want a message *every* time we call an unsupported function
52 #define UNSUPPORTED(x) \
54 static BOOL bFirstTime = TRUE; \
57 ddlogError(DDLOG_WARN, (x), DDERR_CURRENTLYNOTAVAIL); \
61 #define DGL_CHECK_CONTEXT \
62 if (ctx == NULL) return;
64 // Don't render if bCanRender is not TRUE.
65 #define DGL_CHECK_RENDER \
66 if (!dgl->bCanRender) return;
70 #define TRY_ERR(a,b) (a)
72 // hResult should be defined in the function
73 // Return codes should be checked via SUCCEDDED and FAILED macros
76 if (FAILED(hResult=(a))) \
77 ddlogError(DDLOG_ERROR, (b), hResult); \
80 // hResult is a global
81 // The label exit_with_error should be defined within the calling scope
82 #define TRY_ERR(a,b) \
84 if (FAILED(hResult=(a))) { \
85 ddlogError(DDLOG_ERROR, (b), hResult); \
86 goto exit_with_error; \