Files
armorpaint/Sources/arm/render/RenderPathPreview.hx
T

192 lines
4.8 KiB
Haxe
Raw Normal View History

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
}