author | Matt Plumtree <matt.plumtree@nokia.com> |
Mon, 01 Nov 2010 18:10:32 +0000 | |
branch | bug235_bringup_0 |
changeset 69 | 3f914c77c2e9 |
parent 53 | c2ef9095503a |
permissions | -rw-r--r-- |
24 | 1 |
#ifndef __RIDEFS_H |
2 |
#define __RIDEFS_H |
|
3 |
||
4 |
/*------------------------------------------------------------------------ |
|
5 |
* |
|
6 |
* OpenVG 1.1 Reference Implementation |
|
7 |
* ----------------------------------- |
|
8 |
* |
|
9 |
* Copyright (c) 2007 The Khronos Group Inc. |
|
10 |
* Portions copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). |
|
11 |
* |
|
12 |
* Permission is hereby granted, free of charge, to any person obtaining a |
|
13 |
* copy of this software and /or associated documentation files |
|
14 |
* (the "Materials "), to deal in the Materials without restriction, |
|
15 |
* including without limitation the rights to use, copy, modify, merge, |
|
16 |
* publish, distribute, sublicense, and/or sell copies of the Materials, |
|
17 |
* and to permit persons to whom the Materials are furnished to do so, |
|
18 |
* subject to the following conditions: |
|
19 |
* |
|
20 |
* The above copyright notice and this permission notice shall be included |
|
21 |
* in all copies or substantial portions of the Materials. |
|
22 |
* |
|
23 |
* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
|
24 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
25 |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
|
26 |
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
|
27 |
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR |
|
28 |
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR |
|
29 |
* THE USE OR OTHER DEALINGS IN THE MATERIALS. |
|
30 |
* |
|
31 |
*//** |
|
32 |
* \file |
|
33 |
* \brief Platform- and compiler-dependent type and macro definitions. |
|
34 |
* \note |
|
35 |
*//*-------------------------------------------------------------------*/ |
|
36 |
||
37 |
#include <float.h> |
|
38 |
#include <math.h> |
|
39 |
#include <assert.h> |
|
40 |
#include <new> //for bad_alloc |
|
41 |
||
42 |
#if defined(_WIN32) && defined(_DEBUG) |
|
43 |
# define WIN32_LEAN_AND_MEAN |
|
44 |
# include <windows.h> |
|
45 |
#endif |
|
46 |
||
47 |
//make for-clause scope c++ standard compliant on msvc |
|
48 |
#if defined (_MSC_VER) |
|
49 |
# if !defined (for) |
|
50 |
__forceinline bool getFalse (void) { return false; } |
|
51 |
# define for if(getFalse()); else for |
|
52 |
# endif // for |
|
53 |
||
54 |
#pragma warning(disable:4710) //disable function not inlined warning |
|
55 |
#pragma warning(disable:4714) //disable function not __forceinlined warning |
|
56 |
#endif // _MSC_VER |
|
57 |
||
58 |
namespace OpenVGRI |
|
59 |
{ |
|
60 |
||
61 |
//======================================================================= |
|
62 |
||
63 |
typedef long long RIint64; |
|
64 |
typedef unsigned long long RIuint64; |
|
65 |
typedef int RIint32; |
|
66 |
typedef unsigned int RIuint32; |
|
67 |
typedef short RIint16; |
|
68 |
typedef unsigned short RIuint16; |
|
69 |
typedef signed char RIint8; |
|
70 |
typedef unsigned char RIuint8; |
|
71 |
typedef float RIfloat32; |
|
72 |
//TODO add compile-time assertions to guarantee the sizes |
|
73 |
||
74 |
#if defined (_MSC_VER) // MSVC WIN32 |
|
75 |
# define RI_INLINE __forceinline |
|
76 |
#elif defined __APPLE__ || defined (__GNUC__) || defined (__GCC32__) |
|
77 |
# define RI_INLINE inline |
|
78 |
#endif |
|
79 |
||
80 |
/*!< Unsigned int that can hold a pointer to any type */ |
|
81 |
/*!< Signed int that can hold a pointer to any type */ |
|
82 |
#if defined (_MSC_VER) && (_MSC_VER >= 1300) |
|
83 |
typedef uintptr_t RIuintptr; |
|
84 |
typedef intptr_t RIintptr; |
|
85 |
#else |
|
86 |
typedef unsigned long RIuintptr; |
|
87 |
typedef signed long RIintptr; |
|
88 |
#endif |
|
89 |
||
90 |
#define RI_UINT32_MAX (0xffffffffu) |
|
91 |
#define RI_INT32_MAX (0x7fffffff) |
|
92 |
#define RI_INT32_MIN (-0x7fffffff-1) |
|
93 |
||
94 |
/* maximum mantissa is 23 */ |
|
95 |
#define RI_MANTISSA_BITS 23 |
|
96 |
||
97 |
/* maximum exponent is 8 */ |
|
98 |
#define RI_EXPONENT_BITS 8 |
|
99 |
||
100 |
typedef union |
|
101 |
{ |
|
102 |
RIfloat32 f; |
|
103 |
RIuint32 i; |
|
104 |
} RIfloatInt; |
|
105 |
||
106 |
RI_INLINE float getFloatMax() |
|
107 |
{ |
|
108 |
RIfloatInt v; |
|
109 |
v.i = (((1<<(RI_EXPONENT_BITS-1))-1+127) << 23) | (((1<<RI_MANTISSA_BITS)-1) << (23-RI_MANTISSA_BITS)); |
|
110 |
return v.f; |
|
111 |
} |
|
112 |
#define RI_FLOAT_MAX getFloatMax() |
|
113 |
||
114 |
#define RI_MAX_IMAGE_WIDTH 16384 |
|
115 |
#define RI_MAX_IMAGE_HEIGHT 16384 |
|
116 |
#define RI_MAX_IMAGE_PIXELS (RI_MAX_IMAGE_WIDTH*RI_MAX_IMAGE_HEIGHT) |
|
117 |
#define RI_MAX_IMAGE_BYTES (4*RI_MAX_IMAGE_WIDTH*RI_MAX_IMAGE_HEIGHT) |
|
118 |
#define RI_MAX_DASH_COUNT 256 |
|
119 |
#define RI_MAX_COLOR_RAMP_STOPS 256 |
|
120 |
#define RI_MAX_KERNEL_SIZE 256 |
|
121 |
#define RI_MAX_SEPARABLE_KERNEL_SIZE 256 |
|
122 |
#define RI_MAX_GAUSSIAN_STD_DEVIATION 16.0f |
|
123 |
#define RI_MAX_SCISSOR_RECTANGLES 256 |
|
124 |
#define RI_MAX_EDGES 262144 |
|
125 |
#define RI_MAX_SAMPLES 1 |
|
126 |
//#define RI_NUM_TESSELLATED_SEGMENTS_QUAD 256 |
|
127 |
//#define RI_NUM_TESSELLATED_SEGMENTS_CUBIC 256 |
|
128 |
//#define RI_NUM_TESSELLATED_SEGMENTS_ARC 256 |
|
129 |
#define RI_NUM_TESSELLATED_SEGMENTS_QUAD 8 |
|
130 |
#define RI_NUM_TESSELLATED_SEGMENTS_CUBIC 8 |
|
131 |
#define RI_NUM_TESSELLATED_SEGMENTS_ARC 8 |
|
132 |
||
133 |
#if !defined(_WIN32) && !defined(SF_PROFILE) |
|
134 |
# ifndef NDEBUG |
|
135 |
# define _DEBUG 1 |
|
136 |
# endif |
|
137 |
#endif |
|
138 |
||
139 |
#if _DEBUG |
|
140 |
#define RI_DEBUG |
|
141 |
#endif |
|
142 |
||
143 |
#ifdef RI_DEBUG |
|
144 |
# define RI_ASSERT(X) assert(X) |
|
145 |
#else |
|
146 |
# define RI_ASSERT(X) (void(0)) |
|
147 |
#endif |
|
148 |
||
149 |
#if defined(RI_DEBUG) |
|
150 |
# define RI_PRINTF(...) printf(__VA_ARGS__) |
|
151 |
#else |
|
152 |
# define RI_PRINTF(...) |
|
153 |
#endif |
|
154 |
||
155 |
#if defined(RI_DEBUG) |
|
69
3f914c77c2e9
Host OpenVG building using GCC, without LLVM integration.
Matt Plumtree <matt.plumtree@nokia.com>
parents:
53
diff
changeset
|
156 |
# if defined(_WIN32) && !defined(__GNUG__) |
24 | 157 |
# define RI_TRACE(...) do { \ |
158 |
char buf[512]; \ |
|
159 |
snprintf(buf, sizeof(buf), __VA_ARGS__); \ |
|
160 |
OutputDebugString(buf); \ |
|
161 |
} while(false) |
|
162 |
# else |
|
163 |
# define RI_TRACE(...) printf(__VA_ARGS__) |
|
164 |
# endif |
|
165 |
#else |
|
166 |
# define RI_TRACE(...) |
|
167 |
#endif |
|
168 |
||
169 |
#define RI_UNREF(X) ((void)(X)) |
|
170 |
#if defined(_WIN32) |
|
171 |
# define RI_APIENTRY VG_API_ENTRY |
|
172 |
#else |
|
173 |
# define RI_APIENTRY |
|
174 |
#endif |
|
175 |
||
176 |
#if defined(_WIN32) |
|
177 |
# define snprintf sprintf_s |
|
178 |
#endif |
|
179 |
||
180 |
#define RI_API_CALL VG_API_CALL |
|
181 |
||
182 |
#define RI_NEW(TYPE, PARAMS) (new TYPE PARAMS) |
|
183 |
#define RI_NEW_ARRAY(TYPE, ITEMS) (new TYPE[ITEMS]) |
|
184 |
#define RI_DELETE(PARAMS) (delete (PARAMS)) |
|
185 |
#define RI_DELETE_ARRAY(PARAMS) (delete[] (PARAMS)) |
|
186 |
||
187 |
bool isValidImageFormat(int format); |
|
188 |
||
189 |
// \todo Move these to utility functions, etc. |
|
190 |
RI_INLINE void RI_MEM_ZERO(void *dst, size_t n) |
|
191 |
{ |
|
192 |
RI_ASSERT(n > 0); |
|
193 |
RI_ASSERT((n & 0x3) == 0); |
|
194 |
||
195 |
RIuint32 *ptr = (RIuint32*)dst; |
|
196 |
for(size_t i = 0; i < (n>>2); i++) |
|
197 |
{ |
|
198 |
*ptr++ = 0; |
|
199 |
} |
|
200 |
} |
|
201 |
||
202 |
//======================================================================= |
|
203 |
||
204 |
} //namespace OpenVGRI |
|
205 |
||
206 |
#endif /* __RIDEFS_H */ |