| TGX 1.1.0 A tiny 2D/3D graphics library optimized for 32 bits microcontrollers.

Loading...
Searching...
No Matches
tgx_config.h
Go to the documentation of this file.
1
5//
6// Copyright 2020 Arvind Singh
7//
8// This library is free software; you can redistribute it and/or
9// modify it under the terms of the GNU Lesser General Public
10// License as published by the Free Software Foundation; either
11//version 2.1 of the License, or (at your option) any later version.
12//
13// This library is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU
16// Lesser General Public License for more details.
17//
18// You should have received a copy of the GNU Lesser General Public
19// License along with this library; If not, see <http://www.gnu.org/licenses/>.
20
21
22
23// disable mtools extensions by default
24#ifndef MTOOLS_TGX_EXTENSIONS
25#define MTOOLS_TGX_EXTENSIONS 0
26#endif
27
28#ifdef ARDUINO
29 #include <Arduino.h>
30 #define TGX_ON_ARDUINO
31#elif defined(ESP_PLATFORM)
32 #include "sdkconfig.h"
33#endif
34
35#ifndef PROGMEM
36 #define PROGMEM
37#endif
38
39#ifndef FLASHMEM
40 #define FLASHMEM
41#endif
42
43
44
45//
46// Board specific optimizations.
47//
48// - TGX_PROGMEM_DEFAULT_CACHE_SIZE : size of the cache when reading from PROGMEM. Use to optimize cache read when accessing image in flash.
49//
50// - TGX_USE_FAST_INV_SQRT_TRICK : fast inverse 'quake like' square root trick to speed up computations.
51// - TGX_USE_FAST_SQRT_TRICK : fast 'quake like' square root trick to speed up computations.
52// - TGX_USE_FAST_INV_TRICK : fast inverse 'quake like' trick to speed up computations.
53// - TGX_USE_FMA_MATH : use explicit fused multiply-add in small floating-point vector/matrix operations.
54//
55// - TGX_INLINE/TGX_NOINLINE : inlining strategy for time critical/non-critical functions.
56//
70#if defined(_WIN32) || defined(_WIN64) || defined(__linux__) || defined(__APPLE__) || defined(__MACH__) || defined(__ANDROID__) || defined(__unix__)
71 // TGX is running on a computer.
72 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 262144
73 #define TGX_USE_FAST_INV_SQRT_TRICK 0
74 #define TGX_USE_FAST_SQRT_TRICK 0
75 #define TGX_USE_FAST_INV_TRICK 0
76 #define TGX_USE_FMA_MATH 0
77 #define TGX_INLINE
78 #define TGX_NOINLINE
79
80#elif defined(ARDUINO_TEENSY40) || defined(ARDUINO_TEENSY41)
81 // teensy 4.0 and 4.1
82 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 8192
83 #define TGX_USE_FAST_INV_SQRT_TRICK 1
84 #define TGX_USE_FAST_SQRT_TRICK 1
85 #define TGX_USE_FAST_INV_TRICK 1
86 #define TGX_USE_FMA_MATH 1
87 #define TGX_INLINE __attribute__((always_inline))
88 #define TGX_NOINLINE
89
90#elif defined(ARDUINO_TEENSY36)
91 // teensy 3.6
92 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 2048
93 #define TGX_USE_FAST_INV_SQRT_TRICK 1
94 #define TGX_USE_FAST_SQRT_TRICK 0
95 #define TGX_USE_FAST_INV_TRICK 1
96 #define TGX_USE_FMA_MATH 0
97 #define TGX_INLINE __attribute__((always_inline))
98 #define TGX_NOINLINE
99
100#elif defined(ARDUINO_TEENSY35)
101 // teensy 3.5
102 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 2048
103 #define TGX_USE_FAST_INV_SQRT_TRICK 1
104 #define TGX_USE_FAST_SQRT_TRICK 0
105 #define TGX_USE_FAST_INV_TRICK 1
106 #define TGX_USE_FMA_MATH 0
107 #define TGX_INLINE __attribute__((always_inline))
108 #define TGX_NOINLINE
109
110#elif defined(ARDUINO_TEENSY32) || defined(ARDUINO_TEENSY31)
111 // teensy 3.1 and 3.2
112 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 1024
113 #define TGX_USE_FAST_INV_SQRT_TRICK 1
114 #define TGX_USE_FAST_SQRT_TRICK 0
115 #define TGX_USE_FAST_INV_TRICK 1
116 #define TGX_USE_FMA_MATH 0
117 #define TGX_INLINE __attribute__((always_inline))
118 #define TGX_NOINLINE
119
120#elif defined(ARDUINO_TEENSYLC)
121 // teensy LC
122 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 256
123 #define TGX_USE_FAST_INV_SQRT_TRICK 0
124 #define TGX_USE_FAST_SQRT_TRICK 0
125 #define TGX_USE_FAST_INV_TRICK 0
126 #define TGX_USE_FMA_MATH 0
127 #define TGX_INLINE
128 #define TGX_NOINLINE
129
130#elif defined(ARDUINO_ARCH_RP2350) || defined(PICO_RP2350)
131 // Raspberry Pico 2350
132 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 4096
133 #define TGX_USE_FAST_INV_SQRT_TRICK 1
134 #define TGX_USE_FAST_SQRT_TRICK 1
135 #define TGX_USE_FAST_INV_TRICK 1
136 #define TGX_USE_FMA_MATH 0
137 #define TGX_INLINE __attribute__((always_inline))
138 #define TGX_NOINLINE
139
140#elif defined(ARDUINO_ARCH_RP2040) || defined(PICO_RP2040)
141 // Raspberry Pico 2040
142 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 2048
143 #define TGX_USE_FAST_INV_SQRT_TRICK 0
144 #define TGX_USE_FAST_SQRT_TRICK 0
145 #define TGX_USE_FAST_INV_TRICK 0
146 #define TGX_USE_FMA_MATH 0
147 #define TGX_INLINE
148 #define TGX_NOINLINE
149
150#elif defined(CONFIG_IDF_TARGET_ESP32S2) || defined(ESP32S2)
151 // ESP32 S2
152 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 2048
153 #define TGX_USE_FAST_INV_SQRT_TRICK 0
154 #define TGX_USE_FAST_SQRT_TRICK 0
155 #define TGX_USE_FAST_INV_TRICK 0
156 #define TGX_USE_FMA_MATH 0
157 #define TGX_INLINE
158 #define TGX_NOINLINE
159
160#elif defined(CONFIG_IDF_TARGET_ESP32S3) || defined(ESP32S3)
161 // ESP32 S3
162 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 4096
163 #define TGX_USE_FAST_INV_SQRT_TRICK 0 // unused: specific assembly code used instead.
164 #define TGX_USE_FAST_SQRT_TRICK 0 //
165 #define TGX_USE_FAST_INV_TRICK 0 // unused: specific assembly code used instead.
166 #define TGX_USE_FMA_MATH 0
167 #define TGX_INLINE __attribute__((always_inline))
168 #define TGX_NOINLINE
169
170#elif defined(CONFIG_IDF_TARGET_ESP32P4) || defined(ESP32P4)
171 // ESP32 P4
172 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 4096
173 #define TGX_USE_FAST_INV_SQRT_TRICK 1
174 #define TGX_USE_FAST_SQRT_TRICK 1
175 #define TGX_USE_FAST_INV_TRICK 1
176 #define TGX_USE_FMA_MATH 0
177 #define TGX_INLINE __attribute__((always_inline))
178 #define TGX_NOINLINE
179
180#elif defined(CONFIG_IDF_TARGET_ESP32) || defined(ESP32)
181 // fallback to original
182 // nb: `ESP32` is defined for all ESP32 variants so this case should be the last
183 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 4096
184 #define TGX_USE_FAST_INV_SQRT_TRICK 0 // unused: specific assembly code used instead.
185 #define TGX_USE_FAST_SQRT_TRICK 0 //
186 #define TGX_USE_FAST_INV_TRICK 0 //
187 #define TGX_USE_FMA_MATH 0
188 #define TGX_INLINE __attribute__((always_inline))
189 #define TGX_NOINLINE __attribute__((noinline, noclone))
190
191#elif defined(__ARM_ARCH_6M__)
192 // generic Cortex-M0 (use same setting as Teensy LC)
193 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 256
194 #define TGX_USE_FAST_INV_SQRT_TRICK 0
195 #define TGX_USE_FAST_SQRT_TRICK 0
196 #define TGX_USE_FAST_INV_TRICK 0
197 #define TGX_USE_FMA_MATH 0
198 #define TGX_INLINE
199 #define TGX_NOINLINE
200
201#elif defined(__ARM_ARCH_7M__)
202 // generic Cortex-M3 (use same setting as Teensy3.2)
203 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 1024
204 #define TGX_USE_FAST_INV_SQRT_TRICK 1
205 #define TGX_USE_FAST_SQRT_TRICK 0
206 #define TGX_USE_FAST_INV_TRICK 1
207 #define TGX_USE_FMA_MATH 0
208 #define TGX_INLINE __attribute__((always_inline))
209 #define TGX_NOINLINE
210
211#elif (defined(__ARM_ARCH_7EM__) && defined(__ARM_FP) && (__ARM_FP == 0xC)) || defined(STM32H7xx)
212 // generic Cortex-M7 (use same setting as Teensy 4.0/4.1)
213 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 4096
214 #define TGX_USE_FAST_INV_SQRT_TRICK 1
215 #define TGX_USE_FAST_SQRT_TRICK 1
216 #define TGX_USE_FAST_INV_TRICK 1
217 #define TGX_USE_FMA_MATH 1
218 #define TGX_INLINE __attribute__((always_inline))
219 #define TGX_NOINLINE
220
221#elif defined(__ARM_ARCH_7EM__)
222 // generic Cortex-M4 (use same setting as Teensy 3.6/3.5)
223 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 2048
224 #define TGX_USE_FAST_INV_SQRT_TRICK 1
225 #define TGX_USE_FAST_SQRT_TRICK 0
226 #define TGX_USE_FAST_INV_TRICK 1
227 #define TGX_USE_FMA_MATH 0
228 #define TGX_INLINE __attribute__((always_inline))
229 #define TGX_NOINLINE
230
231#elif defined(__ARM_ARCH_8M_MAIN__)
232 // generic Cortex-M33 (use same setting as RP2350)
233 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 4096
234 #define TGX_USE_FAST_INV_SQRT_TRICK 1
235 #define TGX_USE_FAST_SQRT_TRICK 1
236 #define TGX_USE_FAST_INV_TRICK 1
237 #define TGX_USE_FMA_MATH 0
238 #define TGX_INLINE __attribute__((always_inline))
239 #define TGX_NOINLINE
240
241#else
242 // unknown board/architecture
243 #define TGX_PROGMEM_DEFAULT_CACHE_SIZE 1024
244 #define TGX_USE_FAST_INV_SQRT_TRICK 0
245 #define TGX_USE_FAST_SQRT_TRICK 0
246 #define TGX_USE_FAST_INV_TRICK 0
247 #define TGX_USE_FMA_MATH 0
248 #define TGX_INLINE
249 #define TGX_NOINLINE
250#endif
251
252
253
254
259#ifndef TGX_SINGLE_PRECISION_COMPUTATIONS
260 #define TGX_SINGLE_PRECISION_COMPUTATIONS 1
261#endif
262
263
268#define TGX_DEFAULT_NO_BLENDING -1.0f
269
270
275#ifndef TGX_MESHLET_SPHERE_CLIP
276 #define TGX_MESHLET_SPHERE_CLIP 1
277#endif
278
283#ifndef TGX_MESHLET_WIREFRAME_CULL
284 #define TGX_MESHLET_WIREFRAME_CULL 1
285#endif
286
287