Tizen 2.0 Release
[profile/ivi/osmesa.git] / src / mesa / drivers / windows / gldirect / dglmacros.h
1 /****************************************************************************
2 *
3 *                        Mesa 3-D graphics library
4 *                        Direct3D Driver Interface
5 *
6 *  ========================================================================
7 *
8 *   Copyright (C) 1991-2004 SciTech Software, Inc. All rights reserved.
9 *
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:
16 *
17 *   The above copyright notice and this permission notice shall be included
18 *   in all copies or substantial portions of the Software.
19 *
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
26 *   SOFTWARE.
27 *
28 *  ======================================================================
29 *
30 * Language:     ANSI C
31 * Environment:  Windows 9x (Win32)
32 *
33 * Description:  Useful generic macros.
34 *
35 ****************************************************************************/
36
37 #ifndef __DGLMACROS_H
38 #define __DGLMACROS_H
39
40 #include <ddraw.h>
41
42 // Define the relevant RELEASE macro depending on C or C++
43 #if !defined(__cplusplus) || defined(CINTERFACE)
44         // Standard C version
45         #define RELEASE(x) if (x!=NULL) { x->lpVtbl->Release(x); x=NULL; }
46 #else
47         // C++ version
48         #define RELEASE(x) if (x!=NULL) { x->Release(); x=NULL; }
49 #endif
50
51 // We don't want a message *every* time we call an unsupported function
52 #define UNSUPPORTED(x)                                                                                          \
53         {                                                                                                                               \
54                 static BOOL bFirstTime = TRUE;                                                          \
55                 if (bFirstTime) {                                                                                       \
56                         bFirstTime = FALSE;                                                                             \
57                         ddlogError(DDLOG_WARN, (x), DDERR_CURRENTLYNOTAVAIL);   \
58                 }                                                                                                                       \
59         }
60
61 #define DGL_CHECK_CONTEXT               \
62         if (ctx == NULL) return;
63
64 // Don't render if bCanRender is not TRUE.
65 #define DGL_CHECK_RENDER                \
66         if (!dgl->bCanRender) return;
67
68 #if 0
69 #define TRY(a,b) (a)
70 #define TRY_ERR(a,b) (a)
71 #else
72 // hResult should be defined in the function
73 // Return codes should be checked via SUCCEDDED and FAILED macros
74 #define TRY(a,b)                                                                        \
75         {                                                                                               \
76                 if (FAILED(hResult=(a)))                                        \
77                         ddlogError(DDLOG_ERROR, (b), hResult);  \
78         }
79
80 // hResult is a global
81 // The label exit_with_error should be defined within the calling scope
82 #define TRY_ERR(a,b)                                                            \
83         {                                                                                               \
84                 if (FAILED(hResult=(a))) {                                      \
85                         ddlogError(DDLOG_ERROR, (b), hResult);  \
86                         goto exit_with_error;                                   \
87                 }                                                                                       \
88         }
89 #endif // #if 1
90
91 #endif