NativeSwapchain.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444
  1. /****************************************************************************
  2. * Copyright(C) 2019 Nreal
  3. *
  4. * This file is part of NrealSDK.
  5. *
  6. * NrealSDK is distributed in the hope that it will be usefull
  7. *
  8. * https://www.nreal.ai/
  9. *
  10. *****************************************************************************/
  11. namespace NRKernal.Experimental
  12. {
  13. using System;
  14. using UnityEngine;
  15. using System.Runtime.InteropServices;
  16. using System.Text;
  17. using UnityEngine.Assertions;
  18. /// <summary> Swapchain Native API. </summary>
  19. internal partial class NativeSwapchain
  20. {
  21. private UInt64 RenderHandler
  22. {
  23. get
  24. {
  25. return m_NativeRenderring.RenderingHandle;
  26. }
  27. }
  28. private NativeRenderring m_NativeRenderring;
  29. public NativeSwapchain(NativeRenderring nativeRenderring)
  30. {
  31. m_NativeRenderring = nativeRenderring;
  32. }
  33. #region swap chain
  34. internal UInt64 CreateSwapChain()
  35. {
  36. UInt64 swapchan_handle = 0;
  37. var result = NativeApi.NRSwapchainCreate(RenderHandler, ref swapchan_handle);
  38. Assert.IsTrue(result == NativeResult.Success);
  39. //NRDebugger.Info("[NativeSwapchain] CreateSwapChain, RenderHandler:{0} swapchan_handle:{1}", RenderHandler, swapchan_handle);
  40. return swapchan_handle;
  41. }
  42. internal int GetRecommandBufferCount(UInt64 swapchainhandler, int flag)
  43. {
  44. int buffer_count = 0;
  45. NativeApi.NRSwapchainGetRecommandBufferCount(RenderHandler, swapchainhandler, flag, ref buffer_count);
  46. return buffer_count;
  47. }
  48. internal int[] GetLayerIds(UInt64 swapchainhandler)
  49. {
  50. //NRDebugger.Info("[NativeSwapchain] NRSwapchainGetLayerIds.");
  51. int count = 0;
  52. NativeApi.NRSwapchainGetLayerCount(RenderHandler, swapchainhandler, ref count);
  53. int[] layerids = new int[count];
  54. NativeApi.NRSwapchainGetLayerIds(RenderHandler, swapchainhandler, count, layerids);
  55. return layerids;
  56. }
  57. internal int CreateLayer(UInt64 swapchainhandler, UInt64 bufferspechandler, int buffercount)
  58. {
  59. int layerid = -1;
  60. var result = NativeApi.NRSwapchainCreateLayer(RenderHandler, swapchainhandler, bufferspechandler, buffercount, ref layerid);
  61. Assert.IsTrue(result == NativeResult.Success);
  62. //NRDebugger.Info("[NativeSwapchain] CreateLayer,RenderHandler:{0} swapchainhandler:{1} bufferspechandler:{2} buffercount:{3} layerid:{4}",
  63. // RenderHandler, swapchainhandler, bufferspechandler, buffercount, layerid);
  64. return layerid;
  65. }
  66. internal void DestroyLayer(UInt64 swapchainhandler, int layerid)
  67. {
  68. var result = NativeApi.NRSwapchainDestroyLayer(RenderHandler, swapchainhandler, layerid);
  69. //NRDebugger.Info("[NativeSwapchain] DestroyLayer:" + layerid);
  70. Assert.IsTrue(result == NativeResult.Success);
  71. }
  72. internal void DestroySwapChain(UInt64 swapchainhandler)
  73. {
  74. //NRDebugger.Info("[NativeSwapchain] DestroySwapChain.");
  75. var result = NativeApi.NRSwapchainDestroy(RenderHandler, swapchainhandler);
  76. Assert.IsTrue(result == NativeResult.Success);
  77. }
  78. #endregion
  79. #region buffer spec
  80. internal UInt64 CreateBufferSpec(BufferSpec spec)
  81. {
  82. UInt64 bufferSpecsHandler = 0;
  83. //NRDebugger.Info("[NativeSwapchain] CreateBufferSpec.");
  84. NativeApi.NRBufferSpecCreate(RenderHandler, ref bufferSpecsHandler);
  85. NativeApi.NRBufferSpecSetSize(RenderHandler, bufferSpecsHandler, spec.size);
  86. NativeApi.NRBufferSpecSetColorFormat(RenderHandler, bufferSpecsHandler, spec.colorFormat);
  87. NativeApi.NRBufferSpecSetDepthStencilFormat(RenderHandler, bufferSpecsHandler, spec.depthFormat);
  88. NativeApi.NRBufferSpecSetSamples(RenderHandler, bufferSpecsHandler, spec.samples);
  89. NativeApi.NRBufferSpecSetExternalSurface(RenderHandler, bufferSpecsHandler, spec.useExternalSurface);
  90. NativeApi.NRBufferSpecSetExternalSurfaceFlag(RenderHandler, bufferSpecsHandler, spec.surfaceFlag);
  91. return bufferSpecsHandler;
  92. }
  93. internal void DestroyBufferSpec(UInt64 bufferspechandler)
  94. {
  95. //NRDebugger.Info("[NativeSwapchain] DestroyBufferSpec.");
  96. NativeApi.NRBufferSpecDestroy(RenderHandler, bufferspechandler);
  97. }
  98. #endregion
  99. #region view port
  100. public UInt64 CreateBufferViewport(int layerid, NRReprojectionType reprojection, ref Rect sourceUV, ref Matrix4x4 transform, DisplayType targetEye)
  101. {
  102. //NRDebugger.Info("[NativeSwapchain] CreateBufferViewport.");
  103. UInt64 viewportHandle = 0;
  104. NativeResult result = NativeApi.NRBufferViewportCreate(RenderHandler, ref viewportHandle);
  105. if (result == NativeResult.Success)
  106. {
  107. UpdateBufferViewportData(viewportHandle, layerid, reprojection, ref sourceUV, ref transform, targetEye);
  108. }
  109. Assert.IsTrue(result == NativeResult.Success);
  110. return viewportHandle;
  111. }
  112. internal void UpdateBufferViewportData(UInt64 viewportHandle, int layerid, NRReprojectionType reprojection,
  113. ref Rect sourceUV, ref Matrix4x4 transform, DisplayType targetDisplay)
  114. {
  115. if (viewportHandle != 0)
  116. {
  117. //NRDebugger.Info("[NativeSwapchain] UpdateBufferViewportData.");
  118. NativeApi.NRBufferViewportSetSourceLayer(RenderHandler, viewportHandle, layerid);
  119. NativeApi.NRBufferViewportSetReprojection(RenderHandler, viewportHandle, reprojection);
  120. NativeRectf uv = new NativeRectf(sourceUV);
  121. NativeApi.NRBufferViewportSetSourceUV(RenderHandler, viewportHandle, ref uv);
  122. NativeMat4f mat = new NativeMat4f(transform);
  123. NativeApi.NRBufferViewportSetTransform(RenderHandler, viewportHandle, ref mat);
  124. NativeApi.NRBufferViewportSetTargetEye(RenderHandler, viewportHandle, targetDisplay);
  125. }
  126. }
  127. internal UInt64 CreateSourceFovBufferViewport(int layerid, NRReprojectionType reprojection, Rect sourceUV, DisplayType targetDisplay, NativeFov4f fov)
  128. {
  129. UInt64 viewportHandle = 0;
  130. NativeResult result = NativeApi.NRBufferViewportCreate(RenderHandler, ref viewportHandle);
  131. if (result == NativeResult.Success)
  132. {
  133. UpdateSourceFovBufferViewport(viewportHandle, layerid, reprojection, ref sourceUV, targetDisplay, fov);
  134. }
  135. return viewportHandle;
  136. }
  137. internal void UpdateSourceFovBufferViewport(UInt64 viewportHandle, int layerid, NRReprojectionType reprojection, ref Rect sourceUV, DisplayType targetDisplay, NativeFov4f fov)
  138. {
  139. if (viewportHandle != 0)
  140. {
  141. NativeApi.NRBufferViewportSetSourceLayer(RenderHandler, viewportHandle, layerid);
  142. NativeApi.NRBufferViewportSetReprojection(RenderHandler, viewportHandle, reprojection);
  143. NativeRectf uv = new NativeRectf(sourceUV);
  144. NativeApi.NRBufferViewportSetSourceUV(RenderHandler, viewportHandle, ref uv);
  145. NativeApi.NRBufferViewportSetTargetEye(RenderHandler, viewportHandle, targetDisplay);
  146. NativeApi.NRBufferViewportSetSourceFov(RenderHandler, viewportHandle, ref fov);
  147. }
  148. }
  149. internal void SetBufferViewPort(UInt64 viewportListHandle, int viewportIndex, UInt64 viewportHandle)
  150. {
  151. if (viewportHandle == 0)
  152. {
  153. return;
  154. }
  155. //NRDebugger.Info("[NativeSwapchain] SetBufferViewPort viewportIndex:{0} viewportHandle:{1}", viewportIndex, viewportHandle);
  156. NativeApi.NRBufferViewportListSetBufferviewport(RenderHandler, viewportListHandle, viewportIndex, viewportHandle);
  157. }
  158. internal void DestroyBufferViewport(UInt64 viewportHandle)
  159. {
  160. if (viewportHandle == 0)
  161. {
  162. return;
  163. }
  164. NativeApi.NRBufferViewportDestroy(RenderHandler, viewportHandle);
  165. }
  166. // internal void SetToRecommendedBufferViewports(UInt64 viewportListHandle)
  167. // {
  168. // //NRDebugger.Info("[NativeSwapchain] SetToRecommendedBufferViewports.");
  169. // if (viewportListHandle == 0)
  170. // {
  171. // return;
  172. // }
  173. // NativeApi.NRBufferViewportListSetToRecommendedBufferViewports(RenderHandler, viewportListHandle);
  174. // }
  175. internal void DestroyBufferViewPort(UInt64 viewportHandle)
  176. {
  177. if (viewportHandle == 0)
  178. {
  179. return;
  180. }
  181. NativeApi.NRBufferViewportDestroy(RenderHandler, viewportHandle);
  182. }
  183. internal UInt64 CreateBufferViewportList()
  184. {
  185. //NRDebugger.Info("[NativeSwapchain] NRBufferViewportListCreate");
  186. UInt64 viewport_list_handle = 0;
  187. var result = NativeApi.NRBufferViewportListCreate(RenderHandler, ref viewport_list_handle);
  188. Assert.IsTrue(result == NativeResult.Success);
  189. return viewport_list_handle;
  190. }
  191. internal int GetBufferViewportListSize(ulong viewportListHandle)
  192. {
  193. int length = 0;
  194. NativeApi.NRBufferViewportListGetCount(RenderHandler, viewportListHandle, ref length);
  195. return length;
  196. }
  197. internal void DestroyBufferViewportList(UInt64 viewportListHandle)
  198. {
  199. //NRDebugger.Info("[NativeSwapchain] NRBufferViewportListDestroy");
  200. NativeApi.NRBufferViewportListDestroy(RenderHandler, viewportListHandle);
  201. }
  202. #endregion
  203. #region frame
  204. public IntPtr GetSurface(UInt64 swapChainHandler, int layerid)
  205. {
  206. IntPtr surfaceHandler = IntPtr.Zero;
  207. NativeApi.NRSwapchainGetExternalSurface(RenderHandler, swapChainHandler, layerid, ref surfaceHandler);
  208. return surfaceHandler;
  209. }
  210. internal void SetLayerBuffer(UInt64 swapchainHandle, int layerid, IntPtr[] bufferHandler)
  211. {
  212. StringBuilder st = new StringBuilder();
  213. for (int i = 0; i < bufferHandler.Length; i++)
  214. {
  215. st.Append(bufferHandler[i] + " ");
  216. }
  217. //NRDebugger.Info("[NativeSwapchain] SetLayerBuffer layerid:{0} ids:[{1}]", layerid, st.ToString());
  218. NativeApi.NRSwapchainSetColorBuffers(RenderHandler, swapchainHandle, layerid, bufferHandler, bufferHandler.Length);
  219. }
  220. /// <returns> Camera frames. </returns>
  221. internal void AcquireCameraFrame(UInt64 swapchainHandle, ref UInt64 frameHandler, int[] layerids, ref IntPtr[] layerbuffers)
  222. {
  223. Assert.IsTrue((layerids != null && layerids.Length != 0), "[NativeSwapchain] AcquireCameraFrame layerids is empty.");
  224. NativeApi.NRSwapchainAcquireFrame(RenderHandler, swapchainHandle, ref frameHandler);
  225. // NRDebugger.Info("[NativeSwapchain] AcquireCameraFrame: frameCnt={4}, index1:{0}, index2:{1}, RenderHandler:{2} frameHandler:{3}",
  226. // layerids[0], layerids[1], RenderHandler, frameHandler, Time.frameCount);
  227. if (layerbuffers == null || layerbuffers.Length != layerids.Length)
  228. {
  229. // NRDebugger.Info("[NativeSwapchain] Acquire layer buffer, (layerbuffers == null):{0}, len:{1}", layerbuffers == null, layerbuffers != null ? layerbuffers.Length : 0);
  230. layerbuffers = new IntPtr[layerids.Length];
  231. }
  232. NativeApi.NRFrameAcquireColorBuffers(RenderHandler, frameHandler, layerids, layerids.Length, layerbuffers);
  233. // NRDebugger.Info("[NativeSwapchain] Acquire layer buffer, cameraTextures1:{0} cameraTextures2:{1}", layerbuffers[0], layerbuffers[1]);
  234. }
  235. internal void SubmitFrame(UInt64 frameHandle, UInt64 viewPortList)
  236. {
  237. if (frameHandle == 0)
  238. {
  239. return;
  240. }
  241. NativeApi.NRFrameSetBufferViewportList(RenderHandler, frameHandle, viewPortList);
  242. var result = NativeApi.NRFrameSubmit(RenderHandler, frameHandle);
  243. NativeErrorListener.Check(result, this, "SubmitFrame");
  244. }
  245. internal void UpdateExternalSurface(UInt64 swapchainHandle, int layerid, NativeMat4f transform, Int64 timestamp, int index)
  246. {
  247. //NRDebugger.Info("[NativeSwapchain] UpdateExternalSurface");
  248. NativeApi.NRSwapchainUpdateExternalSurface(RenderHandler, swapchainHandle, layerid, ref transform, timestamp, index);
  249. }
  250. #endregion
  251. private struct NativeApi
  252. {
  253. #region buffer spec
  254. [DllImport(NativeConstants.NRNativeLibrary)]
  255. public static extern NativeResult NRBufferSpecCreate(UInt64 rendering_handle, ref UInt64 out_spec_handle);
  256. [DllImport(NativeConstants.NRNativeLibrary)]
  257. public static extern NativeResult NRBufferSpecDestroy(UInt64 rendering_handle, UInt64 spec_handle);
  258. [DllImport(NativeConstants.NRNativeLibrary)]
  259. public static extern NativeResult NRBufferSpecGetSize(UInt64 rendering_handle, UInt64 spec_handle, ref NativeResolution out_buffer_spec_size);
  260. [DllImport(NativeConstants.NRNativeLibrary)]
  261. public static extern NativeResult NRBufferSpecSetSize(UInt64 rendering_handle, UInt64 spec_handle, NativeResolution buffer_spec_size);
  262. [DllImport(NativeConstants.NRNativeLibrary)]
  263. public static extern NativeResult NRBufferSpecGetSamples(UInt64 rendering_handle, UInt64 spec_handle, ref int out_num_samples);
  264. [DllImport(NativeConstants.NRNativeLibrary)]
  265. public static extern NativeResult NRBufferSpecSetSamples(UInt64 rendering_handle, UInt64 spec_handle, int num_samples);
  266. [DllImport(NativeConstants.NRNativeLibrary)]
  267. public static extern NativeResult NRBufferSpecSetColorFormat(UInt64 rendering_handle, UInt64 spec_handle, NRColorFormat color_format);
  268. [DllImport(NativeConstants.NRNativeLibrary)]
  269. public static extern NativeResult NRBufferSpecSetDepthStencilFormat(UInt64 rendering_handle, UInt64 spec_handle, NRDepthStencilFormat depth_stencil_format);
  270. [DllImport(NativeConstants.NRNativeLibrary)]
  271. public static extern NativeResult NRBufferSpecSetMultiviewLayers(UInt64 rendering_handle, UInt64 spec_handle, int num_layers);
  272. //only for android
  273. [DllImport(NativeConstants.NRNativeLibrary)]
  274. public static extern NativeResult NRBufferSpecSetExternalSurface(UInt64 rendering_handle, UInt64 spec_handle, bool external_surface);
  275. [DllImport(NativeConstants.NRNativeLibrary)]
  276. public static extern NativeResult NRBufferSpecSetExternalSurfaceFlag(UInt64 rendering_handle, UInt64 spec_handle, int surface_flag);
  277. [DllImport(NativeConstants.NRNativeLibrary)]
  278. public static extern NativeResult NRSwapchainCreateLayer(UInt64 rendering_handle, UInt64 swapchain_handle, UInt64 layer_buffer_spec, int layer_buffer_count, ref int out_layer_id);
  279. [DllImport(NativeConstants.NRNativeLibrary)]
  280. public static extern NativeResult NRSwapchainDestroyLayer(UInt64 rendering_handle, UInt64 swapchain_handle, int layer_id);
  281. [DllImport(NativeConstants.NRNativeLibrary)]
  282. public static extern NativeResult NRSwapchainUpdateExternalSurface(UInt64 rendering_handle, UInt64 swapchain_handle, int layer_id, ref NativeMat4f transform, Int64 present_time, int transform_index);
  283. #endregion
  284. #region swap chain
  285. [DllImport(NativeConstants.NRNativeLibrary)]
  286. public static extern NativeResult NRSwapchainCreate(UInt64 rendering_handle, ref UInt64 out_swapchain_handle);
  287. [DllImport(NativeConstants.NRNativeLibrary)]
  288. public static extern NativeResult NRSwapchainGetRecommandBufferCount(UInt64 rendering_handle, UInt64 swapchain_handle, int flag, ref int buffer_count);
  289. [DllImport(NativeConstants.NRNativeLibrary)]
  290. public static extern NativeResult NRSwapchainGetLayerIds(UInt64 rendering_handle, UInt64 swapchain_handle, int layer_count, int[] out_layer_ids);
  291. [DllImport(NativeConstants.NRNativeLibrary)]
  292. public static extern NativeResult NRSwapchainGetLayerCount(UInt64 rendering_handle, UInt64 swapchain_handle, ref int out_layer_count);
  293. [DllImport(NativeConstants.NRNativeLibrary)]
  294. public static extern NativeResult NRSwapchainSetColorBuffers(UInt64 rendering_handle, UInt64 swapchain_handle, int layer_id, IntPtr[] color_buffers, int buffer_count);
  295. [DllImport(NativeConstants.NRNativeLibrary)]
  296. public static extern NativeResult NRSwapchainGetExternalSurface(UInt64 rendering_handle, UInt64 swapchain_handle, int layer_id, ref IntPtr surface);
  297. [DllImport(NativeConstants.NRNativeLibrary)]
  298. public static extern NativeResult NRSwapchainAcquireFrame(UInt64 rendering_handle, UInt64 swapchain_handle, ref UInt64 out_frame_handle);
  299. [DllImport(NativeConstants.NRNativeLibrary)]
  300. public static extern NativeResult NRSwapchainDestroy(UInt64 rendering_handle, UInt64 swapchain_handle);
  301. [DllImport(NativeConstants.NRNativeLibrary)]
  302. public static extern NativeResult NRFrameAcquireColorBuffers(UInt64 rendering_handle, UInt64 frame_handle, int[] layer_ids, int layer_count, IntPtr[] out_color_buffers);
  303. #endregion
  304. #region view port
  305. /// <summary>
  306. /// Set viewport list to frame buffer.
  307. /// </summary>
  308. /// <param name="rendering_handle"></param>
  309. /// <param name="frame_handle"></param>
  310. /// <param name="viewport_list_handle">根据layer的depth进行排序,最前面的在最底层</param>
  311. /// <returns></returns>
  312. [DllImport(NativeConstants.NRNativeLibrary)]
  313. public static extern NativeResult NRFrameSetBufferViewportList(UInt64 rendering_handle, UInt64 frame_handle, UInt64 viewport_list_handle);
  314. [DllImport(NativeConstants.NRNativeLibrary)]
  315. public static extern NativeResult NRBufferViewportCreate(UInt64 rendering_handle, ref UInt64 out_viewport_handle);
  316. [DllImport(NativeConstants.NRNativeLibrary)]
  317. public static extern NativeResult NRBufferViewportDestroy(UInt64 rendering_handle, UInt64 viewport_handle);
  318. [DllImport(NativeConstants.NRNativeLibrary)]
  319. public static extern NativeResult NRBufferViewportGetSourceUV(UInt64 rendering_handle, UInt64 viewport_handle, ref NativeRectf out_uv_rect);
  320. [DllImport(NativeConstants.NRNativeLibrary)]
  321. public static extern NativeResult NRBufferViewportSetSourceUV(UInt64 rendering_handle, UInt64 viewport_handle, ref NativeRectf uv_rect);
  322. [DllImport(NativeConstants.NRNativeLibrary)]
  323. public static extern NativeResult NRBufferViewportGetTransform(UInt64 rendering_handle, UInt64 viewport_handle, ref NativeMat4f out_transform);
  324. [DllImport(NativeConstants.NRNativeLibrary)]
  325. public static extern NativeResult NRBufferViewportSetTransform(UInt64 rendering_handle, UInt64 viewport_handle, ref NativeMat4f transform);
  326. [DllImport(NativeConstants.NRNativeLibrary)]
  327. public static extern NativeResult NRBufferViewportGetTargetEye(UInt64 rendering_handle, UInt64 viewport_handle, ref DisplayType out_eye);
  328. [DllImport(NativeConstants.NRNativeLibrary)]
  329. public static extern NativeResult NRBufferViewportSetTargetEye(UInt64 rendering_handle, UInt64 viewport_handle, DisplayType eye);
  330. [DllImport(NativeConstants.NRNativeLibrary)]
  331. public static extern NativeResult NRBufferViewportGetSourceLayer(UInt64 rendering_handle, UInt64 viewport_handle, ref int out_layer_id);
  332. [DllImport(NativeConstants.NRNativeLibrary)]
  333. public static extern NativeResult NRBufferViewportSetSourceLayer(UInt64 rendering_handle, UInt64 viewport_handle, int layer_id);
  334. [DllImport(NativeConstants.NRNativeLibrary)]
  335. public static extern NativeResult NRBufferViewportGetReprojection(UInt64 rendering_handle, UInt64 viewport_handle, ref NRReprojectionType out_reprojection);
  336. [DllImport(NativeConstants.NRNativeLibrary)]
  337. public static extern NativeResult NRBufferViewportSetReprojection(UInt64 rendering_handle, UInt64 viewport_handle, NRReprojectionType reprojection);
  338. [DllImport(NativeConstants.NRNativeLibrary)]
  339. public static extern NativeResult NRBufferViewportGetMultiviewLayer(UInt64 rendering_handle, UInt64 viewport_handle, ref int out_texture_layer_index);
  340. [DllImport(NativeConstants.NRNativeLibrary)]
  341. public static extern NativeResult NRBufferViewportSetMultiviewLayer(UInt64 rendering_handle, UInt64 viewport_handle, int texture_layer_index);
  342. [DllImport(NativeConstants.NRNativeLibrary)]
  343. public static extern NativeResult NRBufferViewportGetSourceFov(UInt64 rendering_handle, UInt64 viewport_handle, ref NativeFov4f out_fov);
  344. [DllImport(NativeConstants.NRNativeLibrary)]
  345. public static extern NativeResult NRBufferViewportSetSourceFov(UInt64 rendering_handle, UInt64 viewport_handle, ref NativeFov4f fov);
  346. [DllImport(NativeConstants.NRNativeLibrary)]
  347. public static extern NativeResult NRBufferViewportListCreate(UInt64 rendering_handle, ref UInt64 out_viewport_list_handle);
  348. [DllImport(NativeConstants.NRNativeLibrary)]
  349. public static extern NativeResult NRBufferViewportListDestroy(UInt64 rendering_handle, UInt64 viewport_list_handle);
  350. [DllImport(NativeConstants.NRNativeLibrary)]
  351. public static extern NativeResult NRBufferViewportListGetCount(UInt64 rendering_handle, UInt64 viewport_list_handle, ref int out_list_count);
  352. [DllImport(NativeConstants.NRNativeLibrary)]
  353. public static extern NativeResult NRBufferViewportListGetBufferviewport(UInt64 rendering_handle, UInt64 viewport_list_handle, int viewport_index, ref UInt64 out_viewport_handle);
  354. [DllImport(NativeConstants.NRNativeLibrary)]
  355. public static extern NativeResult NRBufferViewportListSetBufferviewport(UInt64 rendering_handle, UInt64 viewport_list_handle, int viewport_index, UInt64 viewport_handle);
  356. // [DllImport(NativeConstants.NRNativeLibrary)]
  357. // public static extern NativeResult NRBufferViewportListSetToRecommendedBufferViewports(UInt64 rendering_handle, UInt64 viewport_list_handle);
  358. #endregion
  359. //for thread sync and fence
  360. [DllImport(NativeConstants.NRNativeLibrary)]
  361. public static extern NativeResult NRFrameSubmit(UInt64 rendering_handle, UInt64 frame_handle);
  362. };
  363. }
  364. }