RenderPathForwardVR.hx 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package arm.render;
  2. #if arm_vr
  3. import kha.System;
  4. import iron.RenderPath;
  5. import iron.Scene;
  6. class RenderPathForwardVR {
  7. public static var path: RenderPath;
  8. static var m = iron.math.Mat4.identity();
  9. static var m0 = iron.math.Mat4.identity();
  10. static var q = new iron.math.Quat();
  11. public static function init(_path: RenderPath) {
  12. path = _path;
  13. {
  14. var t = new RenderTargetRaw();
  15. t.name = "eye0";
  16. t.width = 1440;
  17. t.height = 1600;
  18. t.format = "RGBA32";
  19. t.scale = RenderPathBase.getSuperSampling();
  20. path.createRenderTarget(t);
  21. }
  22. {
  23. var t = new RenderTargetRaw();
  24. t.name = "eye1";
  25. t.width = 1440;
  26. t.height = 1600;
  27. t.format = "RGBA32";
  28. t.scale = RenderPathBase.getSuperSampling();
  29. path.createRenderTarget(t);
  30. }
  31. path.createDepthBuffer("main_eye", "DEPTH24");
  32. {
  33. var t = new RenderTargetRaw();
  34. t.name = "gbuffer0_eye";
  35. t.width = 1440;
  36. t.height = 1600;
  37. t.format = "RGBA64";
  38. t.scale = RenderPathBase.getSuperSampling();
  39. t.depth_buffer = "main_eye";
  40. path.createRenderTarget(t);
  41. }
  42. {
  43. var t = new RenderTargetRaw();
  44. t.name = "gbuffer1_eye";
  45. t.width = 1440;
  46. t.height = 1600;
  47. t.format = "RGBA64";
  48. t.scale = RenderPathBase.getSuperSampling();
  49. path.createRenderTarget(t);
  50. }
  51. {
  52. var t = new RenderTargetRaw();
  53. t.name = "gbuffer2_eye";
  54. t.width = 1440;
  55. t.height = 1600;
  56. t.format = "RGBA64";
  57. t.scale = RenderPathBase.getSuperSampling();
  58. path.createRenderTarget(t);
  59. }
  60. {
  61. var t = new RenderTargetRaw();
  62. t.name = "buf_eye";
  63. t.width = 1440;
  64. t.height = 1600;
  65. #if (kha_direct3d12 || kha_vulkan)
  66. t.format = "RGBA64"; // Match raytrace_target format
  67. #else
  68. t.format = "RGBA32";
  69. #end
  70. t.scale = RenderPathBase.getSuperSampling();
  71. path.createRenderTarget(t);
  72. }
  73. {
  74. var t = new RenderTargetRaw();
  75. t.name = "buf2_eye";
  76. t.width = 1440;
  77. t.height = 1600;
  78. t.format = "RGBA32";
  79. t.scale = RenderPathBase.getSuperSampling();
  80. path.createRenderTarget(t);
  81. }
  82. {
  83. var t = new RenderTargetRaw();
  84. t.name = "taa_eye";
  85. t.width = 1440;
  86. t.height = 1600;
  87. t.format = "RGBA32";
  88. t.scale = RenderPathBase.getSuperSampling();
  89. path.createRenderTarget(t);
  90. }
  91. {
  92. var t = new RenderTargetRaw();
  93. t.name = "taa2_eye";
  94. t.width = 1440;
  95. t.height = 1600;
  96. t.format = "RGBA32";
  97. t.scale = RenderPathBase.getSuperSampling();
  98. path.createRenderTarget(t);
  99. }
  100. }
  101. public static function commands() {
  102. if (System.windowWidth() == 0 || System.windowHeight() == 0) return;
  103. if (Krom.vrGetSensorStateHmdMounted()) {
  104. var current = RenderPathBase.taaFrame % 2 == 0 ? "buf2" : "taa2";
  105. var output = RenderPathBase.taaFrame % 2 == 0 ? current : "taa";
  106. m.setFrom(Scene.active.camera.transform.world);
  107. for (eye in 0...2) {
  108. var view = Krom.vrGetSensorStateView(eye);
  109. var proj = Krom.vrGetSensorStateProjection(eye);
  110. // Convert up axis
  111. q.fromAxisAngle(new iron.math.Vec4(1, 0, 0), -Math.PI / 2);
  112. Scene.active.camera.V.fromQuat(q);
  113. Scene.active.camera.V.translate(0, 1, -1);
  114. m0._00 = view._00;
  115. m0._01 = view._01;
  116. m0._02 = view._02;
  117. m0._03 = view._03;
  118. m0._10 = view._10;
  119. m0._11 = view._11;
  120. m0._12 = view._12;
  121. m0._13 = view._13;
  122. m0._20 = view._20;
  123. m0._21 = view._21;
  124. m0._22 = view._22;
  125. m0._23 = view._23;
  126. m0._30 = view._30;
  127. m0._31 = view._31;
  128. m0._32 = view._32;
  129. m0._33 = view._33;
  130. Scene.active.camera.V.multmat(m0);
  131. Scene.active.camera.P._00 = proj._00;
  132. Scene.active.camera.P._01 = proj._01;
  133. Scene.active.camera.P._02 = proj._02;
  134. Scene.active.camera.P._03 = proj._03;
  135. Scene.active.camera.P._10 = proj._10;
  136. Scene.active.camera.P._11 = proj._11;
  137. Scene.active.camera.P._12 = proj._12;
  138. Scene.active.camera.P._13 = proj._13;
  139. Scene.active.camera.P._20 = proj._20;
  140. Scene.active.camera.P._21 = proj._21;
  141. Scene.active.camera.P._22 = proj._22;
  142. Scene.active.camera.P._23 = proj._23;
  143. Scene.active.camera.P._30 = proj._30;
  144. Scene.active.camera.P._31 = proj._31;
  145. Scene.active.camera.P._32 = proj._32;
  146. Scene.active.camera.P._33 = proj._33;
  147. Scene.active.camera.VP.multmats(Scene.active.camera.P, Scene.active.camera.V);
  148. Scene.active.camera.transform.world.getInverse(Scene.active.camera.V);
  149. // RenderPathBase.drawGbuffer("gbuffer0_eye", "gbuffer1_eye", "gbuffer2_eye");
  150. // RenderPathForward.drawForward(true, "eye" + eye, "gbuffer0_eye", "gbuffer1_eye", "gbuffer2_eye", "buf_eye", "buf2_eye", "taa_eye", "taa2_eye");
  151. }
  152. Scene.active.camera.transform.world.setFrom(m);
  153. Scene.active.camera.buildProjection();
  154. Krom.vrBegin();
  155. path.drawStereo(function(eye: Int) {
  156. path.currentG = path.frameG;
  157. path.bindTarget("eye" + eye, "tex");
  158. path.drawShader("shader_datas/copy_pass/copy_pass");
  159. });
  160. Krom.vrWarpSwap();
  161. }
  162. Scene.active.camera.buildMatrix();
  163. RenderPathPaint.begin();
  164. RenderPathBase.drawGbuffer();
  165. RenderPathForward.drawForward();
  166. RenderPathPaint.draw();
  167. RenderPathPaint.end();
  168. RenderPathBase.taaFrame++;
  169. }
  170. }
  171. #end