*/}}

la_tns.h 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255
  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 "tinycthread.h"
  21. #include <float.h>
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. extern const char* TNS_SHADER_COLOR_COMMON;
  26. extern const char* TNS_VERTEX_SIMPLE_MATCAP;
  27. extern const char* TNS_FRAGMENT_SIMPLE_MATCAP;
  28. extern const char* TNS_VERTEX_GRID;
  29. extern const char* TNS_FRAGMENT_TRANSPARNT_GRID;
  30. extern const char* LA_FLOOR_VERTEX_SHADER;
  31. extern const char* LA_FLOOR_FRAGMENT_SHADER;
  32. extern const char* LA_IMM_VERTEX_SHADER;
  33. extern const char* LA_IMM_FRAGMENT_SHADER;
  34. extern const char* LA_RAY_VERTEX_SHADER;
  35. extern const char* LA_SHADER_LIB_FXAA;
  36. extern const char* LA_RAY_FRAGMENT_SHADER;
  37. extern const char* LA_SCENE_VERTEX_SHADER;
  38. extern const char* LA_SCENE_FRAGMENT_SHADER;
  39. extern const char* LA_CASCADE_SHADOW_VERTEX_SHADER;
  40. extern const char* LA_CASCADE_SHADOW_FRAGMENT_SHADER;
  41. extern const char* LA_SELECTION_VERTEX_SHADER;
  42. extern const char* LA_SELECTION_FRAGMENT_SHADER;
  43. #ifdef __cplusplus
  44. }
  45. #endif
  46. #define TNS_PI 3.1415926535897932384626433832795
  47. #define deg(r) r / TNS_PI * 180.0
  48. #define rad(d) d *TNS_PI / 180.0
  49. #define TNS_COLOR_SPACE_SRGB 0
  50. #define TNS_COLOR_SPACE_CLAY 1
  51. //typedef real tnsMatrix33d[9];
  52. typedef float tnsMatrix44f[16];
  53. typedef real tnsMatrix44d[16];
  54. typedef real tnsVector2d[2];
  55. typedef real tnsVector3d[3];
  56. typedef real tnsVector4d[4];
  57. typedef float tnsVector3f[3];
  58. typedef int tnsVector2i[2];
  59. typedef struct _tnsMatrixStackItem tnsMatrixStackItem;
  60. struct _tnsMatrixStackItem
  61. {
  62. tnsMatrix44d view;
  63. tnsMatrix44d model;
  64. tnsMatrix44d projection;
  65. };
  66. typedef struct _tnsMatrixStack tnsMatrixStack;
  67. struct _tnsMatrixStack
  68. {
  69. tnsMatrixStackItem *level;
  70. int current_level;
  71. int max_level;
  72. };
  73. typedef struct _tnsShader tnsShader;
  74. struct _tnsShader{
  75. laListItem Item;
  76. int vtShaderID;
  77. int fgShaderID;
  78. int gsShaderID;
  79. int glProgramID;
  80. int CustomID;
  81. int iModel, iProjection, iView, iProjectionInverse;
  82. int iShadow;
  83. int iVertex, iNormal, iColor, iUV;
  84. int iUseNormal;
  85. int iTexColor,iTexNormal,iTexGPos;
  86. int iTexColorMS;
  87. int iMultiplyColor, StateMultiplyColor;
  88. int iTextureMode, StateTextureMode, iColorMode,iHCYGamma;
  89. int iSampleAmount, StateSampleAmount;
  90. int iInputColorSpace, iOutputColorSpace, iShowStripes;
  91. int iDoOffset;
  92. int uViewDir,uViewPos,uFOV,uNear,uFar;
  93. };
  94. typedef struct _tnsTexture tnsTexture;
  95. STRUCTURE(tnsCommand){
  96. GLenum Mode;
  97. short Dimensions; // 2 or 3
  98. short UVDimensions; // 2 or 3
  99. char UseVert;
  100. char UseColor;
  101. char UseNormal;
  102. char UseTexCoord;
  103. char UseIndex;
  104. GLenum PolyMode; //0-solid 1-wire
  105. GLenum Shade; //0-falt 1-smooth
  106. GLfloat UniformColor[4];
  107. int NumVert;
  108. int NumIndex;
  109. int VertBegin;
  110. int VertEnd; //'END'is the next one after the last one.
  111. int ColorBegin;
  112. int ColorEnd;
  113. int TexCoordBegin;
  114. int TexCoordEnd;
  115. int NormalBegin;
  116. int NormalEnd;
  117. GLushort IndexBegin;
  118. GLushort IndexEnd;
  119. tnsShader *ReplaceShader;
  120. tnsTexture *ColorTexture;
  121. int TextureMode;
  122. int MultiplyColor;
  123. GLfloat LineWidth,PointSize;
  124. };
  125. typedef struct _tnsMain tnsMain;
  126. typedef struct _tnsWorld tnsWorld;
  127. typedef struct _tnsObject tnsObject;
  128. struct _tnsWorld
  129. {
  130. laListItem Item;
  131. laListHandle RootObjects;
  132. tnsObject *ActiveRoot;
  133. laListHandle AllObjects;
  134. laListHandle Materials;
  135. u16bit TimeYear;
  136. u8bit TimeMonth;
  137. u8bit TimeDay;
  138. laListHandle BezierCurves;
  139. laListHandle Meshes;
  140. };
  141. NEED_STRUCTURE(tnsLoopItem);
  142. NEED_STRUCTURE(tnsRenderLine);
  143. NEED_STRUCTURE(tnsRenderBuffer);
  144. STRUCTURE(tnsImage){
  145. laListItem Item;
  146. void* MemPNG;
  147. tnsTexture* Texture;
  148. int UserCount;
  149. };
  150. struct _tnsMain {
  151. laListItem Item;
  152. tnsMatrixStack stack;
  153. int vsx,vsy,vsw,vsh;//for saving scissor etc.
  154. int vol,vor,vou,vob;//for saving ortho etc.
  155. laListHandle Shaders;
  156. int NextShaderIndex;
  157. tnsShader *CurrentShader;
  158. tnsShader *BindedShader;
  159. //int MatrixMode;
  160. int IsOffscreen;
  161. laListHandle Offscreens;
  162. char *GLVersionStr;
  163. char *GLVendorStr;
  164. char *GLRendererStr;
  165. char *GLSLVersionStr;
  166. tnsShader* immShader;
  167. tnsShader* RayShader;
  168. tnsShader* ShadowShader;
  169. tnsShader* SceneShader;
  170. tnsShader* SelectionShader;
  171. tnsShader* FloorShader;
  172. int GlobalVAO;
  173. tnsShader *uiShader;
  174. tnsShader *stringShader;
  175. tnsShader *TextureShader;
  176. tnsShader *RectangleTextureShader;
  177. tnsShader *TextureMultiplyShader;
  178. tnsShader *MSTextureShader;
  179. tnsShader *MSATextureShader;
  180. tnsShader *TEST_MatcapShader;
  181. tnsShader *TransparentGridShader;
  182. tnsShader *SobelColorShader;
  183. tnsShader *SobelShader;
  184. tnsShader *ExtraBuffersShader;
  185. laListHandle Textures;
  186. tnsTexture *PreviewTexture;
  187. GLenum GlTextureSets;
  188. // Corresponds to current GL_TEXTURE0/1...
  189. tnsTexture *TexColor;
  190. tnsTexture *TexRenderbuffer;
  191. // For commands
  192. tnsTexture *StateTexColor;
  193. int StateTextureMode;
  194. int StateMultiplyColor;
  195. int StateUseNormal;
  196. int SetUseNormal;
  197. tnsShader* StateShader;
  198. GLfloat StateColor[4];
  199. GLfloat StateLineWidth,SetLineWidth;
  200. GLfloat StatePointSize,SetPointSize;
  201. GLfloat* Vert;
  202. GLuint VertBufObject;
  203. int NextVert, MaxVert;
  204. GLfloat* Color;
  205. GLuint ColorBufObject;
  206. int NextColor, MaxColor;
  207. GLfloat* Normal;
  208. GLuint NormalBufObject;
  209. int NextNormal, MaxNormal;
  210. GLfloat* TexCoord;
  211. GLuint TexCoordBufObject;
  212. int NextTexCoord, MaxTexCoord;
  213. GLuint* Index;
  214. GLuint IndexBufObject;
  215. int NextIndex, MaxIndex;
  216. tnsCommand* DrawingCommand;
  217. int NextCommand, MaxCommand;
  218. tnsWorld World;
  219. laListHandle RenderBuffers;
  220. tnsRenderBuffer *ActiveRenderBuffer;
  221. laListHandle Images;
  222. };
  223. typedef struct _tnsTexture tnsTexture;
  224. struct _tnsTexture
  225. {
  226. laListItem Item;
  227. int IsRenderBuffer;
  228. GLuint GLTexHandle;
  229. GLint GLTexBitsType; //like GL_RGBA
  230. GLuint GLTexType; //like GL_TEXTURE_2D
  231. int Multisample;
  232. int Width;
  233. int Height;
  234. int Slices;
  235. void *DrawData;
  236. int RBWidth, RBHeight;
  237. int ElemSize;
  238. void *TextureReadBack;
  239. void **SamplePtr;
  240. laListHandle PendingSamples;
  241. laListHandle ErasedSamples;
  242. laListHandle LineStrips;
  243. };
  244. typedef struct _tnsOffscreen tnsOffscreen;
  245. struct _tnsOffscreen
  246. {
  247. laListItem Item;
  248. tnsTexture *pColor[16];
  249. tnsTexture *pDepth;
  250. GLuint FboHandle;
  251. int UseSecondary;
  252. };
  253. extern const GLuint TNS_ATTACHMENT_ARRAY_NONE[];
  254. extern const GLuint TNS_ATTACHMENT_ARRAY[];
  255. extern const GLuint TNS_ATTACHMENT_ARRAY_1[];
  256. extern const GLuint TNS_ATTACHMENT_ARRAY_2[];
  257. extern const GLuint TNS_ATTACHMENT_ARRAY_1_2[];
  258. extern const GLuint TNS_ATTACHMENT_ARRAY_0_1_2[];
  259. extern const GLenum TNS_WINDOW_DRAWBUFFER_ARRAY[];
  260. #define TNS_PROJECTION_MATRIX 1
  261. #define TNS_MODEL_MATRIX 2
  262. #define TNS_VIEW_MATRIX 3
  263. #define TNS_TEXTURE_MATRIX 4
  264. //==========================================================================[FT]
  265. #include "freetype/ftglyph.h"
  266. #include "freetype/ftoutln.h"
  267. #include "freetype/fttrigon.h"
  268. #include "ft2build.h"
  269. #include <stdarg.h>
  270. #include <stdlib.h>
  271. #include <string.h>
  272. NEED_STRUCTURE(tnsTexture);
  273. typedef struct _tnsFontSingleCharacter tnsFontSingleCharacter;
  274. struct _tnsFontSingleCharacter
  275. {
  276. tnsTexture *Tex;
  277. int Generated;
  278. short width;
  279. short height;
  280. real advx;
  281. short advy;
  282. short deltax;
  283. short deltay;
  284. short bufferx;
  285. short buffery;
  286. };
  287. #define TNS_UNICODE_COUNT ((unsigned int)(1<<17))
  288. #define TNS_MONO_COUNT (0x045f)
  289. typedef struct _tnsFont tnsFont;
  290. struct _tnsFont
  291. {
  292. laListItem Item;
  293. char *fontName;
  294. char *IconFontName;
  295. tnsFontSingleCharacter** characters; /* [(1<<17)] TNS_UNICODE_COUNT Unicode plane 0-1 */
  296. tnsFontSingleCharacter** monocharacters; /* [0x045f] TNS_MONO_COUNT Up to cryllic. */
  297. FT_Library ftlib;
  298. FT_Face ftface[16];
  299. FT_Face ftfacemono;
  300. int NumFaces;/* excludes mono. */
  301. real MonoScale;
  302. real MonoAdvance;
  303. real size;
  304. unsigned int height;
  305. tnsTexture TexBuffer;
  306. int CurrentX;
  307. int CurrentY;
  308. };
  309. typedef struct _tnsFontManager tnsFontManager;
  310. struct _tnsFontManager
  311. {
  312. laListHandle Fonts;
  313. tnsFont *UsingFont;
  314. tnsFont *VectorsGrapghs;
  315. unsigned LastDlst;
  316. };
  317. typedef struct _tnsFontBoundBox tnsFontBoundBox;
  318. struct _tnsFontBoundBox
  319. {
  320. int x, y, w, h; /* Upper Left and width,height */
  321. };
  322. #define TNS_FONT_BUFFER_W 512
  323. #define TNS_FONT_BUFFER_H 512
  324. //=====================================================[3d comp]
  325. typedef struct _tnsWorld tnsWorld;
  326. typedef struct _tnsObject tnsObject;
  327. #define TNS_ROTATION_XYZ_EULER 0
  328. #define TNS_ROTATION_XZY_EULER 1
  329. #define TNS_ROTATION_YXZ_EULER 2
  330. #define TNS_ROTATION_YZX_EULER 3
  331. #define TNS_ROTATION_ZXY_EULER 4
  332. #define TNS_ROTATION_ZYX_EULER 5
  333. #define TNS_ROTATION_QUATERNION 6
  334. #define TNS_OBJECT_ROOT 0
  335. #define TNS_OBJECT_INSTANCER (1<<0)
  336. #define TNS_OBJECT_CAMERA (1<<1)
  337. #define TNS_OBJECT_LIGHT (1<<2)
  338. #define TNS_OBJECT_MESH (1<<3)
  339. #define TNS_OBJECT_FLAGS_SELECTED 1
  340. NEED_STRUCTURE(tnsBatch)
  341. #define TNS_EVAL_LAYER_SOLID (1<<0)
  342. #define TNS_EVAL_LAYER_OVERLAY (1<<1)
  343. #define TNS_EVAL_LAYER_OUTLINE (1<<2)
  344. #define TNS_EVAL_LAYER_SELECTION (1<<3)
  345. NEED_STRUCTURE(tnsEvaluatedInstance);
  346. typedef void (*tnsDrawEvaluatedInstanceF)(tnsEvaluatedInstance* ei, void* CustomData);
  347. STRUCTURE(tnsEvaluatedInstance){
  348. tnsObject *Object;
  349. tnsMatrix44d Mat;
  350. int IsActive;
  351. int MeshSelectionType;
  352. int InstanceSelectionID;
  353. tnsDrawEvaluatedInstanceF Draw;
  354. };
  355. STRUCTURE(tnsEvaluateData){
  356. int Done;
  357. tnsObject *Active;
  358. int FillOutline;
  359. int FillSelectionID;
  360. int OverrideID;
  361. tnsEvaluatedInstance* Commands; int NextCommand, MaxCommand;
  362. tnsEvaluatedInstance* Outlines; int NextOutline, MaxOutline;
  363. tnsEvaluatedInstance* Overlays; int NextOverlay, MaxOverlay;
  364. tnsEvaluatedInstance* Selections; int NextSelection, MaxSelection;
  365. tnsMatrix44d* MatArr; int NextMat, MaxMat;
  366. };
  367. NEED_STRUCTURE(laRackPageCollection);
  368. STRUCTURE(tnsObject){
  369. laListItem Item;
  370. int Type;
  371. int SelectID;
  372. int Flags;
  373. //u64bit ID;
  374. laSafeString *Name;
  375. int DrawMode;
  376. int Show;
  377. int ShowOnRender;
  378. int HideChildren;
  379. int RotationMode;
  380. int IsInstanced;
  381. real GLocation[3];
  382. real GRotation[3];
  383. real GScale;//Only allow uniform scale
  384. real Location[3];
  385. real Rotation[4];
  386. real Scale;
  387. // delta transforms for animation & drivers.
  388. real DLocation[3];
  389. real DRotation[3];
  390. real DScale;
  391. tnsMatrix44d GlobalTransform;
  392. tnsMatrix44d SelfTransform;
  393. tnsMatrix44d DeltaTransform;
  394. tnsMatrix44d InstanceTransform;
  395. //tnsMatrix44d CameraTransform;
  396. tnsObject *Active; // may be used to store last select info in child objects.
  397. tnsObject *InRoot;
  398. tnsObject *ParentObject; // reused as root active sun.
  399. laListHandle ChildObjects;
  400. laRackPageCollection* Drivers; // rack
  401. laListHandle Actions;
  402. tnsEvaluateData Evaluated; // runtime
  403. };
  404. NEED_STRUCTURE(laNodeInSocket);
  405. NEED_STRUCTURE(laNodeOutSocket);
  406. STRUCTURE(tnsTransformNode){
  407. laBaseNode Base;
  408. laNodeInSocket* Mat;
  409. tnsObject* Target;
  410. };
  411. STRUCTURE(tnsMakeTransformNode){
  412. laBaseNode Base;
  413. laNodeInSocket* Loc; laNodeInSocket* Rot; laNodeInSocket* Angle; laNodeInSocket* Sca;
  414. laNodeOutSocket* Out;
  415. tnsMatrix44d Mat; tnsVector3d UseLoc; tnsVector3d UseRot; real UseSca; real UseAngle;
  416. };
  417. #define TNS_CAMERA_PERSP 0
  418. #define TNS_CAMERA_ORTHO 1
  419. #define TNS_ID_TO_COLOR(color, i) \
  420. {color[0]=(real)((i & 0x000000FF)>>0)/255.0; color[1]=(real)((i & 0x0000FF00)>>8)/255.0; color[2]=(real)((i & 0x00FF0000)>>16)/255.0;}
  421. #define TNS_MATERIAL_DRAW_MODE_SOLID 0
  422. #define TNS_MATERIAL_DRAW_MODE_WIRE 1
  423. typedef struct _tnsMaterial tnsMaterial;
  424. struct _tnsMaterial
  425. {
  426. laListItem Item;
  427. laSafeString *Name;
  428. int ID;
  429. int DrawMode;
  430. real Color[4];
  431. real LinearColor[4];
  432. real SpectacularColor[4];
  433. real ReflexThreshold;
  434. real ReflexStrengh;
  435. real ReflexSharpeness;
  436. real LowBrightnessColor[4]; //Windows are lighten up in the evenings
  437. u8bit HaloMode;
  438. };
  439. #define TNS_CAMERA_PERSPECTIVE 0
  440. #define TNS_CAMERA_ORTHO 1
  441. #define TNS_CAMERA_FISHEYE 2
  442. STRUCTURE(tnsInstancer){
  443. tnsObject Base;
  444. tnsObject* DefaultInstance;
  445. tnsObject* RuntimeInstance;
  446. };
  447. STRUCTURE(tnsCamera){
  448. tnsObject Base;
  449. int CameraType;
  450. real FOV;
  451. real ZMin, ZMax;
  452. real FocusDistance;
  453. real OrthScale;
  454. tnsVector3d RenderViewDir;
  455. };
  456. STRUCTURE(tnsLight){
  457. tnsObject Base;
  458. int LightType;
  459. int UniDirectional;
  460. real Strength;
  461. tnsMaterial *Material;
  462. };
  463. #define TNS_MESH_FLAG_SELECTED (1<<0)
  464. #define TNS_MESH_FLAG_PICKED (1<<1)
  465. #define TNS_MESH_FLAG_LOOP_REVERSE (1<<2)
  466. STRUCTURE(tnsMVert){
  467. laListItem Item;
  468. tnsVector3d p;
  469. tnsVector3d n;
  470. int flags;
  471. u32bit i;
  472. laListHandle elink;
  473. //laListHandle flink;
  474. };
  475. NEED_STRUCTURE(tnsMFace);
  476. STRUCTURE(tnsMEdge){
  477. laListItem Item;
  478. tnsMVert *vl;
  479. tnsMVert *vr;
  480. tnsMFace *fl;
  481. tnsMFace *fr;
  482. u32bit i;
  483. int flags;
  484. };
  485. STRUCTURE(tnsMFace){
  486. laListItem Item;
  487. laListHandle l; //list item pointer of edges
  488. tnsVector3d n;
  489. tnsVector3d c;
  490. short looplen;
  491. short mat;
  492. u32bit i;
  493. int flags;
  494. };
  495. STRUCTURE(tnsVert){
  496. tnsVector3f p;
  497. tnsVector3f n;
  498. int flags;
  499. };
  500. STRUCTURE(tnsEdge){
  501. int l,r;
  502. int flags;
  503. };
  504. STRUCTURE(tnsFace){
  505. int* loop;
  506. int flags;
  507. tnsVector3f n;
  508. short looplen;
  509. };
  510. STRUCTURE(tnsBatchCommand){
  511. laListItem Item;
  512. char* name;
  513. int DrawElements;
  514. GLuint EBO; //elem
  515. u32bit ElementCount;
  516. GLenum DrawAs;
  517. GLuint CBO; int ColorDimension; int OverrideColorArray;
  518. int Dimension;
  519. int HiddenByDefault;
  520. int UseUniformColor; real UniformColor[4];
  521. real Width;
  522. };
  523. STRUCTURE(tnsBatch){
  524. laListItem Item;
  525. GLuint VBO; //vert
  526. GLuint NBO; int HasNormal; //normal
  527. GLuint CBO; int HasColor; //color
  528. u32bit NumVert;
  529. int Dimension;
  530. int NormalDimension;
  531. int ColorDimension;
  532. laListHandle Branches;
  533. GLuint BeginElementOffset;
  534. };
  535. #define TNS_MESH_OBJECT_MODE 0
  536. #define TNS_MESH_EDIT_MODE 1
  537. extern laPropContainer* TNS_PC_OBJECT_GENERIC;
  538. extern laPropContainer* TNS_PC_OBJECT_INSTANCER;
  539. extern laPropContainer* TNS_PC_OBJECT_CAMERA;
  540. extern laPropContainer* TNS_PC_OBJECT_LIGHT;
  541. extern laPropContainer* TNS_PC_OBJECT_MESH;
  542. #define TNS_HINT_TRANSFORM (1<<1)
  543. #define TNS_HINT_GEOMETRY (1<<0)
  544. STRUCTURE(tnsMeshFaceStorageSingleHead){
  545. int looplen, flags; //[1] [5] [4] [2] ... [-1 as end]
  546. };
  547. STRUCTURE(tnsMeshFaceStorage){
  548. int len; int arr;
  549. };
  550. STRUCTURE(tnsMeshObject){
  551. tnsObject Base;
  552. tnsVert* v; int totv, maxv;
  553. tnsEdge* e; int tote, maxe; // I intend this to only stores floating edges.
  554. tnsFace* f; int totf, maxf;
  555. laListHandle mv; int totmv;
  556. laListHandle me; int totme;
  557. laListHandle mf; int totmf;
  558. int TriangleCount;
  559. int TriangulatedEdgeCount;
  560. tnsMVert* LastSelectV, *FirstSelectV;
  561. tnsMEdge* LastSelectE, *FirstSelectE;
  562. tnsBatch *Batch;
  563. tnsBatch *ExtraBatch;
  564. int Mode;
  565. };
  566. STRUCTURE(tnsEdgeHashEdge){
  567. int tv; tnsMEdge* me;
  568. };
  569. STRUCTURE(tnsEdgeHashVert){
  570. tnsEdgeHashEdge* e; int max, next; tnsMVert* mv;
  571. };
  572. STRUCTURE(tnsEdgeHash){
  573. tnsEdgeHashVert* vl; int max,next;
  574. };
  575. #define TNS_TILE(tile, r, c, CCount) \
  576. tile[r * CCount + c]
  577. #define TNS_CLAMP(a, Min, Max) \
  578. a = a < Min ? Min : (a > Max ? Max : a)
  579. #define TNS_MAX2(a, b) \
  580. (a > b ? a : b)
  581. #define TNS_MIN2(a, b) \
  582. (a < b ? a : b)
  583. #define TNS_MAX3(a, b, c) \
  584. (a > TNS_MAX2(b, c) ? a : TNS_MAX2(b, c))
  585. #define TNS_MIN3(a, b, c) \
  586. (a < TNS_MIN2(b, c) ? a : TNS_MIN2(b, c))
  587. #define TNS_MAX2_INDEX(a, b) \
  588. (a > b ? 0 : 1)
  589. #define TNS_MIN2_INDEX(a, b) \
  590. (a < b ? 0 : 1)
  591. #define TNS_MAX3_INDEX(a, b, c) \
  592. (a > b ? (a > c ? 0 : (b > c ? 1 : 2)) : (b > c ? 1 : 2))
  593. #define TNS_MIN3_INDEX(a, b, c) \
  594. (a < b ? (a < c ? 0 : (b < c ? 1 : 2)) : (b < c ? 1 : 2))
  595. #define TNS_MAX3_INDEX_ABC(x, y, z) \
  596. (x > y ? (x > z ? a : (y > z ? b : c)) : (y > z ? b : c))
  597. #define TNS_MIN3_INDEX_ABC(x, y, z) \
  598. (x < y ? (x < z ? a : (y < z ? b : c)) : (y < z ? b : c))
  599. #define TNS_ABC(index) \
  600. (index == 0 ? a : (index == 1 ? b : c))
  601. #define TNS_DOUBLE_CLOSE_ENOUGH(a, b) \
  602. (((a) + DBL_EDGE_LIM) >= (b) && ((a)-DBL_EDGE_LIM) <= (b))
  603. //#define TNS_DOUBLE_CLOSE_ENOUGH(a,b) \
  604. //(((a)+0.00000000001)>=(b) && ((a)-0.0000000001)<=(b))
  605. #define TNS_FLOAT_CLOSE_ENOUGH_WIDER(a, b) \
  606. (((a) + 0.0000001) >= (b) && ((a)-0.0000001) <= (b))
  607. #define TNS_FRAMEBUFFER_PIXEL(FrameBuffer, Row, Column) \
  608. &((FrameBuffer)->Pixels[Row * FrameBuffer->TileSizeW * FrameBuffer->W * FrameBuffer->SubPixelSample + Column * FrameBuffer->H * FrameBuffer->TileSizeH * FrameBuffer->SubPixelSample])
  609. #define TNS_IN_TILE_X(RenderTile, Fx) \
  610. (RenderTile->FX <= Fx && RenderTile->FXLim >= Fx)
  611. #define TNS_IN_TILE_Y(RenderTile, Fy) \
  612. (RenderTile->FY <= Fy && RenderTile->FYLim >= Fy)
  613. #define TNS_IN_TILE(RenderTile, Fx, Fy) \
  614. (TNS_IN_TILE_X(RenderTile, Fx) && TNS_IN_TILE_Y(RenderTile, Fy))
  615. void tnsSetuptnsFontManager();
  616. tnsShader *tnsNewShaderProgram(int VertexShaderID, int FragmentShaderID, int GeometryShaderID);
  617. int tnsNewGeometryShader(char *Content);
  618. int tnsNewFragmentShader(char *Content);
  619. int tnsNewVertexShader(char *Content);
  620. void tnsDeleteShaderProgram(tnsShader* s);
  621. int tnsNextPowOf2(int i);
  622. int tnsEnableShader(int index);
  623. int tnsEnableShaderv(tnsShader *shader);
  624. int tnsUseShader(tnsShader *shader);
  625. void tnsUseImmShader();
  626. void tnsUseShadowShader();
  627. void tnsUseSceneShader();
  628. void tnsUseRayShader();
  629. void tnsUseTransparentGridShader();
  630. void tnsUseImagePeelShader();
  631. void tnsInitRenderKernel(int matrixStackLevel);
  632. void tnsInitBuiltinShaders();
  633. void tnsInitWindowDefaultRenderConfig();
  634. void tnsQuit();
  635. void tnsRestoreFromNanoVG();
  636. real *tnsGetModelMatrix();
  637. real *tnsGetViewMatrix();
  638. real *tnsGetProjectionMatrix();
  639. void tnsGetMVMatrix(tnsMatrix44d r);
  640. void tnsGetMVPMatrix(tnsMatrix44d r);
  641. void tnsResetModelMatrix();
  642. void tnsResetViewMatrix();
  643. void tnsResetProjectionMatrix();
  644. void tnsOrtho(real xMin, real xMax, real yMin, real yMax, real zMin, real zMax);
  645. void tnsPerspective(real fFov_rad, real fAspect, real zMin, real zMax);
  646. void tnsPopMatrix();
  647. void tnsPushMatrix();
  648. void tnsTranslate3d(real x, real y, real z);
  649. void tnsPreTranslate3d(real x, real y, real z);
  650. void tnsRotate4d(real degrees, real x, real y, real z);
  651. void tnsPreRotate4d(real degrees, real x, real y, real z);
  652. void tnsScale3d(real x, real y, real z);
  653. void tnsPreScale3d(real x, real y, real z);
  654. void tnsColor4d(real r, real g, real b, real a);
  655. void tnsColor4dv(real *rgba);
  656. void tnsLineWidth(real Width);
  657. void tnsPointSize(real PointSize);
  658. tnsBatch *tnsCreateBatch(u32bit NumVert, int Dimension, float *Data, int NormalDimension, float *Normal, int ColorDimension, float *Colors);
  659. tnsBatch *tnsCreateBatchi(u32bit NumVert, int Dimension, int *Data);
  660. void tnsCommandUseWidth(tnsBatchCommand*c, real width);
  661. void tnsCommandUseUniformColor(tnsBatchCommand*c,real* color);
  662. void tnsCommandOverrideColorArray(tnsBatchCommand*c, int VertCount, int ColorDimension, float* colors);
  663. tnsBatchCommand *tnsCreateCommand(tnsBatch *b, const char* name, u32bit ElementCount, int Dimension, GLenum DrawAs, u32bit *Elements, int HiddenByDefault);
  664. void tnsDeleteBatch(tnsBatch *b);
  665. void tnsDrawBatch(tnsBatch* batch, const char* OverrideCommand, real* OverrideUniformColor, int OverrideAsArray);
  666. void tnsVertex3d(real x, real y, real z);
  667. void tnsVertex2d(real x, real y);
  668. void tnsVertexArray2d(real *verts, int amount);
  669. void tnsVertexArray3d(real *verts, int amount);
  670. void tnsColorArray4d(real *colors, int amount);
  671. void tnsNormalArray3d(real *normals, int amount);
  672. void tnsTexCoordArray2d(real *coords, int amount);
  673. void tnsTexCoordArray3d(real *coords, int amount);
  674. void tnsIndexArray(GLuint *index, short amount);
  675. void tnsPackAs(GLenum Mode);
  676. void tnsFlush();
  677. #define tnsLinearItp(L, R, T) \
  678. ((L) * (1.0f - (T)) + (R) * (T))
  679. double tnsGetRatiod(real L, real R, real FromL);
  680. void tnsShaderApplyProjectionInverse(tnsShader *tns, tnsMatrix44d m);
  681. void tnsShaderApplyProjection(tnsShader *tns, tnsMatrix44d m);
  682. void tnsShaderApplyModel(tnsShader *tns, tnsMatrix44d m);
  683. void tnsShaderApplyView(tnsShader *tns, tnsMatrix44d m);
  684. void tnsShaderApplyNormalScaler(tnsShader *tns, tnsMatrix44d m);
  685. int tnsLineIntersectTest2d(tnsVector2d a1, tnsVector2d a2, tnsVector2d b1, tnsVector2d b2, double *aRatio);
  686. double tnsGetLineZ(tnsVector3d L, tnsVector3d R, real Ratio);
  687. double tnsGetLineZPoint(tnsVector3d L, tnsVector3d R, tnsVector3d FromL);
  688. double tnsGetRatio3d(tnsVector3d L, tnsVector3d R, tnsVector3d FromL);
  689. double tnsGetRatiod(real L, real R, real FromL);
  690. real tnsInterpolate(real L, real R, real T);
  691. void tnsInterpolate2dv(real *L, real *R, real T, real *Result);
  692. void tnsInterpolate3dv(real *L, real *R, real T, real *Result);
  693. void tnsInterpolateTripple2d(tnsVector2d v1, tnsVector2d v2, tnsVector2d v3, real ratio, tnsVector2d result);
  694. void tnsVectorMinus2d(tnsVector2d result, tnsVector2d l, tnsVector2d r);
  695. void tnsVectorMinus3d(tnsVector3d result, tnsVector3d l, tnsVector3d r);
  696. void tnsVectorSubtract3d(tnsVector3d l, tnsVector3d r);
  697. void tnsVectorPlus3d(tnsVector3d result, tnsVector3d l, tnsVector3d r);
  698. void tnsVectorAccum3d(tnsVector3d l, tnsVector3d r);
  699. void tnsVectorAccum2d(tnsVector2d l, tnsVector2d r);
  700. void tnsVectorNegate3d(tnsVector3d result, tnsVector3d l);
  701. void tnsVectorNegateSelf3d(tnsVector3d l);
  702. void tnsVectorCopy2d(tnsVector2d from, tnsVector2d to);
  703. void tnsVectorCopy3d(tnsVector3d from, tnsVector3d to);
  704. void tnsVectorCopy4d(tnsVector4d from, tnsVector4d to);
  705. void tnsVectorMultiSelf4d(tnsVector4d from, real num);
  706. void tnsVectorMultiSelf3d(tnsVector3d from, real num);
  707. void tnsVectorMultiSelf2d(tnsVector2d from, real num);
  708. void tnsVectorMulti4d(tnsVector4d to, tnsVector4d from, real num);
  709. void tnsVectorMulti3d(tnsVector3d to, tnsVector3d from, real num);
  710. void tnsVectorMulti2d(tnsVector2d to, tnsVector2d from, real num);
  711. real tnsDirectionToRad(tnsVector2d Dir);
  712. void tnsConvert44df(tnsMatrix44d from, tnsMatrix44f to);
  713. #define tnsVectorSet2(to, x,y) \
  714. {(to)[0]=x;(to)[1]=y;}
  715. #define tnsVectorSet3(to, x,y,z) \
  716. {(to)[0]=x;(to)[1]=y;(to)[2]=z;}
  717. #define tnsVectorSet4(to, x,y,z,w) \
  718. {(to)[0]=x;(to)[1]=y;(to)[2]=z;(to)[3]=w;}
  719. #define tnsVectorSet2v(to, from) \
  720. tnsVectorSet2(to,(from)[0],(from)[1])
  721. #define tnsVectorSet3v(to, from) \
  722. tnsVectorSet3(to,(from)[0],(from)[1],(from)[2])
  723. #define tnsVectorSet4v(to, from) \
  724. tnsVectorSet4(to,(from)[0],(from)[1],(from)[2],(from)[3])
  725. real tnsDistIdv2(real x1, real y1, real x2, real y2);
  726. real tnsDist3dv(tnsVector3d l, tnsVector3d r);
  727. real tnsDist2dv(tnsVector2d l, tnsVector2d r);
  728. real tnsLength3d(tnsVector3d l);
  729. real tnsLength2d(tnsVector3d l);
  730. void tnsNormalize3d(tnsVector3d result, tnsVector3d l);
  731. void tnsNormalizeSelf2d(tnsVector3d result);
  732. void tnsNormalizeSelf3d(tnsVector3d result);
  733. real tnsDot3d(tnsVector3d l, tnsVector3d r, int normalize);
  734. real tnsDot2d(tnsVector2d l, tnsVector2d r, int normalize);
  735. real tnsVectorCross3d(tnsVector3d result, tnsVector3d l, tnsVector3d r);
  736. real tnsAngleRad3d(tnsVector3d from, tnsVector3d to, tnsVector3d PositiveReference);
  737. void tnsApplyRotation33d(tnsVector3d result, tnsMatrix44d mat, tnsVector3d v);
  738. void tnsApplyRotation43d(tnsVector3d result, tnsMatrix44d mat, tnsVector3d v);
  739. void tnsApplyTransform43d(tnsVector3d result, tnsMatrix44d mat, tnsVector3d v);
  740. void tnsApplyNormalTransform43d(tnsVector3d result, tnsMatrix44d mat, tnsVector3d v);
  741. void tnsApplyTransform44d(tnsVector4d result, tnsMatrix44d mat, tnsVector4d v);
  742. void tnsApplyTransform44dTrue(tnsVector4d result, tnsMatrix44d mat, tnsVector4d v);
  743. void tnsLoadIdentity44d(tnsMatrix44d m);
  744. void tnsMakeOrthoMatrix44d(tnsMatrix44d mProjection, real xMin, real xMax, real yMin, real yMax, real zMin, real zMax);
  745. void tnsMakePerspectiveMatrix44d(tnsMatrix44d mProjection, real fFov_rad, real fAspect, real zMin, real zMax);
  746. void tnsMakeTranslationMatrix44d(tnsMatrix44d mTrans, real x, real y, real z);
  747. void tnsMakeRotationMatrix44d(tnsMatrix44d m, real angle_rad, real x, real y, real z);
  748. void tnsMakeScaleMatrix44d(tnsMatrix44d m, real x, real y, real z);
  749. void tnsMakeViewportMatrix44d(tnsMatrix44d m, real w, real h, real Far, real Near);
  750. void tnsInverse44d(tnsMatrix44d inverse, tnsMatrix44d mat);
  751. void tnsMultiply44d(tnsMatrix44d result, tnsMatrix44d l, tnsMatrix44d r);
  752. void tnsMakeRotationXMatrix44d(tnsMatrix44d m, real angle_rad);
  753. void tnsMakeRotationYMatrix44d(tnsMatrix44d m, real angle_rad);
  754. void tnsMakeRotationZMatrix44d(tnsMatrix44d m, real angle_rad);
  755. void tnsRemoveTranslation44d(tnsMatrix44d result, tnsMatrix44d mat);
  756. void tnsClearTranslation44d(tnsMatrix44d mat);
  757. real tnsAngleRad3d(tnsVector3d from, tnsVector3d to, tnsVector3d PositiveReference);
  758. real tnsLength3d(tnsVector3d l);
  759. void tnsNormalize2d(tnsVector2d result, tnsVector2d l);
  760. void tnsNormalize3d(tnsVector3d result, tnsVector3d l);
  761. void tnsNormalizeSelf3d(tnsVector3d result);
  762. real tnsDot3d(tnsVector3d l, tnsVector3d r, int normalize);
  763. real tnsVectorCross3d(tnsVector3d result, tnsVector3d l, tnsVector3d r);
  764. void tnsVectorCrossOnly3d(tnsVector3d result, tnsVector3d l, tnsVector3d r);
  765. void tnsExtractXYZEuler44d(tnsMatrix44d mat, real *xyz_result);
  766. void tnsPrintMatrix44d(tnsMatrix44d l);
  767. int tnsPointInsideTriangle3d(tnsVector3d v, tnsVector3d v0, tnsVector3d v1, tnsVector3d v2);
  768. int tnsIntersectPlaneRay(tnsVector3d n, tnsVector3d p0, tnsVector3d l0, tnsVector3d l, real* t);
  769. void tnsExtractXYZEuler44d(tnsMatrix44d mat, real *xyz_result);
  770. void tnsExtractLocation44d(tnsMatrix44d mat, real *xyz_result);
  771. void tnsExtractUniformScale44d(tnsMatrix44d mat, real *uniform_result);
  772. void tnsSelfMatrixChanged(tnsObject* o, int ApplyToChild);
  773. void tnsGlobalMatrixChanged(tnsObject* o, int ApplyToChild);
  774. void tnsGlobalMatrixChangedForDelta(tnsObject* o, int ApplyToChild);
  775. void tnsSelfTransformValueChanged(tnsObject* o);
  776. void tnsDeltaTransformValueChanged(tnsObject* o);
  777. void tnsGlobalTransformValueChanged(tnsObject* o);
  778. void tnsExtractDeltaTransformValue(tnsObject *o);
  779. void tnsExtractSelfTransformValue(tnsObject *o);
  780. void tnsExtractGlobalTransformValue(tnsObject *o);
  781. void tnsSetCurrentRoot(tnsObject *o);
  782. void tnsInitObjectBase(tnsObject *o, tnsObject *under, char *Name, int Type,
  783. real AtX, real AtY, real AtZ,
  784. real RotX, real RotY, real RotZ, real RotW, u8bit RotationMode,
  785. real Scale);
  786. tnsMeshObject *tnsLoadObjectFromFile(char *FileName);
  787. int tnsLoadExchange(char *FileName);
  788. tnsObject *tnsFindObject(char *Name, tnsObject *From);
  789. void tns_RegisterNodes();
  790. void tnsCopyObjectTransformationsLocal(tnsObject* to, tnsObject* from);
  791. void tnsCopyObjectTransformationsGlobal(tnsObject* to, tnsObject* from);
  792. void tnsRotateObjectGlobal(tnsObject *o, real x, real y, real z, real angle, real cx,real cy,real cz);
  793. void tnsRotateObjectLocal(tnsObject *o, real x, real y, real z, real angle, real gcx,real gcy,real gcz);
  794. void tnsRotateObjectLocalValues(tnsObject *o, real x, real y, real z);
  795. void tnsRotateObjectGlobalForDelta(tnsObject *o, real x, real y, real z, real angle, real cx,real cy,real cz);
  796. void tnsTranslateObjectGlobal(tnsObject *o, real x, real y, real z);
  797. void tnsTranslateObjectLocal(tnsObject *o, real x, real y, real z);
  798. void tnsMoveObjectLocal(tnsObject *o, real x, real y, real z);
  799. void tnsMoveObjectDelta(tnsObject *o, real x, real y, real z);
  800. void tnsMoveObjectGlobal(tnsObject *o, real x, real y, real z);
  801. void tnsMoveObjectGlobalForDelta(tnsObject *o, real x, real y, real z);
  802. void tnsScaleObject(tnsObject *o, real fac, real cx,real cy,real cz);
  803. void tnsScaleObjectDelta(tnsObject *o, real fac, real cx,real cy,real cz);
  804. int tnsCheckParentable(tnsObject* child, tnsObject* parent);
  805. void tnsParentObject(tnsObject *child, tnsObject *parent, int KeepTransform);
  806. void tnsUnparentObject(tnsObject *o, int KeepTransform);
  807. void tnsZoomViewingCamera(tnsCamera *c, real Ratio);
  808. void tnsRotateViewingCamera(tnsCamera *c, real x, real z);
  809. void tnsTranslateViewingCamera(tnsCamera *c, int ViewportW, int ViewportH, real x, real y);
  810. void tnsGetCameraMovingDeltas(tnsCamera *c, int ViewportW, int ViewportH, real x, real y, tnsVector4d p);
  811. laPropContainer* tnsget_ObjectType(tnsObject* o);
  812. void tnsDestroyRootObject(tnsObject *root);
  813. void tnsDestroyObject(tnsObject *o);
  814. tnsObject *tnsCreateRootObject(char *name);
  815. tnsCamera *tnsCreateCamera(tnsObject *under, char *Name, real FOV,
  816. real AtX, real AtY, real AtZ,
  817. real RotX, real RotY, real RotZ,
  818. real FocusDistance);
  819. tnsObject *tnsCreateInstancer(tnsObject *under, char *Name, real AtX, real AtY, real AtZ);
  820. tnsLight *tnsCreateLight(tnsObject *under, char *Name, real AtX, real AtY, real AtZ, real Strength, int UniDirectional);
  821. tnsMeshObject *tnsCreateMeshEmpty(tnsObject *under, char *Name, real AtX, real AtY, real AtZ);
  822. tnsMeshObject *tnsCreateMeshPlane(tnsObject *under, char *Name, real AtX, real AtY, real AtZ, real size);
  823. int tnsMergeMeshObjects(tnsMeshObject* into, tnsMeshObject* mo);
  824. tnsMeshObject* tnsDuplicateMeshObjects(tnsMeshObject* from);
  825. void tnsInitMeshPlane(tnsMeshObject* mo, real size);
  826. void tnsAddMMeshPlane(tnsMeshObject* mo, real size);
  827. int tnsAnyObjectsSelected(tnsObject* parent);
  828. void tnsDeselectAllObjects(tnsObject* parent);
  829. void tnsSelectAllObjects(tnsObject* parent);
  830. void tnsSelectObject(tnsObject* o, int Select, int Toggle);
  831. #define TNS_MMESH_EDGE_BIT 0x800000
  832. #define TNS_MMESH_FACE_BIT 0xC00000
  833. #define TNS_MMESH_TYPE_BIT (TNS_MMESH_FACE_BIT|TNS_MMESH_EDGE_BIT)
  834. tnsMFace* tnsMMeshNewFace(tnsMeshObject* mo);
  835. tnsMEdge* tnsMMeshNewEdge(tnsMeshObject* mo);
  836. tnsMVert* tnsMMeshNewVert(tnsMeshObject* mo);
  837. void tnsMMeshCalculateNormalFrom(tnsMFace* mf);
  838. int tnsMMeshCalculateNormal(tnsMeshObject* mo);
  839. void tnsMMeshEdgeAssignVerts(tnsMEdge* me,tnsMVert* mv1,tnsMVert* mv2);
  840. tnsMEdge* tnsMMeshVertsShareEdge(tnsMVert* mv0, tnsMVert* mv1);
  841. int tnsMMeshEdgeHasVert(tnsMEdge* me, tnsMVert* MV);
  842. tnsMFace* tnsMMeshEdgeShareFace(tnsMEdge* me0, tnsMEdge* me1);
  843. tnsMVert* tnsMMeshEdgeShareVert(tnsMEdge* me0, tnsMEdge* me1);
  844. tnsMVert* tnsMMeshEdgeAnotherVert(tnsMEdge* me, tnsMVert* v);
  845. tnsMVert* tnsMMeshEdgeStartingVert(tnsMEdge* me0, tnsMEdge* me1);
  846. int tnsMMeshSplitFace(tnsMeshObject* mo, tnsMFace* mf, tnsMEdge* me, tnsMFace** r_f1, tnsMFace** r_f2);
  847. tnsMFace* tnsMMeshVertsShareFace(tnsMVert* v1, tnsMVert* v2);
  848. tnsMEdge* tnsMMeshMakeEdge(tnsMeshObject* mo, tnsMVert* v1, tnsMVert* v2);
  849. void tnsMMeshFaceAddEdge(tnsMFace* mf, tnsMEdge* me);
  850. int tnsMMeshFaceMatches(tnsMFace* mf, int ecount, ...);
  851. tnsMFace* tnsMMeshMakeFaceN(tnsMeshObject* mo, int count, laListHandle* vip, tnsMEdge** r_fallback_me);
  852. tnsMFace* tnsMMeshMakeFace4v(tnsMeshObject* mo, tnsMVert* v1,tnsMVert* v2,tnsMVert* v3,tnsMVert* v4);
  853. int tnsMMeshLoopIsInverted(laListItemPointer* l);
  854. int tnsMMeshEdgeInsertVert(tnsMeshObject* mo, tnsMEdge* me, tnsMVert* mv, tnsMVert* ref_e1v_optional, tnsMEdge** r_e1, tnsMEdge** r_e2);
  855. tnsMVert* tnsMMeshEdgeInsertVertAt(tnsMeshObject* mo, tnsMEdge* me, real at, tnsMVert* ref_e1v_optional, tnsMEdge** r_e1, tnsMEdge** r_e2);
  856. void tnsMMeshRemoveFaceOnly(tnsMeshObject* mo, tnsMFace* mf);
  857. void tnsMMeshRemoveEdgeFace(tnsMeshObject* mo, tnsMEdge* me);
  858. void tnsMMeshRemoveVertEdgeFace(tnsMeshObject* mo, tnsMVert* mv);
  859. void tnsMMeshRefreshIndex(tnsMeshObject* mo);
  860. void tnsMeshEnterEditMode(tnsMeshObject* mo);
  861. void tnsMeshLeaveEditMode(tnsMeshObject* mo);
  862. int tnsMMeshAnySelected(tnsMeshObject* mo);
  863. void tnsMMeshClearExtraFlags(tnsMeshObject* mo);
  864. void tnsMMeshDeselectAll(tnsMeshObject* mo);
  865. void tnsMMeshSelectAll(tnsMeshObject* mo);
  866. void tnsMMeshSelectVert(tnsMeshObject* mo, tnsMVert* mv, int select, int toggle);
  867. void tnsMMeshSelectEdge(tnsMeshObject* mo, tnsMEdge* me, int select, int toggle);
  868. void tnsMMeshEnsureSelectionFromVerts(tnsMeshObject* mo);
  869. void tnsMMeshEnsureSelectionFromEdges(tnsMeshObject* mo);
  870. void tnsMMeshEnsureSelection(tnsMeshObject* mo, int SelectMode);
  871. void tnsMMeshExpandBandList(tnsMeshObject* mo, tnsMEdge* me, laListHandle* lst);
  872. int tnsMMeshSelectRingBandFrom(tnsMeshObject* mo, tnsMEdge* me, int ring_band, int select, int toggle);
  873. int tnsMMeshVertsCanMerge(tnsMeshObject* mo, tnsMVert* into, tnsMVert* mv);
  874. int tnsMMeshMergeVerts(tnsMeshObject* mo, tnsMVert* into, tnsMVert* mv);
  875. void tnsInvalidateMeshBatch(tnsMeshObject* mo);
  876. void tnsRegenerateMeshBatch(tnsMeshObject* mo);
  877. void tnsEnsureMeshBatch(tnsMeshObject* mo);
  878. void tnsEvaluateMeshObject(tnsMeshObject* mo, tnsEvaluateData* ed);
  879. void la_RegisterModellingOperators();
  880. void tnsGetCameraProjection(tnsMatrix44d* mat, int w, int h, tnsCamera* Camera);
  881. void tnsGetCameraViewProjection(tnsMatrix44d* mat, int w, int h, tnsCamera* Camera);
  882. void tnsApplyCameraView(int W, int H, tnsCamera *Camera);
  883. void tnsApplyShadowCameraView(tnsLight *Light);
  884. void tnsApplyModelMatrix(tnsMatrix44d m);
  885. void tnsLookAt(tnsObject *o, tnsVector3d Target, tnsVector3d Up);
  886. void tnsInvalidateEvaluation(tnsObject* o);
  887. void tnsFreeEvaluatedArray(tnsEvaluateData* ed);
  888. void tnsEvaluateThisObject(tnsObject *o, tnsEvaluateData* ed);
  889. void tnsSetObjectTreeEvaluationArgs(tnsObject* from, tnsObject* Active, int FillOutline, int FillSelectionID);
  890. void tnsEvaluateObjectTree(tnsObject* from, tnsEvaluateData* UseED);
  891. void tnsAddEvaluatedInstance(tnsEvaluateData* ed, tnsObject* ob, tnsDrawEvaluatedInstanceF Draw, int Layer,
  892. int IsActive, int MeshSelectionType, int InstanceSelectionID);
  893. void tnsDrawLayer(tnsEvaluateData* ed,int Layer,void* CustomData);
  894. void tnsDrawObjectTree(tnsObject* from, int Layers,void* CustomData);
  895. void tnsDrawObjectOrigins(tnsObject *from, tnsObject *active, int AllOrigins);
  896. void tnsDrawCursor(tnsObject* root);
  897. void tnsDrawScene(int W, int H, tnsObject *root);
  898. void tnsDrawWorld(int W, int H);
  899. tnsMaterial *tnsCreateMaterial(char *Name);
  900. tnsMaterial *tnsFindMaterialByIndex(int index);
  901. tnsMaterial *tnsFindMaterial(char *name);
  902. void tnsClearAll();
  903. void tnsClearColorv(real *rgba);
  904. void tnsClearColor(real r, real g, real b, real a);
  905. void tnsSwitchToCurrentWindowContext(void *wnd);
  906. void tnsRecalculateVertNormal(tnsVert *v);
  907. void tnsRecalculateFaceAverageNormal(tnsFace *f);
  908. int tnsLoadVectorGraphPackage(const char *name, unsigned int size);
  909. real tnsGetMonoFontAdvance();
  910. int tnsInvalidateFontCache();
  911. int tnsLoadSystemFontMono(char* from, char* mono);
  912. int tnsLoadSystemFont(char* from, char* name);
  913. int tnsGetTextureMemoryComponetCount(tnsTexture *t);
  914. void tnsUseNormal(int Use);
  915. void tnsUniformUseOffset(tnsShader* s, int use);
  916. tnsImage* tnsNewImage(void* MemPNG);
  917. void tnsUseImage(tnsImage* im);
  918. void tnsStopUsingImage(tnsImage* im);
  919. void tnsSetRayShaderUniformTextures(tnsOffscreen* doff);
  920. int tnsInit2DTexture(tnsTexture *t, GLint glInternalFormat, int w, int h, int Multisample);
  921. tnsTexture *tnsCreate2DTexture(GLint glInternalFormat, int w, int h, int Multisample);
  922. tnsTexture *tnsCreate3DTexture(GLint glInternalFormat, int w, int h, int slices);
  923. void tnsConfigure2DTexture(tnsTexture *t);
  924. void tnsConfigure3DTexture(tnsTexture *t);
  925. void tnsReconfigureTextureParameters(int Multisample);
  926. tnsOffscreen *tnsCreate2DOffscreen(int glInternalFormat, int w, int h, int Multisample, int WithDepth, int WithStencil);
  927. tnsOffscreen *tnsCreateDeferredOffscreen(int w, int h, int Multisample);
  928. void tnsCopyScreenTo2DTexture(tnsTexture *target, int x_lower_left, int y_lower_left, int w, int h);
  929. void tnsActiveTexture(GLenum tex);
  930. void tnsBindTexture(tnsTexture *t);
  931. void tnsUnbindTexture();
  932. void tnsUniformUseNormal(tnsShader* s, int Use);
  933. void tnsUniformUseTexture(tnsShader* s, int mode, int sample);
  934. void tnsUniformColorMode(tnsShader *s, int mode);
  935. void tnsUniformHCYGamma(tnsShader* s, float Gamma);
  936. void tnsUniformInputColorSpace(tnsShader* s, int ColorSpace);
  937. void tnsUniformOutputColorSpace(tnsShader* s, int ColorSpace);
  938. void tnsUniformShowColorOverflowStripes(tnsShader* s, int Show);
  939. void tnsUniformUseMultiplyColor(tnsShader* s, int enable);
  940. void tnsUseMaskTexture(tnsTexture *t);
  941. void tnsUseTexture(tnsTexture *t);
  942. void tnsUseNoTexture();
  943. void tnsUseMultiplyColor(int enable);
  944. void tnsDeleteTexture(tnsTexture *t);
  945. void tnsDraw2DTextureDirectly(tnsTexture *t, real x, real y, real w, real h);
  946. void tnsDraw2DTextureArg(tnsTexture *t,
  947. real x_upper_right, real y_upper_right, int w, int h,
  948. real *MultiplyColor,
  949. real LPadding, real RPadding, real TPadding, real BPadding);
  950. int tnsTextureMemorySize(tnsTexture *t, int mem);
  951. void tnsDelete2DOffscreen(tnsOffscreen *o);
  952. tnsOffscreen *tnsCreateOffscreenHandle();
  953. void tnsConfigureOffscreen(tnsOffscreen *off, int w, int h);
  954. void tnsAttach2DOffscreenBuffer(tnsOffscreen *target, GLuint attatchment, tnsTexture *use);
  955. void tnsDetach2DOffscreenBuffer(tnsOffscreen *target, GLuint which_attach_point);
  956. void tnsDrawToOffscreen(tnsOffscreen *toff, int HowMany, GLuint *AttachmentArray);
  957. void tnsDrawToExtraColorAttachment(tnsOffscreen *toff);
  958. void tnsDrawToExtraNormalAttachment(tnsOffscreen *toff);
  959. void tnsDrawToAllExtraAttachments(tnsOffscreen *toff);
  960. void tnsDrawToOffscreenOnlyBind(tnsOffscreen *toff, int HowMany, GLuint *AttachmentArray);
  961. void tnsReadFromOffscreen(tnsOffscreen *toff);
  962. void tnsPassColorBetweenOffscreens(tnsOffscreen *from, tnsOffscreen *to,
  963. GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLenum FilterMode);
  964. void tnsDrawToScreen();
  965. //==============================================[STR]
  966. int tnsUseFont(char *name);
  967. int laStopFontService();
  968. tnsFontSingleCharacter *tfntFetchVectorGraphTextureIDW(uint32_t ID);
  969. int tnsStringGetDimension(char* content, uint32_t* contentU, int Count, int WLimit, int* Rows, int UseMono);
  970. int tnsStringGetWidth(char *content, int Count, int UseMono);
  971. int tnsStringGetWidthU(uint32_t *contentU, int Count, int UseMono);
  972. void tnsDrawStringM(char *content, uint32_t* contentU, real Color[4], int L, int R, int T, int Flags);
  973. int tnsDrawLCD7_ProgressSystem(real x, real y, real Percent);
  974. void tnsDrawStringLCD(char *content, uint32_t* contentU, real Color[4], int L, int R, int T, int Flags);
  975. void tnsDrawStringAutoM(char *content, uint32_t* contentU, real Color[4], int L, int R, int T, int Flags);
  976. void tnsDrawStringAuto(char *content, real Color[4], int L, int R, int T, int Flags);
  977. void tnsDrawStringWithPriority(char *Label, char *MajorContent, real Color[4], int TextAlign, int L, int R, int T, int Flags);
  978. void tnsDrawVectorGraphPackage(int ID, real Color[4], int L, int R, int T, int B, int Align, int Flags);
  979. void tnsDrawIcon(uint32_t ID, real Color[4], int L,int R, int T, int Flags);
  980. void tnsUseFontCoord(real x, real y, real size);
  981. ///=================================
  982. void tnsMakeTriangle(real *arr, real x1, real y1, real x2, real y2, real x3, real y3);
  983. void tnsMakeQuad2d(real *arr, real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4);
  984. void tnsMakeQuadT2d(real *arr, real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4);
  985. 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);
  986. 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);
  987. void tnsMakeCircle2d(real *arr, int slices, real ctrX, real ctrY, real r, int jump);
  988. void tnsMakeArc2d(real *arr, int slices, real ctrX, real ctrY, real r, real rad_begin, real rad_end);
  989. void tnsMakeRing2d(real *arr, int *index, int slices, real ctrX, real ctrY, real r1, real r2);
  990. void tnsMakeLinerGradient3d(real *arr, int num_points, real r0, real g0, real b0, real r1, real g1, real b1);
  991. void tnsMakeLinerGradient4d(real *arr, int num_points, real r0, real g0, real b0, real a0, real r1, real g1, real b1, real a1);
  992. void tnsMakeLinerGradient3dv(real *arr, int num_points, real *rgb0, real *rgb1);
  993. void tnsMakeLinerGradient4dv(real *arr, int num_points, real *rgb0, real *rgb1);
  994. void tnsMakeFoucsSquare(int L, int R, int U, int B, int W);
  995. void tnsDrawFloor(real* CamPosition, real Far, int *ShowAxis);
  996. void tnsDraw2DGrid10(real L, real R, real U, real B, real xmin, real xmax, real ymin, real ymax, real MostDenseW, real MostDenseH,
  997. real* color4, real AlphaFactor, int ShowGrid, int TextAlign);
  998. void tnsMakeIndexUInt(unsigned int *result, int num, ...);
  999. void tnsMakeBridgedIndex(unsigned int *result, int num, int revert, int begin);
  1000. //================================
  1001. void DrawWireRect2dp(real x, real y, real x2, real y2);
  1002. void tnsViewportWithScissor(int x, int y, int w, int h);
  1003. void tnssRGB2XYZ(tnsVector3d rgb,tnsVector3d xyz);
  1004. void tnsClay2XYZ(tnsVector3d rgb,tnsVector3d xyz);
  1005. void tnsXYZ2sRGB(tnsVector3d xyz,tnsVector3d rgb);
  1006. void tnsXYZ2Clay(tnsVector3d xyz,tnsVector3d rgb);
  1007. void tnsRGB2Clay(tnsVector3d rgb, tnsVector3d clay);
  1008. void tnsClay2RGB(tnsVector3d clay, tnsVector3d rgb);
  1009. void tns2LogsRGBSingle(real* a);
  1010. void tns2LinearsRGBSingle(real* a);
  1011. void tns2LogsRGB(real* srgb);
  1012. void tns2LinearsRGB(real* srgb);
  1013. void tnsRGB2OKLAB(real* rgb, real* oklab);
  1014. void tnsOKLAB2RGB(real* oklab, real* rgb);
  1015. void tnsHCY2RGBLinear(real *hcy, real *rgb);
  1016. void tnsRGB2HCYLinear(real *rgb, real *hcy);
  1017. void tnsHCY2RGB(real *hcy, real *rgb);
  1018. void tnsRGB2HCY(real *rgb, real *hcy);