| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- package arm.render;
- import iron.RenderPath;
- class RenderPathDeferred {
- public static var path: RenderPath;
- public static function init(_path: RenderPath) {
- path = _path;
- path.createDepthBuffer("main", "DEPTH24");
- {
- var t = new RenderTargetRaw();
- t.name = "gbuffer0";
- t.width = 0;
- t.height = 0;
- t.format = "RGBA64";
- t.scale = RenderPathBase.getSuperSampling();
- t.depth_buffer = "main";
- path.createRenderTarget(t);
- }
- {
- var t = new RenderTargetRaw();
- t.name = "gbuffer1";
- t.width = 0;
- t.height = 0;
- t.format = "RGBA64";
- t.scale = RenderPathBase.getSuperSampling();
- path.createRenderTarget(t);
- }
- {
- var t = new RenderTargetRaw();
- t.name = "gbuffer2";
- t.width = 0;
- t.height = 0;
- t.format = "RGBA64";
- t.scale = RenderPathBase.getSuperSampling();
- path.createRenderTarget(t);
- }
- {
- var t = new RenderTargetRaw();
- t.name = "tex";
- t.width = 0;
- t.height = 0;
- t.format = "RGBA64";
- t.scale = RenderPathBase.getSuperSampling();
- #if kha_opengl
- t.depth_buffer = "main";
- #end
- path.createRenderTarget(t);
- }
- {
- var t = new RenderTargetRaw();
- t.name = "buf";
- t.width = 0;
- t.height = 0;
- #if (kha_direct3d12 || kha_vulkan)// || kha_metal)
- // Match raytrace_target format
- // Will cause "The render target format in slot 0 does not match that specified by the current pipeline state"
- t.format = "RGBA64";
- #else
- t.format = "RGBA32";
- #end
- t.scale = RenderPathBase.getSuperSampling();
- path.createRenderTarget(t);
- }
- {
- var t = new RenderTargetRaw();
- t.name = "buf2";
- t.width = 0;
- t.height = 0;
- t.format = "RGBA32";
- t.scale = RenderPathBase.getSuperSampling();
- path.createRenderTarget(t);
- }
- {
- var t = new RenderTargetRaw();
- t.name = "taa";
- t.width = 0;
- t.height = 0;
- t.format = "RGBA32";
- t.scale = RenderPathBase.getSuperSampling();
- path.createRenderTarget(t);
- }
- {
- var t = new RenderTargetRaw();
- t.name = "taa2";
- t.width = 0;
- t.height = 0;
- t.format = "RGBA32";
- t.scale = RenderPathBase.getSuperSampling();
- path.createRenderTarget(t);
- }
- {
- var t = new RenderTargetRaw();
- t.name = "empty_white";
- t.width = 1;
- t.height = 1;
- t.format = "R8";
- var rt = new RenderTarget(t);
- var b = haxe.io.Bytes.alloc(1);
- b.set(0, 255);
- rt.image = kha.Image.fromBytes(b, t.width, t.height, kha.graphics4.TextureFormat.L8);
- path.renderTargets.set(t.name, rt);
- }
- {
- var t = new RenderTargetRaw();
- t.name = "empty_black";
- t.width = 1;
- t.height = 1;
- t.format = "RGBA32";
- var rt = new RenderTarget(t);
- var b = haxe.io.Bytes.alloc(4);
- b.set(0, 0);
- b.set(1, 0);
- b.set(2, 0);
- b.set(3, 0);
- rt.image = kha.Image.fromBytes(b, t.width, t.height, kha.graphics4.TextureFormat.RGBA32);
- path.renderTargets.set(t.name, rt);
- }
- #if is_sculpt
- {
- var t = new RenderTargetRaw();
- t.name = "gbuffer0_undo";
- t.width = 0;
- t.height = 0;
- t.format = "RGBA64";
- t.scale = RenderPathBase.getSuperSampling();
- path.createRenderTarget(t);
- }
- {
- var t = new RenderTargetRaw();
- t.name = "gbufferD_undo";
- t.width = 0;
- t.height = 0;
- t.format = "R32";
- t.scale = RenderPathBase.getSuperSampling();
- path.createRenderTarget(t);
- }
- #end
- if (Config.raw.rp_ssao) {
- RenderPathBase.initSSAO();
- }
- path.loadShader("shader_datas/world_pass/world_pass");
- path.loadShader("shader_datas/deferred_light/deferred_light");
- path.loadShader("shader_datas/compositor_pass/compositor_pass");
- path.loadShader("shader_datas/copy_pass/copy_pass");
- path.loadShader("shader_datas/copy_pass/copyR8_pass");
- path.loadShader("shader_datas/smaa_edge_detect/smaa_edge_detect");
- path.loadShader("shader_datas/smaa_blend_weight/smaa_blend_weight");
- path.loadShader("shader_datas/smaa_neighborhood_blend/smaa_neighborhood_blend");
- path.loadShader("shader_datas/taa_pass/taa_pass");
- path.loadShader("shader_datas/supersample_resolve/supersample_resolve");
- // path.loadShader("shader_datas/motion_blur_pass/motion_blur_pass");
- // path.loadShader("shader_datas/motion_blur_veloc_pass/motion_blur_veloc_pass");
- #if rp_voxels
- {
- RenderPathBase.initVoxels();
- path.loadShader("shader_datas/deferred_light/deferred_light_voxel");
- }
- #end
- RenderPathPaint.init(path);
- #if (is_paint || is_sculpt)
- RenderPathPreview.init(path);
- #end
- #if (kha_direct3d12 || kha_vulkan || kha_metal)
- RenderPathRaytrace.init(path);
- #end
- }
- public static function commands() {
- #if is_paint
- RenderPathPaint.liveBrushDirty();
- #end
- RenderPathBase.commands(drawDeferred);
- }
- public static function drawDeferred() {
- RenderPathBase.drawSSAO();
- #if rp_voxels
- RenderPathBase.drawVoxels();
- #end
- RenderPathBase.drawDeferredLight();
- RenderPathBase.drawBloom();
- RenderPathBase.drawSSR();
- // RenderPathBase.drawMotionBlur();
- // RenderPathBase.drawHistogram();
- path.setTarget("buf");
- path.bindTarget("tex", "tex");
- // path.bindTarget("histogram", "histogram");
- path.drawShader("shader_datas/compositor_pass/compositor_pass");
- path.setTarget("buf");
- RenderPathBase.drawCompass(path.currentG);
- path.drawMeshes("overlay");
- RenderPathBase.drawTAA();
- }
- }
|