TGX
1.1.4
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
// generic check for FPU support
46
#if defined(__ARM_FP) && ((__ARM_FP & 0x4) != 0)
47
#define TGX_COMPILER_HAS_FPU 1
48
#elif defined(__XTENSA__) && !defined(__XTENSA_SOFT_FLOAT__)
49
#define TGX_COMPILER_HAS_FPU 1
50
#elif defined(__riscv_flen) && (__riscv_flen >= 32)
51
#define TGX_COMPILER_HAS_FPU 1
52
#else
53
#define TGX_COMPILER_HAS_FPU 0
54
#endif
55
56
57
//
58
// Board specific optimizations.
59
//
60
// - TGX_PROGMEM_DEFAULT_CACHE_SIZE : size of the cache when reading from PROGMEM. Use to optimize cache read when accessing image in flash.
61
//
62
// - TGX_USE_FAST_INV_SQRT_TRICK : fast inverse 'quake like' square root trick to speed up computations.
63
// - TGX_USE_FAST_SQRT_TRICK : fast 'quake like' square root trick to speed up computations.
64
// - TGX_USE_FAST_INV_TRICK : fast inverse 'quake like' trick to speed up computations.
65
// - TGX_USE_FMA_MATH : use explicit fused multiply-add in small floating-point vector/matrix operations.
66
// - TGX_USE_FMA_MATH_MISC : use explicit fused multiply-add in Misc.h fast math approximations.
67
// - TGX_DRAWSPHERE_USE_STRIP_BANDS : use triangle strips for Gouraud shaded sphere bands.
68
// - TGX_RASTERIZE_TRIANGLE_INLINE : inlining strategy for the main triangle rasterizer entry point.
69
// - TGX_RENDERER3D_CLIP_NOINLINE : noinline strategy for Renderer3D clipping helpers.
70
// - TGX_BSEG_RUNTIME_MOVE_INLINE : inlining strategy for the runtime Bresenham move wrapper.
71
//
72
// - TGX_INLINE/TGX_NOINLINE : inlining strategy for time critical/non-critical functions.
73
//
110
#if defined(_WIN32) || defined(_WIN64) || defined(__linux__) || defined(__APPLE__) || defined(__MACH__) || defined(__ANDROID__) || defined(__unix__)
111
// TGX is running on a computer.
112
#define TGX_RUN_ON_CPU
113
#define TGX_CONFIG_HAS_FPU 1
114
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 262144
115
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 0
116
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
117
#define TGX_CONFIG_USE_FAST_INV_TRICK 0
118
#define TGX_CONFIG_USE_FMA_MATH 0
119
#define TGX_CONFIG_USE_FMA_MATH_MISC 0
120
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
121
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 1
122
#define TGX_CONFIG_INLINE
123
#define TGX_CONFIG_INLINE_ZDIVIDE
124
#define TGX_CONFIG_NOINLINE
125
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
126
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
127
128
#elif defined(ARDUINO_TEENSY40) || defined(ARDUINO_TEENSY41)
129
// teensy 4.0 and 4.1
130
#define TGX_RUN_ON_TEENSY4
131
#define TGX_CONFIG_HAS_FPU TGX_COMPILER_HAS_FPU
132
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 8192
133
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 1
134
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 1
135
#define TGX_CONFIG_USE_FAST_INV_TRICK 1
136
#define TGX_CONFIG_USE_FMA_MATH 1
137
#define TGX_CONFIG_USE_FMA_MATH_MISC 1
138
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 1
139
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 1
140
#define TGX_CONFIG_RASTERIZE_TRIANGLE_INLINE
141
#define TGX_CONFIG_INLINE __attribute__((always_inline))
142
#define TGX_CONFIG_INLINE_ZDIVIDE __attribute__((always_inline))
143
#define TGX_CONFIG_NOINLINE
144
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
145
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
146
147
#elif defined(ARDUINO_TEENSY36)
148
// teensy 3.6
149
#define TGX_RUN_ON_TEENSY3
150
#define TGX_CONFIG_HAS_FPU TGX_COMPILER_HAS_FPU
151
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 2048
152
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 1
153
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
154
#define TGX_CONFIG_USE_FAST_INV_TRICK 1
155
#define TGX_CONFIG_USE_FMA_MATH 0
156
#define TGX_CONFIG_USE_FMA_MATH_MISC 1
157
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
158
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
159
#define TGX_CONFIG_INLINE __attribute__((always_inline))
160
#define TGX_CONFIG_INLINE_ZDIVIDE
161
#define TGX_CONFIG_NOINLINE
162
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
163
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
164
165
#elif defined(ARDUINO_TEENSY35)
166
// teensy 3.5
167
#define TGX_RUN_ON_TEENSY3
168
#define TGX_CONFIG_HAS_FPU TGX_COMPILER_HAS_FPU
169
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 2048
170
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 1
171
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
172
#define TGX_CONFIG_USE_FAST_INV_TRICK 1
173
#define TGX_CONFIG_USE_FMA_MATH 0
174
#define TGX_CONFIG_USE_FMA_MATH_MISC 1
175
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
176
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
177
#define TGX_CONFIG_INLINE __attribute__((always_inline))
178
#define TGX_CONFIG_INLINE_ZDIVIDE
179
#define TGX_CONFIG_NOINLINE
180
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
181
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
182
183
#elif defined(ARDUINO_TEENSY32) || defined(ARDUINO_TEENSY31)
184
// teensy 3.1 and 3.2
185
#define TGX_RUN_ON_TEENSY3
186
#define TGX_CONFIG_HAS_FPU 0
187
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 1024
188
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 1
189
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
190
#define TGX_CONFIG_USE_FAST_INV_TRICK 1
191
#define TGX_CONFIG_USE_FMA_MATH 0
192
#define TGX_CONFIG_USE_FMA_MATH_MISC 1
193
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
194
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
195
#define TGX_CONFIG_INLINE __attribute__((always_inline))
196
#define TGX_CONFIG_INLINE_ZDIVIDE
197
#define TGX_CONFIG_NOINLINE
198
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
199
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
200
201
#elif defined(ARDUINO_TEENSYLC)
202
// teensy LC
203
#define TGX_RUN_ON_TEENSYLC
204
#define TGX_CONFIG_HAS_FPU 0
205
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 256
206
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 0
207
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
208
#define TGX_CONFIG_USE_FAST_INV_TRICK 0
209
#define TGX_CONFIG_USE_FMA_MATH 0
210
#define TGX_CONFIG_USE_FMA_MATH_MISC 0
211
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
212
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
213
#define TGX_CONFIG_INLINE
214
#define TGX_CONFIG_INLINE_ZDIVIDE
215
#define TGX_CONFIG_NOINLINE
216
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
217
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
218
219
#elif defined(ARDUINO_ARCH_RP2350) || defined(PICO_RP2350) || defined(TARGET_RP2350)
220
// Raspberry Pico 2350
221
#define TGX_RUN_ON_RP2350
222
#define TGX_CONFIG_HAS_FPU TGX_COMPILER_HAS_FPU
223
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 4096
224
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 1
225
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 1
226
#define TGX_CONFIG_USE_FAST_INV_TRICK 1
227
#define TGX_CONFIG_USE_FMA_MATH 0
228
#define TGX_CONFIG_USE_FMA_MATH_MISC 1
229
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 1
230
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
231
#define TGX_CONFIG_INLINE __attribute__((always_inline))
232
#define TGX_CONFIG_INLINE_ZDIVIDE __attribute__((always_inline))
233
#define TGX_CONFIG_NOINLINE
234
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
235
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE
236
237
#elif defined(ARDUINO_ARCH_RP2040) || defined(PICO_RP2040) || defined(TARGET_RP2040)
238
// Raspberry Pico 2040
239
#define TGX_RUN_ON_RP2040
240
#define TGX_CONFIG_HAS_FPU 0
241
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 2048
242
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 0
243
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
244
#define TGX_CONFIG_USE_FAST_INV_TRICK 0
245
#define TGX_CONFIG_USE_FMA_MATH 0
246
#define TGX_CONFIG_USE_FMA_MATH_MISC 0
247
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
248
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
249
#define TGX_CONFIG_INLINE
250
#define TGX_CONFIG_INLINE_ZDIVIDE
251
#define TGX_CONFIG_NOINLINE
252
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
253
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE
254
255
#elif defined(CONFIG_IDF_TARGET_ESP32S2) || defined(ESP32S2)
256
// ESP32 S2
257
#define TGX_RUN_ON_ESP32S2
258
#define TGX_CONFIG_HAS_FPU 0
259
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 2048
260
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 0
261
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
262
#define TGX_CONFIG_USE_FAST_INV_TRICK 0
263
#define TGX_CONFIG_USE_FMA_MATH 0
264
#define TGX_CONFIG_USE_FMA_MATH_MISC 0
265
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
266
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
267
#define TGX_CONFIG_INLINE
268
#define TGX_CONFIG_INLINE_ZDIVIDE
269
#define TGX_CONFIG_NOINLINE
270
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
271
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
272
273
#elif defined(CONFIG_IDF_TARGET_ESP32S3) || defined(ESP32S3)
274
// ESP32 S3
275
#define TGX_RUN_ON_ESP32S3
276
#define TGX_CONFIG_HAS_FPU TGX_COMPILER_HAS_FPU
277
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 4096
278
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 0
// unused: specific assembly code used instead.
279
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
//
280
#define TGX_CONFIG_USE_FAST_INV_TRICK 0
// unused: specific assembly code used instead.
281
#define TGX_CONFIG_USE_FMA_MATH 0
282
#define TGX_CONFIG_USE_FMA_MATH_MISC 0
283
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
284
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 1
285
#define TGX_CONFIG_RASTERIZE_TRIANGLE_INLINE
286
#define TGX_CONFIG_INLINE __attribute__((always_inline))
287
#define TGX_CONFIG_INLINE_ZDIVIDE __attribute__((always_inline))
288
#define TGX_CONFIG_NOINLINE
289
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
290
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
291
292
#elif defined(CONFIG_IDF_TARGET_ESP32P4) || defined(ESP32P4)
293
// ESP32 P4
294
#define TGX_RUN_ON_ESP32P4
295
#define TGX_CONFIG_HAS_FPU TGX_COMPILER_HAS_FPU
296
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 4096
297
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 1
298
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 1
299
#define TGX_CONFIG_USE_FAST_INV_TRICK 1
300
#define TGX_CONFIG_USE_FMA_MATH 0
301
#define TGX_CONFIG_USE_FMA_MATH_MISC 1
302
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
303
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 1
304
#define TGX_CONFIG_INLINE __attribute__((always_inline))
305
#define TGX_CONFIG_INLINE_ZDIVIDE
306
#define TGX_CONFIG_NOINLINE
307
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
308
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
309
310
#elif defined(CONFIG_IDF_TARGET_ESP32) || defined(ESP32)
311
// fallback to original
312
// nb: `ESP32` is defined for all ESP32 variants so this case should be the last
313
#define TGX_RUN_ON_ESP32
314
#define TGX_CONFIG_HAS_FPU TGX_COMPILER_HAS_FPU
315
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 4096
316
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 0
// unused: specific assembly code used instead.
317
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
//
318
#define TGX_CONFIG_USE_FAST_INV_TRICK 0
//
319
#define TGX_CONFIG_USE_FMA_MATH 0
320
#define TGX_CONFIG_USE_FMA_MATH_MISC 0
321
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
322
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 1
323
#define TGX_CONFIG_RASTERIZE_TRIANGLE_INLINE __attribute__((always_inline))
324
#define TGX_CONFIG_INLINE __attribute__((always_inline))
325
#define TGX_CONFIG_INLINE_ZDIVIDE
326
#define TGX_CONFIG_NOINLINE
327
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE __attribute__((noinline, noclone))
328
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
329
330
#elif defined(__ARM_ARCH_6M__)
331
// generic Cortex-M0 (use same setting as Teensy LC)
332
#define TGX_RUN_ON_TEENSYLC
333
#define TGX_CONFIG_HAS_FPU 0
334
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 256
335
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 0
336
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
337
#define TGX_CONFIG_USE_FAST_INV_TRICK 0
338
#define TGX_CONFIG_USE_FMA_MATH 0
339
#define TGX_CONFIG_USE_FMA_MATH_MISC 0
340
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
341
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
342
#define TGX_CONFIG_INLINE
343
#define TGX_CONFIG_INLINE_ZDIVIDE
344
#define TGX_CONFIG_NOINLINE
345
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
346
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
347
348
#elif defined(__ARM_ARCH_7M__)
349
// generic Cortex-M3 (use same setting as Teensy3.2)
350
#define TGX_RUN_ON_TEENSY3
351
#define TGX_CONFIG_HAS_FPU 0
352
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 1024
353
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 1
354
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
355
#define TGX_CONFIG_USE_FAST_INV_TRICK 1
356
#define TGX_CONFIG_USE_FMA_MATH 0
357
#define TGX_CONFIG_USE_FMA_MATH_MISC 1
358
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
359
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
360
#define TGX_CONFIG_INLINE __attribute__((always_inline))
361
#define TGX_CONFIG_INLINE_ZDIVIDE
362
#define TGX_CONFIG_NOINLINE
363
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
364
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
365
366
#elif (defined(__ARM_ARCH_7EM__) && defined(__ARM_FP) && ((__ARM_FP & 0x8) != 0)) || defined(STM32H7xx)
367
// generic Cortex-M7 (use same setting as Teensy 4.0/4.1)
368
#define TGX_RUN_ON_TEENSY4
369
#define TGX_CONFIG_HAS_FPU TGX_COMPILER_HAS_FPU
370
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 4096
371
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 1
372
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 1
373
#define TGX_CONFIG_USE_FAST_INV_TRICK 1
374
#define TGX_CONFIG_USE_FMA_MATH 1
375
#define TGX_CONFIG_USE_FMA_MATH_MISC 1
376
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
377
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 1
378
#define TGX_CONFIG_INLINE __attribute__((always_inline))
379
#define TGX_CONFIG_INLINE_ZDIVIDE __attribute__((always_inline))
380
#define TGX_CONFIG_NOINLINE
381
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
382
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
383
384
#elif defined(__ARM_ARCH_7EM__)
385
// generic Cortex-M4 (use same setting as Teensy 3.6/3.5)
386
#define TGX_RUN_ON_TEENSY3
387
#define TGX_CONFIG_HAS_FPU TGX_COMPILER_HAS_FPU
388
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 2048
389
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 1
390
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
391
#define TGX_CONFIG_USE_FAST_INV_TRICK 1
392
#define TGX_CONFIG_USE_FMA_MATH 0
393
#define TGX_CONFIG_USE_FMA_MATH_MISC 1
394
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
395
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
396
#define TGX_CONFIG_INLINE __attribute__((always_inline))
397
#define TGX_CONFIG_INLINE_ZDIVIDE
398
#define TGX_CONFIG_NOINLINE
399
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
400
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
401
402
#elif defined(__ARM_ARCH_8M_MAIN__)
403
// generic Cortex-M33 (use same setting as RP2350)
404
#define TGX_RUN_ON_RP2350
405
#define TGX_CONFIG_HAS_FPU TGX_COMPILER_HAS_FPU
406
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 4096
407
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 1
408
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 1
409
#define TGX_CONFIG_USE_FAST_INV_TRICK 1
410
#define TGX_CONFIG_USE_FMA_MATH 0
411
#define TGX_CONFIG_USE_FMA_MATH_MISC 1
412
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 1
413
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
414
#define TGX_CONFIG_INLINE __attribute__((always_inline))
415
#define TGX_CONFIG_INLINE_ZDIVIDE __attribute__((always_inline))
416
#define TGX_CONFIG_NOINLINE
417
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
418
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE
419
420
#else
421
// unknown board/architecture
422
#define TGX_RUN_ON_CPU
423
#define TGX_CONFIG_HAS_FPU 1
424
#define TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE 1024
425
#define TGX_CONFIG_USE_FAST_INV_SQRT_TRICK 0
426
#define TGX_CONFIG_USE_FAST_SQRT_TRICK 0
427
#define TGX_CONFIG_USE_FAST_INV_TRICK 0
428
#define TGX_CONFIG_USE_FMA_MATH 0
429
#define TGX_CONFIG_USE_FMA_MATH_MISC 0
430
#define TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS 0
431
#define TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS 0
432
#define TGX_CONFIG_INLINE
433
#define TGX_CONFIG_INLINE_ZDIVIDE
434
#define TGX_CONFIG_NOINLINE
435
#define TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
436
#define TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE TGX_INLINE
437
#endif
438
439
440
// Apply board defaults unless the user supplied an explicit TGX_* override.
441
#ifndef TGX_HAS_FPU
442
#define TGX_HAS_FPU TGX_CONFIG_HAS_FPU
443
#endif
444
445
#ifndef TGX_PROGMEM_DEFAULT_CACHE_SIZE
446
#define TGX_PROGMEM_DEFAULT_CACHE_SIZE TGX_CONFIG_PROGMEM_DEFAULT_CACHE_SIZE
447
#endif
448
449
#ifndef TGX_USE_FAST_INV_SQRT_TRICK
450
#define TGX_USE_FAST_INV_SQRT_TRICK TGX_CONFIG_USE_FAST_INV_SQRT_TRICK
451
#endif
452
453
#ifndef TGX_USE_FAST_SQRT_TRICK
454
#define TGX_USE_FAST_SQRT_TRICK TGX_CONFIG_USE_FAST_SQRT_TRICK
455
#endif
456
457
#ifndef TGX_USE_FAST_INV_TRICK
458
#define TGX_USE_FAST_INV_TRICK TGX_CONFIG_USE_FAST_INV_TRICK
459
#endif
460
461
#ifndef TGX_USE_FMA_MATH
462
#define TGX_USE_FMA_MATH TGX_CONFIG_USE_FMA_MATH
463
#endif
464
465
#ifndef TGX_USE_FMA_MATH_MISC
466
#define TGX_USE_FMA_MATH_MISC TGX_CONFIG_USE_FMA_MATH_MISC
467
#endif
468
469
#ifndef TGX_SHADER_USE_INCREMENTAL_PIXEL_POINTERS
470
#define TGX_SHADER_USE_INCREMENTAL_PIXEL_POINTERS TGX_CONFIG_SHADER_USE_INCREMENTAL_PIXEL_POINTERS
471
#endif
472
473
#ifndef TGX_DRAWSPHERE_USE_STRIP_BANDS
474
#define TGX_DRAWSPHERE_USE_STRIP_BANDS TGX_CONFIG_DRAWSPHERE_USE_STRIP_BANDS
475
#endif
476
477
#ifndef TGX_INLINE
478
#define TGX_INLINE TGX_CONFIG_INLINE
479
#endif
480
481
#ifndef TGX_INLINE_ZDIVIDE
482
#define TGX_INLINE_ZDIVIDE TGX_CONFIG_INLINE_ZDIVIDE
483
#endif
484
485
#ifndef TGX_NOINLINE
486
#define TGX_NOINLINE TGX_CONFIG_NOINLINE
487
#endif
488
489
#ifndef TGX_RASTERIZE_TRIANGLE_INLINE
490
#ifdef TGX_CONFIG_RASTERIZE_TRIANGLE_INLINE
491
#define TGX_RASTERIZE_TRIANGLE_INLINE TGX_CONFIG_RASTERIZE_TRIANGLE_INLINE
492
#else
493
#define TGX_RASTERIZE_TRIANGLE_INLINE TGX_INLINE
494
#endif
495
#endif
496
497
#ifndef TGX_UBER_SHADER_INLINE
498
#define TGX_UBER_SHADER_INLINE TGX_INLINE
499
#endif
500
501
#ifndef TGX_SHADER_SELECT_INLINE
502
#define TGX_SHADER_SELECT_INLINE TGX_INLINE
503
#endif
504
505
#ifndef TGX_RENDERER3D_SHADING_INLINE
506
#define TGX_RENDERER3D_SHADING_INLINE TGX_INLINE
507
#endif
508
509
#ifndef TGX_RENDERER3D_CLIP_NOINLINE
510
#define TGX_RENDERER3D_CLIP_NOINLINE TGX_CONFIG_RENDERER3D_CLIP_NOINLINE
511
#endif
512
513
#ifndef TGX_BSEG_RUNTIME_MOVE_INLINE
514
#define TGX_BSEG_RUNTIME_MOVE_INLINE TGX_CONFIG_BSEG_RUNTIME_MOVE_INLINE
515
#endif
516
517
#if defined(ESP32) || defined(ESP_PLATFORM)
518
#include "esp_attr.h"
519
#define TGX_HOT_IRAM IRAM_ATTR
520
#else
521
#define TGX_HOT_IRAM
522
#endif
523
524
525
526
527
532
#ifndef TGX_SHADER_GOURAUD_TEXTURE_FLOAT_INCREMENTAL
533
#if TGX_HAS_FPU
534
#define TGX_SHADER_GOURAUD_TEXTURE_FLOAT_INCREMENTAL 1
535
#else
// disable incremental float computation for Gouraud shading on architectures without FPU
536
#define TGX_SHADER_GOURAUD_TEXTURE_FLOAT_INCREMENTAL 0
537
#endif
538
#endif
539
540
#ifndef TGX_SHADER_GOURAUD_RGB565_FLOAT_INCREMENTAL
541
#if TGX_HAS_FPU
542
#define TGX_SHADER_GOURAUD_RGB565_FLOAT_INCREMENTAL 1
543
#else
// disable incremental float computation for Gouraud shading on architectures without FPU
544
#define TGX_SHADER_GOURAUD_RGB565_FLOAT_INCREMENTAL 0
545
#endif
546
#endif
547
548
#ifndef TGX_SHADER_RGB565_FAST_TEXTURE_MODULATE
549
#define TGX_SHADER_RGB565_FAST_TEXTURE_MODULATE 1
550
#endif
551
552
#ifndef TGX_SHADER_RGB565_FAST_BILINEAR
553
#define TGX_SHADER_RGB565_FAST_BILINEAR 1
554
#endif
555
556
#ifndef TGX_SHADER_RGB565_FAST_CLAMP
557
#define TGX_SHADER_RGB565_FAST_CLAMP 0
558
#endif
559
560
561
562
563
564
565
570
#ifndef TGX_SINGLE_PRECISION_COMPUTATIONS
571
#define TGX_SINGLE_PRECISION_COMPUTATIONS 1
572
#endif
573
574
579
#define TGX_DEFAULT_NO_BLENDING -1.0f
580
581
586
#ifndef TGX_MESHLET_SPHERE_CLIP
587
#define TGX_MESHLET_SPHERE_CLIP 1
588
#endif
589
594
#ifndef TGX_MESHLET_WIREFRAME_CULL
595
#define TGX_MESHLET_WIREFRAME_CULL 1
596
#endif
597
598
src
tgx_config.h
Generated by
1.9.5