ImportOptions.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598
  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. /// Information about how to split an AnimationClip into multiple separate clips.
  95. /// </summary>
  96. public class AnimationSplitInfo
  97. {
  98. public AnimationSplitInfo() { }
  99. public AnimationSplitInfo(string name, int startFrame, int endFrame, bool isAdditive)
  100. {
  101. this.name = name;
  102. this.startFrame = startFrame;
  103. this.endFrame = endFrame;
  104. this.isAdditive = isAdditive;
  105. }
  106. public string name;
  107. public int startFrame = 0;
  108. public int endFrame = 0;
  109. public bool isAdditive = false;
  110. }
  111. /// <summary>
  112. /// A set of animation events that will be added to an animation clip during animation import.
  113. /// </summary>
  114. public class ImportedAnimationEvents
  115. {
  116. public string name;
  117. public AnimationEvent[] events;
  118. }
  119. /// <summary>
  120. /// Provides options for controlling how is a mesh resource imported.
  121. /// </summary>
  122. public class MeshImportOptions : ImportOptions
  123. {
  124. /// <summary>
  125. /// Creates new mesh import options with default values.
  126. /// </summary>
  127. public MeshImportOptions()
  128. {
  129. Internal_CreateInstance(this);
  130. }
  131. /// <summary>
  132. /// Determines whether the mesh data is also stored in main memory, available for fast CPU access.
  133. /// </summary>
  134. public bool CPUReadable
  135. {
  136. get { return Internal_GetCPUReadable(mCachedPtr); }
  137. set { Internal_SetCPUReadable(mCachedPtr, value); }
  138. }
  139. /// <summary>
  140. /// Controls should mesh normals be imported if available.
  141. /// </summary>
  142. public bool ImportNormals
  143. {
  144. get { return Internal_GetImportNormals(mCachedPtr); }
  145. set { Internal_SetImportNormals(mCachedPtr, value); }
  146. }
  147. /// <summary>
  148. /// Controls should mesh tangents/bitangents be imported if available.
  149. /// </summary>
  150. public bool ImportTangents
  151. {
  152. get { return Internal_GetImportTangents(mCachedPtr); }
  153. set { Internal_SetImportTangents(mCachedPtr, value); }
  154. }
  155. /// <summary>
  156. /// Controls should mesh skin data like bone weights, indices and bind poses be imported if available.
  157. /// </summary>
  158. public bool ImportSkin
  159. {
  160. get { return Internal_GetImportSkin(mCachedPtr); }
  161. set { Internal_SetImportSkin(mCachedPtr, value); }
  162. }
  163. /// <summary>
  164. /// Controls should animation clips be imported if available.
  165. /// </summary>
  166. public bool ImportAnimation
  167. {
  168. get { return Internal_GetImportAnimation(mCachedPtr); }
  169. set { Internal_SetImportAnimation(mCachedPtr, value); }
  170. }
  171. /// <summary>
  172. /// Controls should mesh blend shapes be imported if available.
  173. /// </summary>
  174. public bool ImportBlendShapes
  175. {
  176. get { return Internal_GetImportBlendShapes(mCachedPtr); }
  177. set { Internal_SetImportBlendShapes(mCachedPtr, value); }
  178. }
  179. /// <summary>
  180. /// Uniformly scales the imported mesh by the specified value.
  181. /// </summary>
  182. public float Scale
  183. {
  184. get { return Internal_GetScale(mCachedPtr); }
  185. set { Internal_SetScale(mCachedPtr, value); }
  186. }
  187. /// <summary>
  188. /// Determines if keyframe reduction is enabled. Keyframe reduction will reduce the number of key-frames in an
  189. /// animation clip by removing identical keyframes, and therefore reducing the size of the clip.
  190. /// </summary>
  191. public bool KeyframeReduction
  192. {
  193. get { return Internal_GetKeyFrameReduction(mCachedPtr); }
  194. set { Internal_SetKeyFrameReduction(mCachedPtr, value); }
  195. }
  196. /// <summary>
  197. /// Controls what type (if any) of collision mesh should be imported.
  198. /// </summary>
  199. public CollisionMeshType CollisionMeshType
  200. {
  201. get { return (CollisionMeshType)Internal_GetCollisionMeshType(mCachedPtr); }
  202. set { Internal_SetCollisionMeshType(mCachedPtr, (int)value); }
  203. }
  204. /// <summary>
  205. /// Split information that allows you to split the animation clip contained in the mesh file into multiple separate
  206. /// clips. The split always applies to the first clip in the file (if the file contains multiple), other clips are
  207. /// imported as is.
  208. /// </summary>
  209. public AnimationSplitInfo[] AnimationClipSplits
  210. {
  211. get { return Internal_GetAnimationClipSplits(mCachedPtr); }
  212. set { Internal_SetAnimationClipSplits(mCachedPtr, value); }
  213. }
  214. /// <summary>
  215. /// A set of events that will be added to the animation clip, if animation import is enabled.
  216. /// </summary>
  217. public ImportedAnimationEvents[] AnimationEvents
  218. {
  219. get { return Internal_GetAnimationEvents(mCachedPtr); }
  220. set { Internal_SetAnimationEvents(mCachedPtr, value); }
  221. }
  222. [MethodImpl(MethodImplOptions.InternalCall)]
  223. private static extern void Internal_CreateInstance(MeshImportOptions instance);
  224. [MethodImpl(MethodImplOptions.InternalCall)]
  225. private static extern bool Internal_GetCPUReadable(IntPtr thisPtr);
  226. [MethodImpl(MethodImplOptions.InternalCall)]
  227. private static extern void Internal_SetCPUReadable(IntPtr thisPtr, bool value);
  228. [MethodImpl(MethodImplOptions.InternalCall)]
  229. private static extern bool Internal_GetImportNormals(IntPtr thisPtr);
  230. [MethodImpl(MethodImplOptions.InternalCall)]
  231. private static extern void Internal_SetImportNormals(IntPtr thisPtr, bool value);
  232. [MethodImpl(MethodImplOptions.InternalCall)]
  233. private static extern bool Internal_GetImportTangents(IntPtr thisPtr);
  234. [MethodImpl(MethodImplOptions.InternalCall)]
  235. private static extern void Internal_SetImportTangents(IntPtr thisPtr, bool value);
  236. [MethodImpl(MethodImplOptions.InternalCall)]
  237. private static extern bool Internal_GetImportSkin(IntPtr thisPtr);
  238. [MethodImpl(MethodImplOptions.InternalCall)]
  239. private static extern void Internal_SetImportSkin(IntPtr thisPtr, bool value);
  240. [MethodImpl(MethodImplOptions.InternalCall)]
  241. private static extern bool Internal_GetImportAnimation(IntPtr thisPtr);
  242. [MethodImpl(MethodImplOptions.InternalCall)]
  243. private static extern void Internal_SetImportAnimation(IntPtr thisPtr, bool value);
  244. [MethodImpl(MethodImplOptions.InternalCall)]
  245. private static extern bool Internal_GetImportBlendShapes(IntPtr thisPtr);
  246. [MethodImpl(MethodImplOptions.InternalCall)]
  247. private static extern void Internal_SetImportBlendShapes(IntPtr thisPtr, bool value);
  248. [MethodImpl(MethodImplOptions.InternalCall)]
  249. private static extern bool Internal_GetKeyFrameReduction(IntPtr thisPtr);
  250. [MethodImpl(MethodImplOptions.InternalCall)]
  251. private static extern void Internal_SetKeyFrameReduction(IntPtr thisPtr, bool value);
  252. [MethodImpl(MethodImplOptions.InternalCall)]
  253. private static extern AnimationSplitInfo[] Internal_GetAnimationClipSplits(IntPtr thisPtr);
  254. [MethodImpl(MethodImplOptions.InternalCall)]
  255. private static extern void Internal_SetAnimationClipSplits(IntPtr thisPtr, AnimationSplitInfo[] value);
  256. [MethodImpl(MethodImplOptions.InternalCall)]
  257. private static extern ImportedAnimationEvents[] Internal_GetAnimationEvents(IntPtr thisPtr);
  258. [MethodImpl(MethodImplOptions.InternalCall)]
  259. private static extern void Internal_SetAnimationEvents(IntPtr thisPtr, ImportedAnimationEvents[] value);
  260. [MethodImpl(MethodImplOptions.InternalCall)]
  261. private static extern float Internal_GetScale(IntPtr thisPtr);
  262. [MethodImpl(MethodImplOptions.InternalCall)]
  263. private static extern void Internal_SetScale(IntPtr thisPtr, float value);
  264. [MethodImpl(MethodImplOptions.InternalCall)]
  265. private static extern int Internal_GetCollisionMeshType(IntPtr thisPtr);
  266. [MethodImpl(MethodImplOptions.InternalCall)]
  267. private static extern void Internal_SetCollisionMeshType(IntPtr thisPtr, int value);
  268. }
  269. /// <summary>
  270. /// Controls what type of collision mesh should be imported during mesh import.
  271. /// </summary>
  272. public enum CollisionMeshType // Note: Must match C++ enum CollisionMeshImport
  273. {
  274. /// <summary>
  275. /// No collision mesh will be imported.
  276. /// </summary>
  277. None,
  278. /// <summary>
  279. /// Normal triangle mesh will be imported.
  280. /// </summary>
  281. Normal,
  282. /// <summary>
  283. /// A convex hull will be generated from the source mesh.
  284. /// </summary>
  285. Convex
  286. }
  287. /// <summary>
  288. /// Import options that provide various options for controlling how is a font resource imported.
  289. /// </summary>
  290. public class FontImportOptions : ImportOptions
  291. {
  292. /// <summary>
  293. /// Creates new font import options with default values.
  294. /// </summary>
  295. public FontImportOptions()
  296. {
  297. Internal_CreateInstance(this);
  298. }
  299. /// <summary>
  300. /// Font sizes in points that are to be imported.
  301. /// </summary>
  302. public int[] FontSizes
  303. {
  304. get { return Internal_GetFontSizes(mCachedPtr); }
  305. set { Internal_SetFontSizes(mCachedPtr, value); }
  306. }
  307. /// <summary>
  308. /// Dots per inch resolution to use when rendering the characters into the texture.
  309. /// </summary>
  310. public int DPI
  311. {
  312. get { return Internal_GetDPI(mCachedPtr); }
  313. set { Internal_SetDPI(mCachedPtr, value); }
  314. }
  315. /// <summary>
  316. /// Determines rendering mode used when rendering the characters into the bitmap.
  317. /// </summary>
  318. public FontRenderMode RenderMode
  319. {
  320. get { return Internal_GetRenderMode(mCachedPtr); }
  321. set { Internal_SetRenderMode(mCachedPtr, value); }
  322. }
  323. /// <summary>
  324. /// Determines should the characters be rendered in bold style.
  325. /// </summary>
  326. public bool Bold
  327. {
  328. get { return Internal_GetBold(mCachedPtr); }
  329. set { Internal_SetBold(mCachedPtr, value); }
  330. }
  331. /// <summary>
  332. /// Determines should the characters be rendered in italic style.
  333. /// </summary>
  334. public bool Italic
  335. {
  336. get { return Internal_GetItalic(mCachedPtr); }
  337. set { Internal_SetItalic(mCachedPtr, value); }
  338. }
  339. /// <summary>
  340. /// Determines character ranges to import from the font. Ranges are defined as unicode numbers.
  341. /// </summary>
  342. public CharRange[] CharRanges
  343. {
  344. get { return Internal_GetCharRanges(mCachedPtr); }
  345. set { Internal_SetCharRanges(mCachedPtr, value); }
  346. }
  347. [MethodImpl(MethodImplOptions.InternalCall)]
  348. private static extern void Internal_CreateInstance(FontImportOptions instance);
  349. [MethodImpl(MethodImplOptions.InternalCall)]
  350. private static extern int[] Internal_GetFontSizes(IntPtr thisPtr);
  351. [MethodImpl(MethodImplOptions.InternalCall)]
  352. private static extern void Internal_SetFontSizes(IntPtr thisPtr, int[] value);
  353. [MethodImpl(MethodImplOptions.InternalCall)]
  354. private static extern int Internal_GetDPI(IntPtr thisPtr);
  355. [MethodImpl(MethodImplOptions.InternalCall)]
  356. private static extern void Internal_SetDPI(IntPtr thisPtr, int value);
  357. [MethodImpl(MethodImplOptions.InternalCall)]
  358. private static extern FontRenderMode Internal_GetRenderMode(IntPtr thisPtr);
  359. [MethodImpl(MethodImplOptions.InternalCall)]
  360. private static extern void Internal_SetRenderMode(IntPtr thisPtr, FontRenderMode value);
  361. [MethodImpl(MethodImplOptions.InternalCall)]
  362. private static extern bool Internal_GetBold(IntPtr thisPtr);
  363. [MethodImpl(MethodImplOptions.InternalCall)]
  364. private static extern void Internal_SetBold(IntPtr thisPtr, bool value);
  365. [MethodImpl(MethodImplOptions.InternalCall)]
  366. private static extern bool Internal_GetItalic(IntPtr thisPtr);
  367. [MethodImpl(MethodImplOptions.InternalCall)]
  368. private static extern void Internal_SetItalic(IntPtr thisPtr, bool value);
  369. [MethodImpl(MethodImplOptions.InternalCall)]
  370. private static extern CharRange[] Internal_GetCharRanges(IntPtr thisPtr);
  371. [MethodImpl(MethodImplOptions.InternalCall)]
  372. private static extern void Internal_SetCharRanges(IntPtr thisPtr, CharRange[] value);
  373. }
  374. /// <summary>
  375. /// Provides various options for controlling how is a script file imported.
  376. /// </summary>
  377. public class ScriptCodeImportOptions : ImportOptions
  378. {
  379. /// <summary>
  380. /// Creates new script import options with default values.
  381. /// </summary>
  382. public ScriptCodeImportOptions()
  383. {
  384. Internal_CreateInstance(this);
  385. }
  386. /// <summary>
  387. /// Determines whether the script is editor-only or a normal game script. Editor scripts are compiled in a separate
  388. /// assembly and may reference editor specific functionality, but are not available in the final game code.
  389. /// </summary>
  390. public bool EditorScript
  391. {
  392. get { return Internal_IsEditorScript(mCachedPtr); }
  393. set { Internal_SetEditorScript(mCachedPtr, value); }
  394. }
  395. [MethodImpl(MethodImplOptions.InternalCall)]
  396. private static extern void Internal_CreateInstance(ScriptCodeImportOptions instance);
  397. [MethodImpl(MethodImplOptions.InternalCall)]
  398. private static extern bool Internal_IsEditorScript(IntPtr thisPtr);
  399. [MethodImpl(MethodImplOptions.InternalCall)]
  400. private static extern void Internal_SetEditorScript(IntPtr thisPtr, bool value);
  401. }
  402. /// <summary>
  403. /// Determines how is a font rendered into the bitmap texture.
  404. /// </summary>
  405. public enum FontRenderMode // Note: Must match C++ enum FontRenderMode
  406. {
  407. /// <summary>Render antialiased fonts without hinting (slightly more blurry).</summary>
  408. Smooth,
  409. /// <summary>Render non-antialiased fonts without hinting (slightly more blurry).</summary>
  410. Raster,
  411. /// <summary>Render antialiased fonts with hinting.</summary>
  412. HintedSmooth,
  413. /// <summary>Render non-antialiased fonts with hinting.</summary>
  414. HintedRaster
  415. }
  416. /// <summary>
  417. /// Provides various options for controlling how is an audio clip file imported.
  418. /// </summary>
  419. public class AudioClipImportOptions : ImportOptions
  420. {
  421. /// <summary>
  422. /// Creates new audio clip import options with default values.
  423. /// </summary>
  424. public AudioClipImportOptions()
  425. {
  426. Internal_CreateInstance(this);
  427. }
  428. /// <summary>
  429. /// Format to import the audio clip as.
  430. /// </summary>
  431. public AudioFormat Format
  432. {
  433. get { return Internal_GetFormat(mCachedPtr); }
  434. set { Internal_SetFormat(mCachedPtr, value); }
  435. }
  436. /// <summary>
  437. /// Determines how is audio data loaded into memory.
  438. /// </summary>
  439. public AudioReadMode ReadMode
  440. {
  441. get { return Internal_GetReadMode(mCachedPtr); }
  442. set { Internal_SetReadMode(mCachedPtr, value); }
  443. }
  444. /// <summary>
  445. /// Determines will the clip be played as spatial (3D) audio or as normal audio.
  446. /// </summary>
  447. public bool Is3D
  448. {
  449. get { return Internal_GetIs3D(mCachedPtr); }
  450. set { Internal_SetIs3D(mCachedPtr, value); }
  451. }
  452. /// <summary>
  453. /// Size of a single sample in bits.
  454. /// </summary>
  455. public AudioBitDepth BitDepth
  456. {
  457. get
  458. {
  459. int bits = Internal_GetBitDepth(mCachedPtr);
  460. switch (bits)
  461. {
  462. case 8:
  463. return AudioBitDepth.Bits8;
  464. case 16:
  465. return AudioBitDepth.Bits16;
  466. case 24:
  467. return AudioBitDepth.Bits24;
  468. case 32:
  469. return AudioBitDepth.Bits32;
  470. }
  471. return AudioBitDepth.Bits16;
  472. }
  473. set { Internal_SetBitDepth(mCachedPtr, (int)value); }
  474. }
  475. [MethodImpl(MethodImplOptions.InternalCall)]
  476. private static extern void Internal_CreateInstance(AudioClipImportOptions instance);
  477. [MethodImpl(MethodImplOptions.InternalCall)]
  478. private static extern AudioFormat Internal_GetFormat(IntPtr thisPtr);
  479. [MethodImpl(MethodImplOptions.InternalCall)]
  480. private static extern void Internal_SetFormat(IntPtr thisPtr, AudioFormat format);
  481. [MethodImpl(MethodImplOptions.InternalCall)]
  482. private static extern AudioReadMode Internal_GetReadMode(IntPtr thisPtr);
  483. [MethodImpl(MethodImplOptions.InternalCall)]
  484. private static extern void Internal_SetReadMode(IntPtr thisPtr, AudioReadMode readMode);
  485. [MethodImpl(MethodImplOptions.InternalCall)]
  486. private static extern bool Internal_GetIs3D(IntPtr thisPtr);
  487. [MethodImpl(MethodImplOptions.InternalCall)]
  488. private static extern void Internal_SetIs3D(IntPtr thisPtr, bool is3d);
  489. [MethodImpl(MethodImplOptions.InternalCall)]
  490. private static extern int Internal_GetBitDepth(IntPtr thisPtr);
  491. [MethodImpl(MethodImplOptions.InternalCall)]
  492. private static extern void Internal_SetBitDepth(IntPtr thisPtr, int bitDepth);
  493. }
  494. /** @} */
  495. }