2019-06-19 22:42:17 +02:00
|
|
|
package arm.render;
|
2019-02-28 23:27:00 +01:00
|
|
|
|
2019-06-20 11:23:01 +02:00
|
|
|
import iron.RenderPath;
|
2019-12-05 18:00:38 +01:00
|
|
|
import arm.util.RenderUtil;
|
2020-03-26 15:22:22 +01:00
|
|
|
import arm.ui.UIHeader;
|
2020-03-18 20:26:28 +01:00
|
|
|
import arm.Enums;
|
2019-03-02 23:41:26 +01:00
|
|
|
|
2019-06-20 11:23:01 +02:00
|
|
|
@:access(iron.RenderPath)
|
2019-02-28 23:27:00 +01:00
|
|
|
class RenderPathPreview {
|
|
|
|
|
|
2019-12-09 00:28:10 +01:00
|
|
|
public static var path: RenderPath;
|
2019-12-05 18:00:38 +01:00
|
|
|
|
2019-12-09 00:28:10 +01:00
|
|
|
public static function init(_path: RenderPath) {
|
2019-12-05 18:00:38 +01:00
|
|
|
path = _path;
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
var t = new RenderTargetRaw();
|
|
|
|
|
t.name = "texpreview";
|
|
|
|
|
t.width = 1;
|
|
|
|
|
t.height = 1;
|
2019-12-09 00:28:10 +01:00
|
|
|
t.format = "RGBA32";
|
2019-12-05 18:00:38 +01:00
|
|
|
path.createRenderTarget(t);
|
|
|
|
|
}
|
|
|
|
|
{
|
|
|
|
|
var t = new RenderTargetRaw();
|
|
|
|
|
t.name = "texpreview_icon";
|
|
|
|
|
t.width = 1;
|
|
|
|
|
t.height = 1;
|
2019-12-09 00:28:10 +01:00
|
|
|
t.format = "RGBA32";
|
2019-12-05 18:00:38 +01:00
|
|
|
path.createRenderTarget(t);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
path.createDepthBuffer("mmain", "DEPTH24");
|
|
|
|
|
|
|
|
|
|
var t = new RenderTargetRaw();
|
|
|
|
|
t.name = "mtex";
|
|
|
|
|
t.width = RenderUtil.matPreviewSize;
|
|
|
|
|
t.height = RenderUtil.matPreviewSize;
|
|
|
|
|
t.format = "RGBA64";
|
|
|
|
|
t.scale = Inc.getSuperSampling();
|
2020-05-29 12:32:40 +02:00
|
|
|
#if kha_opengl
|
|
|
|
|
t.depth_buffer = "mmain";
|
|
|
|
|
#end
|
2019-12-05 18:00:38 +01:00
|
|
|
path.createRenderTarget(t);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
var t = new RenderTargetRaw();
|
|
|
|
|
t.name = "mgbuffer0";
|
|
|
|
|
t.width = RenderUtil.matPreviewSize;
|
|
|
|
|
t.height = RenderUtil.matPreviewSize;
|
|
|
|
|
t.format = "RGBA64";
|
|
|
|
|
t.scale = Inc.getSuperSampling();
|
|
|
|
|
t.depth_buffer = "mmain";
|
|
|
|
|
path.createRenderTarget(t);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
var t = new RenderTargetRaw();
|
|
|
|
|
t.name = "mgbuffer1";
|
|
|
|
|
t.width = RenderUtil.matPreviewSize;
|
|
|
|
|
t.height = RenderUtil.matPreviewSize;
|
|
|
|
|
t.format = "RGBA64";
|
|
|
|
|
t.scale = Inc.getSuperSampling();
|
|
|
|
|
path.createRenderTarget(t);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
var t = new RenderTargetRaw();
|
|
|
|
|
t.name = "mgbuffer2";
|
|
|
|
|
t.width = RenderUtil.matPreviewSize;
|
|
|
|
|
t.height = RenderUtil.matPreviewSize;
|
|
|
|
|
t.format = "RGBA64";
|
|
|
|
|
t.scale = Inc.getSuperSampling();
|
|
|
|
|
path.createRenderTarget(t);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// path.loadShader("deferred_light/deferred_light/deferred_light");
|
|
|
|
|
// path.loadShader("world_pass/world_pass/world_pass");
|
|
|
|
|
// path.loadShader("shader_datas/compositor_pass/compositor_pass");
|
|
|
|
|
// path.loadShader("shader_datas/supersample_resolve/supersample_resolve");
|
|
|
|
|
//
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static function commandsPreview() {
|
2019-08-21 11:53:56 +02:00
|
|
|
path.setTarget("mgbuffer2");
|
|
|
|
|
path.clearTarget(0xff000000);
|
2020-05-11 22:50:32 +02:00
|
|
|
|
2020-05-12 19:24:09 +02:00
|
|
|
#if (arm_world || kha_metal)
|
2020-05-11 22:50:32 +02:00
|
|
|
var clearColor = 0xffffffff;
|
2019-08-22 12:05:03 +02:00
|
|
|
#else
|
2020-05-11 22:50:32 +02:00
|
|
|
var clearColor: Null<Int> = null;
|
2019-08-22 12:05:03 +02:00
|
|
|
#end
|
2020-05-11 22:50:32 +02:00
|
|
|
|
|
|
|
|
path.setTarget("mgbuffer0");
|
|
|
|
|
path.clearTarget(clearColor, 1.0);
|
|
|
|
|
path.setTarget("mgbuffer0", ["mgbuffer1", "mgbuffer2"]);
|
2019-06-22 00:25:38 +02:00
|
|
|
path.drawMeshes("mesh");
|
2019-02-28 23:27:00 +01:00
|
|
|
|
|
|
|
|
// ---
|
|
|
|
|
// Deferred light
|
|
|
|
|
// ---
|
|
|
|
|
path.setTarget("mtex");
|
|
|
|
|
path.bindTarget("_mmain", "gbufferD");
|
|
|
|
|
path.bindTarget("mgbuffer0", "gbuffer0");
|
|
|
|
|
path.bindTarget("mgbuffer1", "gbuffer1");
|
|
|
|
|
{
|
|
|
|
|
path.bindTarget("empty_white", "ssaotex");
|
|
|
|
|
}
|
2019-08-22 12:05:03 +02:00
|
|
|
path.drawShader("deferred_light/deferred_light/deferred_light");
|
2019-02-28 23:27:00 +01:00
|
|
|
|
2019-07-25 21:41:53 +02:00
|
|
|
#if (!kha_opengl && !kha_direct3d12)
|
2020-05-26 19:23:44 +02:00
|
|
|
path.setDepthFrom("mtex", "mgbuffer0"); // Bind depth for world pass
|
2019-02-28 23:27:00 +01:00
|
|
|
#end
|
|
|
|
|
|
|
|
|
|
path.setTarget("mtex"); // Re-binds depth
|
2019-08-22 12:05:03 +02:00
|
|
|
#if (!arm_world)
|
|
|
|
|
path.drawSkydome("world_pass/world_pass/world_pass");
|
|
|
|
|
#end
|
2019-10-06 19:03:59 +02:00
|
|
|
|
2020-05-26 19:23:44 +02:00
|
|
|
#if (!kha_opengl && !kha_direct3d12)
|
|
|
|
|
path.setDepthFrom("mtex", "mgbuffer1"); // Unbind depth
|
|
|
|
|
#end
|
|
|
|
|
|
2019-02-28 23:27:00 +01:00
|
|
|
var framebuffer = "texpreview";
|
2020-04-06 22:00:00 +02:00
|
|
|
var selectedMat = UIHeader.inst.worktab.position == SpaceRender ? Context.materialScene : Context.material;
|
2019-06-20 11:23:01 +02:00
|
|
|
RenderPath.active.renderTargets.get("texpreview").image = selectedMat.image;
|
|
|
|
|
RenderPath.active.renderTargets.get("texpreview_icon").image = selectedMat.imageIcon;
|
2019-04-16 22:34:47 +02:00
|
|
|
|
2019-06-20 11:23:01 +02:00
|
|
|
path.setTarget(framebuffer);
|
2019-02-28 23:27:00 +01:00
|
|
|
|
|
|
|
|
path.bindTarget("mtex", "tex");
|
|
|
|
|
#if rp_compositordepth
|
|
|
|
|
{
|
|
|
|
|
path.bindTarget("_mmain", "gbufferD");
|
|
|
|
|
}
|
|
|
|
|
#end
|
|
|
|
|
path.drawShader("shader_datas/compositor_pass/compositor_pass");
|
|
|
|
|
|
2019-04-16 22:34:47 +02:00
|
|
|
path.setTarget("texpreview_icon");
|
|
|
|
|
path.bindTarget("texpreview", "tex");
|
|
|
|
|
path.drawShader("shader_datas/supersample_resolve/supersample_resolve");
|
2019-02-28 23:27:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static function commandsDecal() {
|
2019-08-21 11:53:56 +02:00
|
|
|
path.setTarget("gbuffer2");
|
|
|
|
|
path.clearTarget(0xff000000);
|
2020-05-12 19:24:09 +02:00
|
|
|
path.setTarget("gbuffer0");
|
2019-02-28 23:27:00 +01:00
|
|
|
path.clearTarget(null, 1.0);
|
2020-05-12 19:24:09 +02:00
|
|
|
path.setTarget("gbuffer0", ["gbuffer1", "gbuffer2"]);
|
2019-06-22 00:25:38 +02:00
|
|
|
path.drawMeshes("mesh");
|
2019-02-28 23:27:00 +01:00
|
|
|
|
|
|
|
|
// ---
|
|
|
|
|
// Deferred light
|
|
|
|
|
// ---
|
|
|
|
|
path.setTarget("tex");
|
|
|
|
|
path.bindTarget("_main", "gbufferD");
|
|
|
|
|
path.bindTarget("gbuffer0", "gbuffer0");
|
|
|
|
|
path.bindTarget("gbuffer1", "gbuffer1");
|
|
|
|
|
{
|
|
|
|
|
path.bindTarget("empty_white", "ssaotex");
|
|
|
|
|
}
|
2019-08-22 12:05:03 +02:00
|
|
|
path.drawShader("deferred_light/deferred_light/deferred_light");
|
2019-02-28 23:27:00 +01:00
|
|
|
|
2019-07-25 21:41:53 +02:00
|
|
|
#if (!kha_opengl && !kha_direct3d12)
|
2020-05-26 19:23:44 +02:00
|
|
|
path.setDepthFrom("tex", "gbuffer0"); // Bind depth for world pass
|
2019-02-28 23:27:00 +01:00
|
|
|
#end
|
|
|
|
|
|
2020-05-26 19:23:44 +02:00
|
|
|
path.setTarget("tex");
|
2019-08-22 12:05:03 +02:00
|
|
|
path.drawSkydome("world_pass/world_pass/world_pass");
|
2019-10-06 19:03:59 +02:00
|
|
|
|
2020-05-26 19:23:44 +02:00
|
|
|
#if (!kha_opengl && !kha_direct3d12)
|
|
|
|
|
path.setDepthFrom("tex", "gbuffer1"); // Unbind depth
|
|
|
|
|
#end
|
|
|
|
|
|
2019-02-28 23:27:00 +01:00
|
|
|
var framebuffer = "texpreview";
|
2020-03-26 15:22:22 +01:00
|
|
|
RenderPath.active.renderTargets.get("texpreview").image = Context.decalImage;
|
2019-02-28 23:27:00 +01:00
|
|
|
|
2019-06-20 11:23:01 +02:00
|
|
|
path.setTarget(framebuffer);
|
2019-04-16 22:34:47 +02:00
|
|
|
|
2019-02-28 23:27:00 +01:00
|
|
|
path.bindTarget("tex", "tex");
|
|
|
|
|
#if rp_compositordepth
|
|
|
|
|
{
|
|
|
|
|
path.bindTarget("_main", "gbufferD");
|
|
|
|
|
}
|
|
|
|
|
#end
|
|
|
|
|
path.drawShader("shader_datas/compositor_pass/compositor_pass");
|
|
|
|
|
}
|
2019-06-19 17:03:28 +02:00
|
|
|
}
|