*/}}

la_tns.h 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510
  1. /*
  2. * LaGUI: A graphical application framework.
  3. * Copyright (C) 2022-2023 Wu Yiming
  4. *
  5. * This program is free software: you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation, either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. #pragma once
  19. #include "la_5.h"
  20. #include <nanovg.h>
  21. //#include "tinycthread.h"
  22. #include <float.h>
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26. extern const char* TNS_SHADER_COLOR_COMMON;
  27. extern const char* TNS_VERTEX_SIMPLE_MATCAP;
  28. extern const char* TNS_FRAGMENT_SIMPLE_MATCAP;
  29. extern const char* TNS_VERTEX_GRID;
  30. extern const char* TNS_FRAGMENT_TRANSPARNT_GRID;
  31. extern const char* LA_FLOOR_VERTEX_SHADER;
  32. extern const char* LA_FLOOR_FRAGMENT_SHADER;
  33. extern const char* LA_IMM_VERTEX_SHADER;
  34. extern const char* LA_IMM_FRAGMENT_SHADER;
  35. extern const char* LA_OBJECT_FRAGMENT_SHADER;
  36. extern const char* LA_RAY_VERTEX_SHADER;
  37. extern const char* LA_SHADER_LIB_FXAA;
  38. extern const char* LA_RAY_FRAGMENT_SHADER;
  39. extern const char* LA_SCENE_VERTEX_SHADER;
  40. extern const char* LA_SCENE_FRAGMENT_SHADER;
  41. extern const char* LA_CASCADE_SHADOW_VERTEX_SHADER;
  42. extern const char* LA_CASCADE_SHADOW_FRAGMENT_SHADER;
  43. extern const char* LA_SELECTION_VERTEX_SHADER;
  44. extern const char* LA_SELECTION_FRAGMENT_SHADER;
  45. #ifdef __cplusplus
  46. }
  47. #endif
  48. #define TNS_PI 3.1415926535897932384626433832795
  49. #define deg(r) ((r) / TNS_PI * 180.0)
  50. #define rad(d) ((d) *TNS_PI / 180.0)
  51. #define TNS_COLOR_SPACE_SRGB 0
  52. #define TNS_COLOR_SPACE_CLAY 1
  53. //typedef real tnsMatrix33d[9];
  54. typedef float tnsMatrix44f[16];
  55. typedef real tnsMatrix44d[16];
  56. typedef real tnsVector2d[2];
  57. typedef real tnsVector3d[3];
  58. typedef real tnsVector4d[4];
  59. typedef float tnsVector3f[3];
  60. typedef int tnsVector2i[2];
  61. typedef struct _tnsMatrixStackItem tnsMatrixStackItem;
  62. struct _tnsMatrixStackItem
  63. {
  64. tnsMatrix44d view;
  65. tnsMatrix44d model;
  66. tnsMatrix44d projection;
  67. };
  68. typedef struct _tnsMatrixStack tnsMatrixStack;
  69. struct _tnsMatrixStack
  70. {
  71. tnsMatrixStackItem *level;
  72. int current_level;
  73. int max_level;
  74. };
  75. typedef struct _tnsShader tnsShader;
  76. struct _tnsShader{
  77. laListItem Item;
  78. int vtShaderID;
  79. int fgShaderID;
  80. int gsShaderID;
  81. int glProgramID;
  82. int CustomID;
  83. int iModel, iProjection, iView, iProjectionInverse;
  84. int iShadow;
  85. int iVertex, iNormal, iColor, iUV;
  86. int iUseNormal;
  87. int iTexColor,iTexNormal,iTexGPos;
  88. int iTexColorMS;
  89. int iMultiplyColor, StateMultiplyColor;
  90. int iTextureMode, StateTextureMode, iColorMode,iHCYGamma;
  91. int iSampleAmount, StateSampleAmount;
  92. int iInputColorSpace, iOutputColorSpace, iShowStripes;
  93. int iComposing, iComposingGamma, iComposingBlackpoint;
  94. int iDoOffset;
  95. int iUseHalftone,iHalftoneSize;
  96. int uViewDir,uViewPos,uFOV,uNear,uFar;
  97. };
  98. typedef struct _tnsTexture tnsTexture;
  99. STRUCTURE(tnsCommand){
  100. GLenum Mode;
  101. short Dimensions; // 2 or 3
  102. short UVDimensions; // 2 or 3
  103. char UseVert;
  104. char UseColor;
  105. char UseNormal;
  106. char UseTexCoord;
  107. char UseIndex;
  108. GLenum PolyMode; //0-solid 1-wire
  109. GLenum Shade; //0-falt 1-smooth
  110. GLfloat UniformColor[4];
  111. real UseHalftone;
  112. int NumVert;
  113. int NumIndex;
  114. int VertBegin;
  115. int VertEnd; //'END'is the next one after the last one.
  116. int ColorBegin;
  117. int ColorEnd;
  118. int TexCoordBegin;
  119. int TexCoordEnd;
  120. int NormalBegin;
  121. int NormalEnd;
  122. GLushort IndexBegin;
  123. GLushort IndexEnd;
  124. tnsShader *ReplaceShader;
  125. tnsTexture *ColorTexture;
  126. int TextureMode;
  127. int MultiplyColor;
  128. GLfloat LineWidth,PointSize;
  129. };
  130. typedef struct _tnsMain tnsMain;
  131. typedef struct _tnsWorld tnsWorld;
  132. typedef struct _tnsObject tnsObject;
  133. struct _tnsWorld
  134. {
  135. laListItem Item;
  136. laListHandle RootObjects;
  137. tnsObject *ActiveRoot;
  138. laListHandle AllObjects;
  139. laListHandle Materials;
  140. laSafeString* MaterialLibraries;
  141. int PropertyPage;
  142. u16bit TimeYear;
  143. u8bit TimeMonth;
  144. u8bit TimeDay;
  145. laListHandle BezierCurves;
  146. laListHandle Meshes;
  147. };
  148. NEED_STRUCTURE(tnsLoopItem);
  149. NEED_STRUCTURE(tnsRenderLine);
  150. NEED_STRUCTURE(tnsRenderBuffer);
  151. NEED_STRUCTURE(tnsEvaluatedNode);
  152. STRUCTURE(tnsImage){
  153. laListItem Item;
  154. void* MemPNG;
  155. tnsTexture* Texture;
  156. int UserCount;
  157. };
  158. struct _tnsMain {
  159. laListItem Item;
  160. tnsMatrixStack stack;
  161. int vsx,vsy,vsw,vsh;//for saving scissor etc.
  162. int vol,vor,vou,vob;//for saving ortho etc.
  163. laListHandle Shaders;
  164. int NextShaderIndex;
  165. tnsShader *CurrentShader;
  166. tnsShader *BindedShader;
  167. GLuint CurrentVAO;
  168. SYSGLCONTEXT CurrentContext;
  169. #ifdef LA_USE_GLES
  170. EGLSurface CurrentSurface;
  171. #endif
  172. #ifdef _WIN32
  173. SYSTEMDC CurrentDC;
  174. #endif
  175. #ifdef __linux__
  176. SYSWINDOW CurrentWindow;
  177. #endif
  178. //int MatrixMode;
  179. int IsOffscreen;
  180. laListHandle Offscreens;
  181. char *GLVersionStr;
  182. char *GLVendorStr;
  183. char *GLRendererStr;
  184. char *GLSLVersionStr;
  185. tnsShader* immShader;
  186. tnsShader* RayShader;
  187. tnsShader* ShadowShader;
  188. tnsShader* SceneShader;
  189. tnsShader* SelectionShader;
  190. tnsShader* FloorShader;
  191. tnsShader *uiShader;
  192. tnsShader *stringShader;
  193. tnsShader *TextureShader;
  194. tnsShader *RectangleTextureShader;
  195. tnsShader *TextureMultiplyShader;
  196. tnsShader *MSTextureShader;
  197. tnsShader *MSATextureShader;
  198. tnsShader *TEST_MatcapShader;
  199. tnsShader *TransparentGridShader;
  200. tnsShader *SobelColorShader;
  201. tnsShader *SobelShader;
  202. tnsShader *ExtraBuffersShader;
  203. laListHandle Textures;
  204. tnsTexture *PreviewTexture;
  205. GLenum GlTextureSets;
  206. // Corresponds to current GL_TEXTURE0/1...
  207. tnsTexture *TexColor;
  208. tnsTexture *TexRenderbuffer;
  209. // For commands
  210. tnsTexture *StateTexColor;
  211. int StateTextureMode;
  212. int StateMultiplyColor;
  213. int StateUseNormal;
  214. int SetUseNormal;
  215. real StateUseHalftone;
  216. real SetUseHalftone;
  217. real SetHalftoneSize;
  218. float SetViewPos[3];
  219. float SetViewDir[3];
  220. tnsShader* StateShader;
  221. GLfloat StateColor[4];
  222. GLfloat StateLineWidth,SetLineWidth;
  223. GLfloat StatePointSize,SetPointSize;
  224. GLfloat* Vert;
  225. GLuint VertBufObject;
  226. int NextVert, MaxVert;
  227. GLfloat* Color;
  228. GLuint ColorBufObject;
  229. int NextColor, MaxColor;
  230. GLfloat* Normal;
  231. GLuint NormalBufObject;
  232. int NextNormal, MaxNormal;
  233. GLfloat* TexCoord;
  234. GLuint TexCoordBufObject;
  235. int NextTexCoord, MaxTexCoord;
  236. GLuint* Index;
  237. GLuint IndexBufObject;
  238. int NextIndex, MaxIndex;
  239. tnsCommand* DrawingCommand;
  240. int NextCommand, MaxCommand;
  241. tnsWorld* World;
  242. laListHandle RenderBuffers;
  243. tnsRenderBuffer *ActiveRenderBuffer;
  244. laListHandle Images;
  245. struct Runtime{
  246. tnsEvaluatedNode* CurrentEN;
  247. }Runtime;
  248. };
  249. typedef struct _tnsTexture tnsTexture;
  250. struct _tnsTexture
  251. {
  252. laListItem Item;
  253. int IsRenderBuffer;
  254. GLuint GLTexHandle;
  255. GLint GLTexBitsType; //like GL_RGBA
  256. GLuint GLTexType; //like GL_TEXTURE_2D
  257. int Multisample;
  258. int Width;
  259. int Height;
  260. int Slices;
  261. void *DrawData;
  262. int RBWidth, RBHeight;
  263. int ElemSize;
  264. void *TextureReadBack;
  265. void **SamplePtr;
  266. laListHandle PendingSamples;
  267. laListHandle ErasedSamples;
  268. laListHandle LineStrips;
  269. };
  270. typedef struct _tnsOffscreen tnsOffscreen;
  271. struct _tnsOffscreen
  272. {
  273. laListItem Item;
  274. tnsTexture *pColor[16];
  275. tnsTexture *pDepth;
  276. GLuint FboHandle;
  277. SYSGLCONTEXT FboContext;
  278. #ifdef LA_USE_GLES
  279. EGLSurface FboSurface;
  280. #endif
  281. #ifdef _WIN32
  282. SYSTEMDC FboDC;
  283. #endif
  284. #ifdef __linux__
  285. SYSWINDOW FboWindow;
  286. #endif
  287. int UseSecondary;
  288. };
  289. extern const GLuint TNS_ATTACHMENT_ARRAY_NONE[];
  290. extern const GLuint TNS_ATTACHMENT_ARRAY[];
  291. extern const GLuint TNS_ATTACHMENT_ARRAY_1[];
  292. extern const GLuint TNS_ATTACHMENT_ARRAY_2[];
  293. extern const GLuint TNS_ATTACHMENT_ARRAY_1_2[];
  294. extern const GLuint TNS_ATTACHMENT_ARRAY_0_1_2[];
  295. extern const GLenum TNS_WINDOW_DRAWBUFFER_ARRAY[];
  296. #define TNS_PROJECTION_MATRIX 1
  297. #define TNS_MODEL_MATRIX 2
  298. #define TNS_VIEW_MATRIX 3
  299. #define TNS_TEXTURE_MATRIX 4
  300. //==========================================================================[FT]
  301. #include "freetype/ftglyph.h"
  302. #include "freetype/ftoutln.h"
  303. #include "freetype/fttrigon.h"
  304. #include "ft2build.h"
  305. #include <stdarg.h>
  306. #include <stdlib.h>
  307. #include <string.h>
  308. NEED_STRUCTURE(tnsTexture);
  309. typedef struct _tnsFontSingleCharacter tnsFontSingleCharacter;
  310. struct _tnsFontSingleCharacter
  311. {
  312. tnsTexture *Tex;
  313. int Generated;
  314. short width;
  315. short height;
  316. real advx;
  317. short advy;
  318. short deltax;
  319. short deltay;
  320. short bufferx;
  321. short buffery;
  322. };
  323. #define TNS_UNICODE_COUNT ((unsigned int)(1<<17))
  324. #define TNS_MONO_COUNT (0x045f)
  325. typedef struct _tnsFont tnsFont;
  326. struct _tnsFont
  327. {
  328. laListItem Item;
  329. char *fontName;
  330. char *IconFontName;
  331. tnsFontSingleCharacter** characters; /* [(1<<17)] TNS_UNICODE_COUNT Unicode plane 0-1 */
  332. tnsFontSingleCharacter** monocharacters; /* [0x045f] TNS_MONO_COUNT Up to cryllic. */
  333. FT_Library ftlib;
  334. FT_Face ftface[16];
  335. FT_Face ftfacemono;
  336. int NumFaces;/* excludes mono. */
  337. real MonoScale;
  338. real MonoAdvance;
  339. real size;
  340. unsigned int height;
  341. tnsTexture TexBuffer;
  342. int CurrentX;
  343. int CurrentY;
  344. };
  345. typedef struct _tnsStringClip tnsStringClip;
  346. struct _tnsStringClip{
  347. laListItem Item;
  348. int L,R,U,B;
  349. };
  350. typedef struct _tnsFontManager tnsFontManager;
  351. struct _tnsFontManager
  352. {
  353. laListHandle Fonts;
  354. tnsFont *UsingFont;
  355. tnsFont *VectorsGrapghs;
  356. int BufferWidth;
  357. unsigned LastDlst;
  358. laListHandle StringClips;
  359. int L,R,U,B;
  360. };
  361. typedef struct _tnsFontBoundBox tnsFontBoundBox;
  362. struct _tnsFontBoundBox
  363. {
  364. int x, y, w, h; /* Upper Left and width,height */
  365. };
  366. #define TNS_FONT_BUFFER_W_DEFAULT 512
  367. //=====================================================[3d comp]
  368. typedef struct _tnsWorld tnsWorld;
  369. typedef struct _tnsObject tnsObject;
  370. #define TNS_ROTATION_XYZ_EULER 0
  371. #define TNS_ROTATION_XZY_EULER 1
  372. #define TNS_ROTATION_YXZ_EULER 2
  373. #define TNS_ROTATION_YZX_EULER 3
  374. #define TNS_ROTATION_ZXY_EULER 4
  375. #define TNS_ROTATION_ZYX_EULER 5
  376. #define TNS_ROTATION_QUATERNION 6
  377. #define TNS_OBJECT_ROOT 0
  378. #define TNS_OBJECT_INSTANCER (1<<0)
  379. #define TNS_OBJECT_CAMERA (1<<1)
  380. #define TNS_OBJECT_LIGHT (1<<2)
  381. #define TNS_OBJECT_MESH (1<<3)
  382. #define TNS_OBJECT_SHAPE (1<<4)
  383. #define TNS_OBJECT_FLAGS_SELECTED (1<<0)
  384. #define TNS_OBJECT_FLAGS_PLAY_DUPLICATE (1<<1)
  385. NEED_STRUCTURE(tnsBatch)
  386. #define TNS_EVAL_LAYER_SOLID (1<<0)
  387. #define TNS_EVAL_LAYER_OVERLAY (1<<1)
  388. #define TNS_EVAL_LAYER_OUTLINE (1<<2)
  389. #define TNS_EVAL_LAYER_SELECTION (1<<3)
  390. #define TNS_EVAL_LAYER_NO_2D (1<<4)
  391. #define TNS_EVAL_LAYER_BACKDROP (1<<5)
  392. #define TNS_EVAL_LAYER_SHOW_2D (1<<6)
  393. #define TNS_EVAL_MODE_INIT (1<<0)
  394. #define TNS_EVAL_MODE_ALWAYS (1<<1)
  395. #define TNS_EvAL_MODE_DEINIT (1<<2)
  396. NEED_STRUCTURE(tnsEvaluatedInstance);
  397. typedef void (*tnsDrawEvaluatedInstanceF)(tnsEvaluatedInstance* ei, void* CustomData);
  398. NEED_STRUCTURE(laActionRetarget);
  399. STRUCTURE(tnsEvaluatedNode){
  400. laListItem Item;
  401. tnsMatrix44d Mat;
  402. tnsObject* Target;
  403. laActionRetarget* ActionRetarget;
  404. laListHandle Children;
  405. int LuaID, LuaLoaded;
  406. };
  407. STRUCTURE(tnsEvaluatedScene){
  408. int NextLuaID;
  409. laListHandle WastedEvaluateNodes;
  410. tnsEvaluatedNode* Root;
  411. tnsEvaluatedNode* CurrentParent;
  412. tnsEvaluatedNode* CurrentChild;
  413. };
  414. STRUCTURE(tnsEvaluatedInstance){
  415. tnsObject *Object;
  416. tnsMatrix44d Mat;
  417. int IsActive;
  418. int MeshSelectionType;
  419. int InstanceSelectionID;
  420. int DrawnIn2D;
  421. tnsDrawEvaluatedInstanceF Draw;
  422. };
  423. STRUCTURE(tnsEvaluateData){
  424. int Done;
  425. int SceneEvaluateMode;
  426. tnsObject *Active;
  427. int FillOutline;
  428. int FillSelectionID;
  429. int OverrideID;
  430. int State2D,Has2D; int W,H;
  431. laListHandle ParentStack;
  432. tnsEvaluatedInstance* Backdrop; int NextBackdrop, MaxBackdrop;
  433. tnsEvaluatedInstance* Commands; int NextCommand, MaxCommand;
  434. tnsEvaluatedInstance* Outlines; int NextOutline, MaxOutline;
  435. tnsEvaluatedInstance* Overlays; int NextOverlay, MaxOverlay;
  436. tnsEvaluatedInstance* Selections; int NextSelection, MaxSelection;
  437. tnsMatrix44d* MatArr; int NextMat, MaxMat;
  438. tnsEvaluatedScene* Scene;
  439. #ifdef LA_WITH_LUAJIT
  440. lua_State* L;
  441. #endif
  442. };
  443. NEED_STRUCTURE(laRackPageCollection);
  444. NEED_STRUCTURE(tnsMaterial);
  445. STRUCTURE(tnsObject){
  446. laListItem Item;
  447. int Type;
  448. int SelectID;
  449. int Flags;
  450. //u64bit ID;
  451. laSafeString *Name;
  452. int DrawMode;
  453. int Show;
  454. int ShowOnRender;
  455. int HideChildren;
  456. int RotationMode;
  457. int IsInstanced;
  458. real GLocation[3]; real GRotation[3]; real GScale[3];
  459. real Location[3]; real Rotation[4]; real Scale[3];
  460. // delta transforms for animation & drivers.
  461. real DLocation[3]; real DRotation[3]; real DScale[3];
  462. tnsMatrix44d GlobalTransform;
  463. tnsMatrix44d SelfTransform;
  464. tnsMatrix44d DeltaTransform;
  465. tnsObject *Active; // may be used to store last select info in child objects.
  466. tnsObject *InRoot;
  467. tnsObject *ParentObject; // reused as root active sun.
  468. laListHandle ChildObjects;
  469. laRackPageCollection* Drivers; // rack
  470. tnsEvaluateData Evaluated; // runtime
  471. tnsEvaluateData EvaluatedPlay; int LuaCacheID;
  472. tnsObject* PlayDuplicate;
  473. tnsObject* EditDuplicateTemp;
  474. };
  475. NEED_STRUCTURE(laNodeInSocket);
  476. NEED_STRUCTURE(laNodeOutSocket);
  477. NEED_STRUCTURE(laAction);
  478. #define TNS_PAGE_TRIGGER_PROCESS 0
  479. #define TNS_PAGE_TRIGGER_KEYBOARD 1
  480. #define TNS_PAGE_TRIGGER_MOUSE 2
  481. #define TNS_PAGE_TRIGGER_CONTROLLER 3
  482. STRUCTURE(tnsTransformNode){
  483. laBaseNode Base;
  484. laNodeInSocket* Mat;
  485. tnsObject* Target;
  486. };
  487. STRUCTURE(tnsMakeTransformNode){
  488. laBaseNode Base;
  489. laNodeInSocket* Loc; laNodeInSocket* Rot; laNodeInSocket* Angle; laNodeInSocket* Sca;
  490. laNodeOutSocket* Out;
  491. tnsMatrix44d Mat; tnsVector3d UseLoc; tnsVector3d UseRot; real UseSca; real UseAngle;
  492. };
  493. STRUCTURE(tnsActionPlayerNode){
  494. laBaseNode Base;
  495. laNodeInSocket* Prev; laNodeOutSocket* Next;
  496. laNodeInSocket* Transport; int iTransport;
  497. laNodeInSocket* Time;
  498. laNodeInSocket* Detached; int iDetached;
  499. laAction* Action;
  500. };
  501. #define TNS_CAMERA_PERSP 0
  502. #define TNS_CAMERA_ORTHO 1
  503. #define TNS_ID_TO_COLOR(color, i) \
  504. {color[0]=(real)((i & 0x000000FF)>>0)/255.0; color[1]=(real)((i & 0x0000FF00)>>8)/255.0; color[2]=(real)((i & 0x00FF0000)>>16)/255.0;}
  505. #define TNS_GRADIENT_MODE_LINEAR 1
  506. #define TNS_GRADIENT_MODE_BOX 2
  507. #define TNS_GRADIENT_MODE_RADIAL 3
  508. STRUCTURE(tnsMaterial){
  509. laListItem Item;
  510. laSafeString *Name;
  511. real Color[4], Color2[4];
  512. int Colorful;
  513. int AsLibrary;
  514. laRackPage* Page;
  515. tnsShader* Shader;
  516. int GradientMode;
  517. tnsVector2d GradientCenter;
  518. tnsVector2d GradientSize;
  519. real GradientBoxR,GradientBoxF;
  520. };
  521. NEED_STRUCTURE(laActionRetarget);
  522. STRUCTURE(tnsRootObject){
  523. tnsObject Base;
  524. laListHandle Actions;
  525. laListHandle ActionProps;
  526. laActionRetarget* ActionRetarget;
  527. tnsObject* ActiveCamera;
  528. int Is2D;
  529. };
  530. #define TNS_INSTANCER_HOOK_TL 1
  531. #define TNS_INSTANCER_HOOK_TC 2
  532. #define TNS_INSTANCER_HOOK_TR 3
  533. #define TNS_INSTANCER_HOOK_CL 4
  534. #define TNS_INSTANCER_HOOK_CC 5
  535. #define TNS_INSTANCER_HOOK_CR 6
  536. #define TNS_INSTANCER_HOOK_BL 7
  537. #define TNS_INSTANCER_HOOK_BC 8
  538. #define TNS_INSTANCER_HOOK_BR 9
  539. STRUCTURE(tnsInstancer){
  540. tnsObject Base;
  541. tnsObject* Instance;
  542. int Hook; real HookOffset[2];
  543. };
  544. STRUCTURE(tnsCamera){
  545. tnsObject Base;
  546. int CameraType;
  547. real FOV;
  548. real ZMin, ZMax;
  549. real FocusDistance;
  550. real OrthScale;
  551. tnsVector3d RenderViewDir;
  552. };
  553. STRUCTURE(tnsLight){
  554. tnsObject Base;
  555. int LightType;
  556. int UniDirectional;
  557. real Strength;
  558. tnsMaterial *Material;
  559. };
  560. #define TNS_MESH_FLAG_SELECTED (1<<0)
  561. #define TNS_MESH_FLAG_PICKED (1<<1)
  562. #define TNS_MESH_FLAG_LOOP_REVERSE (1<<2)
  563. STRUCTURE(tnsMVert){
  564. laListItem Item;
  565. tnsVector3d p;
  566. tnsVector3d n;
  567. int flags;
  568. u32bit i;
  569. laListHandle elink;
  570. //laListHandle flink;
  571. };
  572. NEED_STRUCTURE(tnsMFace);
  573. STRUCTURE(tnsMEdge){
  574. laListItem Item;
  575. tnsMVert *vl;
  576. tnsMVert *vr;
  577. tnsMFace *fl;
  578. tnsMFace *fr;
  579. u32bit i;
  580. int flags;
  581. };
  582. STRUCTURE(tnsMFace){
  583. laListItem Item;
  584. laListHandle l; //list item pointer of edges
  585. tnsVector3d n;
  586. tnsVector3d c;
  587. short looplen;
  588. short mat;
  589. u32bit i;
  590. int flags;
  591. };
  592. STRUCTURE(tnsVert){
  593. tnsVector3f p;
  594. tnsVector3f n;
  595. int flags;
  596. };
  597. STRUCTURE(tnsEdge){
  598. int l,r;
  599. int flags;
  600. };
  601. STRUCTURE(tnsFace){
  602. int* loop;
  603. int flags;
  604. tnsVector3f n;
  605. short looplen;
  606. short mat;
  607. };
  608. STRUCTURE(tnsBatchCommand){
  609. laListItem Item;
  610. char* name;
  611. int DrawElements;
  612. GLuint EBO; //elem
  613. u32bit ElementCount;
  614. GLenum DrawAs;
  615. GLuint CBO; int ColorDimension; int OverrideColorArray;
  616. int Dimension;
  617. int HiddenByDefault;
  618. int UseUniformColor; real UniformColor[4];
  619. tnsMaterial* Material;
  620. real Width;
  621. };
  622. STRUCTURE(tnsBatch){
  623. laListItem Item;
  624. GLuint VBO; //vert
  625. GLuint NBO; int HasNormal; //normal
  626. GLuint CBO; int HasColor; //color
  627. u32bit NumVert;
  628. int Dimension;
  629. int NormalDimension;
  630. int ColorDimension;
  631. laListHandle Branches;
  632. GLuint BeginElementOffset;
  633. };
  634. #define TNS_MESH_OBJECT_MODE 0
  635. #define TNS_MESH_EDIT_MODE 1
  636. extern laPropContainer* TNS_PC_OBJECT_GENERIC;
  637. extern laPropContainer* TNS_PC_OBJECT_INSTANCER;
  638. extern laPropContainer* TNS_PC_OBJECT_CAMERA;
  639. extern laPropContainer* TNS_PC_OBJECT_LIGHT;
  640. extern laPropContainer* TNS_PC_OBJECT_MESH;
  641. extern laPropContainer* TNS_PC_OBJECT_SHAPE;
  642. extern laPropContainer* TNS_PC_OBJECT_ROOT;
  643. extern laPropContainer* TNS_PC_MATERIAL;
  644. extern laPropContainer* TNS_PC_MATERIAL_SLOT;
  645. #define TNS_HINT_TRANSFORM (1<<1)
  646. #define TNS_HINT_GEOMETRY (1<<0)
  647. STRUCTURE(tnsMeshFaceStorageSingleHead){
  648. int looplen, flags; //[1] [5] [4] [2] ... [-1 as end]
  649. };
  650. STRUCTURE(tnsMeshFaceStorage){
  651. int len; int arr;
  652. };
  653. STRUCTURE(tnsMaterialSlot){
  654. laListItem Item;
  655. tnsMaterial* Material;
  656. tnsObject* Parent;
  657. short Index;
  658. };
  659. #define TNS_SPOINT_ALIGNED (1<<3)
  660. #define TNS_SPOINT_FREE (1<<4)
  661. #define TNS_SPOINT_SELECTED_L (1<<5)
  662. #define TNS_SPOINT_SELECTED_R (1<<6)
  663. #define TNS_SPOINT_BEZIER (TNS_SPOINT_ALIGNED|TNS_SPOINT_FREE)
  664. #define TNS_SPOINT_SELECTED (TNS_MESH_FLAG_SELECTED|TNS_SPOINT_SELECTED_R|TNS_SPOINT_SELECTED_L)
  665. #define TNS_SHAPE_CLOSED (1<<7)
  666. #define TNS_SHAPE_HOLE (1<<8)
  667. STRUCTURE(tnsSPoint){
  668. laListItem Item;
  669. tnsVector2d p,dl,dr;
  670. int flags;
  671. u32bit i;
  672. };
  673. STRUCTURE(tnsShape){
  674. laListItem Item;
  675. laListHandle Points;
  676. int flags;
  677. short mat;
  678. };
  679. STRUCTURE(tnsShapeObject){
  680. tnsObject Base;
  681. laListHandle Shapes;
  682. tnsBatch *Batch;
  683. tnsBatch *ExtraBatch;
  684. tnsMaterialSlot* CurrentMaterial;
  685. laListHandle Materials;
  686. int Mode;
  687. int Backdrop;
  688. };
  689. STRUCTURE(tnsMeshObject){
  690. tnsObject Base;
  691. tnsVert* v; int totv, maxv;
  692. tnsEdge* e; int tote, maxe; // I intend this to only stores floating edges.
  693. tnsFace* f; int totf, maxf;
  694. laListHandle mv; int totmv;
  695. laListHandle me; int totme;
  696. laListHandle mf; int totmf;
  697. int TriangleCount;
  698. int TriangulatedEdgeCount;
  699. tnsMVert* LastSelectV, *FirstSelectV;
  700. tnsMEdge* LastSelectE, *FirstSelectE;
  701. tnsBatch *Batch;
  702. tnsBatch *ExtraBatch;
  703. tnsMaterialSlot* CurrentMaterial;
  704. laListHandle Materials;
  705. int Mode;
  706. };
  707. STRUCTURE(tnsEdgeHashEdge){
  708. int tv; tnsMEdge* me;
  709. };
  710. STRUCTURE(tnsEdgeHashVert){
  711. tnsEdgeHashEdge* e; int max, next; tnsMVert* mv;
  712. };
  713. STRUCTURE(tnsEdgeHash){
  714. tnsEdgeHashVert* vl; int max,next;
  715. };
  716. #define TNS_TILE(tile, r, c, CCount) \
  717. tile[r * CCount + c]
  718. #define TNS_CLAMP(a, Min, Max) \
  719. a = a < Min ? Min : (a > Max ? Max : a)
  720. #define TNS_MAX2(a, b) \
  721. (a > b ? a : b)
  722. #define TNS_MIN2(a, b) \
  723. (a < b ? a : b)
  724. #define TNS_MAX3(a, b, c) \
  725. (a > TNS_MAX2(b, c) ? a : TNS_MAX2(b, c))
  726. #define TNS_MIN3(a, b, c) \
  727. (a < TNS_MIN2(b, c) ? a : TNS_MIN2(b, c))
  728. #define TNS_MAX2_INDEX(a, b) \
  729. (a > b ? 0 : 1)
  730. #define TNS_MIN2_INDEX(a, b) \
  731. (a < b ? 0 : 1)
  732. #define TNS_MAX3_INDEX(a, b, c) \
  733. (a > b ? (a > c ? 0 : (b > c ? 1 : 2)) : (b > c ? 1 : 2))
  734. #define TNS_MIN3_INDEX(a, b, c) \
  735. (a < b ? (a < c ? 0 : (b < c ? 1 : 2)) : (b < c ? 1 : 2))
  736. #define TNS_MAX3_INDEX_ABC(x, y, z) \
  737. (x > y ? (x > z ? a : (y > z ? b : c)) : (y > z ? b : c))
  738. #define TNS_MIN3_INDEX_ABC(x, y, z) \
  739. (x < y ? (x < z ? a : (y < z ? b : c)) : (y < z ? b : c))
  740. #define TNS_ABC(index) \
  741. (index == 0 ? a : (index == 1 ? b : c))
  742. #define TNS_DOUBLE_CLOSE_ENOUGH(a, b) \
  743. (((a) + DBL_EDGE_LIM) >= (b) && ((a)-DBL_EDGE_LIM) <= (b))
  744. //#define TNS_DOUBLE_CLOSE_ENOUGH(a,b) \
  745. //(((a)+0.00000000001)>=(b) && ((a)-0.0000000001)<=(b))
  746. #define TNS_FLOAT_CLOSE_ENOUGH_WIDER(a, b) \
  747. (((a) + 0.0000001) >= (b) && ((a)-0.0000001) <= (b))
  748. #define TNS_FRAMEBUFFER_PIXEL(FrameBuffer, Row, Column) \
  749. &((FrameBuffer)->Pixels[Row * FrameBuffer->TileSizeW * FrameBuffer->W * FrameBuffer->SubPixelSample + Column * FrameBuffer->H * FrameBuffer->TileSizeH * FrameBuffer->SubPixelSample])
  750. #define TNS_IN_TILE_X(RenderTile, Fx) \
  751. (RenderTile->FX <= Fx && RenderTile->FXLim >= Fx)
  752. #define TNS_IN_TILE_Y(RenderTile, Fy) \
  753. (RenderTile->FY <= Fy && RenderTile->FYLim >= Fy)
  754. #define TNS_IN_TILE(RenderTile, Fx, Fy) \
  755. (TNS_IN_TILE_X(RenderTile, Fx) && TNS_IN_TILE_Y(RenderTile, Fy))
  756. void tnsSetuptnsFontManager();
  757. char* tnsEnsureShaderCommoms(char* Content, char* Library, char* Material);
  758. tnsShader *tnsNewShaderProgram(int VertexShaderID, int FragmentShaderID, int GeometryShaderID);
  759. int tnsNewGeometryShader(char *Content);
  760. int tnsNewFragmentShader(char *Content);
  761. int tnsNewFragmentShaderMaterial(char *Content, char* Library, char* Material);
  762. int tnsNewVertexShader(char *Content);
  763. void tnsDeleteShaderProgram(tnsShader* s);
  764. int tnsNextPowOf2(int i);
  765. int tnsEnableShader(int index);
  766. int tnsEnableShaderv(tnsShader *shader);
  767. int tnsUseShader(tnsShader *shader);
  768. void tnsUseImmShader();
  769. void tnsUseShadowShader();
  770. void tnsUseSceneShader();
  771. void tnsUseRayShader();
  772. void tnsUseTransparentGridShader();
  773. void tnsUseImagePeelShader();
  774. void tnsInit();
  775. void tnsInitRenderKernel(int matrixStackLevel);
  776. void tnsInitBuiltinShaders();
  777. void tnsInitWindowDefaultRenderConfig();
  778. void tnsQuit();
  779. void tnsRestoreFromNanoVG();
  780. real *tnsGetModelMatrix();
  781. real *tnsGetViewMatrix();
  782. real *tnsGetProjectionMatrix();
  783. void tnsGetMVMatrix(tnsMatrix44d r);
  784. void tnsGetMVPMatrix(tnsMatrix44d r);
  785. void tnsResetModelMatrix();
  786. void tnsResetViewMatrix();
  787. void tnsResetProjectionMatrix();
  788. void tnsOrtho(real xMin, real xMax, real yMin, real yMax, real zMin, real zMax);
  789. void tnsPerspective(real fFov_rad, real fAspect, real zMin, real zMax);
  790. void tnsPopMatrix();
  791. void tnsPushMatrix();
  792. void tnsTranslate3d(real x, real y, real z);
  793. void tnsPreTranslate3d(real x, real y, real z);
  794. void tnsRotate4d(real degrees, real x, real y, real z);
  795. void tnsPreRotate4d(real degrees, real x, real y, real z);
  796. void tnsScale3d(real x, real y, real z);
  797. void tnsPreScale3d(real x, real y, real z);
  798. void tnsColor4d(real r, real g, real b, real a);
  799. void tnsColor4dv(real *rgba);
  800. void tnsLineWidth(real Width);
  801. void tnsPointSize(real PointSize);
  802. tnsBatch *tnsCreateBatch(u32bit NumVert, int Dimension, float *Data, int NormalDimension, float *Normal, int ColorDimension, float *Colors);
  803. tnsBatch *tnsCreateBatchi(u32bit NumVert, int Dimension, int *Data);
  804. void tnsCommandUseWidth(tnsBatchCommand*c, real width);
  805. void tnsCommandUseUniformColor(tnsBatchCommand*c,real* color);
  806. void tnsCommandUseMaterial(tnsBatchCommand*c, tnsMaterial* material);
  807. void tnsCommandOverrideColorArray(tnsBatchCommand*c, int VertCount, int ColorDimension, float* colors);
  808. tnsBatchCommand *tnsCreateCommand(tnsBatch *b, const char* name, u32bit ElementCount, int Dimension, GLenum DrawAs, u32bit *Elements, int HiddenByDefault);
  809. void tnsDeleteBatch(tnsBatch *b);
  810. int tnsDrawBatch(tnsBatch* batch, const char* OverrideCommand, real* OverrideUniformColor, int OverrideAsArray);
  811. void tnsVertex3d(real x, real y, real z);
  812. void tnsVertex2d(real x, real y);
  813. void tnsVertexArray2d(real *verts, int amount);
  814. void tnsVertexArray3d(real *verts, int amount);
  815. void tnsColorArray4d(real *colors, int amount);
  816. void tnsNormalArray3d(real *normals, int amount);
  817. void tnsTexCoordArray2d(real *coords, int amount);
  818. void tnsTexCoordArray3d(real *coords, int amount);
  819. void tnsIndexArray(GLuint *index, short amount);
  820. void tnsPackAs(GLenum Mode);
  821. void tnsFlush();
  822. #define tnsLinearItp(L, R, T) \
  823. ((L) * (1.0f - (T)) + (R) * (T))
  824. double tnsGetRatiod(real L, real R, real FromL);
  825. void tnsShaderApplyProjectionInverse(tnsShader *tns, tnsMatrix44d m);
  826. void tnsShaderApplyProjection(tnsShader *tns, tnsMatrix44d m);
  827. void tnsShaderApplyModel(tnsShader *tns, tnsMatrix44d m);
  828. void tnsShaderApplyView(tnsShader *tns, tnsMatrix44d m);
  829. void tnsShaderApplyNormalScaler(tnsShader *tns, tnsMatrix44d m);
  830. int tnsLineIntersectTest2d(tnsVector2d a1, tnsVector2d a2, tnsVector2d b1, tnsVector2d b2, double *aRatio);
  831. double tnsGetLineZ(tnsVector3d L, tnsVector3d R, real Ratio);
  832. double tnsGetLineZPoint(tnsVector3d L, tnsVector3d R, tnsVector3d FromL);
  833. double tnsGetRatio3d(tnsVector3d L, tnsVector3d R, tnsVector3d FromL);
  834. double tnsGetRatiod(real L, real R, real FromL);
  835. real tnsInterpolate(real L, real R, real T);
  836. void tnsInterpolate2dv(real *L, real *R, real T, real *Result);
  837. void tnsInterpolate3dv(real *L, real *R, real T, real *Result);
  838. void tnsInterpolateTripple2d(tnsVector2d v1, tnsVector2d v2, tnsVector2d v3, real ratio, tnsVector2d result);
  839. void tnsVectorMinus2d(tnsVector2d result, tnsVector2d l, tnsVector2d r);
  840. void tnsVectorMinus3d(tnsVector3d result, tnsVector3d l, tnsVector3d r);
  841. void tnsVectorSubtract3d(tnsVector3d l, tnsVector3d r);
  842. void tnsVectorPlus3d(tnsVector3d result, tnsVector3d l, tnsVector3d r);
  843. void tnsVectorAccum3d(tnsVector3d l, tnsVector3d r);
  844. void tnsVectorAccum2d(tnsVector2d l, tnsVector2d r);
  845. void tnsVectorNegate3d(tnsVector3d result, tnsVector3d l);
  846. void tnsVectorNegateSelf3d(tnsVector3d l);
  847. void tnsVectorCopy2d(tnsVector2d from, tnsVector2d to);
  848. void tnsVectorCopy3d(tnsVector3d from, tnsVector3d to);
  849. void tnsVectorCopy4d(tnsVector4d from, tnsVector4d to);
  850. void tnsVectorMultiSelf4d(tnsVector4d from, real num);
  851. void tnsVectorMultiSelf3d(tnsVector3d from, real num);
  852. void tnsVectorMultiSelf2d(tnsVector2d from, real num);
  853. void tnsVectorMulti4d(tnsVector4d to, tnsVector4d from, real num);
  854. void tnsVectorMulti3d(tnsVector3d to, tnsVector3d from, real num);
  855. void tnsVectorMulti2d(tnsVector2d to, tnsVector2d from, real num);
  856. real tnsDirectionToRad(tnsVector2d Dir);
  857. void tnsConvert44df(tnsMatrix44d from, tnsMatrix44f to);
  858. #define tnsVectorSet2(to, x,y) \
  859. {(to)[0]=x;(to)[1]=y;}
  860. #define tnsVectorSet3(to, x,y,z) \
  861. {(to)[0]=x;(to)[1]=y;(to)[2]=z;}
  862. #define tnsVectorSet4(to, x,y,z,w) \
  863. {(to)[0]=x;(to)[1]=y;(to)[2]=z;(to)[3]=w;}
  864. #define tnsVectorSet2v(to, from) \
  865. tnsVectorSet2(to,(from)[0],(from)[1])
  866. #define tnsVectorSet3v(to, from) \
  867. tnsVectorSet3(to,(from)[0],(from)[1],(from)[2])
  868. #define tnsVectorSet4v(to, from) \
  869. tnsVectorSet4(to,(from)[0],(from)[1],(from)[2],(from)[3])
  870. real tnsDistIdv2(real x1, real y1, real x2, real y2);
  871. real tnsDist3dv(tnsVector3d l, tnsVector3d r);
  872. real tnsDist2dv(tnsVector2d l, tnsVector2d r);
  873. real tnsLength3d(tnsVector3d l);
  874. real tnsLength2d(tnsVector2d l);
  875. void tnsNormalize3d(tnsVector3d result, tnsVector3d l);
  876. void tnsNormalizeSelf2d(tnsVector3d result);
  877. void tnsNormalizeSelf3d(tnsVector3d result);
  878. real tnsDot3d(tnsVector3d l, tnsVector3d r, int normalize);
  879. real tnsDot2d(tnsVector2d l, tnsVector2d r, int normalize);
  880. real tnsVectorCross3d(tnsVector3d result, tnsVector3d l, tnsVector3d r);
  881. real tnsAngleRad3d(tnsVector3d from, tnsVector3d to, tnsVector3d PositiveReference);
  882. void tnsApplyRotation33d(tnsVector3d result, tnsMatrix44d mat, tnsVector3d v);
  883. void tnsApplyRotation43d(tnsVector3d result, tnsMatrix44d mat, tnsVector3d v);
  884. void tnsApplyTransform43d(tnsVector3d result, tnsMatrix44d mat, tnsVector3d v);
  885. void tnsApplyNormalTransform43d(tnsVector3d result, tnsMatrix44d mat, tnsVector3d v);
  886. void tnsApplyTransform44d(tnsVector4d result, tnsMatrix44d mat, tnsVector4d v);
  887. void tnsApplyTransform44dTrue(tnsVector4d result, tnsMatrix44d mat, tnsVector4d v);
  888. void tnsLoadIdentity44d(tnsMatrix44d m);
  889. void tnsMakeOrthoMatrix44d(tnsMatrix44d mProjection, real xMin, real xMax, real yMin, real yMax, real zMin, real zMax);
  890. void tnsMakePerspectiveMatrix44d(tnsMatrix44d mProjection, real fFov_rad, real fAspect, real zMin, real zMax);
  891. void tnsMakeTranslationMatrix44d(tnsMatrix44d mTrans, real x, real y, real z);
  892. void tnsMakeRotationMatrix44d(tnsMatrix44d m, real angle_rad, real x, real y, real z);
  893. void tnsMakeScaleMatrix44d(tnsMatrix44d m, real x, real y, real z);
  894. void tnsMakeViewportMatrix44d(tnsMatrix44d m, real w, real h, real Far, real Near);
  895. void tnsInverse44d(tnsMatrix44d inverse, tnsMatrix44d mat);
  896. void tnsMultiply44d(tnsMatrix44d result, tnsMatrix44d l, tnsMatrix44d r);
  897. void tnsMakeRotationXMatrix44d(tnsMatrix44d m, real angle_rad);
  898. void tnsMakeRotationYMatrix44d(tnsMatrix44d m, real angle_rad);
  899. void tnsMakeRotationZMatrix44d(tnsMatrix44d m, real angle_rad);
  900. void tnsRemoveTranslation44d(tnsMatrix44d result, tnsMatrix44d mat);
  901. void tnsClearTranslation44d(tnsMatrix44d mat);
  902. real tnsAngleRad3d(tnsVector3d from, tnsVector3d to, tnsVector3d PositiveReference);
  903. real tnsLength3d(tnsVector3d l);
  904. void tnsNormalize2d(tnsVector2d result, tnsVector2d l);
  905. void tnsNormalize3d(tnsVector3d result, tnsVector3d l);
  906. void tnsNormalizeSelf3d(tnsVector3d result);
  907. real tnsDot3d(tnsVector3d l, tnsVector3d r, int normalize);
  908. real tnsVectorCross3d(tnsVector3d result, tnsVector3d l, tnsVector3d r);
  909. void tnsVectorCrossOnly3d(tnsVector3d result, tnsVector3d l, tnsVector3d r);
  910. void tnsExtractXYZEuler44d(tnsMatrix44d mat, real *xyz_result);
  911. void tnsPrintMatrix44d(tnsMatrix44d l);
  912. int tnsPointInsideTriangle3d(tnsVector3d v, tnsVector3d v0, tnsVector3d v1, tnsVector3d v2);
  913. int tnsIntersectPlaneRay(tnsVector3d n, tnsVector3d p0, tnsVector3d l0, tnsVector3d l, real* t);
  914. void tnsExtractXYZEuler44d(tnsMatrix44d mat, real *xyz_result);
  915. void tnsExtractLocation44d(tnsMatrix44d mat, real *xyz_result);
  916. void tnsExtractScale44d(tnsMatrix44d mat, real *xyz_result);
  917. void tnsSelfMatrixChanged(tnsObject* o, int ApplyToChild);
  918. void tnsGlobalMatrixChanged(tnsObject* o, int ApplyToChild);
  919. void tnsGlobalMatrixChangedForDelta(tnsObject* o, int ApplyToChild);
  920. void tnsSelfTransformValueChanged(tnsObject* o);
  921. void tnsDeltaTransformValueChanged(tnsObject* o);
  922. void tnsGlobalTransformValueChanged(tnsObject* o);
  923. void tnsClearPlayDuplicate(tnsObject* o);
  924. void tnsFreeEvaluatedNode(tnsEvaluatedNode* n);
  925. void tnsFreeEvaluatedScene(tnsEvaluateData* ed);
  926. void tnsClearPlayState(tnsObject* o);
  927. void tnsExtrtnsEnsurePlayDuplicate(tnsObject *o);
  928. void tnsExtractSelfTransformValue(tnsObject *o);
  929. void tnsExtractGlobalTransformValue(tnsObject *o);
  930. void tnsSetCurrentRoot(tnsObject *o);
  931. void tnsInitObjectBase(tnsObject *o, tnsObject *under, char *Name, int Type,
  932. real AtX, real AtY, real AtZ,
  933. real RotX, real RotY, real RotZ, real RotW, u8bit RotationMode,
  934. real Scale);
  935. tnsMeshObject *tnsLoadObjectFromFile(char *FileName);
  936. int tnsLoadExchange(char *FileName);
  937. tnsObject *tnsFindObject(char *Name, tnsObject *From);
  938. void tns_RegisterNodes();
  939. void tnsCopyObjectTransformationsLocal(tnsObject* to, tnsObject* from);
  940. void tnsCopyObjectTransformationsGlobal(tnsObject* to, tnsObject* from);
  941. void tnsRotateObjectGlobal(tnsObject *o, real x, real y, real z, real angle, real cx,real cy,real cz);
  942. void tnsRotateObjectDelta(tnsObject *o, real x, real y, real z, real angle);
  943. void tnsRotateObjectLocal(tnsObject *o, real x, real y, real z, real angle);
  944. void tnsRotateObjectLocalValues(tnsObject *o, real x, real y, real z);
  945. void tnsRotateObjectGlobalForDelta(tnsObject *o, real x, real y, real z, real angle, real cx,real cy,real cz);
  946. void tnsTranslateObjectGlobal(tnsObject *o, real x, real y, real z);
  947. void tnsTranslateObjectLocal(tnsObject *o, real x, real y, real z);
  948. void tnsSetObjectPositionLocal(tnsObject*o, real x, real y, real z);
  949. void tnsResetObjectTransformations(tnsObject* o, int reset_loc,int reset_rot,int reset_sca);
  950. void tnsMoveObjectLocal(tnsObject *o, real x, real y, real z);
  951. void tnsMoveObjectDelta(tnsObject *o, real x, real y, real z);
  952. void tnsMoveObjectGlobal(tnsObject *o, real x, real y, real z);
  953. void tnsMoveObjectGlobalForDelta(tnsObject *o, real x, real y, real z);
  954. void tnsScaleObject(tnsObject *o, real x,real y,real z, real cx,real cy,real cz);
  955. void tnsScaleObjectDelta(tnsObject *o, real x,real y,real z, real cx,real cy,real cz);
  956. int tnsCheckParentable(tnsObject* child, tnsObject* parent);
  957. void tnsParentObject(tnsObject *child, tnsObject *parent, int KeepTransform);
  958. void tnsUnparentObject(tnsObject *o, int KeepTransform);
  959. void tnsZoomViewingCamera(tnsCamera *c, real Ratio);
  960. void tnsRotateViewingCamera(tnsCamera *c, real x, real z);
  961. void tnsTranslateViewingCamera(tnsCamera *c, int ViewportW, int ViewportH, real x, real y);
  962. void tnsGetCameraMovingDeltas(tnsCamera *c, int ViewportW, int ViewportH, real x, real y, tnsVector4d p);
  963. laPropContainer* tnsget_ObjectType(tnsObject* o);
  964. void *tnsget_detached_FirstRootObject(void *UNUSED1, void *UNUSED2);
  965. void tnsDestroyRootObject(tnsObject *root);
  966. void tnsDestroyObject(tnsObject *o);
  967. tnsObject *tnsCreateRootObject(char *name, int Use2D);
  968. tnsCamera *tnsCreateCamera(tnsObject *under, char *Name, real FOV,
  969. real AtX, real AtY, real AtZ,
  970. real RotX, real RotY, real RotZ,
  971. real FocusDistance);
  972. tnsObject *tnsCreateInstancer(tnsObject *under, char *Name, real AtX, real AtY, real AtZ);
  973. tnsLight *tnsCreateLight(tnsObject *under, char *Name, real AtX, real AtY, real AtZ, real Strength, int UniDirectional);
  974. tnsMeshObject *tnsCreateMeshEmpty(tnsObject *under, char *Name, real AtX, real AtY, real AtZ);
  975. tnsMeshObject *tnsCreateMeshPlane(tnsObject *under, char *Name, real AtX, real AtY, real AtZ, real size);
  976. tnsShapeObject *tnsCreateShapeEmpty(tnsObject *under, char *Name, real AtX, real AtY, real AtZ);
  977. tnsShapeObject *tnsCreateShapeSquare(tnsObject *under, char *Name, real AtX, real AtY, real AtZ, real size);
  978. int tnsMergeMeshObjects(tnsMeshObject* into, tnsMeshObject* mo);
  979. tnsInstancer* tnsDuplicateInstancer(tnsInstancer* from);
  980. tnsMeshObject* tnsDuplicateMeshObject(tnsMeshObject* from);
  981. tnsShapeObject* tnsDuplicateShappeObject(tnsShapeObject* from);
  982. void tnsInitMeshPlane(tnsMeshObject* mo, real size);
  983. void tnsAddMMeshPlane(tnsMeshObject* mo, real size);
  984. void tnsInitShapeSquare(tnsShapeObject* so, real size);
  985. int tnsAnyObjectsSelected(tnsObject* parent);
  986. void tnsDeselectAllObjects(tnsObject* parent);
  987. void tnsSelectAllObjects(tnsObject* parent);
  988. void tnsSelectObject(tnsObject* o, int Select, int Toggle);
  989. #define TNS_MMESH_EDGE_BIT 0x800000
  990. #define TNS_MMESH_FACE_BIT 0xC00000
  991. #define TNS_MMESH_TYPE_BIT (TNS_MMESH_FACE_BIT|TNS_MMESH_EDGE_BIT)
  992. tnsMFace* tnsMMeshNewFace(tnsMeshObject* mo);
  993. tnsMEdge* tnsMMeshNewEdge(tnsMeshObject* mo);
  994. tnsMVert* tnsMMeshNewVert(tnsMeshObject* mo);
  995. void tnsMMeshCalculateNormalFrom(tnsMFace* mf);
  996. int tnsMMeshCalculateNormal(tnsMeshObject* mo);
  997. void tnsMMeshEdgeAssignVerts(tnsMEdge* me,tnsMVert* mv1,tnsMVert* mv2);
  998. tnsMEdge* tnsMMeshVertsShareEdge(tnsMVert* mv0, tnsMVert* mv1);
  999. int tnsMMeshEdgeHasVert(tnsMEdge* me, tnsMVert* MV);
  1000. tnsMFace* tnsMMeshEdgeShareFace(tnsMEdge* me0, tnsMEdge* me1);
  1001. tnsMVert* tnsMMeshEdgeShareVert(tnsMEdge* me0, tnsMEdge* me1);
  1002. tnsMVert* tnsMMeshEdgeAnotherVert(tnsMEdge* me, tnsMVert* v);
  1003. tnsMVert* tnsMMeshEdgeStartingVert(tnsMEdge* me0, tnsMEdge* me1);
  1004. int tnsMMeshSplitFace(tnsMeshObject* mo, tnsMFace* mf, tnsMEdge* me, tnsMFace** r_f1, tnsMFace** r_f2);
  1005. tnsMFace* tnsMMeshVertsShareFace(tnsMVert* v1, tnsMVert* v2);
  1006. tnsMEdge* tnsMMeshMakeEdge(tnsMeshObject* mo, tnsMVert* v1, tnsMVert* v2);
  1007. void tnsMMeshFaceAddEdge(tnsMFace* mf, tnsMEdge* me);
  1008. int tnsMMeshFaceMatches(tnsMFace* mf, int ecount, ...);
  1009. tnsMFace* tnsMMeshMakeFaceN(tnsMeshObject* mo, int count, laListHandle* vip, tnsMEdge** r_fallback_me);
  1010. tnsMFace* tnsMMeshMakeFace4v(tnsMeshObject* mo, tnsMVert* v1,tnsMVert* v2,tnsMVert* v3,tnsMVert* v4);
  1011. int tnsMMeshLoopIsInverted(laListItemPointer* l);
  1012. int tnsMMeshEdgeInsertVert(tnsMeshObject* mo, tnsMEdge* me, tnsMVert* mv, tnsMVert* ref_e1v_optional, tnsMEdge** r_e1, tnsMEdge** r_e2);
  1013. tnsMVert* tnsMMeshEdgeInsertVertAt(tnsMeshObject* mo, tnsMEdge* me, real at, tnsMVert* ref_e1v_optional, tnsMEdge** r_e1, tnsMEdge** r_e2);
  1014. void tnsMMeshRemoveFaceOnly(tnsMeshObject* mo, tnsMFace* mf);
  1015. void tnsMMeshRemoveEdgeFace(tnsMeshObject* mo, tnsMEdge* me);
  1016. void tnsMMeshRemoveVertEdgeFace(tnsMeshObject* mo, tnsMVert* mv);
  1017. void tnsMMeshRefreshIndex(tnsMeshObject* mo);
  1018. void tnsMeshEnterEditMode(tnsMeshObject* mo);
  1019. void tnsMeshLeaveEditMode(tnsMeshObject* mo);
  1020. int tnsMMeshAnySelected(tnsMeshObject* mo);
  1021. void tnsMMeshClearExtraFlags(tnsMeshObject* mo);
  1022. void tnsMMeshDeselectAll(tnsMeshObject* mo);
  1023. void tnsMMeshSelectAll(tnsMeshObject* mo);
  1024. void tnsMMeshSelectVert(tnsMeshObject* mo, tnsMVert* mv, int select, int toggle);
  1025. void tnsMMeshSelectEdge(tnsMeshObject* mo, tnsMEdge* me, int select, int toggle);
  1026. void tnsMMeshEnsureSelectionFromVerts(tnsMeshObject* mo);
  1027. void tnsMMeshEnsureSelectionFromEdges(tnsMeshObject* mo);
  1028. void tnsMMeshEnsureSelection(tnsMeshObject* mo, int SelectMode);
  1029. void tnsMMeshExpandBandList(tnsMeshObject* mo, tnsMEdge* me, laListHandle* lst);
  1030. int tnsMMeshSelectRingBandFrom(tnsMeshObject* mo, tnsMEdge* me, int ring_band, int select, int toggle);
  1031. void tnsMMeshSelectLinked(tnsMeshObject* mo);
  1032. int tnsMMeshVertsCanMerge(tnsMeshObject* mo, tnsMVert* into, tnsMVert* mv);
  1033. int tnsMMeshMergeVerts(tnsMeshObject* mo, tnsMVert* into, tnsMVert* mv);
  1034. void tnsInvalidateMeshBatch(tnsMeshObject* mo);
  1035. void tnsRegenerateMeshBatch(tnsMeshObject* mo);
  1036. void tnsEnsureMeshBatch(tnsMeshObject* mo);
  1037. void tnsEvaluateMeshObject(tnsMeshObject* mo, tnsEvaluateData* ed);
  1038. void tnsEvaluateShapeObject(tnsShapeObject* so, tnsEvaluateData* ed);
  1039. void tnsShapeSetHole(tnsShape* s, int closed, int toggle);
  1040. void tnsShapeSetClosed(tnsShape* s, int closed, int toggle);
  1041. int tnsShapePointAnySelected(tnsShape* s);
  1042. int tnsShapeAnySelected(tnsShapeObject* so);
  1043. void tnsShapeDeselectAll(tnsShapeObject* so);
  1044. void tnsShapeSelectAll(tnsShapeObject* so);
  1045. void tnsShapeSelectPoint(tnsShapeObject* so, tnsSPoint* sp, int select, int toggle, int lr);
  1046. void tnsShapeSelectRingFrom(tnsShapeObject* so, tnsSPoint* sp, int select, int toggle);
  1047. void tnsShapeSelectLinked(tnsShapeObject* so);
  1048. void tnsShapeSetEndPoint(tnsShape* s, tnsSPoint* p);
  1049. void tnsShapeRefreshIndex(tnsShapeObject* so);
  1050. tnsShape* tnsShapeRemovePoint(tnsShapeObject* so, tnsShape* s, tnsSPoint* sp, int SplitShape);
  1051. int tnsShapeConnect(tnsShapeObject* so, tnsShape* s1, tnsShape* s2, tnsSPoint* sp1, tnsSPoint* sp2);
  1052. int tnsShapeConnectSelected(tnsShapeObject* so);
  1053. int tnsShapeExtrudeSelected(tnsShapeObject* so, int DupliOnly);
  1054. void tnsShapeEnterEditMode(tnsShapeObject* mo);
  1055. void tnsShapeLeaveEditMode(tnsShapeObject* mo);
  1056. NEED_STRUCTURE(la3DObjectDrawExtra);
  1057. void tnsDrawShapePointsSelectionID(tnsEvaluatedInstance* ei, la3DObjectDrawExtra* de);
  1058. void tnsDrawShapeObject(tnsEvaluatedInstance* ei, la3DObjectDrawExtra* de);
  1059. void la_RegisterModellingOperators();
  1060. void la_RegisterShapeOperators();
  1061. void tnsGetCameraProjection(tnsMatrix44d* mat, int w, int h, tnsCamera* Camera);
  1062. void tnsGetCameraViewProjection(tnsMatrix44d* mat, int w, int h, tnsCamera* Camera);
  1063. void tnsApplyCameraView(int W, int H, tnsCamera *Camera, tnsMatrix44d out_optional_view, tnsMatrix44d out_optional_projection);
  1064. void tnsApplyShadowCameraView(tnsLight *Light);
  1065. void tnsSetCameraViewDir(tnsVector3d dir);
  1066. void tnsApplyModelMatrix(tnsMatrix44d m);
  1067. void tnsLookAt(tnsObject *o, tnsVector3d Target, tnsVector3d Up);
  1068. tnsObject* tnsEnsurePlayDuplicate(tnsObject* o);
  1069. void tnsInvalidateEvaluation(tnsObject* o);
  1070. void tnsInvalidatePlayEvaluation(tnsObject* o);
  1071. void tnsFreeEvaluatedArray(tnsEvaluateData* ed);
  1072. void tnsEvaluateThisObject(tnsObject *o, tnsEvaluateData* ed);
  1073. void tnsSetObjectTreeEvaluationArgs(tnsObject* from, tnsObject* Active, int FillOutline, int FillSelectionID, int W, int H);
  1074. void tnsEvaluateObjectTree(tnsObject* from, tnsEvaluateData* UseED, int EvaluatePlay);
  1075. NEED_STRUCTURE(laEvent);
  1076. int tnsEvaluateObjectTreeEvent(tnsEvaluateData* ed_play, tnsEvaluatedNode* en, laEvent* e);
  1077. void tnsAddEvaluatedInstance(tnsEvaluateData* ed, tnsObject* ob, tnsDrawEvaluatedInstanceF Draw, int Layer,
  1078. int IsActive, int MeshSelectionType, int InstanceSelectionID);
  1079. void tnsDrawLayer(tnsEvaluateData* ed,int Layer,void* CustomData);
  1080. void tnsEvaluateNewNode(tnsEvaluateData* ed, tnsObject* ob);
  1081. int tnsEvaluateTryRelinkExistingNode(tnsEvaluateData* ed, tnsObject* ob);
  1082. void tnsEvaluateFreeNode(tnsEvaluatedNode* en);
  1083. void tnsEvaluateSyncNode(tnsEvaluateData* ed, tnsObject* ob);
  1084. void tnsEnsureEvaluatedScene(tnsEvaluateData* ed, tnsObject* root);
  1085. void tnsPrintEvaluatedNode(tnsEvaluatedNode* en,int level);
  1086. void tnsDrawObjectTree(tnsObject* from, int Layers,void* CustomData, int DrawRuntime);
  1087. void tnsDrawSingleObjectOrigin(tnsObject* o);
  1088. void tnsDrawObjectOrigins(tnsObject *from, tnsObject *active, int AllOrigins);
  1089. void tnsDrawCursor(tnsObject* root);
  1090. void tnsDrawScene(int W, int H, tnsObject *root);
  1091. void tnsDrawWorld(int W, int H);
  1092. tnsMaterial *tnsCreateMaterial(char *Name);
  1093. tnsMaterial *tnsFindMaterial(char *name);
  1094. tnsMaterialSlot* tnsNewMaterialSlot(tnsObject* o);
  1095. void tnsRemoveMaterialSlot(tnsObject* o, tnsMaterialSlot* ms);
  1096. void tnsAssignMaterialSlot(tnsObject* o, tnsMaterialSlot* ms);
  1097. NVGpaint tns_GetMaterial2D(tnsMaterial* m);
  1098. void tnsRefreshMaterialLibraries();
  1099. void tnsEnsureMaterialShader(tnsMaterial* mat, int Refresh);
  1100. void tnsClearAll();
  1101. void tnsClearColorv(real *rgba);
  1102. void tnsClearColor(real r, real g, real b, real a);
  1103. #ifdef __linux__
  1104. void tnsContextMakeCurrent(SYSGLCONTEXT context, SYSWINDOW win,void* gles_surf);
  1105. #endif
  1106. #ifdef _WIN32
  1107. void tnsContextMakeCurrent(SYSGLCONTEXT context, SYSTEMDC hdc,void* unused);
  1108. #endif
  1109. NEED_STRUCTURE(laWindow)
  1110. void tnsContextMakeFBOCurrent(tnsOffscreen* off);
  1111. void tnsContextMakeWindowCurrent(laWindow* w);
  1112. void tnsSwitchToCurrentWindowContext(laWindow* w);
  1113. void tnsDeleteContext(SYSGLCONTEXT glc);
  1114. void tnsBindVertexArray(GLuint vao);
  1115. void tnsRecalculateVertNormal(tnsVert *v);
  1116. void tnsRecalculateFaceAverageNormal(tnsFace *f);
  1117. int tnsLoadVectorGraphPackage(const char *name, unsigned int size);
  1118. real tnsGetMonoFontAdvance();
  1119. int tnsInvalidateFontCache();
  1120. int tnsLoadSystemFontMono(char* from, char* mono);
  1121. int tnsLoadSystemFont(char* from, char* name);
  1122. int tnsGetTextureMemoryComponetCount(tnsTexture *t);
  1123. void tnsUseNormal(int Use);
  1124. void tnsUseHalftone(real Use);
  1125. void tnsUniformUseOffset(tnsShader* s, int use);
  1126. void tns_ImageToTexture(tnsImage* im);
  1127. tnsImage* tnsNewImage(void* MemPNG);
  1128. void tnsUseImage(tnsImage* im);
  1129. void tnsStopUsingImage(tnsImage* im);
  1130. void tnsRefreshImage(tnsImage* im,void* data);
  1131. void tnsRemoveImage(tnsImage* im);
  1132. void tnsSetRayShaderUniformTextures(tnsOffscreen* doff);
  1133. int tnsInit2DTexture(tnsTexture *t, GLint glInternalFormat, int w, int h, int Multisample);
  1134. tnsTexture *tnsCreate2DTexture(GLint glInternalFormat, int w, int h, int Multisample);
  1135. tnsTexture *tnsCreate3DTexture(GLint glInternalFormat, int w, int h, int slices);
  1136. void tnsConfigure2DTexture(tnsTexture *t);
  1137. void tnsConfigure3DTexture(tnsTexture *t);
  1138. void tnsReconfigureTextureParameters(int Multisample);
  1139. tnsOffscreen *tnsCreate2DOffscreen(int glInternalFormat, int w, int h, int Multisample, int WithDepth, int WithStencil);
  1140. tnsOffscreen *tnsCreateDeferredOffscreen(int w, int h, int Multisample);
  1141. void tnsCopyScreenTo2DTexture(tnsTexture *target, int x_lower_left, int y_lower_left, int w, int h);
  1142. void tnsActiveTexture(GLenum tex);
  1143. void tnsBindTexture(tnsTexture *t);
  1144. void tnsUnbindTexture();
  1145. void tnsUniformUseNormal(tnsShader* s, int Use);
  1146. void tnsUniformUseHalftone(tnsShader* s, real Use);
  1147. void tnsUniformHalftoneSize(tnsShader* s, real Use);
  1148. void tnsUniformUseTexture(tnsShader* s, int mode, int sample);
  1149. void tnsUniformColorMode(tnsShader *s, int mode);
  1150. void tnsUniformHCYGamma(tnsShader* s, float Gamma);
  1151. void tnsUniformInputColorSpace(tnsShader* s, int ColorSpace);
  1152. void tnsUniformOutputColorSpace(tnsShader* s, int ColorSpace);
  1153. void tnsUniformShowColorOverflowStripes(tnsShader* s, int Show);
  1154. void tnsUniformColorComposing(tnsShader* s, int Composing, real gamma, real blackpoint);
  1155. void tnsUniformUseMultiplyColor(tnsShader* s, int enable);
  1156. void tnsUseMaskTexture(tnsTexture *t);
  1157. void tnsUseTexture(tnsTexture *t);
  1158. void tnsUseNoTexture();
  1159. void tnsUseMultiplyColor(int enable);
  1160. void tnsDeleteTexture(tnsTexture *t);
  1161. void tnsDraw2DTextureDirectly(tnsTexture *t, real x, real y, real w, real h);
  1162. void tnsDraw2DTextureArg(tnsTexture *t,
  1163. real x_upper_right, real y_upper_right, int w, int h,
  1164. real *MultiplyColor,
  1165. real LPadding, real RPadding, real TPadding, real BPadding);
  1166. int tnsTextureMemorySize(tnsTexture *t, int mem);
  1167. void tnsDelete2DOffscreen(tnsOffscreen *o);
  1168. tnsOffscreen *tnsCreateOffscreenHandle();
  1169. void tnsEnsureOffscreenStatus(tnsOffscreen *off, int w, int h);
  1170. void tnsAttach2DOffscreenBuffer(tnsOffscreen *target, GLuint attatchment, tnsTexture *use);
  1171. void tnsDetach2DOffscreenBuffer(tnsOffscreen *target, GLuint which_attach_point);
  1172. void tnsDrawToOffscreen(tnsOffscreen *toff, int HowMany, GLuint *AttachmentArray);
  1173. void tnsDrawToExtraColorAttachment(tnsOffscreen *toff);
  1174. void tnsDrawToExtraNormalAttachment(tnsOffscreen *toff);
  1175. void tnsDrawToAllExtraAttachments(tnsOffscreen *toff);
  1176. void tnsDrawToOffscreenOnlyBind(tnsOffscreen *toff, int HowMany, GLuint *AttachmentArray);
  1177. void tnsReadFromOffscreen(tnsOffscreen *toff);
  1178. void tnsDrawToScreen();
  1179. //==============================================[STR]
  1180. int tnsUseFont(char *name);
  1181. int laStopFontService();
  1182. void tfntResizeFontTexture(tnsFont* f, int size);
  1183. void tnsPushStringClip(int L, int R, int U, int B);
  1184. void tnsPopStringClip();
  1185. int tnsStringGetDimension(char* content, uint32_t* contentU, int Count, int WLimit, int* Rows, int UseMono);
  1186. int tnsStringGetWidth(char *content, int Count, int UseMono);
  1187. int tnsStringGetWidthU(uint32_t *contentU, int Count, int UseMono);
  1188. void tnsDrawStringM(char *content, uint32_t* contentU, real Color[4], int L, int R, int T, int Flags);
  1189. int tnsDrawLCD7_ProgressSystem(real x, real y, real Percent);
  1190. void tnsDrawStringLCD(char *content, uint32_t* contentU, real Color[4], int L, int R, int T, int Flags, real Scale);
  1191. void tnsDrawStringAutoM(char *content, uint32_t* contentU, real Color[4], int L, int R, int T, int Flags);
  1192. void tnsDrawStringAuto(char *content, real Color[4], int L, int R, int T, int Flags);
  1193. void tnsDrawStringWithPriority(char *Label, char *MajorContent, real Color[4], int TextAlign, int L, int R, int T, int Flags);
  1194. void tnsDrawVectorGraphPackage(int ID, real Color[4], int L, int R, int T, int B, int Align, int Flags);
  1195. void tnsDrawIcon(uint32_t ID, real Color[4], int L,int R, int T, int Flags);
  1196. void tnsUseFontCoord(real x, real y, real size);
  1197. ///=================================
  1198. void tnsMakeTriangle(real *arr, real x1, real y1, real x2, real y2, real x3, real y3);
  1199. void tnsMakeQuad2d(real *arr, real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4);
  1200. void tnsMakeQuadT2d(real *arr, real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4);
  1201. void tnsMakeQuad3d(real *arr, real x1, real y1, real z1, real x2, real y2, real z2, real x3, real y3, real z3, real x4, real y4, real z4);
  1202. void tnsMakeQuad4d(real *arr, real x1, real y1, real z1, real w1, real x2, real y2, real z2, real w2, real x3, real y3, real z3, real w3, real x4, real y4, real z4, real w4);
  1203. void tnsMakeCircle2d(real *arr, int slices, real ctrX, real ctrY, real r, int jump);
  1204. void tnsMakeArc2d(real *arr, int slices, real ctrX, real ctrY, real r, real rad_begin, real rad_end);
  1205. void tnsMakeRing2d(real *arr, int *index, int slices, real ctrX, real ctrY, real r1, real r2);
  1206. void tnsMakeLinerGradient3d(real *arr, int num_points, real r0, real g0, real b0, real r1, real g1, real b1);
  1207. void tnsMakeLinerGradient4d(real *arr, int num_points, real r0, real g0, real b0, real a0, real r1, real g1, real b1, real a1);
  1208. void tnsMakeLinerGradient3dv(real *arr, int num_points, real *rgb0, real *rgb1);
  1209. void tnsMakeLinerGradient4dv(real *arr, int num_points, real *rgb0, real *rgb1);
  1210. void tnsMakeFoucsSquare(int L, int R, int U, int B, int W);
  1211. void tnsDrawFloor(real* CamPosition, real Far, int *ShowAxis);
  1212. void tnsDraw2DGrid10(real L, real R, real U, real B, real xmin, real xmax, real ymin, real ymax, real MostDenseW, real MostDenseH,
  1213. real* color4, real AlphaFactor, int ShowGrid, int TextAlign);
  1214. void tnsMakeIndexUInt(unsigned int *result, int num, ...);
  1215. void tnsMakeBridgedIndex(unsigned int *result, int num, int revert, int begin);
  1216. //================================
  1217. void DrawWireRect2dp(real x, real y, real x2, real y2);
  1218. void tnsViewportWithScissor(int x, int y, int w, int h);
  1219. void tnssRGB2XYZ(tnsVector3d rgb,tnsVector3d xyz);
  1220. void tnsClay2XYZ(tnsVector3d rgb,tnsVector3d xyz);
  1221. void tnsXYZ2sRGB(tnsVector3d xyz,tnsVector3d rgb);
  1222. void tnsXYZ2Clay(tnsVector3d xyz,tnsVector3d rgb);
  1223. void tnsRGB2Clay(tnsVector3d rgb, tnsVector3d clay);
  1224. void tnsClay2RGB(tnsVector3d clay, tnsVector3d rgb);
  1225. void tns2LogsRGBSingle(real* a);
  1226. void tns2LinearsRGBSingle(real* a);
  1227. void tns2LogsRGB(real* srgb);
  1228. void tns2LinearsRGB(real* srgb);
  1229. void tnsRGB2OKLAB(real* rgb, real* oklab);
  1230. void tnsOKLAB2RGB(real* oklab, real* rgb);
  1231. void tnsHCY2RGBLinear(real *hcy, real *rgb);
  1232. void tnsRGB2HCYLinear(real *rgb, real *hcy);
  1233. void tnsHCY2RGB(real *hcy, real *rgb);
  1234. void tnsRGB2HCY(real *rgb, real *hcy);
  1235. void tnsRGB2HSL(real *rgb, real *hsl);
  1236. void tnsHSL2RGB(real *hsl, real *rgb);
  1237. #ifdef __cplusplus
  1238. extern "C"{
  1239. #endif
  1240. extern const char* LA_TNS_LIB_COMMON;
  1241. #ifdef __cplusplus
  1242. }
  1243. #endif