2
0

ImportOptions.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using System;
  4. using System.Runtime.CompilerServices;
  5. using BansheeEngine;
  6. namespace BansheeEditor
  7. {
  8. /** @addtogroup Library
  9. * @{
  10. */
  11. /// <summary>
  12. /// Base class for all import options. Allows control over how is a specific resource type imported.
  13. /// </summary>
  14. public class ImportOptions : ScriptObject
  15. {
  16. }
  17. /// <summary>
  18. /// Provides options for controlling how is a texture resource imported.
  19. /// </summary>
  20. public class TextureImportOptions : ImportOptions
  21. {
  22. /// <summary>
  23. /// Creates new texture import options with default values.
  24. /// </summary>
  25. public TextureImportOptions()
  26. {
  27. Internal_CreateInstance(this);
  28. }
  29. /// <summary>
  30. /// Pixel format to import as.
  31. /// </summary>
  32. public PixelFormat Format
  33. {
  34. get { return Internal_GetPixelFormat(mCachedPtr); }
  35. set { Internal_SetPixelFormat(mCachedPtr, value); }
  36. }
  37. /// <summary>
  38. /// Determines whether the imported texture will have mipmaps generated.
  39. /// </summary>
  40. public bool GenerateMipmaps
  41. {
  42. get { return Internal_GetGenerateMipmaps(mCachedPtr); }
  43. set { Internal_SetGenerateMipmaps(mCachedPtr, value); }
  44. }
  45. /// <summary>
  46. /// Maximum mipmap level to generate, if mipmap generation is enabled.
  47. /// </summary>
  48. public int MaxMipmapLevel
  49. {
  50. get { return Internal_GetMaxMipmapLevel(mCachedPtr); }
  51. set { Internal_SetMaxMipmapLevel(mCachedPtr, value); }
  52. }
  53. /// <summary>
  54. /// Determines whether the texture data is also stored in main memory, available for fast CPU access.
  55. /// </summary>
  56. public bool CPUReadable
  57. {
  58. get { return Internal_GetCPUReadable(mCachedPtr); }
  59. set { Internal_SetCPUReadable(mCachedPtr, value); }
  60. }
  61. /// <summary>
  62. /// Determines should the texture data be treated as if its in sRGB (gamma) space. Such texture will be converted by
  63. /// hardware to linear space before use on the GPU.
  64. /// </summary>
  65. public bool IsSRGB
  66. {
  67. get { return Internal_GetIsSRGB(mCachedPtr); }
  68. set { Internal_SetIsSRGB(mCachedPtr, value); }
  69. }
  70. [MethodImpl(MethodImplOptions.InternalCall)]
  71. private static extern void Internal_CreateInstance(TextureImportOptions instance);
  72. [MethodImpl(MethodImplOptions.InternalCall)]
  73. private static extern PixelFormat Internal_GetPixelFormat(IntPtr thisPtr);
  74. [MethodImpl(MethodImplOptions.InternalCall)]
  75. private static extern void Internal_SetPixelFormat(IntPtr thisPtr, PixelFormat value);
  76. [MethodImpl(MethodImplOptions.InternalCall)]
  77. private static extern bool Internal_GetGenerateMipmaps(IntPtr thisPtr);
  78. [MethodImpl(MethodImplOptions.InternalCall)]
  79. private static extern void Internal_SetGenerateMipmaps(IntPtr thisPtr, bool value);
  80. [MethodImpl(MethodImplOptions.InternalCall)]
  81. private static extern int Internal_GetMaxMipmapLevel(IntPtr thisPtr);
  82. [MethodImpl(MethodImplOptions.InternalCall)]
  83. private static extern void Internal_SetMaxMipmapLevel(IntPtr thisPtr, int value);
  84. [MethodImpl(MethodImplOptions.InternalCall)]
  85. private static extern bool Internal_GetCPUReadable(IntPtr thisPtr);
  86. [MethodImpl(MethodImplOptions.InternalCall)]
  87. private static extern void Internal_SetCPUReadable(IntPtr thisPtr, bool value);
  88. [MethodImpl(MethodImplOptions.InternalCall)]
  89. private static extern bool Internal_GetIsSRGB(IntPtr thisPtr);
  90. [MethodImpl(MethodImplOptions.InternalCall)]
  91. private static extern void Internal_SetIsSRGB(IntPtr thisPtr, bool value);
  92. }
  93. /// <summary>
  94. /// Provides options for controlling how is a mesh resource imported.
  95. /// </summary>
  96. public class MeshImportOptions : ImportOptions
  97. {
  98. /// <summary>
  99. /// Creates new mesh import options with default values.
  100. /// </summary>
  101. public MeshImportOptions()
  102. {
  103. Internal_CreateInstance(this);
  104. }
  105. /// <summary>
  106. /// Determines whether the mesh data is also stored in main memory, available for fast CPU access.
  107. /// </summary>
  108. public bool CPUReadable
  109. {
  110. get { return Internal_GetCPUReadable(mCachedPtr); }
  111. set { Internal_SetCPUReadable(mCachedPtr, value); }
  112. }
  113. /// <summary>
  114. /// Controls should mesh normals be imported if available.
  115. /// </summary>
  116. public bool ImportNormals
  117. {
  118. get { return Internal_GetImportNormals(mCachedPtr); }
  119. set { Internal_SetImportNormals(mCachedPtr, value); }
  120. }
  121. /// <summary>
  122. /// Controls should mesh tangents/bitangents be imported if available.
  123. /// </summary>
  124. public bool ImportTangents
  125. {
  126. get { return Internal_GetImportTangents(mCachedPtr); }
  127. set { Internal_SetImportTangents(mCachedPtr, value); }
  128. }
  129. /// <summary>
  130. /// Controls should mesh skin data like bone weights, indices and bind poses be imported if available.
  131. /// </summary>
  132. public bool ImportSkin
  133. {
  134. get { return Internal_GetImportSkin(mCachedPtr); }
  135. set { Internal_SetImportSkin(mCachedPtr, value); }
  136. }
  137. /// <summary>
  138. /// Controls should animation clips be imported if available.
  139. /// </summary>
  140. public bool ImportAnimation
  141. {
  142. get { return Internal_GetImportAnimation(mCachedPtr); }
  143. set { Internal_SetImportAnimation(mCachedPtr, value); }
  144. }
  145. /// <summary>
  146. /// Controls should mesh blend shapes be imported if available.
  147. /// </summary>
  148. public bool ImportBlendShapes
  149. {
  150. get { return Internal_GetImportBlendShapes(mCachedPtr); }
  151. set { Internal_SetImportBlendShapes(mCachedPtr, value); }
  152. }
  153. /// <summary>
  154. /// Uniformly scales the imported mesh by the specified value.
  155. /// </summary>
  156. public float Scale
  157. {
  158. get { return Internal_GetScale(mCachedPtr); }
  159. set { Internal_SetScale(mCachedPtr, value); }
  160. }
  161. /// <summary>
  162. /// Controls what type (if any) of collision mesh should be imported.
  163. /// </summary>
  164. public CollisionMeshType CollisionMeshType
  165. {
  166. get { return (CollisionMeshType)Internal_GetCollisionMeshType(mCachedPtr); }
  167. set { Internal_SetCollisionMeshType(mCachedPtr, (int)value); }
  168. }
  169. [MethodImpl(MethodImplOptions.InternalCall)]
  170. private static extern void Internal_CreateInstance(MeshImportOptions instance);
  171. [MethodImpl(MethodImplOptions.InternalCall)]
  172. private static extern bool Internal_GetCPUReadable(IntPtr thisPtr);
  173. [MethodImpl(MethodImplOptions.InternalCall)]
  174. private static extern void Internal_SetCPUReadable(IntPtr thisPtr, bool value);
  175. [MethodImpl(MethodImplOptions.InternalCall)]
  176. private static extern bool Internal_GetImportNormals(IntPtr thisPtr);
  177. [MethodImpl(MethodImplOptions.InternalCall)]
  178. private static extern void Internal_SetImportNormals(IntPtr thisPtr, bool value);
  179. [MethodImpl(MethodImplOptions.InternalCall)]
  180. private static extern bool Internal_GetImportTangents(IntPtr thisPtr);
  181. [MethodImpl(MethodImplOptions.InternalCall)]
  182. private static extern void Internal_SetImportTangents(IntPtr thisPtr, bool value);
  183. [MethodImpl(MethodImplOptions.InternalCall)]
  184. private static extern bool Internal_GetImportSkin(IntPtr thisPtr);
  185. [MethodImpl(MethodImplOptions.InternalCall)]
  186. private static extern void Internal_SetImportSkin(IntPtr thisPtr, bool value);
  187. [MethodImpl(MethodImplOptions.InternalCall)]
  188. private static extern bool Internal_GetImportAnimation(IntPtr thisPtr);
  189. [MethodImpl(MethodImplOptions.InternalCall)]
  190. private static extern void Internal_SetImportAnimation(IntPtr thisPtr, bool value);
  191. [MethodImpl(MethodImplOptions.InternalCall)]
  192. private static extern bool Internal_GetImportBlendShapes(IntPtr thisPtr);
  193. [MethodImpl(MethodImplOptions.InternalCall)]
  194. private static extern void Internal_SetImportBlendShapes(IntPtr thisPtr, bool value);
  195. [MethodImpl(MethodImplOptions.InternalCall)]
  196. private static extern float Internal_GetScale(IntPtr thisPtr);
  197. [MethodImpl(MethodImplOptions.InternalCall)]
  198. private static extern void Internal_SetScale(IntPtr thisPtr, float value);
  199. [MethodImpl(MethodImplOptions.InternalCall)]
  200. private static extern int Internal_GetCollisionMeshType(IntPtr thisPtr);
  201. [MethodImpl(MethodImplOptions.InternalCall)]
  202. private static extern void Internal_SetCollisionMeshType(IntPtr thisPtr, int value);
  203. }
  204. /// <summary>
  205. /// Controls what type of collision mesh should be imported during mesh import.
  206. /// </summary>
  207. public enum CollisionMeshType // Note: Must match C++ enum CollisionMeshImport
  208. {
  209. /// <summary>
  210. /// No collision mesh will be imported.
  211. /// </summary>
  212. None,
  213. /// <summary>
  214. /// Normal triangle mesh will be imported.
  215. /// </summary>
  216. Normal,
  217. /// <summary>
  218. /// A convex hull will be generated from the source mesh.
  219. /// </summary>
  220. Convex
  221. }
  222. /// <summary>
  223. /// Import options that provide various options for controlling how is a font resource imported.
  224. /// </summary>
  225. public class FontImportOptions : ImportOptions
  226. {
  227. /// <summary>
  228. /// Creates new font import options with default values.
  229. /// </summary>
  230. public FontImportOptions()
  231. {
  232. Internal_CreateInstance(this);
  233. }
  234. /// <summary>
  235. /// Font sizes in points that are to be imported.
  236. /// </summary>
  237. public int[] FontSizes
  238. {
  239. get { return Internal_GetFontSizes(mCachedPtr); }
  240. set { Internal_SetFontSizes(mCachedPtr, value); }
  241. }
  242. /// <summary>
  243. /// Dots per inch resolution to use when rendering the characters into the texture.
  244. /// </summary>
  245. public int DPI
  246. {
  247. get { return Internal_GetDPI(mCachedPtr); }
  248. set { Internal_SetDPI(mCachedPtr, value); }
  249. }
  250. /// <summary>
  251. /// Determines rendering mode used when rendering the characters into the bitmap.
  252. /// </summary>
  253. public FontRenderMode RenderMode
  254. {
  255. get { return Internal_GetRenderMode(mCachedPtr); }
  256. set { Internal_SetRenderMode(mCachedPtr, value); }
  257. }
  258. /// <summary>
  259. /// Determines should the characters be rendered in bold style.
  260. /// </summary>
  261. public bool Bold
  262. {
  263. get { return Internal_GetBold(mCachedPtr); }
  264. set { Internal_SetBold(mCachedPtr, value); }
  265. }
  266. /// <summary>
  267. /// Determines should the characters be rendered in italic style.
  268. /// </summary>
  269. public bool Italic
  270. {
  271. get { return Internal_GetItalic(mCachedPtr); }
  272. set { Internal_SetItalic(mCachedPtr, value); }
  273. }
  274. /// <summary>
  275. /// Determines character ranges to import from the font. Ranges are defined as unicode numbers.
  276. /// </summary>
  277. public CharRange[] CharRanges
  278. {
  279. get { return Internal_GetCharRanges(mCachedPtr); }
  280. set { Internal_SetCharRanges(mCachedPtr, value); }
  281. }
  282. [MethodImpl(MethodImplOptions.InternalCall)]
  283. private static extern void Internal_CreateInstance(FontImportOptions instance);
  284. [MethodImpl(MethodImplOptions.InternalCall)]
  285. private static extern int[] Internal_GetFontSizes(IntPtr thisPtr);
  286. [MethodImpl(MethodImplOptions.InternalCall)]
  287. private static extern void Internal_SetFontSizes(IntPtr thisPtr, int[] value);
  288. [MethodImpl(MethodImplOptions.InternalCall)]
  289. private static extern int Internal_GetDPI(IntPtr thisPtr);
  290. [MethodImpl(MethodImplOptions.InternalCall)]
  291. private static extern void Internal_SetDPI(IntPtr thisPtr, int value);
  292. [MethodImpl(MethodImplOptions.InternalCall)]
  293. private static extern FontRenderMode Internal_GetRenderMode(IntPtr thisPtr);
  294. [MethodImpl(MethodImplOptions.InternalCall)]
  295. private static extern void Internal_SetRenderMode(IntPtr thisPtr, FontRenderMode value);
  296. [MethodImpl(MethodImplOptions.InternalCall)]
  297. private static extern bool Internal_GetBold(IntPtr thisPtr);
  298. [MethodImpl(MethodImplOptions.InternalCall)]
  299. private static extern void Internal_SetBold(IntPtr thisPtr, bool value);
  300. [MethodImpl(MethodImplOptions.InternalCall)]
  301. private static extern bool Internal_GetItalic(IntPtr thisPtr);
  302. [MethodImpl(MethodImplOptions.InternalCall)]
  303. private static extern void Internal_SetItalic(IntPtr thisPtr, bool value);
  304. [MethodImpl(MethodImplOptions.InternalCall)]
  305. private static extern CharRange[] Internal_GetCharRanges(IntPtr thisPtr);
  306. [MethodImpl(MethodImplOptions.InternalCall)]
  307. private static extern void Internal_SetCharRanges(IntPtr thisPtr, CharRange[] value);
  308. }
  309. /// <summary>
  310. /// Provides various options for controlling how is a script file imported.
  311. /// </summary>
  312. public class ScriptCodeImportOptions : ImportOptions
  313. {
  314. /// <summary>
  315. /// Creates new script import options with default values.
  316. /// </summary>
  317. public ScriptCodeImportOptions()
  318. {
  319. Internal_CreateInstance(this);
  320. }
  321. /// <summary>
  322. /// Determines whether the script is editor-only or a normal game script. Editor scripts are compiled in a separate
  323. /// assembly and may reference editor specific functionality, but are not available in the final game code.
  324. /// </summary>
  325. public bool EditorScript
  326. {
  327. get { return Internal_IsEditorScript(mCachedPtr); }
  328. set { Internal_SetEditorScript(mCachedPtr, value); }
  329. }
  330. [MethodImpl(MethodImplOptions.InternalCall)]
  331. private static extern void Internal_CreateInstance(ScriptCodeImportOptions instance);
  332. [MethodImpl(MethodImplOptions.InternalCall)]
  333. private static extern bool Internal_IsEditorScript(IntPtr thisPtr);
  334. [MethodImpl(MethodImplOptions.InternalCall)]
  335. private static extern void Internal_SetEditorScript(IntPtr thisPtr, bool value);
  336. }
  337. /// <summary>
  338. /// Determines how is a font rendered into the bitmap texture.
  339. /// </summary>
  340. public enum FontRenderMode // Note: Must match C++ enum FontRenderMode
  341. {
  342. /// <summary>Render antialiased fonts without hinting (slightly more blurry).</summary>
  343. Smooth,
  344. /// <summary>Render non-antialiased fonts without hinting (slightly more blurry).</summary>
  345. Raster,
  346. /// <summary>Render antialiased fonts with hinting.</summary>
  347. HintedSmooth,
  348. /// <summary>Render non-antialiased fonts with hinting.</summary>
  349. HintedRaster
  350. }
  351. /// <summary>
  352. /// Provides various options for controlling how is an audio clip file imported.
  353. /// </summary>
  354. public class AudioClipImportOptions : ImportOptions
  355. {
  356. /// <summary>
  357. /// Creates new audio clip import options with default values.
  358. /// </summary>
  359. public AudioClipImportOptions()
  360. {
  361. Internal_CreateInstance(this);
  362. }
  363. /// <summary>
  364. /// Format to import the audio clip as.
  365. /// </summary>
  366. public AudioFormat Format
  367. {
  368. get { return Internal_GetFormat(mCachedPtr); }
  369. set { Internal_SetFormat(mCachedPtr, value); }
  370. }
  371. /// <summary>
  372. /// Determines how is audio data loaded into memory.
  373. /// </summary>
  374. public AudioReadMode ReadMode
  375. {
  376. get { return Internal_GetReadMode(mCachedPtr); }
  377. set { Internal_SetReadMode(mCachedPtr, value); }
  378. }
  379. /// <summary>
  380. /// Determines will the clip be played as spatial (3D) audio or as normal audio.
  381. /// </summary>
  382. public bool Is3D
  383. {
  384. get { return Internal_GetIs3D(mCachedPtr); }
  385. set { Internal_SetIs3D(mCachedPtr, value); }
  386. }
  387. /// <summary>
  388. /// Size of a single sample in bits.
  389. /// </summary>
  390. public AudioBitDepth BitDepth
  391. {
  392. get
  393. {
  394. int bits = Internal_GetBitDepth(mCachedPtr);
  395. switch (bits)
  396. {
  397. case 8:
  398. return AudioBitDepth.Bits8;
  399. case 16:
  400. return AudioBitDepth.Bits16;
  401. case 24:
  402. return AudioBitDepth.Bits24;
  403. case 32:
  404. return AudioBitDepth.Bits32;
  405. }
  406. return AudioBitDepth.Bits16;
  407. }
  408. set { Internal_SetBitDepth(mCachedPtr, (int)value); }
  409. }
  410. [MethodImpl(MethodImplOptions.InternalCall)]
  411. private static extern void Internal_CreateInstance(AudioClipImportOptions instance);
  412. [MethodImpl(MethodImplOptions.InternalCall)]
  413. private static extern AudioFormat Internal_GetFormat(IntPtr thisPtr);
  414. [MethodImpl(MethodImplOptions.InternalCall)]
  415. private static extern void Internal_SetFormat(IntPtr thisPtr, AudioFormat format);
  416. [MethodImpl(MethodImplOptions.InternalCall)]
  417. private static extern AudioReadMode Internal_GetReadMode(IntPtr thisPtr);
  418. [MethodImpl(MethodImplOptions.InternalCall)]
  419. private static extern void Internal_SetReadMode(IntPtr thisPtr, AudioReadMode readMode);
  420. [MethodImpl(MethodImplOptions.InternalCall)]
  421. private static extern bool Internal_GetIs3D(IntPtr thisPtr);
  422. [MethodImpl(MethodImplOptions.InternalCall)]
  423. private static extern void Internal_SetIs3D(IntPtr thisPtr, bool is3d);
  424. [MethodImpl(MethodImplOptions.InternalCall)]
  425. private static extern int Internal_GetBitDepth(IntPtr thisPtr);
  426. [MethodImpl(MethodImplOptions.InternalCall)]
  427. private static extern void Internal_SetBitDepth(IntPtr thisPtr, int bitDepth);
  428. }
  429. /** @} */
  430. }