zglHeader.h 68 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986
  1. /*--------------------------------*/
  2. /*-----------= ZenGL =------------*/
  3. /*--------------------------------*/
  4. /* */
  5. /* version: 0.3.9 */
  6. /* date: 2013.03.06 */
  7. /* license: zlib */
  8. /* homepage: http://zengl.org */
  9. /* */
  10. /*-------- developed by: ---------*/
  11. /* */
  12. /* Andrey Kemka aka Andru */
  13. /* */
  14. /* mail: [email protected] */
  15. /* JID: [email protected] */
  16. /* ICQ: 496929849 */
  17. /* Skype: kemka.andrey */
  18. /* */
  19. /*--------------------------------*/
  20. /*
  21. * Copyright (c) 2012 Andrey Kemka
  22. *
  23. * This software is provided 'as-is', without any express or
  24. * implied warranty. In no event will the authors be held
  25. * liable for any damages arising from the use of this software.
  26. *
  27. * Permission is granted to anyone to use this software for any purpose,
  28. * including commercial applications, and to alter it and redistribute
  29. * it freely, subject to the following restrictions:
  30. *
  31. * 1. The origin of this software must not be misrepresented;
  32. * you must not claim that you wrote the original software.
  33. * If you use this software in a product, an acknowledgment
  34. * in the product documentation would be appreciated but
  35. * is not required.
  36. *
  37. * 2. Altered source versions must be plainly marked as such,
  38. * and must not be misrepresented as being the original software.
  39. *
  40. * 3. This notice may not be removed or altered from any
  41. * source distribution.
  42. */
  43. #ifndef __ZGLHEADER__
  44. #define __ZGLHEADER__
  45. #pragma pack(push,8)
  46. #include <stdio.h>
  47. #include <stdlib.h>
  48. #ifdef __linux__
  49. #include <dlfcn.h>
  50. #define __LINUX__
  51. #define sprintf_s sprintf
  52. #endif
  53. #if ( defined _WIN32 || defined _WIN64 )
  54. #include <windows.h>
  55. #define __WINDOWS__
  56. #if ( defined __MINGW32__ || defined __MINGW64__ )
  57. #define sprintf_s sprintf
  58. #endif
  59. #endif
  60. #ifndef ZGL_IMPORT
  61. #define ZGLEXTERN extern
  62. #else
  63. #define ZGLEXTERN
  64. #endif
  65. #define FALSE 0
  66. #define TRUE 1
  67. typedef unsigned char byte;
  68. typedef unsigned short ushort;
  69. typedef unsigned int uint;
  70. #ifndef __cplusplus
  71. typedef unsigned char bool;
  72. #else
  73. #define __CPP__
  74. #endif
  75. typedef struct
  76. {
  77. int Count;
  78. char **Items;
  79. } zglTStringList;
  80. #ifdef __WINDOWS__
  81. typedef long zglTFile;
  82. #else
  83. typedef uint zglTFile;
  84. #endif
  85. typedef zglTStringList zglTFileList;
  86. typedef struct
  87. {
  88. void *Memory;
  89. uint Size;
  90. uint Position;
  91. } zglTMemory, *zglPMemory;
  92. #ifdef __CPP__
  93. ZGLEXTERN void ( *__zgl_Init )( byte FSAA, byte StencilBits );
  94. static inline void zgl_Init( byte FSAA = 0, byte StencilBits = 0 )
  95. {
  96. __zgl_Init( FSAA, StencilBits );
  97. }
  98. #else
  99. ZGLEXTERN void ( *zgl_Init )( byte FSAA, byte StencilBits );
  100. #endif
  101. ZGLEXTERN void ( *zgl_Exit )();
  102. #define SYS_APP_INIT 0x000001
  103. #define SYS_APP_LOOP 0x000002
  104. #define SYS_LOAD 0x000003
  105. #define SYS_DRAW 0x000004
  106. #define SYS_UPDATE 0x000005
  107. #define SYS_EXIT 0x000006
  108. #define SYS_ACTIVATE 0x000007
  109. #define SYS_CLOSE_QUERY 0x000008
  110. #define INPUT_MOUSE_MOVE 0x000020
  111. #define INPUT_MOUSE_PRESS 0x000021
  112. #define INPUT_MOUSE_RELEASE 0x000022
  113. #define INPUT_MOUSE_WHEEL 0x000023
  114. #define INPUT_KEY_PRESS 0x000030
  115. #define INPUT_KEY_RELEASE 0x000031
  116. #define INPUT_KEY_CHAR 0x000032
  117. #define TEX_FORMAT_EXTENSION 0x000100
  118. #define TEX_FORMAT_FILE_LOADER 0x000101
  119. #define TEX_FORMAT_MEM_LOADER 0x000102
  120. #define TEX_CURRENT_EFFECT 0x000103
  121. #define SND_FORMAT_EXTENSION 0x000110
  122. #define SND_FORMAT_FILE_LOADER 0x000111
  123. #define SND_FORMAT_MEM_LOADER 0x000112
  124. #define SND_FORMAT_DECODER 0x000113
  125. #define VIDEO_FORMAT_DECODER 0x000130
  126. ZGLEXTERN void ( *zgl_Reg )( uint What, void *UserData );
  127. #define ZENGL_VERSION 1 // Major shr 16, ( Minor and $FF00 ) shr 8, Revision and $FF
  128. #define ZENGL_VERSION_STRING 2 // PChar
  129. #define ZENGL_VERSION_DATE 3 // PChar
  130. #define DIRECTORY_APPLICATION 101 // PChar
  131. #define DIRECTORY_HOME 102 // PChar
  132. #define LOG_FILENAME 203 // PPAnsiChar
  133. #define DESKTOP_WIDTH 300
  134. #define DESKTOP_HEIGHT 301
  135. #define RESOLUTION_LIST 302 // zglPResolutionList
  136. #define WINDOW_HANDLE 400 // TWindow(GNU/Linux), HWND(Windows), WindowRef(MacOS X)
  137. #define WINDOW_X 401
  138. #define WINDOW_Y 402
  139. #define WINDOW_WIDTH 403
  140. #define WINDOW_HEIGHT 404
  141. #define GAPI_CONTEXT 500 // GLXContext(GNU/Linux), HGLRC(Windows), TAGLContext(MacOS X)
  142. #define GAPI_DEVICE 500 // For ZenGL with Direct3D render only
  143. #define GAPI_MAX_TEXTURE_SIZE 501
  144. #define GAPI_MAX_TEXTURE_UNITS 502
  145. #define GAPI_MAX_ANISOTROPY 503
  146. #define GAPI_CAN_BLEND_SEPARATE 504 // Boolean
  147. #define GAPI_CAN_AUTOGEN_MIPMAP 505 // Boolean
  148. #define VIEWPORT_WIDTH 600
  149. #define VIEWPORT_HEIGHT 601
  150. #define VIEWPORT_OFFSET_X 602
  151. #define VIEWPORT_OFFSET_Y 603
  152. #define RENDER_FPS 700
  153. #define RENDER_BATCHES_2D 701
  154. #define RENDER_CURRENT_MODE 702
  155. #define RENDER_CURRENT_TARGET 703
  156. #define RENDER_VRAM_USED 704
  157. #define MANAGER_TIMER 800 // zglPTimerManager
  158. #define MANAGER_TEXTURE 801 // zglPTextureManager
  159. #define MANAGER_FONT 802 // zglPFontManager
  160. #define MANAGER_RTARGET 803 // zglPRenderTargetManager
  161. #define MANAGER_SOUND 804 // zglPSoundManager
  162. #define MANAGER_EMITTER2D 805 // zglPEmitter2DManager
  163. ZGLEXTERN size_t ( *zgl_Get )( uint What );
  164. ZGLEXTERN void ( *zgl_GetMem )( void **Mem, uint Size );
  165. ZGLEXTERN void ( *zgl_FreeMem )( void **Mem );
  166. //ZGLEXTERN void ( zgl_FreeStrList )( zglTStringList* List );
  167. #define COLOR_BUFFER_CLEAR 0x000001
  168. #define DEPTH_BUFFER 0x000002
  169. #define DEPTH_BUFFER_CLEAR 0x000004
  170. #define DEPTH_MASK 0x000008
  171. #define STENCIL_BUFFER_CLEAR 0x000010
  172. #define CORRECT_RESOLUTION 0x000020
  173. #define CORRECT_WIDTH 0x000040
  174. #define CORRECT_HEIGHT 0x000080
  175. #define APP_USE_AUTOPAUSE 0x000100
  176. #define APP_USE_LOG 0x000200
  177. #define APP_USE_ENGLISH_INPUT 0x000400
  178. #define APP_USE_DT_CORRECTION 0x000800
  179. #define WND_USE_AUTOCENTER 0x000100
  180. #define SND_CAN_PLAY 0x002000
  181. #define SND_CAN_PLAY_FILE 0x004000
  182. #define CLIP_INVISIBLE 0x008000
  183. ZGLEXTERN void ( *zgl_Enable )( uint What );
  184. ZGLEXTERN void ( *zgl_Disable )( uint What );
  185. // LOG
  186. #ifdef __CPP__
  187. ZGLEXTERN void ( *__log_Add )( const char *Message, bool Timings );
  188. static inline void log_Add( const char *Message, bool Timings = TRUE )
  189. {
  190. __log_Add( Message, Timings );
  191. }
  192. #else
  193. ZGLEXTERN void ( *log_Add )( const char *Message, bool Timings );
  194. #endif
  195. // WINDOW
  196. ZGLEXTERN void ( *wnd_SetCaption )( const char *NewCaption );
  197. ZGLEXTERN void ( *wnd_SetSize )( int Width, int Height );
  198. ZGLEXTERN void ( *wnd_SetPos )( int X, int Y );
  199. ZGLEXTERN void ( *wnd_ShowCursor )( bool Show );
  200. // SCREEN
  201. typedef struct
  202. {
  203. int Count;
  204. int* Width;
  205. int* Height;
  206. } zglTResolutionList, *zglPResolutionList;
  207. #define REFRESH_MAXIMUM 0
  208. #define REFRESH_DEFAULT 1
  209. ZGLEXTERN void ( *scr_Clear )();
  210. ZGLEXTERN void ( *scr_Flush )();
  211. ZGLEXTERN void ( *scr_SetVSync )( bool VSync );
  212. // RU: ВНИМАНИЕ: Функция уничтожает контекст OpenGL, что потребует перезагрузку ресурсов
  213. // EN: WARNING: Function will destroy OpenGL context, so all resources must be reloaded
  214. ZGLEXTERN void ( *scr_SetFSAA )( byte FSAA );
  215. ZGLEXTERN bool ( *scr_SetOptions )( ushort Width, ushort Height, ushort Refresh, bool FullScreen, bool VSync );
  216. ZGLEXTERN void ( *scr_CorrectResolution )( ushort Width, ushort Height );
  217. ZGLEXTERN void ( *scr_ReadPixels )( void **pData, ushort X, ushort Y, ushort Width, ushort Height );
  218. // GL
  219. #define TARGET_SCREEN 1
  220. #define TARGET_TEXTURE 2
  221. ZGLEXTERN void ( *Set2DMode )();
  222. #ifdef __CPP__
  223. ZGLEXTERN void ( *__Set3DMode )( float FOVY );
  224. static inline void Set3DMode( float FOVY = 45 )
  225. {
  226. __Set3DMode( FOVY );
  227. }
  228. #else
  229. ZGLEXTERN void ( *Set3DMode )( float FOVY );
  230. #endif
  231. // Z BUFFER
  232. ZGLEXTERN void ( *zbuffer_SetDepth )( float zNear, float zFar );
  233. ZGLEXTERN void ( *zbuffer_Clear )();
  234. // SCISSOR
  235. #ifdef __CPP__
  236. ZGLEXTERN void ( *__scissor_Begin )( int X, int Y, int Width, int Height, bool ConsiderCamera );
  237. static inline void scissor_Begin( int X, int Y, int Width, int Height, bool ConsiderCamera = TRUE )
  238. {
  239. __scissor_Begin( X, Y, Width, Height, ConsiderCamera );
  240. }
  241. #else
  242. ZGLEXTERN void ( *scissor_Begin )( int X, int Y, int Width, int Height, bool ConsiderCamera );
  243. #endif
  244. ZGLEXTERN void ( *scissor_End )();
  245. // INI
  246. /*
  247. ini_LoadFromFile : function( const FileName : String ) : Boolean;
  248. ini_SaveToFile : procedure( const FileName : String );
  249. ini_Add : procedure( const Section, Key : AnsiString );
  250. ini_Del : procedure( const Section, Key : AnsiString );
  251. ini_Clear : procedure( const Section : AnsiString );
  252. ini_IsSection : function( const Section : AnsiString ) : Boolean;
  253. ini_IsKey : function( const Section, Key : AnsiString ) : Boolean;
  254. _ini_ReadKeyStr : function( const Section, Key : AnsiString ) : PAnsiChar;
  255. ini_ReadKeyInt : function( const Section, Key : AnsiString ) : Integer;
  256. ini_ReadKeyFloat : function( const Section, Key : AnsiString ) : Single;
  257. ini_ReadKeyBool : function( const Section, Key : AnsiString ) : Boolean;
  258. ini_WriteKeyStr : function( const Section, Key, Value : AnsiString ) : Boolean;
  259. ini_WriteKeyInt : function( const Section, Key : AnsiString; Value : Integer ) : Boolean;
  260. ini_WriteKeyFloat : function( const Section, Key : AnsiString; Value : Single; Digits : Integer = 2 ) : Boolean;
  261. ini_WriteKeyBool : function( const Section, Key : AnsiString; Value : Boolean ) : Boolean;
  262. function ini_ReadKeyStr( const Section, Key : AnsiString ) : AnsiString;
  263. */
  264. // TIMERS
  265. typedef struct
  266. {
  267. bool Active;
  268. bool Custom;
  269. void *UserData;
  270. uint Interval;
  271. double LastTick;
  272. void* OnTimer;
  273. void ( *OnTimerEx )( void *Timer );
  274. void* Prev;
  275. void* Next;
  276. } zglTTimer, *zglPTimer;
  277. typedef struct
  278. {
  279. int Count;
  280. zglTTimer First;
  281. } zglTTimerManager, *zglPTimerManager;
  282. #ifdef __CPP__
  283. ZGLEXTERN zglPTimer ( *__timer_Add )( void *OnTimer, uint Interval, bool UseSenderForCallback, void *UserData );
  284. static inline void timer_Add( void *OnTimer, uint Interval, bool UseSenderForCallback = FALSE, void *UserData = NULL )
  285. {
  286. __timer_Add( OnTimer, Interval, UseSenderForCallback, UserData );
  287. }
  288. #else
  289. ZGLEXTERN zglPTimer ( *timer_Add )( void *OnTimer, uint Interval, bool UseSenderForCallback, void *UserData );
  290. #endif
  291. ZGLEXTERN void ( *timer_Del )( zglPTimer *Timer );
  292. ZGLEXTERN double ( *timer_GetTicks )();
  293. ZGLEXTERN void ( *timer_Reset )();
  294. // MOUSE
  295. #define M_BLEFT 0
  296. #define M_BMIDDLE 1
  297. #define M_BRIGHT 2
  298. #define M_WUP 0
  299. #define M_WDOWN 1
  300. ZGLEXTERN int ( *mouse_X )();
  301. ZGLEXTERN int ( *mouse_Y )();
  302. ZGLEXTERN int ( *mouse_DX )();
  303. ZGLEXTERN int ( *mouse_DY )();
  304. ZGLEXTERN bool ( *mouse_Down )( byte Button );
  305. ZGLEXTERN bool ( *mouse_Up )( byte Button );
  306. ZGLEXTERN bool ( *mouse_Click )( byte Button );
  307. ZGLEXTERN bool ( *mouse_DblClick )( byte Button );
  308. ZGLEXTERN bool ( *mouse_Wheel )( byte Axis );
  309. ZGLEXTERN void ( *mouse_ClearState )();
  310. #ifdef __CPP__
  311. ZGLEXTERN void ( *__mouse_Lock )( int X, int Y );
  312. static inline void mouse_Lock( int X = -1, int Y = -1 )
  313. {
  314. __mouse_Lock( X, Y );
  315. }
  316. #else
  317. ZGLEXTERN void ( *mouse_Lock )( int X, int Y );
  318. #endif
  319. // KEYBOARD
  320. #define K_SYSRQ 0xB7
  321. #define K_PAUSE 0xC5
  322. #define K_ESCAPE 0x01
  323. #define K_ENTER 0x1C
  324. #define K_KP_ENTER 0x9C
  325. #define K_UP 0xC8
  326. #define K_DOWN 0xD0
  327. #define K_LEFT 0xCB
  328. #define K_RIGHT 0xCD
  329. #define K_BACKSPACE 0x0E
  330. #define K_SPACE 0x39
  331. #define K_TAB 0x0F
  332. #define K_TILDE 0x29
  333. #define K_INSERT 0xD2
  334. #define K_DELETE 0xD3
  335. #define K_HOME 0xC7
  336. #define K_END 0xCF
  337. #define K_PAGEUP 0xC9
  338. #define K_PAGEDOWN 0xD1
  339. #define K_CTRL 0xFF - 0x01
  340. #define K_CTRL_L 0x1D
  341. #define K_CTRL_R 0x9D
  342. #define K_ALT 0xFF - 0x02
  343. #define K_ALT_L 0x38
  344. #define K_ALT_R 0xB8
  345. #define K_SHIFT 0xFF - 0x03
  346. #define K_SHIFT_L 0x2A
  347. #define K_SHIFT_R 0x36
  348. #define K_SUPER 0xFF - 0x04
  349. #define K_SUPER_L 0xDB
  350. #define K_SUPER_R 0xDC
  351. #define K_APP_MENU 0xDD
  352. #define K_CAPSLOCK 0x3A
  353. #define K_NUMLOCK 0x45
  354. #define K_SCROLL 0x46
  355. #define K_BRACKET_L 0x1A // "[" or "{"
  356. #define K_BRACKET_R 0x1B // "]" or "}"
  357. #define K_BACKSLASH 0x2B // "\"
  358. #define K_SLASH 0x35 // "/"
  359. #define K_COMMA 0x33 // ","
  360. #define K_DECIMAL 0x34 // "."
  361. #define K_SEMICOLON 0x27 // ":" or ";"
  362. #define K_APOSTROPHE 0x28 // ' or "
  363. #define K_0 0x0B
  364. #define K_1 0x02
  365. #define K_2 0x03
  366. #define K_3 0x04
  367. #define K_4 0x05
  368. #define K_5 0x06
  369. #define K_6 0x07
  370. #define K_7 0x08
  371. #define K_8 0x09
  372. #define K_9 0x0A
  373. #define K_MINUS 0x0C
  374. #define K_EQUALS 0x0D
  375. #define K_A 0x1E
  376. #define K_B 0x30
  377. #define K_C 0x2E
  378. #define K_D 0x20
  379. #define K_E 0x12
  380. #define K_F 0x21
  381. #define K_G 0x22
  382. #define K_H 0x23
  383. #define K_I 0x17
  384. #define K_J 0x24
  385. #define K_K 0x25
  386. #define K_L 0x26
  387. #define K_M 0x32
  388. #define K_N 0x31
  389. #define K_O 0x18
  390. #define K_P 0x19
  391. #define K_Q 0x10
  392. #define K_R 0x13
  393. #define K_S 0x1F
  394. #define K_T 0x14
  395. #define K_U 0x16
  396. #define K_V 0x2F
  397. #define K_W 0x11
  398. #define K_X 0x2D
  399. #define K_Y 0x15
  400. #define K_Z 0x2C
  401. #define K_KP_0 0x52
  402. #define K_KP_1 0x4F
  403. #define K_KP_2 0x50
  404. #define K_KP_3 0x51
  405. #define K_KP_4 0x4B
  406. #define K_KP_5 0x4C
  407. #define K_KP_6 0x4D
  408. #define K_KP_7 0x47
  409. #define K_KP_8 0x48
  410. #define K_KP_9 0x49
  411. #define K_KP_SUB 0x4A
  412. #define K_KP_ADD 0x4E
  413. #define K_KP_MUL 0x37
  414. #define K_KP_DIV 0xB5
  415. #define K_KP_DECIMAL 0x53
  416. #define K_F1 0x3B
  417. #define K_F2 0x3C
  418. #define K_F3 0x3D
  419. #define K_F4 0x3E
  420. #define K_F5 0x3F
  421. #define K_F6 0x40
  422. #define K_F7 0x41
  423. #define K_F8 0x42
  424. #define K_F9 0x43
  425. #define K_F10 0x44
  426. #define K_F11 0x57
  427. #define K_F12 0x58
  428. #define KA_DOWN 0
  429. #define KA_UP 1
  430. ZGLEXTERN bool ( *key_Down )( byte KeyCode );
  431. ZGLEXTERN bool ( *key_Up )( byte KeyCode );
  432. ZGLEXTERN bool ( *key_Press )( byte KeyCode );
  433. ZGLEXTERN byte ( *key_Last )( byte KeyAction );
  434. #ifdef __CPP__
  435. ZGLEXTERN void ( *__key_BeginReadText )( const char *Text, int MaxSymbols );
  436. static inline void key_BeginReadText( const char *Text, int MaxSymbols = -1 )
  437. {
  438. __key_BeginReadText( Text, MaxSymbols );
  439. }
  440. ZGLEXTERN void ( *__key_UpdateReadText )( const char *Text, int MaxSymbols );
  441. static inline void key_UpdateReadText( const char *Text, int MaxSymbols = -1 )
  442. {
  443. __key_UpdateReadText( Text, MaxSymbols );
  444. }
  445. #else
  446. ZGLEXTERN void ( *key_BeginReadText )( const char *Text, int MaxSymbols );
  447. ZGLEXTERN void ( *key_UpdateReadText )( const char *Text, int MaxSymbols );
  448. #endif
  449. ZGLEXTERN const char * ( *key_GetText )();
  450. ZGLEXTERN void ( *key_EndReadText )();
  451. ZGLEXTERN void ( *key_ClearState )();
  452. // JOYSTICK
  453. typedef struct
  454. {
  455. char* Name;
  456. struct
  457. {
  458. int Axes;
  459. int Buttons;
  460. } Count;
  461. uint Caps;
  462. } zglTJoyInfo, *zglPJoyInfo;
  463. #define JOY_HAS_Z 0x000001
  464. #define JOY_HAS_R 0x000002
  465. #define JOY_HAS_U 0x000004
  466. #define JOY_HAS_V 0x000008
  467. #define JOY_HAS_POV 0x000010
  468. #define JOY_AXIS_X 0
  469. #define JOY_AXIS_Y 1
  470. #define JOY_AXIS_Z 2
  471. #define JOY_AXIS_R 3
  472. #define JOY_AXIS_U 4
  473. #define JOY_AXIS_V 5
  474. #define JOY_POVX 6
  475. #define JOY_POVY 7
  476. ZGLEXTERN byte ( *joy_Init )();
  477. ZGLEXTERN zglPJoyInfo ( *joy_GetInfo )( byte JoyID );
  478. ZGLEXTERN float ( *joy_AxisPos )( byte JoyID, byte Axis );
  479. ZGLEXTERN bool ( *joy_Down )( byte JoyID, byte Button );
  480. ZGLEXTERN bool ( *joy_Up )( byte JoyID, byte Button );
  481. ZGLEXTERN bool ( *joy_Press )( byte JoyID, byte Button );
  482. ZGLEXTERN void ( *joy_ClearState )();
  483. // 2D
  484. typedef struct
  485. {
  486. float X;
  487. float Y;
  488. } zglTPoint2D, *zglPPoint2D;
  489. typedef zglTPoint2D* zglTPoints2D;
  490. typedef zglTPoints2D* zglPPoints2D;
  491. typedef struct
  492. {
  493. float x0;
  494. float y0;
  495. float x1;
  496. float y1;
  497. } zglTLine, *zglPLine;
  498. typedef struct
  499. {
  500. float X;
  501. float Y;
  502. float W;
  503. float H;
  504. } zglTRect, *zglPRect;
  505. typedef struct
  506. {
  507. float cX;
  508. float cY;
  509. float Radius;
  510. } zglTCircle, *zglPCircle;
  511. // RESOURCES
  512. ZGLEXTERN void ( *res_BeginQueue )( byte QueueID );
  513. ZGLEXTERN void ( *res_EndQueue )();
  514. ZGLEXTERN int ( *res_GetPercentage )( byte QueueID );
  515. ZGLEXTERN int ( *res_GetCompleted )();
  516. ZGLEXTERN void ( *res_Proc )();
  517. // TEXTURES
  518. typedef zglTPoint2D zglTTextureCoord[ 3 ];
  519. typedef zglTTextureCoord *zglPTextureCoord;
  520. typedef struct
  521. {
  522. uint ID;
  523. ushort Width;
  524. ushort Height;
  525. float U;
  526. float V;
  527. ushort FramesX;
  528. ushort FramesY;
  529. zglTTextureCoord *FramesCoord;
  530. uint Flags;
  531. ushort Format;
  532. void* prev;
  533. void* next;
  534. } zglTTexture, *zglPTexture;
  535. /*
  536. typedef struct
  537. {
  538. Extension : String;
  539. FileLoader : procedure( const FileName : String; var pData : Pointer; var W, H, Format : Word );
  540. MemLoader : procedure( const Memory : zglTMemory; var pData : Pointer; var W, H, Format : Word );
  541. } zglTTextureFormat, *zglPTextureFormat;
  542. type
  543. zglPTextureManager = ^zglTTextureManager;
  544. zglTTextureManager = record
  545. Count : record
  546. Items : Integer;
  547. Formats : Integer;
  548. end;
  549. First : zglTTexture;
  550. Formats : array of zglTTextureFormat;
  551. end;
  552. */
  553. #define TEX_FORMAT_RGBA 0x01
  554. #define TEX_FORMAT_RGBA_4444 0x02
  555. #define TEX_FORMAT_RGBA_PVR2 0x10
  556. #define TEX_FORMAT_RGBA_PVR4 0x11
  557. #define TEX_FORMAT_RGBA_DXT1 0x20
  558. #define TEX_FORMAT_RGBA_DXT3 0x21
  559. #define TEX_FORMAT_RGBA_DXT5 0x22
  560. #define TEX_NO_COLORKEY 0xFF000000
  561. #define TEX_MIPMAP 0x000001
  562. #define TEX_CLAMP 0x000002
  563. #define TEX_REPEAT 0x000004
  564. #define TEX_COMPRESS 0x000008
  565. #define TEX_CONVERT_TO_POT 0x000010
  566. #define TEX_CALCULATE_ALPHA 0x000020
  567. #define TEX_GRAYSCALE 0x000040
  568. #define TEX_INVERT 0x000080
  569. #define TEX_CUSTOM_EFFECT 0x000100
  570. #define TEX_FILTER_NEAREST 0x000200
  571. #define TEX_FILTER_LINEAR 0x000400
  572. #define TEX_FILTER_BILINEAR 0x000800
  573. #define TEX_FILTER_TRILINEAR 0x001000
  574. #define TEX_FILTER_ANISOTROPY 0x002000
  575. #define TEX_DEFAULT_2D TEX_CLAMP | TEX_FILTER_LINEAR | TEX_CONVERT_TO_POT | TEX_CALCULATE_ALPHA
  576. ZGLEXTERN zglPTexture ( *tex_Add )();
  577. ZGLEXTERN void ( *tex_Del )( zglPTexture *Texture );
  578. ZGLEXTERN zglPTexture ( *tex_Create )( void *Data, ushort Width, ushort Height, ushort Format, uint Flags );
  579. #ifdef __CPP__
  580. ZGLEXTERN zglPTexture ( *__tex_CreateZero )( ushort Width, ushort Height, uint Color, uint Flags );
  581. static inline zglPTexture tex_CreateZero( ushort Width, ushort Height, uint Color = 0x000000, uint Flags = TEX_DEFAULT_2D )
  582. {
  583. return __tex_CreateZero( Width, Height, Color, Flags );
  584. }
  585. ZGLEXTERN zglPTexture ( *__tex_LoadFromFile )( const char *FileName, uint TransparentColor, uint Flags );
  586. static inline zglPTexture tex_LoadFromFile( const char *FileName, uint TransparentColor = TEX_NO_COLORKEY, uint Flags = TEX_DEFAULT_2D )
  587. {
  588. return __tex_LoadFromFile( FileName, TransparentColor, Flags );
  589. }
  590. ZGLEXTERN zglPTexture ( *__tex_LoadFromMemory )( const zglTMemory Memory, const char *Extension, uint TransparentColor, uint Flags );
  591. static inline zglPTexture tex_LoadFromMemory( const zglTMemory Memory, const char *Extension, uint TransparentColor = TEX_NO_COLORKEY, uint Flags = TEX_DEFAULT_2D )
  592. {
  593. return __tex_LoadFromMemory( Memory, Extension, TransparentColor, Flags );
  594. }
  595. #else
  596. ZGLEXTERN zglPTexture ( *tex_CreateZero )( ushort Width, ushort Height, uint Color, uint Flags );
  597. ZGLEXTERN zglPTexture ( *tex_LoadFromFile )( const char *FileName, uint TransparentColor, uint Flags );
  598. ZGLEXTERN zglPTexture ( *tex_LoadFromMemory )( const zglTMemory Memory, const char *Extension, uint TransparentColor, uint Flags );
  599. #endif
  600. ZGLEXTERN void ( *tex_SetFrameSize )( zglPTexture *Texture, ushort FrameWidth, ushort FrameHeight );
  601. ZGLEXTERN void ( *tex_SetMask )( zglPTexture *Texture, zglPTexture Mask );
  602. #ifdef __CPP__
  603. ZGLEXTERN void ( *__tex_SetData )( zglPTexture Texture, void *pData, ushort X, ushort Y, ushort Width, ushort Height, int Stride );
  604. static inline void tex_SetData( zglPTexture Texture, void *pData, ushort X, ushort Y, ushort Width, ushort Height, int Stride = 0 )
  605. {
  606. __tex_SetData( Texture, pData, X, Y, Width, Height, Stride );
  607. }
  608. #else
  609. ZGLEXTERN void ( *tex_SetData )( zglPTexture Texture, void *pData, ushort X, ushort Y, ushort Width, ushort Height, int Stride );
  610. #endif
  611. ZGLEXTERN void ( *tex_GetData )( zglPTexture Texture, void **pData );
  612. ZGLEXTERN void ( *tex_Filter )( zglPTexture Texture, uint Flags );
  613. ZGLEXTERN void ( *tex_SetAnisotropy )( byte Level );
  614. // RENDER TARGETS
  615. typedef struct
  616. {
  617. byte _type;
  618. void* Handle;
  619. zglPTexture Surface;
  620. byte Flags;
  621. void* prev;
  622. void* next;
  623. } zglTRenderTarget, *zglPRenderTarget;
  624. /*
  625. type
  626. zglPRenderTargetManager = ^zglTRenderTargetManager;
  627. zglTRenderTargetManager = record
  628. Count : Integer;
  629. First : zglTRenderTarget;
  630. end;
  631. */
  632. typedef void (*zglTRenderCallback)( void *Data );
  633. #define RT_DEFAULT 0x00
  634. #define RT_FULL_SCREEN 0x01
  635. #define RT_USE_DEPTH 0x02
  636. #define RT_CLEAR_COLOR 0x04
  637. #define RT_CLEAR_DEPTH 0x08
  638. #define RT_SAVE_CONTENT 0x10 // Direct3D only!
  639. ZGLEXTERN zglPRenderTarget ( *rtarget_Add )( zglPTexture Surface, byte Flags );
  640. ZGLEXTERN void ( *rtarget_Del )( zglPRenderTarget *Target );
  641. ZGLEXTERN void ( *rtarget_Set )( zglPRenderTarget Target );
  642. ZGLEXTERN void ( *rtarget_DrawIn )( zglPRenderTarget Target, zglTRenderCallback RenderCallback, void *Data );
  643. // FX
  644. #define FX_BLEND_NORMAL 0x00
  645. #define FX_BLEND_ADD 0x01
  646. #define FX_BLEND_MULT 0x02
  647. #define FX_BLEND_BLACK 0x03
  648. #define FX_BLEND_WHITE 0x04
  649. #define FX_BLEND_MASK 0x05
  650. #define FX_COLOR_MIX 0x00
  651. #define FX_COLOR_SET 0x01
  652. #define FX_BLEND 0x100000
  653. #define FX_COLOR 0x200000
  654. #ifdef __CPP__
  655. ZGLEXTERN void ( *__fx_SetBlendMode )( byte Mode, bool SeparateAlpha );
  656. static inline void fx_SetBlendMode( byte Mode, bool SeparateAlpha = TRUE )
  657. {
  658. __fx_SetBlendMode( Mode, SeparateAlpha );
  659. }
  660. #else
  661. ZGLEXTERN void ( *fx_SetBlendMode )( byte Mode, bool SeparateAlpha );
  662. #endif
  663. ZGLEXTERN void ( *fx_SetColorMode )( byte Mode );
  664. ZGLEXTERN void ( *fx_SetColorMask )( bool R, bool G, bool B, bool Alpha );
  665. // FX 2D
  666. #define FX2D_FLIPX 0x000001
  667. #define FX2D_FLIPY 0x000002
  668. #define FX2D_VCA 0x000004
  669. #define FX2D_VCHANGE 0x000008
  670. #define FX2D_SCALE 0x000010
  671. #define FX2D_RPIVOT 0x000020
  672. ZGLEXTERN void ( *fx2d_SetColor )( uint Color );
  673. ZGLEXTERN void ( *fx2d_SetVCA )( uint c1, uint c2, uint c3, uint c4, byte a1, byte a2, byte a3, byte a4 );
  674. ZGLEXTERN void ( *fx2d_SetVertexes )( float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4 );
  675. ZGLEXTERN void ( *fx2d_SetScale )( float scaleX, float scaleY );
  676. ZGLEXTERN void ( *fx2d_SetRotatingPivot )( float X, float Y );
  677. // Camera 2D
  678. typedef struct
  679. {
  680. float X;
  681. float Y;
  682. float Angle;
  683. zglTPoint2D Zoom;
  684. zglTPoint2D Center;
  685. } zglTCamera2D, *zglPCamera2D;
  686. ZGLEXTERN void ( *cam2d_Init )( zglTCamera2D *Camera );
  687. ZGLEXTERN void ( *cam2d_Set )( zglPCamera2D Camera );
  688. ZGLEXTERN zglPCamera2D ( *cam2d_Get )();
  689. // Render 2D
  690. ZGLEXTERN void ( *batch2d_Begin )();
  691. ZGLEXTERN void ( *batch2d_End )();
  692. ZGLEXTERN void ( *batch2d_Flush )();
  693. // Primitives 2D
  694. #define PR2D_FILL 0x010000
  695. #define PR2D_SMOOTH 0x020000
  696. #ifdef __CPP__
  697. ZGLEXTERN void ( *__pr2d_Pixel )( float X, float Y, uint Color, byte Alpha );
  698. static inline void pr2d_Pixel( float X, float Y, uint Color = 0xFFFFFF, byte Alpha = 255 )
  699. {
  700. __pr2d_Pixel( X, Y, Color, Alpha );
  701. }
  702. ZGLEXTERN void ( *__pr2d_Line )( float X1, float Y1, float X2, float Y2, uint Color, byte Alpha, uint FX );
  703. static inline void pr2d_Line( float X1, float Y1, float X2, float Y2, uint Color = 0xFFFFFF, byte Alpha = 255, uint FX = 0 )
  704. {
  705. __pr2d_Line( X1, Y1, X2, Y2, Color, Alpha, FX );
  706. }
  707. ZGLEXTERN void ( *__pr2d_Rect )( float X, float Y, float W, float H, uint Color, byte Alpha, uint FX );
  708. static inline void pr2d_Rect( float X, float Y, float W, float H, uint Color = 0xFFFFFF, byte Alpha = 255, uint FX = 0 )
  709. {
  710. __pr2d_Rect( X, Y, W, H, Color, Alpha, FX );
  711. }
  712. ZGLEXTERN void ( *__pr2d_Circle )( float X, float Y, float Radius, uint Color, byte Alpha, ushort Quality, uint FX );
  713. static inline void pr2d_Circle( float X, float Y, float Radius, uint Color = 0xFFFFFF, byte Alpha = 255, ushort Quality = 32, uint FX = 0 )
  714. {
  715. __pr2d_Circle( X, Y, Radius, Color, Alpha, Quality, FX );
  716. }
  717. ZGLEXTERN void ( *__pr2d_Ellipse )( float X, float Y, float xRadius, float yRadius, uint Color, byte Alpha, ushort Quality, uint FX );
  718. static inline void pr2d_Ellipse( float X, float Y, float xRadius, float yRadius, uint Color = 0xFFFFFF, byte Alpha = 255, ushort Quality = 32, uint FX = 0 )
  719. {
  720. __pr2d_Ellipse( X, Y, xRadius, yRadius, Color, Alpha, Quality, FX );
  721. }
  722. ZGLEXTERN void ( *__pr2d_TriList )( zglPTexture Texture, zglPPoints2D TriList, zglPPoints2D TexCoords, int iLo, int iHi, uint Color, byte Alpha, uint FX );
  723. static inline void pr2d_TriList( zglPTexture Texture, zglPPoints2D TriList, zglPPoints2D TexCoords, int iLo, int iHi, uint Color = 0xFFFFFF, byte Alpha = 255, uint FX = 0 )
  724. {
  725. __pr2d_TriList( Texture, TriList, TexCoords, iLo, iHi, Color, Alpha, FX );
  726. }
  727. #else
  728. ZGLEXTERN void ( *pr2d_Pixel )( float X, float Y, uint Color, byte Alpha );
  729. ZGLEXTERN void ( *pr2d_Line )( float X1, float Y1, float X2, float Y2, uint Color, byte Alpha, uint FX );
  730. ZGLEXTERN void ( *pr2d_Rect )( float X, float Y, float W, float H, uint Color, byte Alpha, uint FX );
  731. ZGLEXTERN void ( *pr2d_Circle )( float X, float Y, float Radius, uint Color, byte Alpha, ushort Quality, uint FX );
  732. ZGLEXTERN void ( *pr2d_Ellipse )( float X, float Y, float xRadius, float yRadius, uint Color, byte Alpha, ushort Quality, uint FX );
  733. ZGLEXTERN void ( *pr2d_TriList )( zglPTexture Texture, zglPPoints2D TriList, zglPPoints2D TexCoords, int iLo, int iHi, uint Color, byte Alpha, uint FX );
  734. #endif
  735. // Sprites 2D
  736. struct zglTSprite2D;
  737. struct zglTSEngine2D;
  738. typedef void (*zglSpriteFunc)( struct zglTSprite2D *Sprite );
  739. typedef struct zglTSEngine2D
  740. {
  741. int Count;
  742. struct zglTSprite2D *List;
  743. } zglTSEngine2D, *zglPSEngine2D;
  744. #define ZGLTSPRITE2D \
  745. int ID; \
  746. zglPSEngine2D Manager; \
  747. zglPTexture Texture; \
  748. bool Destroy; \
  749. uint Layer; \
  750. float X; \
  751. float Y; \
  752. float W; \
  753. float H; \
  754. float Angle; \
  755. float Frame; \
  756. int Alpha; \
  757. uint FxFlags; \
  758. void* Data; \
  759. zglSpriteFunc OnInit; \
  760. zglSpriteFunc OnDraw; \
  761. zglSpriteFunc OnProc; \
  762. zglSpriteFunc OnFree;
  763. typedef struct zglTSprite2D
  764. {
  765. int ID;
  766. zglPSEngine2D Manager;
  767. zglPTexture Texture;
  768. bool Destroy;
  769. uint Layer;
  770. float X;
  771. float Y;
  772. float W;
  773. float H;
  774. float Angle;
  775. float Frame;
  776. int Alpha;
  777. uint FxFlags;
  778. void* Data;
  779. zglSpriteFunc OnInit;
  780. zglSpriteFunc OnDraw;
  781. zglSpriteFunc OnProc;
  782. zglSpriteFunc OnFree;
  783. } zglTSprite2D, *zglPSprite2D;
  784. typedef struct
  785. {
  786. struct
  787. {
  788. int X;
  789. int Y;
  790. } Count;
  791. struct
  792. {
  793. float W;
  794. float H;
  795. } Size;
  796. int **Tiles;
  797. } zglTTiles2D, *zglPTiles2D;
  798. typedef struct
  799. {
  800. int Cols;
  801. int Rows;
  802. zglTPoint2D** Grid;
  803. } zglTGrid2D, *zglPGrid2D;
  804. ZGLEXTERN zglPSprite2D ( *sengine2d_AddSprite )( zglPTexture Texture, int Layer, zglSpriteFunc OnInit, zglSpriteFunc OnDraw, zglSpriteFunc OnProc, zglSpriteFunc OnFree );
  805. ZGLEXTERN zglPSprite2D ( *sengine2d_AddCustom )( zglPTexture Texture, uint Size, int Layer, zglSpriteFunc OnInit, zglSpriteFunc OnDraw, zglSpriteFunc OnProc, zglSpriteFunc OnFree );
  806. ZGLEXTERN void ( *sengine2d_DelSprite )( int ID );
  807. ZGLEXTERN void ( *sengine2d_ClearAll )();
  808. ZGLEXTERN void ( *sengine2d_Set )( zglPSEngine2D SEngine );
  809. ZGLEXTERN void ( *sengine2d_Draw )();
  810. ZGLEXTERN void ( *sengine2d_Proc )();
  811. #ifdef __CPP__
  812. ZGLEXTERN void ( *__texture2d_Draw )( zglPTexture Texture, zglTPoint2D *TexCoord, float X, float Y, float W, float H, float Angle, byte Alpha, uint FX );
  813. static inline void texture2d_Draw( zglPTexture Texture, zglTPoint2D *TexCoord, float X, float Y, float W, float H, float Angle, byte Alpha = 255, uint FX = FX_BLEND )
  814. {
  815. __texture2d_Draw( Texture, TexCoord, X, Y, W, H, Angle, Alpha, FX );
  816. }
  817. ZGLEXTERN void ( *__ssprite2d_Draw )( zglPTexture Texture, float X, float Y, float W, float H, float Angle, byte Alpha, uint FX );
  818. static inline void ssprite2d_Draw( zglPTexture Texture, float X, float Y, float W, float H, float Angle, byte Alpha = 255, uint FX = FX_BLEND )
  819. {
  820. __ssprite2d_Draw( Texture, X, Y, W, H, Angle, Alpha, FX );
  821. }
  822. ZGLEXTERN void ( *__asprite2d_Draw )( zglPTexture Texture, float X, float Y, float W, float H, float Angle, ushort Frame, byte Alpha, uint FX );
  823. static inline void asprite2d_Draw( zglPTexture Texture, float X, float Y, float W, float H, float Angle, ushort Frame, byte Alpha = 255, uint FX = FX_BLEND )
  824. {
  825. __asprite2d_Draw( Texture, X, Y, W, H, Angle, Frame, Alpha, FX );
  826. }
  827. ZGLEXTERN void ( *__csprite2d_Draw )( zglPTexture Texture, float X, float Y, float W, float H, float Angle, zglTRect CutRect, byte Alpha, uint FX );
  828. static inline void csprite2d_Draw( zglPTexture Texture, float X, float Y, float W, float H, float Angle, zglTRect CutRect, byte Alpha = 255, uint FX = FX_BLEND )
  829. {
  830. __csprite2d_Draw( Texture, X, Y, W, H, Angle, CutRect, Alpha, FX );
  831. }
  832. ZGLEXTERN void ( *__tiles2d_Draw )( zglPTexture Texture, float X, float Y, zglPTiles2D Tiles, byte Alpha, uint FX );
  833. static inline void tiles2d_Draw( zglPTexture Texture, float X, float Y, zglPTiles2D Tiles, byte Alpha = 255, uint FX = FX_BLEND )
  834. {
  835. __tiles2d_Draw( Texture, X, Y, Tiles, Alpha, FX );
  836. }
  837. ZGLEXTERN void ( *__sgrid2d_Draw )( zglPTexture Texture, float X, float Y, zglPGrid2D Grid, byte Alpha, uint FX );
  838. static inline void sgrid2d_Draw( zglPTexture Texture, float X, float Y, zglPGrid2D Grid, byte Alpha = 255, uint FX = FX_BLEND )
  839. {
  840. __sgrid2d_Draw( Texture, X, Y, Grid, Alpha, FX );
  841. }
  842. ZGLEXTERN void ( *__agrid2d_Draw )( zglPTexture Texture, float X, float Y, zglPGrid2D Grid, int Frame, byte Alpha, uint FX );
  843. static inline void agrid2d_Draw( zglPTexture Texture, float X, float Y, zglPGrid2D Grid, int Frame, byte Alpha = 255, uint FX = FX_BLEND )
  844. {
  845. __agrid2d_Draw( Texture, X, Y, Grid, Frame, Alpha, FX );
  846. }
  847. ZGLEXTERN void ( *__cgrid2d_Draw )( zglPTexture Texture, float X, float Y, zglPGrid2D Grid, zglTRect CutRect, byte Alpha, uint FX );
  848. static inline void cgrid2d_Draw( zglPTexture Texture, float X, float Y, zglPGrid2D Grid, zglTRect CutRect, byte Alpha = 255, uint FX = FX_BLEND )
  849. {
  850. __cgrid2d_Draw( Texture, X, Y, Grid, CutRect, Alpha, FX );
  851. }
  852. #else
  853. ZGLEXTERN void ( *texture2d_Draw )( zglPTexture Texture, zglTPoint2D *TexCoord, float X, float Y, float W, float H, float Angle, byte Alpha, uint FX );
  854. ZGLEXTERN void ( *ssprite2d_Draw )( zglPTexture Texture, float X, float Y, float W, float H, float Angle, byte Alpha, uint FX );
  855. ZGLEXTERN void ( *asprite2d_Draw )( zglPTexture Texture, float X, float Y, float W, float H, float Angle, ushort Frame, byte Alpha, uint FX );
  856. ZGLEXTERN void ( *csprite2d_Draw )( zglPTexture Texture, float X, float Y, float W, float H, float Angle, zglTRect CutRect, byte Alpha, uint FX );
  857. ZGLEXTERN void ( *tiles2d_Draw )( zglPTexture Texture, float X, float Y, zglPTiles2D Tiles, byte Alpha, uint FX );
  858. ZGLEXTERN void ( *sgrid2d_Draw )( zglPTexture Texture, float X, float Y, zglPGrid2D Grid, byte Alpha, uint FX );
  859. ZGLEXTERN void ( *agrid2d_Draw )( zglPTexture Texture, float X, float Y, zglPGrid2D Grid, int Frame, byte Alpha, uint FX );
  860. ZGLEXTERN void ( *cgrid2d_Draw )( zglPTexture Texture, float X, float Y, zglPGrid2D Grid, zglTRect CutRect, byte Alpha, uint FX );
  861. #endif
  862. // Particles
  863. #define EMITTER_MAX_PARTICLES 1024
  864. #define EMITTER_NONE 0
  865. #define EMITTER_POINT 1
  866. #define EMITTER_LINE 2
  867. #define EMITTER_RECTANGLE 3
  868. #define EMITTER_CIRCLE 4
  869. #define EMITTER_RING 5
  870. typedef struct
  871. {
  872. float Life;
  873. byte Value;
  874. } TDiagramByte;
  875. typedef struct
  876. {
  877. float Life;
  878. uint Value;
  879. } TDiagramLW;
  880. typedef struct
  881. {
  882. float Life;
  883. float Value;
  884. } TDiagramSingle;
  885. typedef struct
  886. {
  887. struct
  888. {
  889. int lColorID;
  890. int lAlphaID;
  891. int lSizeXID;
  892. int lSizeYID;
  893. int lVelocityID;
  894. int laVelocityID;
  895. int lSpinID;
  896. } _private;
  897. int ID;
  898. float Life;
  899. int LifeTime;
  900. double Time;
  901. ushort Frame;
  902. uint Color;
  903. byte Alpha;
  904. zglTPoint2D Position;
  905. zglTPoint2D Size;
  906. zglTPoint2D SizeS;
  907. float Angle;
  908. float Direction;
  909. float Velocity;
  910. float VelocityS;
  911. float aVelocity;
  912. float aVelocityS;
  913. float Spin;
  914. } zglTParticle2D, *zglPParticle2D;
  915. typedef struct
  916. {
  917. float Direction;
  918. float Spread;
  919. } zglTEmitterPoint;
  920. typedef struct
  921. {
  922. float Direction;
  923. float Spread;
  924. float Size;
  925. bool TwoSide;
  926. } zglTEmitterLine;
  927. typedef struct
  928. {
  929. float Direction;
  930. float Spread;
  931. zglTRect Rect;
  932. } zglTEmitterRect;
  933. typedef struct
  934. {
  935. float Direction;
  936. float Spread;
  937. float cX;
  938. float cY;
  939. float Radius;
  940. } zglTEmitterCircle;
  941. typedef struct
  942. {
  943. float Direction;
  944. float Spread;
  945. float cX;
  946. float cY;
  947. float Radius0;
  948. float Radius1;
  949. } zglTEmitterRing;
  950. typedef struct
  951. {
  952. zglPTexture Texture;
  953. byte BlendMode;
  954. byte ColorMode;
  955. int LifeTimeS;
  956. int LifeTimeV;
  957. int Frame[2];
  958. TDiagramLW *Color;
  959. TDiagramByte *Alpha;
  960. bool SizeXYBind;
  961. float SizeXS;
  962. float SizeYS;
  963. float SizeXV;
  964. float SizeYV;
  965. TDiagramSingle *SizeXD;
  966. TDiagramSingle *SizeYD;
  967. float AngleS;
  968. float AngleV;
  969. float VelocityS;
  970. float VelocityV;
  971. TDiagramSingle *VelocityD;
  972. float aVelocityS;
  973. float aVelocityV;
  974. TDiagramSingle *aVelocityD;
  975. float SpinS;
  976. float SpinV;
  977. TDiagramSingle *SpinD;
  978. } zglTParticleParams;
  979. typedef struct
  980. {
  981. struct
  982. {
  983. struct zglTPEngine2D *pengine;
  984. zglTParticle2D particle[EMITTER_MAX_PARTICLES];
  985. zglPParticle2D list[EMITTER_MAX_PARTICLES];
  986. int parCreated;
  987. size_t reserved; // texFile : UTF8String;
  988. uint texHash;
  989. } _private;
  990. int ID;
  991. byte Type_;
  992. struct
  993. {
  994. int Layer;
  995. int LifeTime;
  996. bool Loop;
  997. int Emission;
  998. zglTPoint2D Position;
  999. } Params;
  1000. zglTParticleParams ParParams;
  1001. float Life;
  1002. double Time;
  1003. double LastSecond;
  1004. int Particles;
  1005. struct
  1006. {
  1007. float MinX;
  1008. float MaxX;
  1009. float MinY;
  1010. float MaxY;
  1011. } BBox;
  1012. union
  1013. {
  1014. zglTEmitterPoint AsPoint;
  1015. zglTEmitterLine AsLine;
  1016. zglTEmitterRect AsRect;
  1017. zglTEmitterCircle AsCircle;
  1018. zglTEmitterRing AsRing;
  1019. };
  1020. } zglTEmitter2D, *zglPEmitter2D, **zglPPEmitter2D;
  1021. typedef struct zglTPEngine2D
  1022. {
  1023. struct
  1024. {
  1025. int Emitters;
  1026. int Particles;
  1027. } Count;
  1028. zglPEmitter2D *List;
  1029. zglPPEmitter2D *ListU;
  1030. } zglTPEngine2D, *zglPPEngine2D;
  1031. ZGLEXTERN void ( *pengine2d_Set )( zglPPEngine2D PEngine );
  1032. ZGLEXTERN zglPPEngine2D ( *pengine2d_Get )();
  1033. ZGLEXTERN void ( *pengine2d_Draw )();
  1034. ZGLEXTERN void ( *pengine2d_Proc )( double dt );
  1035. #ifdef __CPP__
  1036. ZGLEXTERN void ( *__pengine2d_AddEmitter )( zglPEmitter2D Emitter, zglPPEmitter2D Result, float X, float Y );
  1037. static inline void pengine2d_AddEmitter( zglPEmitter2D Emitter, zglPPEmitter2D Result, float X = 0, float Y = 0 )
  1038. {
  1039. __pengine2d_AddEmitter( Emitter, Result, X, Y );
  1040. }
  1041. #else
  1042. ZGLEXTERN void ( *pengine2d_AddEmitter )( zglPEmitter2D Emitter, zglPPEmitter2D Result, float X, float Y );
  1043. #endif
  1044. ZGLEXTERN void ( *pengine2d_DelEmitter )( int ID );
  1045. ZGLEXTERN void ( *pengine2d_ClearAll )();
  1046. ZGLEXTERN zglPEmitter2D ( *emitter2d_Add )();
  1047. ZGLEXTERN void ( *emitter2d_Del )( zglPEmitter2D *Emitter );
  1048. ZGLEXTERN zglPEmitter2D ( *emitter2d_LoadFromFile )( const char *FileName );
  1049. ZGLEXTERN zglPEmitter2D ( *emitter2d_LoadFromMemory )( zglTMemory Memory );
  1050. ZGLEXTERN void ( *emitter2d_Init )( zglPEmitter2D Emitter );
  1051. ZGLEXTERN void ( *emitter2d_Free )( zglPEmitter2D *Emitter );
  1052. ZGLEXTERN void ( *emitter2d_Draw )( zglPEmitter2D Emitter );
  1053. ZGLEXTERN void ( *emitter2d_Proc )( zglPEmitter2D Emitter, double dt );
  1054. // Text
  1055. typedef struct
  1056. {
  1057. ushort Page;
  1058. byte Width;
  1059. byte Height;
  1060. int ShiftX;
  1061. int ShiftY;
  1062. int ShiftP;
  1063. zglTTextureCoord TexCoords;
  1064. } zglTCharDesc, *zglPCharDesc;
  1065. typedef struct
  1066. {
  1067. struct
  1068. {
  1069. ushort Pages;
  1070. ushort Chars;
  1071. } Count;
  1072. zglPTexture *Pages;
  1073. zglPCharDesc CharDesc[65536];
  1074. int MaxHeight;
  1075. int MaxShiftY;
  1076. byte Padding[3];
  1077. void* prev;
  1078. void* next;
  1079. } zglTFont, *zglPFont;
  1080. typedef struct
  1081. {
  1082. int Count;
  1083. zglTFont First;
  1084. } zglTFontManager, *zglPFontManager;
  1085. #define TEXT_HALIGN_LEFT 0x000001
  1086. #define TEXT_HALIGN_CENTER 0x000002
  1087. #define TEXT_HALIGN_RIGHT 0x000004
  1088. #define TEXT_HALIGN_JUSTIFY 0x000008
  1089. #define TEXT_VALIGN_TOP 0x000010
  1090. #define TEXT_VALIGN_CENTER 0x000020
  1091. #define TEXT_VALIGN_BOTTOM 0x000040
  1092. #define TEXT_CLIP_RECT 0x000080
  1093. #define TEXT_FX_VCA 0x000100
  1094. #define TEXT_FX_LENGTH 0x000200
  1095. ZGLEXTERN zglPFont ( *font_Add )();
  1096. ZGLEXTERN void ( *font_Del )( zglPFont *Font );
  1097. ZGLEXTERN zglPFont ( *font_LoadFromFile )( const char *FileName );
  1098. ZGLEXTERN zglPFont ( *font_LoadFromMemory )( zglTMemory Memory );
  1099. #ifdef __CPP__
  1100. ZGLEXTERN void ( *__text_Draw )( zglPFont Font, float X, float Y, const char *Text, uint Flags );
  1101. static inline void text_Draw( zglPFont Font, float X, float Y, const char *Text, uint Flags = 0 )
  1102. {
  1103. __text_Draw( Font, X, Y, Text, Flags );
  1104. }
  1105. ZGLEXTERN void ( *__text_DrawEx )( zglPFont Font, float X, float Y, float Scale, float Step, const char *Text, byte Alpha, uint Color, uint Flags );
  1106. static inline void text_DrawEx( zglPFont Font, float X, float Y, float Scale, float Step, const char *Text, byte Alpha = 255, uint Color = 0xFFFFFF, uint Flags = 0 )
  1107. {
  1108. __text_DrawEx( Font, X, Y, Scale, Step, Text, Alpha, Color, Flags );
  1109. }
  1110. ZGLEXTERN void ( *__text_DrawInRect )( zglPFont Font, zglTRect Rect, const char *Text, uint Flags );
  1111. static inline void text_DrawInRect( zglPFont Font, zglTRect Rect, const char *Text, uint Flags = 0 )
  1112. {
  1113. __text_DrawInRect( Font, Rect, Text, Flags );
  1114. }
  1115. ZGLEXTERN void ( *__text_DrawInRectEx )( zglPFont Font, zglTRect Rect, float Scale, float Step, const char *Text, byte Alpha, uint Color, uint Flags );
  1116. static inline void text_DrawInRectEx( zglPFont Font, zglTRect Rect, float Scale, float Step, const char *Text, byte Alpha = 255, uint Color = 0xFFFFFF, uint Flags = 0 )
  1117. {
  1118. __text_DrawInRectEx( Font, Rect, Scale, Step, Text, Alpha, Color, Flags );
  1119. }
  1120. ZGLEXTERN float ( *__text_GetWidth )( zglPFont Font, const char *Text, float Step );
  1121. static inline float text_GetWidth( zglPFont Font, const char *Text, float Step = 0.0 )
  1122. {
  1123. return __text_GetWidth( Font, Text, Step );
  1124. }
  1125. ZGLEXTERN float ( *__text_GetHeight )( zglPFont Font, float Width, const char *Text, float Scale, float Step );
  1126. static inline float text_GetHeight( zglPFont Font, float Width, const char *Text, float Scale = 1.0, float Step = 0.0 )
  1127. {
  1128. return __text_GetHeight( Font, Width, Text, Scale, Step );
  1129. }
  1130. #else
  1131. ZGLEXTERN void ( *text_Draw )( zglPFont Font, float X, float Y, const char *Text, uint Flags );
  1132. ZGLEXTERN void ( *text_DrawEx )( zglPFont Font, float X, float Y, float Scale, float Step, const char *Text, byte Alpha, uint Color, uint Flags );
  1133. ZGLEXTERN void ( *text_DrawInRect )( zglPFont Font, zglTRect Rect, const char *Text, uint Flags );
  1134. ZGLEXTERN void ( *text_DrawInRectEx )( zglPFont Font, zglTRect Rect, float Scale, float Step, const char *Text, byte Alpha, uint Color, uint Flags );
  1135. ZGLEXTERN float ( *text_GetWidth )( zglPFont Font, const char *Text, float Step );
  1136. ZGLEXTERN float ( *text_GetHeight )( zglPFont Font, float Width, const char *Text, float Scale, float Step );
  1137. #endif
  1138. ZGLEXTERN void ( *textFx_SetLength )( int Length, zglPPoint2D LastCoord, zglPCharDesc LastCharDesc );
  1139. // Sound
  1140. #define SND_FORMAT_MONO8 1
  1141. #define SND_FORMAT_MONO16 2
  1142. #define SND_FORMAT_STEREO8 3
  1143. #define SND_FORMAT_STEREO16 4
  1144. #define SND_VOLUME_DEFAULT -1
  1145. #define SND_SOUNDS NULL
  1146. #define SND_STREAM NULL
  1147. #define SND_ALL_SOURCES -1
  1148. #define SND_ALL_SOURCES_LOOPED -2
  1149. #define SND_ALL_STREAMS -3
  1150. #define SND_ALL_STREAMS_LOOPED -4
  1151. #define SND_STATE_PLAYING 1
  1152. #define SND_STATE_LOOPED 2
  1153. #define SND_STATE_PERCENT 3
  1154. #define SND_STATE_TIME 4
  1155. #define SND_INFO_DURATION 5
  1156. typedef struct
  1157. {
  1158. uint Source;
  1159. float Speed;
  1160. float Volume;
  1161. struct
  1162. {
  1163. float X;
  1164. float Y;
  1165. float Z;
  1166. } Position;
  1167. } zglTSoundChannel, *zglPSoundChannel;
  1168. typedef struct
  1169. {
  1170. uint Buffer;
  1171. uint SourceCount;
  1172. zglTSoundChannel *Channel;
  1173. byte* Data;
  1174. uint Size;
  1175. double Duration;
  1176. uint Frequency;
  1177. void* prev;
  1178. void* next;
  1179. } zglTSound, *zglPSound;
  1180. /*
  1181. typedef struct
  1182. {
  1183. zglTSoundStream = record
  1184. _data : Pointer;
  1185. _file : zglTFile;
  1186. _memory : zglTMemory;
  1187. _decoder : zglPSoundDecoder;
  1188. _playing : Boolean;
  1189. _paused : Boolean;
  1190. _waiting : Boolean;
  1191. _complete : Double;
  1192. _lastTime : Double;
  1193. Buffer : Pointer;
  1194. BufferSize : LongWord;
  1195. Bits : LongWord;
  1196. Frequency : LongWord;
  1197. Channels : LongWord;
  1198. Length : Double;
  1199. Loop : Boolean;
  1200. } zglTSoundStream, *zglPSoundStream;
  1201. zglTSoundDecoder = record
  1202. Ext : String;
  1203. Open : function( var Stream : zglTSoundStream; const FileName : String ) : Boolean;
  1204. OpenMem : function( var Stream : zglTSoundStream; const Memory : zglTMemory ) : Boolean;
  1205. Read : function( var Stream : zglTSoundStream; Buffer : Pointer; Bytes : LongWord; var _End : Boolean ) : LongWord;
  1206. Loop : procedure( var Stream : zglTSoundStream );
  1207. Close : procedure( var Stream : zglTSoundStream );
  1208. end;
  1209. zglTSoundFormat = record
  1210. Extension : String;
  1211. Decoder : zglPSoundDecoder;
  1212. FileLoader : procedure( const FileName : String; var Data : Pointer; var Size, Format, Frequency : LongWord );
  1213. MemLoader : procedure( const Memory : zglTMemory; var Data : Pointer; var Size, Format, Frequency : LongWord );
  1214. end;
  1215. zglTSoundManager = record
  1216. Count : record
  1217. Items : Integer;
  1218. Formats : Integer;
  1219. end;
  1220. First : zglTSound;
  1221. Formats : array of zglTSoundFormat;
  1222. end;
  1223. */
  1224. ZGLEXTERN bool ( *snd_Init )();
  1225. ZGLEXTERN void ( *snd_Free )();
  1226. ZGLEXTERN zglPSound ( *snd_Add )( int SourceCount );
  1227. ZGLEXTERN void ( *snd_Del )( zglPSound *Sound );
  1228. #ifdef __CPP__
  1229. ZGLEXTERN zglPSound ( *__snd_LoadFromFile )( const char *FileName, int SourceCount );
  1230. static inline zglPSound snd_LoadFromFile( const char *FileName, int SourceCount = 8 )
  1231. {
  1232. return __snd_LoadFromFile( FileName, SourceCount );
  1233. }
  1234. ZGLEXTERN zglPSound ( *__snd_LoadFromMemory )( zglTMemory Memory, const char *Extension, int SourceCount );
  1235. static inline zglPSound snd_LoadFromMemory( zglTMemory Memory, const char *Extension, int SourceCount = 8 )
  1236. {
  1237. return __snd_LoadFromMemory( Memory, Extension, SourceCount );
  1238. }
  1239. ZGLEXTERN int ( *__snd_Play )( zglPSound Sound, bool Loop, float X, float Y, float Z, float Volume );
  1240. static inline int snd_Play( zglPSound Sound, bool Loop = FALSE, float X = 0.0, float Y = 0.0, float Z = 0.0, float Volume = SND_VOLUME_DEFAULT )
  1241. {
  1242. return __snd_Play( Sound, Loop, X, Y, Z, Volume );
  1243. }
  1244. #else
  1245. ZGLEXTERN zglPSound ( *snd_LoadFromFile )( const char *FileName, int SourceCount );
  1246. ZGLEXTERN zglPSound ( *snd_LoadFromMemory )( zglTMemory Memory, const char *Extension, int SourceCount );
  1247. ZGLEXTERN int ( *snd_Play )( zglPSound Sound, bool Loop, float X, float Y, float Z, float Volume );
  1248. #endif
  1249. ZGLEXTERN void ( *snd_Stop )( zglPSound Sound, int ID );
  1250. ZGLEXTERN void ( *snd_SetPos )( zglPSound Sound, int ID, float X, float Y, float Z );
  1251. ZGLEXTERN void ( *snd_SetVolume )( zglPSound Sound, int ID, float Volume );
  1252. ZGLEXTERN void ( *snd_SetSpeed )( zglPSound Sound, int ID, float Speed );
  1253. ZGLEXTERN int ( *snd_Get )( zglPSound Sound, int ID, int What );
  1254. #ifdef __CPP__
  1255. ZGLEXTERN int ( *__snd_PlayFile )( const char *FileName, bool Loop, float Volume );
  1256. static inline int snd_PlayFile( const char *FileName, bool Loop = FALSE, float Volume = SND_VOLUME_DEFAULT )
  1257. {
  1258. return __snd_PlayFile( FileName, Loop, Volume );
  1259. }
  1260. ZGLEXTERN int ( *__snd_PlayMemory )( zglTMemory Memory, const char *Extension, bool Loop, float Volume );
  1261. static inline int snd_PlayMemory( zglTMemory Memory, const char *Extension, bool Loop = FALSE, float Volume = SND_VOLUME_DEFAULT )
  1262. {
  1263. return __snd_PlayMemory( Memory, Extension, Loop, Volume );
  1264. }
  1265. #else
  1266. ZGLEXTERN int ( *snd_PlayFile )( const char *FileName, bool Loop, float Volume );
  1267. ZGLEXTERN int ( *snd_PlayMemory )( zglTMemory Memory, const char *Extension, bool Loop, float Volume );
  1268. #endif
  1269. ZGLEXTERN void ( *snd_PauseStream )( int ID );
  1270. ZGLEXTERN void ( *snd_StopStream )( int ID );
  1271. ZGLEXTERN void ( *snd_ResumeStream )( int ID );
  1272. ZGLEXTERN void ( *snd_SeekStream )( int ID, double Milliseconds );
  1273. // Video
  1274. typedef struct
  1275. {
  1276. struct
  1277. {
  1278. void *Data;
  1279. zglTFile File_;
  1280. zglTMemory Memory;
  1281. void *Decoder; // zglPVideoDecoder;
  1282. } _private;
  1283. void *Data;
  1284. zglPTexture Texture;
  1285. int Frame;
  1286. double Time;
  1287. struct
  1288. {
  1289. ushort Width;
  1290. ushort Height;
  1291. float FrameRate;
  1292. double Duration;
  1293. int Frames;
  1294. } Info;
  1295. bool Loop;
  1296. void *prev;
  1297. void *next;
  1298. } zglTVideoStream, *zglPVideoStream;
  1299. ZGLEXTERN zglPVideoStream ( *video_Add )();
  1300. ZGLEXTERN void ( *video_Del )( zglPVideoStream *Stream );
  1301. ZGLEXTERN zglPVideoStream ( *video_OpenFile )( const char *FileName );
  1302. ZGLEXTERN zglPVideoStream ( *video_OpenMemory )( zglTMemory Memory, const char *Extension );
  1303. ZGLEXTERN void ( *video_Update )( zglPVideoStream *Stream, double Milliseconds, bool Loop );
  1304. ZGLEXTERN void ( *video_Seek )( zglPVideoStream *Stream, double Milliseconds );
  1305. // MATH
  1306. #define pi 3.141592654
  1307. #define rad2deg 57.29578049
  1308. #define deg2rad 0.017453292
  1309. #define ORIENTATION_LEFT -1
  1310. #define ORIENTATION_RIGHT 1
  1311. #define ORIENTATION_ZERO 0
  1312. ZGLEXTERN float ( *m_Cos )( int Angle );
  1313. ZGLEXTERN float ( *m_Sin )( int Angle );
  1314. ZGLEXTERN float ( *m_Distance )( float x1, float y1, float x2, float y2 );
  1315. ZGLEXTERN float ( *m_FDistance )( float x1, float y1, float x2, float y2 );
  1316. ZGLEXTERN float ( *m_Angle )( float x1, float y1, float x2, float y2 );
  1317. ZGLEXTERN int ( *m_Orientation )( float x, float y, float x1, float y1, float x2, float y2 );
  1318. #ifdef __CPP__
  1319. ZGLEXTERN void ( *__tess_Triangulate )( zglPPoints2D Contour, int iLo, int iHi, bool AddHoles );
  1320. static inline void tess_Triangulate( zglPPoints2D Contour, int iLo, int iHi, bool AddHoles = FALSE )
  1321. {
  1322. __tess_Triangulate( Contour, iLo, iHi, AddHoles );
  1323. }
  1324. ZGLEXTERN void ( *__tess_AddHole )( zglPPoints2D Contour, int iLo, int iHi, bool LastHole );
  1325. static inline void tess_AddHole( zglPPoints2D Contour, int iLo, int iHi, bool LastHole = TRUE )
  1326. {
  1327. __tess_AddHole( Contour, iLo, iHi, LastHole );
  1328. }
  1329. #else
  1330. ZGLEXTERN void ( *tess_Triangulate )( zglPPoints2D Contour, int iLo, int iHi, bool AddHoles );
  1331. ZGLEXTERN void ( *tess_AddHole )( zglPPoints2D Contour, int iLo, int iHi, bool LastHole );
  1332. #endif
  1333. ZGLEXTERN int ( *tess_GetData )( zglPPoints2D* TriPoints );
  1334. // COLLISION 2D
  1335. ZGLEXTERN bool ( *col2d_PointInRect )( float X, float Y, zglTRect Rect );
  1336. ZGLEXTERN bool ( *col2d_PointInTriangle )( float X, float Y, zglTPoint2D P1, zglTPoint2D P2, zglTPoint2D P3 );
  1337. ZGLEXTERN bool ( *col2d_PointInCircle )( float X, float Y, zglTCircle Circle );
  1338. //line 2d
  1339. ZGLEXTERN bool ( *col2d_Line )( zglTLine A, zglTLine B, zglPPoint2D ColPoint );
  1340. ZGLEXTERN bool ( *col2d_LineVsRect )( zglTLine Line, zglTRect Rect );
  1341. ZGLEXTERN bool ( *col2d_LineVsCircle )( zglTLine Line, zglTCircle Circle );
  1342. // rect
  1343. ZGLEXTERN bool ( *col2d_Rect )( zglTRect Rect1, zglTRect Rect2 );
  1344. ZGLEXTERN bool ( *col2d_ClipRect )( zglTRect Rect1, zglTRect Rect2 );
  1345. ZGLEXTERN bool ( *col2d_RectInRect )( zglTRect Rect1, zglTRect Rect2 );
  1346. ZGLEXTERN bool ( *col2d_RectInCircle )( zglTRect Rect, zglTCircle Circle );
  1347. ZGLEXTERN bool ( *col2d_RectVsCircle )( zglTRect Rect, zglTCircle Circle );
  1348. // circle
  1349. ZGLEXTERN bool ( *col2d_Circle )( zglTCircle Circle1, zglTCircle Circle2 );
  1350. ZGLEXTERN bool ( *col2d_CircleInCircle )( zglTCircle Circle1, zglTCircle Circle2 );
  1351. ZGLEXTERN bool ( *col2d_CircleInRect )( zglTCircle Circle, zglTRect Rect );
  1352. #ifndef __WINDOWS__
  1353. #define FILE_ERROR 0
  1354. #else
  1355. #define FILE_ERROR -1
  1356. #endif
  1357. // Open Mode
  1358. #define FOM_CREATE 0x01 // Create
  1359. #define FOM_OPENR 0x02 // Read
  1360. #define FOM_OPENRW 0x03 // Read&Write
  1361. // Seek Mode
  1362. #define FSM_SET 0x01
  1363. #define FSM_CUR 0x02
  1364. #define FSM_END 0x03
  1365. ZGLEXTERN bool ( *file_Open )( zglTFile *FileHandle, const char *FileName, byte Mode );
  1366. ZGLEXTERN bool ( *file_MakeDir )( const char *Directory );
  1367. ZGLEXTERN bool ( *file_Remove )( const char *Name );
  1368. ZGLEXTERN bool ( *file_Exists )( const char *Name );
  1369. ZGLEXTERN uint ( *file_Seek )( zglTFile FileHandle, uint Offset, uint Mode );
  1370. ZGLEXTERN uint ( *file_GetPos )( zglTFile FileHandle );
  1371. ZGLEXTERN uint ( *file_Read )( zglTFile FileHandle, void *Buffer, uint Bytes );
  1372. ZGLEXTERN uint ( *file_Write )( zglTFile FileHandle, void *Buffer, uint Bytes );
  1373. ZGLEXTERN uint ( *file_GetSize )( zglTFile FileHandle );
  1374. ZGLEXTERN void ( *file_Flush )( zglTFile FileHandle );
  1375. ZGLEXTERN void ( *file_Close )( zglTFile* FileHandle );
  1376. ZGLEXTERN void ( *file_Find )( const char *Directory, zglTFileList *List, bool FindDir );
  1377. ZGLEXTERN char* ( *file_GetName )( const char *FileName );
  1378. ZGLEXTERN char* ( *file_GetExtension )( const char *FileName );
  1379. ZGLEXTERN char* ( *file_GetDirectory )( const char *FileName );
  1380. ZGLEXTERN void ( *file_SetPath )( const char *Path );
  1381. ZGLEXTERN bool ( *file_OpenArchive )( char *FileName, char *Password );
  1382. ZGLEXTERN void ( *file_CloseArchive )();
  1383. ZGLEXTERN bool ( *mem_LoadFromFile )( zglTMemory *Memory, const char *FileName );
  1384. ZGLEXTERN bool ( *mem_SaveToFile )( zglTMemory *Memory, const char *FileName );
  1385. ZGLEXTERN uint ( *mem_Seek )( zglTMemory *Memory, int Offset, int Mode );
  1386. ZGLEXTERN uint ( *mem_Read )( zglTMemory *Memory, void *Buffer, uint Bytes );
  1387. ZGLEXTERN uint ( *mem_Write )( zglTMemory *Memory, void *Buffer, uint Bytes );
  1388. ZGLEXTERN void ( *mem_SetSize )( zglTMemory *Memory, uint Size );
  1389. ZGLEXTERN void ( *mem_Free )( zglTMemory *Memory );
  1390. // Utils
  1391. ZGLEXTERN void ( *u_Sleep )( unsigned int Milliseconds );
  1392. #ifdef __LINUX__
  1393. #define libZenGL "libZenGL.so"
  1394. #define zglLoadLibrary( a ) dlopen( a, 0x01 )
  1395. #define zglFreeLibrary dlclose
  1396. #define zglGetAddress( a, b, c ) a = (__typeof__(a))dlsym(b, c)
  1397. typedef void* LIBRARY;
  1398. ZGLEXTERN void* zglLib;
  1399. #endif
  1400. #ifdef __WINDOWS__
  1401. #define libZenGL "ZenGL.dll"
  1402. #define zglLoadLibrary LoadLibraryA
  1403. #define zglFreeLibrary FreeLibrary
  1404. #if ( defined __MINGW32__ || defined __MINGW64__ )
  1405. #define zglGetAddress( a, b, c ) a = (__typeof__(a))GetProcAddress( b, c )
  1406. #else
  1407. #define zglGetAddress( a, b, c ) *(void**)&a = (void*)GetProcAddress( b, c )
  1408. #endif
  1409. typedef HMODULE LIBRARY;
  1410. ZGLEXTERN HMODULE zglLib;
  1411. #endif
  1412. #ifdef ZGL_IMPORT
  1413. bool zglLoad( const char* LibraryName )
  1414. {
  1415. char libName[256];
  1416. sprintf_s( libName, "./%s", LibraryName );
  1417. zglLib = (LIBRARY)zglLoadLibrary( libName );
  1418. if ( !zglLib )
  1419. zglLib = (LIBRARY)zglLoadLibrary( LibraryName );
  1420. if ( zglLib )
  1421. {
  1422. #ifdef __CPP__
  1423. zglGetAddress( __zgl_Init, zglLib, "zgl_Init" );
  1424. #else
  1425. zglGetAddress( zgl_Init, zglLib, "zgl_Init" );
  1426. #endif
  1427. zglGetAddress( zgl_Exit, zglLib, "zgl_Exit" );
  1428. zglGetAddress( zgl_Reg, zglLib, "zgl_Reg" );
  1429. zglGetAddress( zgl_Get, zglLib, "zgl_Get" );
  1430. zglGetAddress( zgl_GetMem, zglLib, "zgl_GetMem" );
  1431. zglGetAddress( zgl_FreeMem, zglLib, "zgl_FreeMem" );
  1432. // zglGetAddress( zgl_FreeStrList, zglLib, "zgl_FreeStrList" );
  1433. zglGetAddress( zgl_Enable, zglLib, "zgl_Enable" );
  1434. zglGetAddress( zgl_Disable, zglLib, "zgl_Disable" );
  1435. #ifdef __CPP__
  1436. zglGetAddress( __log_Add, zglLib, "log_Add" );
  1437. #else
  1438. zglGetAddress( log_Add, zglLib, "log_Add" );
  1439. #endif
  1440. zglGetAddress( wnd_SetCaption, zglLib, "_wnd_SetCaption" );
  1441. zglGetAddress( wnd_SetSize, zglLib, "wnd_SetSize" );
  1442. zglGetAddress( wnd_SetPos, zglLib, "wnd_SetPos" );
  1443. zglGetAddress( wnd_ShowCursor, zglLib, "wnd_ShowCursor" );
  1444. zglGetAddress( scr_Clear, zglLib, "scr_Clear" );
  1445. zglGetAddress( scr_Flush, zglLib, "scr_Flush" );
  1446. zglGetAddress( scr_SetVSync, zglLib, "scr_SetVSync" );
  1447. zglGetAddress( scr_SetFSAA, zglLib, "scr_SetFSAA" );
  1448. zglGetAddress( scr_SetOptions, zglLib, "scr_SetOptions" );
  1449. zglGetAddress( scr_CorrectResolution, zglLib, "scr_CorrectResolution" );
  1450. zglGetAddress( scr_ReadPixels, zglLib, "scr_ReadPixels" );
  1451. /*
  1452. zglGetAddress( ini_LoadFromFile, zglLib, "ini_LoadFromFile" );
  1453. zglGetAddress( ini_SaveToFile, zglLib, "ini_SaveToFile" );
  1454. zglGetAddress( ini_Add, zglLib, "ini_Add" );
  1455. zglGetAddress( ini_Del, zglLib, "ini_Del" );
  1456. zglGetAddress( ini_Clear, zglLib, "ini_Clear" );
  1457. zglGetAddress( ini_IsSection, zglLib, "ini_IsSection" );
  1458. zglGetAddress( ini_IsKey, zglLib, "ini_IsKey" );
  1459. zglGetAddress( ini_ReadKeyStr, zglLib, "ini_ReadKeyStr" );
  1460. zglGetAddress( ini_ReadKeyInt, zglLib, "ini_ReadKeyInt" );
  1461. zglGetAddress( ini_ReadKeyFloat, zglLib, "ini_ReadKeyFloat" );
  1462. zglGetAddress( ini_ReadKeyBool, zglLib, "ini_ReadKeyBool" );
  1463. zglGetAddress( ini_WriteKeyStr, zglLib, "ini_WriteKeyStr" );
  1464. zglGetAddress( ini_WriteKeyInt, zglLib, "ini_WriteKeyInt" );
  1465. zglGetAddress( ini_WriteKeyFloat, zglLib, "ini_WriteKeyFloat" );
  1466. zglGetAddress( ini_WriteKeyBool, zglLib, "ini_WriteKeyBool" );
  1467. */
  1468. #ifdef __CPP__
  1469. zglGetAddress( __timer_Add, zglLib, "timer_Add" );
  1470. #else
  1471. zglGetAddress( timer_Add, zglLib, "timer_Add" );
  1472. #endif
  1473. zglGetAddress( timer_Del, zglLib, "timer_Del" );
  1474. zglGetAddress( timer_GetTicks, zglLib, "timer_GetTicks" );
  1475. zglGetAddress( timer_Reset, zglLib, "timer_Reset" );
  1476. zglGetAddress( mouse_X, zglLib, "mouse_X" );
  1477. zglGetAddress( mouse_Y, zglLib, "mouse_Y" );
  1478. zglGetAddress( mouse_DX, zglLib, "mouse_DX" );
  1479. zglGetAddress( mouse_DY, zglLib, "mouse_DY" );
  1480. zglGetAddress( mouse_Down, zglLib, "mouse_Down" );
  1481. zglGetAddress( mouse_Up, zglLib, "mouse_Up" );
  1482. zglGetAddress( mouse_Click, zglLib, "mouse_Click" );
  1483. zglGetAddress( mouse_DblClick, zglLib, "mouse_DblClick" );
  1484. zglGetAddress( mouse_Wheel, zglLib, "mouse_Wheel" );
  1485. zglGetAddress( mouse_ClearState, zglLib, "mouse_ClearState" );
  1486. #ifdef __CPP__
  1487. zglGetAddress( __mouse_Lock, zglLib, "mouse_Lock" );
  1488. #else
  1489. zglGetAddress( mouse_Lock, zglLib, "mouse_Lock" );
  1490. #endif
  1491. zglGetAddress( key_Down, zglLib, "key_Down" );
  1492. zglGetAddress( key_Up, zglLib, "key_Up" );
  1493. zglGetAddress( key_Press, zglLib, "key_Press" );
  1494. zglGetAddress( key_Last, zglLib, "key_Last" );
  1495. #ifdef __CPP__
  1496. zglGetAddress( __key_BeginReadText, zglLib, "_key_BeginReadText" );
  1497. zglGetAddress( __key_UpdateReadText, zglLib, "_key_UpdateReadText" );
  1498. #else
  1499. zglGetAddress( key_BeginReadText, zglLib, "_key_BeginReadText" );
  1500. zglGetAddress( key_UpdateReadText, zglLib, "_key_UpdateReadText" );
  1501. #endif
  1502. zglGetAddress( key_GetText, zglLib, "key_GetText" );
  1503. zglGetAddress( key_EndReadText, zglLib, "key_EndReadText" );
  1504. zglGetAddress( key_ClearState, zglLib, "key_ClearState" );
  1505. zglGetAddress( joy_Init, zglLib, "joy_Init" );
  1506. zglGetAddress( joy_GetInfo, zglLib, "joy_GetInfo" );
  1507. zglGetAddress( joy_AxisPos, zglLib, "joy_AxisPos" );
  1508. zglGetAddress( joy_Down, zglLib, "joy_Down" );
  1509. zglGetAddress( joy_Up, zglLib, "joy_Up" );
  1510. zglGetAddress( joy_Press, zglLib, "joy_Press" );
  1511. zglGetAddress( joy_ClearState, zglLib, "joy_ClearState" );
  1512. zglGetAddress( res_BeginQueue, zglLib, "res_BeginQueue" );
  1513. zglGetAddress( res_EndQueue, zglLib, "res_EndQueue" );
  1514. zglGetAddress( res_GetPercentage, zglLib, "res_GetPercentage" );
  1515. zglGetAddress( res_GetCompleted, zglLib, "res_GetCompleted" );
  1516. zglGetAddress( res_Proc, zglLib, "res_Proc" );
  1517. zglGetAddress( tex_Add, zglLib, "tex_Add" );
  1518. zglGetAddress( tex_Del, zglLib, "tex_Del" );
  1519. zglGetAddress( tex_Create, zglLib, "tex_Create" );
  1520. #ifdef __CPP__
  1521. zglGetAddress( __tex_CreateZero, zglLib, "tex_CreateZero" );
  1522. zglGetAddress( __tex_LoadFromFile, zglLib, "_tex_LoadFromFile" );
  1523. zglGetAddress( __tex_LoadFromMemory, zglLib, "_tex_LoadFromMemory" );
  1524. #else
  1525. zglGetAddress( tex_CreateZero, zglLib, "tex_CreateZero" );
  1526. zglGetAddress( tex_LoadFromFile, zglLib, "_tex_LoadFromFile" );
  1527. zglGetAddress( tex_LoadFromMemory, zglLib, "_tex_LoadFromMemory" );
  1528. #endif
  1529. zglGetAddress( tex_SetFrameSize, zglLib, "tex_SetFrameSize" );
  1530. zglGetAddress( tex_SetMask, zglLib, "tex_SetMask" );
  1531. #ifdef __CPP__
  1532. zglGetAddress( __tex_SetData, zglLib, "tex_SetData" );
  1533. #else
  1534. zglGetAddress( tex_SetData, zglLib, "tex_SetData" );
  1535. #endif
  1536. zglGetAddress( tex_GetData, zglLib, "tex_GetData" );
  1537. zglGetAddress( tex_Filter, zglLib, "tex_Filter" );
  1538. zglGetAddress( tex_SetAnisotropy, zglLib, "tex_SetAnisotropy" );
  1539. zglGetAddress( Set2DMode, zglLib, "Set2DMode" );
  1540. #ifdef __CPP__
  1541. zglGetAddress( __Set3DMode, zglLib, "Set3DMode" );
  1542. #else
  1543. zglGetAddress( Set3DMode, zglLib, "Set3DMode" );
  1544. #endif
  1545. zglGetAddress( zbuffer_SetDepth, zglLib, "zbuffer_SetDepth" );
  1546. zglGetAddress( zbuffer_Clear, zglLib, "zbuffer_Clear" );
  1547. #ifdef __CPP__
  1548. zglGetAddress( __scissor_Begin, zglLib, "scissor_Begin" );
  1549. #else
  1550. zglGetAddress( scissor_Begin, zglLib, "scissor_Begin" );
  1551. #endif
  1552. zglGetAddress( scissor_End, zglLib, "scissor_End" );
  1553. zglGetAddress( rtarget_Add, zglLib, "rtarget_Add" );
  1554. zglGetAddress( rtarget_Del, zglLib, "rtarget_Del" );
  1555. zglGetAddress( rtarget_Set, zglLib, "rtarget_Set" );
  1556. zglGetAddress( rtarget_DrawIn, zglLib, "rtarget_Set" );
  1557. #ifdef __CPP__
  1558. zglGetAddress( __fx_SetBlendMode, zglLib, "fx_SetBlendMode" );
  1559. #else
  1560. zglGetAddress( fx_SetBlendMode, zglLib, "fx_SetBlendMode" );
  1561. #endif
  1562. zglGetAddress( fx_SetColorMode, zglLib, "fx_SetColorMode" );
  1563. zglGetAddress( fx_SetColorMask, zglLib, "fx_SetColorMask" );
  1564. zglGetAddress( fx2d_SetColor, zglLib, "fx2d_SetColor" );
  1565. zglGetAddress( fx2d_SetVCA, zglLib, "fx2d_SetVCA" );
  1566. zglGetAddress( fx2d_SetVertexes, zglLib, "fx2d_SetVertexes" );
  1567. zglGetAddress( fx2d_SetScale, zglLib, "fx2d_SetScale" );
  1568. zglGetAddress( fx2d_SetRotatingPivot, zglLib, "fx2d_SetRotatingPivot" );
  1569. zglGetAddress( cam2d_Init, zglLib, "cam2d_Init" );
  1570. zglGetAddress( cam2d_Set, zglLib, "cam2d_Set" );
  1571. zglGetAddress( cam2d_Get, zglLib, "cam2d_Get" );
  1572. zglGetAddress( batch2d_Begin, zglLib, "batch2d_Begin" );
  1573. zglGetAddress( batch2d_End, zglLib, "batch2d_End" );
  1574. zglGetAddress( batch2d_Flush, zglLib, "batch2d_Flush" );
  1575. #ifdef __CPP__
  1576. zglGetAddress( __pr2d_Pixel, zglLib, "pr2d_Pixel" );
  1577. zglGetAddress( __pr2d_Line, zglLib, "pr2d_Line" );
  1578. zglGetAddress( __pr2d_Rect, zglLib, "pr2d_Rect" );
  1579. zglGetAddress( __pr2d_Circle, zglLib, "pr2d_Circle" );
  1580. zglGetAddress( __pr2d_Ellipse, zglLib, "pr2d_Ellipse" );
  1581. zglGetAddress( __pr2d_TriList, zglLib, "pr2d_TriList" );
  1582. #else
  1583. zglGetAddress( pr2d_Pixel, zglLib, "pr2d_Pixel" );
  1584. zglGetAddress( pr2d_Line, zglLib, "pr2d_Line" );
  1585. zglGetAddress( pr2d_Rect, zglLib, "pr2d_Rect" );
  1586. zglGetAddress( pr2d_Circle, zglLib, "pr2d_Circle" );
  1587. zglGetAddress( pr2d_Ellipse, zglLib, "pr2d_Ellipse" );
  1588. zglGetAddress( pr2d_TriList, zglLib, "pr2d_TriList" );
  1589. #endif
  1590. zglGetAddress( sengine2d_AddSprite, zglLib, "sengine2d_AddSprite" );
  1591. zglGetAddress( sengine2d_AddCustom, zglLib, "sengine2d_AddCustom" );
  1592. zglGetAddress( sengine2d_DelSprite, zglLib, "sengine2d_DelSprite" );
  1593. zglGetAddress( sengine2d_ClearAll, zglLib, "sengine2d_ClearAll" );
  1594. zglGetAddress( sengine2d_Set, zglLib, "sengine2d_Set" );
  1595. zglGetAddress( sengine2d_Draw, zglLib, "sengine2d_Draw" );
  1596. zglGetAddress( sengine2d_Proc, zglLib, "sengine2d_Proc" );
  1597. #ifdef __CPP__
  1598. zglGetAddress( __texture2d_Draw, zglLib, "texture2d_Draw" );
  1599. zglGetAddress( __ssprite2d_Draw, zglLib, "ssprite2d_Draw" );
  1600. zglGetAddress( __asprite2d_Draw, zglLib, "asprite2d_Draw" );
  1601. zglGetAddress( __csprite2d_Draw, zglLib, "csprite2d_Draw" );
  1602. zglGetAddress( __tiles2d_Draw, zglLib, "tiles2d_Draw" );
  1603. zglGetAddress( __sgrid2d_Draw, zglLib, "sgrid2d_Draw" );
  1604. zglGetAddress( __agrid2d_Draw, zglLib, "agrid2d_Draw" );
  1605. zglGetAddress( __cgrid2d_Draw, zglLib, "cgrid2d_Draw" );
  1606. #else
  1607. zglGetAddress( texture2d_Draw, zglLib, "texture2d_Draw" );
  1608. zglGetAddress( ssprite2d_Draw, zglLib, "ssprite2d_Draw" );
  1609. zglGetAddress( asprite2d_Draw, zglLib, "asprite2d_Draw" );
  1610. zglGetAddress( csprite2d_Draw, zglLib, "csprite2d_Draw" );
  1611. zglGetAddress( tiles2d_Draw, zglLib, "tiles2d_Draw" );
  1612. zglGetAddress( sgrid2d_Draw, zglLib, "sgrid2d_Draw" );
  1613. zglGetAddress( agrid2d_Draw, zglLib, "agrid2d_Draw" );
  1614. zglGetAddress( cgrid2d_Draw, zglLib, "cgrid2d_Draw" );
  1615. #endif
  1616. zglGetAddress( pengine2d_Set, zglLib, "pengine2d_Set" );
  1617. zglGetAddress( pengine2d_Get, zglLib, "pengine2d_Get" );
  1618. zglGetAddress( pengine2d_Draw, zglLib, "pengine2d_Draw" );
  1619. zglGetAddress( pengine2d_Proc, zglLib, "pengine2d_Proc" );
  1620. #ifdef __CPP__
  1621. zglGetAddress( __pengine2d_AddEmitter, zglLib, "pengine2d_AddEmitter" );
  1622. #else
  1623. zglGetAddress( pengine2d_AddEmitter, zglLib, "pengine2d_AddEmitter" );
  1624. #endif
  1625. zglGetAddress( pengine2d_DelEmitter, zglLib, "pengine2d_DelEmitter" );
  1626. zglGetAddress( pengine2d_ClearAll, zglLib, "pengine2d_ClearAll" );
  1627. zglGetAddress( emitter2d_Add, zglLib, "emitter2d_Add" );
  1628. zglGetAddress( emitter2d_Del, zglLib, "emitter2d_Del" );
  1629. zglGetAddress( emitter2d_LoadFromFile, zglLib, "_emitter2d_LoadFromFile" );
  1630. zglGetAddress( emitter2d_LoadFromMemory, zglLib, "emitter2d_LoadFromMemory" );
  1631. zglGetAddress( emitter2d_Init, zglLib, "emitter2d_Init" );
  1632. zglGetAddress( emitter2d_Free, zglLib, "emitter2d_Free" );
  1633. zglGetAddress( emitter2d_Draw, zglLib, "emitter2d_Draw" );
  1634. zglGetAddress( emitter2d_Proc, zglLib, "emitter2d_Proc" );
  1635. zglGetAddress( font_Add, zglLib, "font_Add" );
  1636. zglGetAddress( font_Del, zglLib, "font_Del" );
  1637. zglGetAddress( font_LoadFromFile, zglLib, "_font_LoadFromFile" );
  1638. zglGetAddress( font_LoadFromMemory, zglLib, "font_LoadFromMemory" );
  1639. #ifdef __CPP__
  1640. zglGetAddress( __text_Draw, zglLib, "_text_Draw" );
  1641. zglGetAddress( __text_DrawEx, zglLib, "_text_DrawEx" );
  1642. zglGetAddress( __text_DrawInRect, zglLib, "_text_DrawInRect" );
  1643. zglGetAddress( __text_DrawInRectEx, zglLib, "_text_DrawInRectEx" );
  1644. zglGetAddress( __text_GetWidth, zglLib, "_text_GetWidth" );
  1645. zglGetAddress( __text_GetHeight, zglLib, "_text_GetHeight" );
  1646. #else
  1647. zglGetAddress( text_Draw, zglLib, "_text_Draw" );
  1648. zglGetAddress( text_DrawEx, zglLib, "_text_DrawEx" );
  1649. zglGetAddress( text_DrawInRect, zglLib, "_text_DrawInRect" );
  1650. zglGetAddress( text_DrawInRectEx, zglLib, "_text_DrawInRectEx" );
  1651. zglGetAddress( text_GetWidth, zglLib, "_text_GetWidth" );
  1652. zglGetAddress( text_GetHeight, zglLib, "_text_GetHeight" );
  1653. #endif
  1654. zglGetAddress( textFx_SetLength, zglLib, "textFx_SetLength" );
  1655. zglGetAddress( snd_Init, zglLib, "snd_Init" );
  1656. zglGetAddress( snd_Free, zglLib, "snd_Free" );
  1657. zglGetAddress( snd_Add , zglLib, "snd_Add" );
  1658. zglGetAddress( snd_Del , zglLib, "snd_Del" );
  1659. #ifdef __CPP__
  1660. zglGetAddress( __snd_LoadFromFile, zglLib, "_snd_LoadFromFile" );
  1661. zglGetAddress( __snd_LoadFromMemory, zglLib, "_snd_LoadFromMemory" );
  1662. zglGetAddress( __snd_Play, zglLib, "snd_Play" );
  1663. #else
  1664. zglGetAddress( snd_LoadFromFile, zglLib, "_snd_LoadFromFile" );
  1665. zglGetAddress( snd_LoadFromMemory, zglLib, "_snd_LoadFromMemory" );
  1666. zglGetAddress( snd_Play, zglLib, "snd_Play" );
  1667. #endif
  1668. zglGetAddress( snd_Stop, zglLib, "snd_Stop" );
  1669. zglGetAddress( snd_SetPos, zglLib, "snd_SetPos" );
  1670. zglGetAddress( snd_SetVolume, zglLib, "snd_SetVolume" );
  1671. zglGetAddress( snd_SetSpeed, zglLib, "snd_SetSpeed" );
  1672. zglGetAddress( snd_Get, zglLib, "snd_Get" );
  1673. #ifdef __CPP__
  1674. zglGetAddress( __snd_PlayFile, zglLib, "_snd_PlayFile" );
  1675. zglGetAddress( __snd_PlayMemory, zglLib, "_snd_PlayMemory" );
  1676. #else
  1677. zglGetAddress( snd_PlayFile, zglLib, "_snd_PlayFile" );
  1678. zglGetAddress( snd_PlayMemory, zglLib, "_snd_PlayMemory" );
  1679. #endif
  1680. zglGetAddress( snd_PauseStream, zglLib, "snd_PauseStream" );
  1681. zglGetAddress( snd_StopStream, zglLib, "snd_StopStream" );
  1682. zglGetAddress( snd_ResumeStream, zglLib, "snd_ResumeStream" );
  1683. zglGetAddress( snd_SeekStream, zglLib, "snd_SeekStream" );
  1684. zglGetAddress( video_Add, zglLib, "video_Add" );
  1685. zglGetAddress( video_Del, zglLib, "video_Del" );
  1686. zglGetAddress( video_OpenFile, zglLib, "_video_OpenFile" );
  1687. zglGetAddress( video_OpenMemory, zglLib, "_video_OpenMemory" );
  1688. zglGetAddress( video_Update, zglLib, "video_Update" );
  1689. zglGetAddress( video_Seek, zglLib, "video_Seek" );
  1690. zglGetAddress( m_Cos, zglLib, "m_Cos" );
  1691. zglGetAddress( m_Sin, zglLib, "m_Sin" );
  1692. zglGetAddress( m_Distance, zglLib, "m_Distance" );
  1693. zglGetAddress( m_FDistance, zglLib, "m_FDistance" );
  1694. zglGetAddress( m_Angle, zglLib, "m_Angle" );
  1695. zglGetAddress( m_Orientation, zglLib, "m_Orientation" );
  1696. #ifdef __CPP__
  1697. zglGetAddress( __tess_Triangulate, zglLib, "tess_Triangulate" );
  1698. zglGetAddress( __tess_AddHole, zglLib, "tess_AddHole" );
  1699. #else
  1700. zglGetAddress( tess_Triangulate, zglLib, "tess_Triangulate" );
  1701. zglGetAddress( tess_AddHole, zglLib, "tess_AddHole" );
  1702. #endif
  1703. zglGetAddress( tess_GetData, zglLib, "tess_GetData" );
  1704. zglGetAddress( col2d_PointInRect, zglLib, "col2d_PointInRect" );
  1705. zglGetAddress( col2d_PointInTriangle, zglLib, "col2d_PointInTriangle" );
  1706. zglGetAddress( col2d_PointInCircle, zglLib, "col2d_PointInCircle" );
  1707. zglGetAddress( col2d_Line, zglLib, "col2d_Line" );
  1708. zglGetAddress( col2d_LineVsRect, zglLib, "col2d_LineVsRect" );
  1709. zglGetAddress( col2d_LineVsCircle, zglLib, "col2d_LineVsCircle" );
  1710. zglGetAddress( col2d_Rect, zglLib, "col2d_Rect" );
  1711. zglGetAddress( col2d_ClipRect, zglLib, "col2d_ClipRect" );
  1712. zglGetAddress( col2d_RectInRect, zglLib, "col2d_RectInRect" );
  1713. zglGetAddress( col2d_RectInCircle, zglLib, "col2d_RectInCircle" );
  1714. zglGetAddress( col2d_RectVsCircle, zglLib, "col2d_RectVsCircle" );
  1715. zglGetAddress( col2d_Circle, zglLib, "col2d_Circle" );
  1716. zglGetAddress( col2d_CircleInCircle, zglLib, "col2d_CircleInCircle" );
  1717. zglGetAddress( col2d_CircleInRect, zglLib, "col2d_CircleInRect" );
  1718. zglGetAddress( file_Open, zglLib, "_file_Open" );
  1719. zglGetAddress( file_MakeDir, zglLib, "_file_MakeDir" );
  1720. zglGetAddress( file_Remove, zglLib, "_file_Remove" );
  1721. zglGetAddress( file_Exists, zglLib, "_file_Exists" );
  1722. zglGetAddress( file_Seek, zglLib, "file_Seek" );
  1723. zglGetAddress( file_GetPos, zglLib, "file_GetPos" );
  1724. zglGetAddress( file_Read, zglLib, "file_Read" );
  1725. zglGetAddress( file_Write, zglLib, "file_Write" );
  1726. zglGetAddress( file_GetSize, zglLib, "file_GetSize" );
  1727. zglGetAddress( file_Flush, zglLib, "file_Flush" );
  1728. zglGetAddress( file_Close, zglLib, "file_Close" );
  1729. zglGetAddress( file_Find, zglLib, "file_Find" );
  1730. zglGetAddress( file_GetName, zglLib, "file_GetName" );
  1731. zglGetAddress( file_GetExtension, zglLib, "file_GetExtension" );
  1732. zglGetAddress( file_GetDirectory, zglLib, "file_GetDirectory" );
  1733. zglGetAddress( file_SetPath, zglLib, "_file_SetPath" );
  1734. zglGetAddress( file_OpenArchive, zglLib, "_file_OpenArchive" );
  1735. zglGetAddress( file_CloseArchive, zglLib, "file_CloseArchive" );
  1736. zglGetAddress( mem_LoadFromFile, zglLib, "mem_LoadFromFile" );
  1737. zglGetAddress( mem_SaveToFile, zglLib, "mem_SaveToFile" );
  1738. zglGetAddress( mem_Seek, zglLib, "mem_Seek" );
  1739. zglGetAddress( mem_Read, zglLib, "mem_Read" );
  1740. zglGetAddress( mem_Write, zglLib, "mem_Write" );
  1741. zglGetAddress( mem_SetSize, zglLib, "mem_SetSize" );
  1742. zglGetAddress( mem_Free, zglLib, "mem_Free" );
  1743. // zglGetAddress( u_SortList, zglLib, "u_SortList" );
  1744. zglGetAddress( u_Sleep, zglLib, "u_Sleep" );
  1745. return TRUE;
  1746. }
  1747. else
  1748. {
  1749. #ifdef __LINUX__
  1750. printf( "Error while loading ZenGL\n" );
  1751. #endif
  1752. #ifdef __WINDOWS__
  1753. MessageBoxA( 0, "Error while loading ZenGL", "Error", 0x00000010 );
  1754. #endif
  1755. return FALSE;
  1756. }
  1757. }
  1758. void zglFree()
  1759. {
  1760. if ( zglLib )
  1761. zglFreeLibrary( zglLib );
  1762. }
  1763. #else
  1764. extern bool zglLoad( const char* LibraryName );
  1765. extern void zglFree();
  1766. #endif
  1767. #endif