CUDAx.Utility.pas 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. //
  2. // The graphics platform GLXcene https://github.com/glscene
  3. //
  4. unit CUDAx.Utility;
  5. (* Wraper of cutil.*)
  6. interface
  7. uses
  8. Winapi.Windows;
  9. const
  10. {$IFDEF WIN64}
  11. CUTILDLL = 'cutil64.dll';
  12. {$ELSE}
  13. CUTILDLL = 'cutil32.dll';
  14. {$ENDIF}
  15. var
  16. cutFindFilePath: function(const filename: PAnsiChar; const executablePath:
  17. PAnsiChar): PAnsiChar;
  18. {$IFDEF CUDA_STDCALL}stdcall;
  19. {$ENDIF}
  20. {$IFDEF CUDA_CDECL}cdecl;
  21. {$ENDIF}
  22. cutLoadPGMf: function(const filename: PAnsiChar; var data: System.PSingle; var w:
  23. Integer; var h: Integer): Boolean;
  24. {$IFDEF CUDA_STDCALL}stdcall;
  25. {$ENDIF}
  26. {$IFDEF CUDA_CDECL}cdecl;
  27. {$ENDIF}
  28. cutSavePGMf: function(const filename: PAnsiChar; data: System.PSingle; w: Integer;
  29. h: Integer): Boolean;
  30. {$IFDEF CUDA_STDCALL}stdcall;
  31. {$ENDIF}
  32. {$IFDEF CUDA_CDECL}cdecl;
  33. {$ENDIF}
  34. cutLoadPGMub: function(const filename: PAnsiChar; var data: PByte; var w:
  35. Integer; var h: Integer): Boolean;
  36. {$IFDEF CUDA_STDCALL}stdcall;
  37. {$ENDIF}
  38. {$IFDEF CUDA_CDECL}cdecl;
  39. {$ENDIF}
  40. cutLoadPPMub: function(const filename: PAnsiChar; var data: PByte; var w:
  41. Integer; var h: Integer): Boolean;
  42. {$IFDEF CUDA_STDCALL}stdcall;
  43. {$ENDIF}
  44. {$IFDEF CUDA_CDECL}cdecl;
  45. {$ENDIF}
  46. cutLoadPPM4ub: function(const filename: PAnsiChar; var data: PByte; var w:
  47. Integer; var h: Integer): Boolean;
  48. {$IFDEF CUDA_STDCALL}stdcall;
  49. {$ENDIF}
  50. {$IFDEF CUDA_CDECL}cdecl;
  51. {$ENDIF}
  52. cutLoadPGMi: function(const filename: PAnsiChar; var data: PInteger; var w:
  53. Integer; var h: Integer): Boolean;
  54. {$IFDEF CUDA_STDCALL}stdcall;
  55. {$ENDIF}
  56. {$IFDEF CUDA_CDECL}cdecl;
  57. {$ENDIF}
  58. cutLoadPGMs: function(const filename: PAnsiChar; var data: PWord; var w:
  59. Integer; var h: Integer): Boolean;
  60. {$IFDEF CUDA_STDCALL}stdcall;
  61. {$ENDIF}
  62. {$IFDEF CUDA_CDECL}cdecl;
  63. {$ENDIF}
  64. cutSavePGMub: function(const filename: PAnsiChar; data: PByte; w: Integer;
  65. h: Integer): Boolean;
  66. {$IFDEF CUDA_STDCALL}stdcall;
  67. {$ENDIF}
  68. {$IFDEF CUDA_CDECL}cdecl;
  69. {$ENDIF}
  70. cutSavePPMub: function(const filename: PAnsiChar; data: PByte; w: Integer;
  71. h: Integer): Boolean;
  72. {$IFDEF CUDA_STDCALL}stdcall;
  73. {$ENDIF}
  74. {$IFDEF CUDA_CDECL}cdecl;
  75. {$ENDIF}
  76. cutSavePPM4ub: function(const filename: PAnsiChar; data: PByte; w: Integer;
  77. h: Integer): Boolean;
  78. {$IFDEF CUDA_STDCALL}stdcall;
  79. {$ENDIF}
  80. {$IFDEF CUDA_CDECL}cdecl;
  81. {$ENDIF}
  82. cutSavePGMi: function(const filename: PAnsiChar; data: PInteger; w: Integer;
  83. h: Integer): Boolean;
  84. {$IFDEF CUDA_STDCALL}stdcall;
  85. {$ENDIF}
  86. {$IFDEF CUDA_CDECL}cdecl;
  87. {$ENDIF}
  88. cutSavePGMs: function(const filename: PAnsiChar; data: PWord; w: Integer;
  89. h: Integer): Boolean;
  90. {$IFDEF CUDA_STDCALL}stdcall;
  91. {$ENDIF}
  92. {$IFDEF CUDA_CDECL}cdecl;
  93. {$ENDIF}
  94. cutComparef: function(const reference: PSingle; const data: PSingle;
  95. const len: Cardinal): Boolean;
  96. {$IFDEF CUDA_STDCALL}stdcall;
  97. {$ENDIF}
  98. {$IFDEF CUDA_CDECL}cdecl;
  99. {$ENDIF}
  100. cutComparei: function(const reference: PInteger; const data: PInteger;
  101. const len: Cardinal): Boolean;
  102. {$IFDEF CUDA_STDCALL}stdcall;
  103. {$ENDIF}
  104. {$IFDEF CUDA_CDECL}cdecl;
  105. {$ENDIF}
  106. cutCompareuit: function( const reference: PInteger; const data: PInteger;
  107. const len: Cardinal; const epsilon: Single; const threshold: Single ): Boolean;
  108. {$IFDEF CUDA_STDCALL}stdcall;
  109. {$ENDIF}
  110. {$IFDEF CUDA_CDECL}cdecl;
  111. {$ENDIF}
  112. cutCompareub: function(const reference: PByte; const data: PByte;
  113. const len: Cardinal): Boolean;
  114. {$IFDEF CUDA_STDCALL}stdcall;
  115. {$ENDIF}
  116. {$IFDEF CUDA_CDECL}cdecl;
  117. {$ENDIF}
  118. cutCompareubt: function( const reference: PByte; const data: PByte;
  119. const len: Cardinal; const epsilon: Single; const threshold: Single ): Boolean;
  120. {$IFDEF CUDA_STDCALL}stdcall;
  121. {$ENDIF}
  122. {$IFDEF CUDA_CDECL}cdecl;
  123. {$ENDIF}
  124. cutCompareube: function( const reference: PByte; const data: PByte;
  125. const len: Cardinal; const epsilon: Single): Boolean;
  126. {$IFDEF CUDA_STDCALL}stdcall;
  127. {$ENDIF}
  128. {$IFDEF CUDA_CDECL}cdecl;
  129. {$ENDIF}
  130. cutComparefe: function( const reference: PSingle; const data: PSingle;
  131. const len: Cardinal; const epsilon: Single): Boolean;
  132. {$IFDEF CUDA_STDCALL}stdcall;
  133. {$ENDIF}
  134. {$IFDEF CUDA_CDECL}cdecl;
  135. {$ENDIF}
  136. cutComparefet: function( const reference: PSingle; const data: PSingle;
  137. const len: Cardinal; const epsilon: Single; const threshold: Single ): Boolean;
  138. {$IFDEF CUDA_STDCALL}stdcall;
  139. {$ENDIF}
  140. {$IFDEF CUDA_CDECL}cdecl;
  141. {$ENDIF}
  142. cutCompareL2fe: function( const reference: PSingle; const data: PSingle;
  143. const len: Cardinal; const epsilon: Single): Boolean;
  144. {$IFDEF CUDA_STDCALL}stdcall;
  145. {$ENDIF}
  146. {$IFDEF CUDA_CDECL}cdecl;
  147. {$ENDIF}
  148. cutCreateTimer: function(var name: Cardinal): Boolean;
  149. {$IFDEF CUDA_STDCALL}stdcall;
  150. {$ENDIF}
  151. {$IFDEF CUDA_CDECL}cdecl;
  152. {$ENDIF}
  153. cutStartTimer: function
  154. (const name: Cardinal): Boolean;
  155. {$IFDEF CUDA_STDCALL}stdcall;
  156. {$ENDIF}
  157. {$IFDEF CUDA_CDECL}cdecl;
  158. {$ENDIF}
  159. cutStopTimer: function(const name: Cardinal): Boolean;
  160. {$IFDEF CUDA_STDCALL}stdcall;
  161. {$ENDIF}
  162. {$IFDEF CUDA_CDECL}cdecl;
  163. {$ENDIF}
  164. cutResetTimer: function(const name: Cardinal): Boolean;
  165. {$IFDEF CUDA_STDCALL}stdcall;
  166. {$ENDIF}
  167. {$IFDEF CUDA_CDECL}cdecl;
  168. {$ENDIF}
  169. cutDeleteTimer: function(const name: Cardinal): Boolean;
  170. {$IFDEF CUDA_STDCALL}stdcall;
  171. {$ENDIF}
  172. {$IFDEF CUDA_CDECL}cdecl;
  173. {$ENDIF}
  174. cutGetTimerValue: function(const name: Cardinal): Single;
  175. {$IFDEF CUDA_STDCALL}stdcall;
  176. {$ENDIF}{$IFDEF CUDA_CDECL}cdecl;
  177. {$ENDIF}
  178. cutGetAverageTimerValue: function(const name: Cardinal): Single;
  179. {$IFDEF CUDA_STDCALL}stdcall;
  180. {$ENDIF}{$IFDEF CUDA_CDECL}cdecl;
  181. {$ENDIF}
  182. cutFree: procedure(ptr: Pointer);
  183. {$IFDEF CUDA_STDCALL}stdcall;
  184. {$ENDIF}{$IFDEF CUDA_CDECL}cdecl;
  185. {$ENDIF}
  186. function InitCUTIL: Boolean;
  187. procedure CloseCUTIL;
  188. function InitCUTILFromLibrary(const LibName: WideString): Boolean;
  189. function IsCUTILInitialized: Boolean;
  190. //==============================================
  191. implementation
  192. //==============================================
  193. const
  194. INVALID_MODULEHANDLE = 0;
  195. // ************** Windows specific ********************
  196. {$IFDEF MSWINDOWS}
  197. var
  198. CUTILHandle: HINST = INVALID_MODULEHANDLE;
  199. {$ENDIF}
  200. // ************** UNIX specific ********************
  201. {$IFDEF UNIX}
  202. var
  203. CUTILHandle: TLibHandle = INVALID_MODULEHANDLE;
  204. {$ENDIF}
  205. function CUTILGetProcAddress(ProcName: PAnsiChar): Pointer;
  206. begin
  207. result := GetProcAddress(Cardinal(CUTILHandle), ProcName);
  208. end;
  209. function InitCUTIL: Boolean;
  210. begin
  211. if CUTILHandle = INVALID_MODULEHANDLE then
  212. Result := InitCUTILFromLibrary(CUTILDLL)
  213. else
  214. Result := True;
  215. end;
  216. procedure CloseCUTIL;
  217. begin
  218. if CUTILHandle <> INVALID_MODULEHANDLE then
  219. begin
  220. FreeLibrary(Cardinal(CUTILHandle));
  221. CUTILHandle := INVALID_MODULEHANDLE;
  222. end;
  223. end;
  224. function InitCUTILFromLibrary(const LibName: WideString): Boolean;
  225. begin
  226. Result := False;
  227. CloseCUTIL;
  228. CUTILHandle := LoadLibraryW(PWideChar(LibName));
  229. if CUTILHandle = INVALID_MODULEHANDLE then
  230. Exit;
  231. cutFindFilePath := CUTILGetProcAddress('cutFindFilePath');
  232. cutLoadPGMf := CUTILGetProcAddress('cutLoadPGMf');
  233. cutSavePGMf := CUTILGetProcAddress('cutSavePGMf');
  234. cutLoadPGMub := CUTILGetProcAddress('cutLoadPGMub');
  235. cutLoadPPMub := CUTILGetProcAddress('cutLoadPPMub');
  236. cutLoadPPM4ub := CUTILGetProcAddress('cutLoadPPM4ub');
  237. cutLoadPGMi := CUTILGetProcAddress('cutLoadPGMi');
  238. cutLoadPGMs := CUTILGetProcAddress('cutLoadPGMs');
  239. cutSavePGMub := CUTILGetProcAddress('cutSavePGMub');
  240. cutSavePPMub := CUTILGetProcAddress('cutSavePPMub');
  241. cutSavePPM4ub := CUTILGetProcAddress('cutSavePPM4ub');
  242. cutSavePGMi := CUTILGetProcAddress('cutSavePGMi');
  243. cutSavePGMs := CUTILGetProcAddress('cutSavePGMs');
  244. cutComparef := CUTILGetProcAddress('cutComparef');
  245. cutComparei := CUTILGetProcAddress('cutComparei');
  246. cutCompareuit := CUTILGetProcAddress('cutCompareuit');
  247. cutCompareub := CUTILGetProcAddress('cutCompareub');
  248. cutCompareubt := CUTILGetProcAddress('cutCompareubt');
  249. cutCompareube := CUTILGetProcAddress('cutCompareube');
  250. cutComparefe := CUTILGetProcAddress('cutComparefe');
  251. cutComparefet := CUTILGetProcAddress('cutComparefet');
  252. cutCompareL2fe := CUTILGetProcAddress('cutCompareL2fe');
  253. cutCreateTimer := CUTILGetProcAddress('cutCreateTimer');
  254. cutStartTimer := CUTILGetProcAddress('cutStartTimer');
  255. cutStopTimer := CUTILGetProcAddress('cutStopTimer');
  256. cutResetTimer := CUTILGetProcAddress('cutResetTimer');
  257. cutDeleteTimer := CUTILGetProcAddress('cutDeleteTimer');
  258. cutGetTimerValue := CUTILGetProcAddress('cutGetTimerValue');
  259. cutGetAverageTimerValue := CUTILGetProcAddress('cutGetAverageTimerValue');
  260. cutFree := CUTILGetProcAddress('cutFree');
  261. Result := True;
  262. end;
  263. function IsCUTILInitialized: Boolean;
  264. begin
  265. Result := (CUTILHandle <> INVALID_MODULEHANDLE);
  266. end;
  267. initialization
  268. finalization
  269. CloseCUTIL;
  270. end.