22#ifndef _TGX_RENDERER3D_FLASH_H_
23#define _TGX_RENDERER3D_FLASH_H_
30#if defined(TGX_RUN_ON_TEENSY4) && defined(TEENSYDUINO)
34namespace Renderer3D_detail
43 template<
typename color_t, Shader LOADED_SHADERS,
typename ZBUFFER_t,
int MAX_DIRECTIONAL_LIGHTS,
int MAX_SPOT_LIGHTS>
46 typedef color_t color_type;
52 #define TGX_RENDERER3D_FLASH_SECTION(NAME) __attribute__((section(".flashmem.tgx.renderer3d." NAME)))
54 #define TGX_RENDERER3D_FLASH_CAT_(A, B) A##B
55 #define TGX_RENDERER3D_FLASH_CAT(A, B) TGX_RENDERER3D_FLASH_CAT_(A, B)
63 #define TGX_RENDERER3D_FLASH_SPHERE_CORE_PATH(RENDERER3D_OBJECT) \
64 TGX_RENDERER3D_FLASH_SPHERE_CORE_PATH_(RENDERER3D_OBJECT, TGX_RENDERER3D_FLASH_CAT(_tgx_renderer3d_flash_sphere_, __LINE__))
66 #define TGX_RENDERER3D_FLASH_SPHERE_CORE_PATH_(RENDERER3D_OBJECT, RENDERER_T) \
68 typedef typename ::tgx::Renderer3D_detail::RemoveReference<decltype(RENDERER3D_OBJECT)>::type RENDERER_T; \
69 typedef typename ::tgx::Renderer3D_detail::Renderer3DFlashTraits<RENDERER_T>::color_type TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t); \
70 template TGX_RENDERER3D_FLASH_SECTION("sphere") void RENDERER_T::drawSphere(int, int); \
71 template TGX_RENDERER3D_FLASH_SECTION("sphere") void RENDERER_T::drawSphere(int, int, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*); \
72 template TGX_RENDERER3D_FLASH_SECTION("sphere") void RENDERER_T::drawAdaptativeSphere(float); \
73 template TGX_RENDERER3D_FLASH_SECTION("sphere") void RENDERER_T::drawAdaptativeSphere(const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, float); \
74 template TGX_RENDERER3D_FLASH_SECTION("sphere") void RENDERER_T::_drawSphere<false, Renderer3D_detail::WIREFRAME_FAST>(int, int, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, float, TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t), float); \
77 #if TGX_DRAWSPHERE_USE_STRIP_BANDS
78 #define TGX_RENDERER3D_FLASH_SPHERE_STRIP_PATH(RENDERER3D_OBJECT) \
79 TGX_RENDERER3D_FLASH_SPHERE_STRIP_PATH_(RENDERER3D_OBJECT, TGX_RENDERER3D_FLASH_CAT(_tgx_renderer3d_flash_sphere_strip_, __LINE__))
81 #define TGX_RENDERER3D_FLASH_SPHERE_STRIP_PATH_(RENDERER3D_OBJECT, RENDERER_T) \
83 typedef typename ::tgx::Renderer3D_detail::RemoveReference<decltype(RENDERER3D_OBJECT)>::type RENDERER_T; \
84 template TGX_RENDERER3D_FLASH_SECTION("sphere") void RENDERER_T::_drawSphereGouraudStripBand(const int, int, const float*, const float*, float, float, float, float, float, float, float, float, bool); \
85 template TGX_RENDERER3D_FLASH_SECTION("sphere") void RENDERER_T::_drawSphereGouraudCap(const int, int, bool, const float*, const float*, float, float, float, float, float, bool); \
88 #define TGX_PLACE_RENDERER3D_SPHERE_PATH_IN_FLASH(RENDERER3D_OBJECT) \
89 TGX_RENDERER3D_FLASH_SPHERE_CORE_PATH(RENDERER3D_OBJECT) \
90 TGX_RENDERER3D_FLASH_SPHERE_STRIP_PATH(RENDERER3D_OBJECT)
92 #define TGX_PLACE_RENDERER3D_SPHERE_PATH_IN_FLASH(RENDERER3D_OBJECT) \
93 TGX_RENDERER3D_FLASH_SPHERE_CORE_PATH(RENDERER3D_OBJECT)
104 #define TGX_PLACE_RENDERER3D_TRUNCATED_CONE_PATH_IN_FLASH(RENDERER3D_OBJECT) \
105 TGX_PLACE_RENDERER3D_TRUNCATED_CONE_PATH_IN_FLASH_(RENDERER3D_OBJECT, TGX_RENDERER3D_FLASH_CAT(_tgx_renderer3d_flash_cone_, __LINE__))
107 #define TGX_PLACE_RENDERER3D_TRUNCATED_CONE_PATH_IN_FLASH_(RENDERER3D_OBJECT, RENDERER_T) \
109 typedef typename ::tgx::Renderer3D_detail::RemoveReference<decltype(RENDERER3D_OBJECT)>::type RENDERER_T; \
110 typedef typename ::tgx::Renderer3D_detail::Renderer3DFlashTraits<RENDERER_T>::color_type TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t); \
111 template TGX_RENDERER3D_FLASH_SECTION("truncatedcone") void RENDERER_T::drawCylinder(int, bool, bool); \
112 template TGX_RENDERER3D_FLASH_SECTION("truncatedcone") void RENDERER_T::drawCylinder(int, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, bool, bool); \
113 template TGX_RENDERER3D_FLASH_SECTION("truncatedcone") void RENDERER_T::drawCone(int, bool); \
114 template TGX_RENDERER3D_FLASH_SECTION("truncatedcone") void RENDERER_T::drawCone(int, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, bool); \
115 template TGX_RENDERER3D_FLASH_SECTION("truncatedcone") void RENDERER_T::drawTruncatedCone(int, float, float, bool, bool); \
116 template TGX_RENDERER3D_FLASH_SECTION("truncatedcone") void RENDERER_T::drawTruncatedCone(int, float, float, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, bool, bool); \
117 template TGX_RENDERER3D_FLASH_SECTION("truncatedcone") void RENDERER_T::_drawTruncatedCone(int, float, float, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, const Image<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, bool, bool); \
118 template TGX_RENDERER3D_FLASH_SECTION("truncatedcone") void RENDERER_T::_drawTruncatedConeGouraudCachedTriangle(const int, typename RENDERER_T::ExtVec4&, fVec3&, typename RENDERER_T::ExtVec4&, fVec3&, typename RENDERER_T::ExtVec4&, fVec3&, bool, bool, float, bool); \
119 template TGX_RENDERER3D_FLASH_SECTION("truncatedcone") void RENDERER_T::_drawTruncatedConeGouraudSideStrip(const int, int, float, float, const float*, const float*, float, float, float, float, bool); \
120 template TGX_RENDERER3D_FLASH_SECTION("truncatedcone") void RENDERER_T::_drawTruncatedConeGouraudConeFan(const int, int, bool, float, const float*, const float*, float, float, float, float, bool); \
121 template TGX_RENDERER3D_FLASH_SECTION("truncatedcone") void RENDERER_T::_drawTruncatedConeGouraudCapFan(const int, int, bool, float, const float*, const float*, float, bool); \
131 #define TGX_PLACE_RENDERER3D_MESH3D_PATH_IN_FLASH(RENDERER3D_OBJECT) \
132 TGX_PLACE_RENDERER3D_MESH3D_PATH_IN_FLASH_(RENDERER3D_OBJECT, TGX_RENDERER3D_FLASH_CAT(_tgx_renderer3d_flash_mesh3d_, __LINE__))
134 #define TGX_PLACE_RENDERER3D_MESH3D_PATH_IN_FLASH_(RENDERER3D_OBJECT, RENDERER_T) \
136 typedef typename ::tgx::Renderer3D_detail::RemoveReference<decltype(RENDERER3D_OBJECT)>::type RENDERER_T; \
137 typedef typename ::tgx::Renderer3D_detail::Renderer3DFlashTraits<RENDERER_T>::color_type TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t); \
138 template TGX_RENDERER3D_FLASH_SECTION("mesh3d") void RENDERER_T::drawMesh(const Mesh3D<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, bool, bool); \
139 template TGX_RENDERER3D_FLASH_SECTION("mesh3d") void RENDERER_T::_drawMesh(const int, const Mesh3D<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*); \
150 #define TGX_PLACE_RENDERER3D_MESH3DV2_PATH_IN_FLASH(RENDERER3D_OBJECT) \
151 TGX_PLACE_RENDERER3D_MESH3DV2_PATH_IN_FLASH_(RENDERER3D_OBJECT, TGX_RENDERER3D_FLASH_CAT(_tgx_renderer3d_flash_mesh3dv2_, __LINE__))
153 #define TGX_PLACE_RENDERER3D_MESH3DV2_PATH_IN_FLASH_(RENDERER3D_OBJECT, RENDERER_T) \
155 typedef typename ::tgx::Renderer3D_detail::RemoveReference<decltype(RENDERER3D_OBJECT)>::type RENDERER_T; \
156 typedef typename ::tgx::Renderer3D_detail::Renderer3DFlashTraits<RENDERER_T>::color_type TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t); \
157 template TGX_RENDERER3D_FLASH_SECTION("mesh3dv2") void RENDERER_T::_drawMesh(const int, const Mesh3Dv2<TGX_RENDERER3D_FLASH_CAT(RENDERER_T, _color_t)>*, bool); \
162 #define TGX_PLACE_RENDERER3D_SPHERE_PATH_IN_FLASH(RENDERER3D_OBJECT)
163 #define TGX_PLACE_RENDERER3D_TRUNCATED_CONE_PATH_IN_FLASH(RENDERER3D_OBJECT)
164 #define TGX_PLACE_RENDERER3D_MESH3D_PATH_IN_FLASH(RENDERER3D_OBJECT)
165 #define TGX_PLACE_RENDERER3D_MESH3DV2_PATH_IN_FLASH(RENDERER3D_OBJECT)
Class for drawing 3D objects onto a Image [MAIN CLASS FOR THE 3D API].
Definition: Renderer3D.h:120
Definition: Renderer3DFlash.h:37
Definition: Renderer3DFlash.h:41
Configuration file depending on the architecture.