189 lines
4.9 KiB
Haxe
189 lines
4.9 KiB
Haxe
package arm.render;
|
|
|
|
import iron.RenderPath;
|
|
import arm.util.RenderUtil;
|
|
import arm.ui.UIHeader;
|
|
import arm.Enums;
|
|
|
|
@:access(iron.RenderPath)
|
|
class RenderPathPreview {
|
|
|
|
public static var path: RenderPath;
|
|
|
|
public static function init(_path: RenderPath) {
|
|
path = _path;
|
|
|
|
{
|
|
var t = new RenderTargetRaw();
|
|
t.name = "texpreview";
|
|
t.width = 1;
|
|
t.height = 1;
|
|
t.format = "RGBA32";
|
|
path.createRenderTarget(t);
|
|
}
|
|
{
|
|
var t = new RenderTargetRaw();
|
|
t.name = "texpreview_icon";
|
|
t.width = 1;
|
|
t.height = 1;
|
|
t.format = "RGBA32";
|
|
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();
|
|
#if kha_opengl
|
|
t.depth_buffer = "mmain";
|
|
#end
|
|
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() {
|
|
path.setTarget("mgbuffer2");
|
|
path.clearTarget(0xff000000);
|
|
|
|
#if (arm_world || kha_metal)
|
|
var clearColor = 0xffffffff;
|
|
#else
|
|
var clearColor: Null<Int> = null;
|
|
#end
|
|
|
|
path.setTarget("mgbuffer0");
|
|
path.clearTarget(clearColor, 1.0);
|
|
path.setTarget("mgbuffer0", ["mgbuffer1", "mgbuffer2"]);
|
|
path.drawMeshes("mesh");
|
|
|
|
// ---
|
|
// Deferred light
|
|
// ---
|
|
path.setTarget("mtex");
|
|
path.bindTarget("_mmain", "gbufferD");
|
|
path.bindTarget("mgbuffer0", "gbuffer0");
|
|
path.bindTarget("mgbuffer1", "gbuffer1");
|
|
{
|
|
path.bindTarget("empty_white", "ssaotex");
|
|
}
|
|
path.drawShader("deferred_light/deferred_light/deferred_light");
|
|
|
|
#if (kha_direct3d11 || kha_direct3d12 || kha_metal || kha_vulkan)
|
|
path.setDepthFrom("mtex", "mgbuffer0"); // Bind depth for world pass
|
|
#end
|
|
|
|
path.setTarget("mtex"); // Re-binds depth
|
|
#if (!arm_world)
|
|
path.drawSkydome("world_pass/world_pass/world_pass");
|
|
#end
|
|
|
|
#if (kha_direct3d11 || kha_direct3d12 || kha_metal || kha_vulkan)
|
|
path.setDepthFrom("mtex", "mgbuffer1"); // Unbind depth
|
|
#end
|
|
|
|
var framebuffer = "texpreview";
|
|
var selectedMat = UIHeader.inst.worktab.position == SpaceRender ? Context.materialScene : Context.material;
|
|
RenderPath.active.renderTargets.get("texpreview").image = selectedMat.image;
|
|
RenderPath.active.renderTargets.get("texpreview_icon").image = selectedMat.imageIcon;
|
|
|
|
path.setTarget(framebuffer);
|
|
|
|
path.bindTarget("mtex", "tex");
|
|
path.drawShader("shader_datas/compositor_pass/compositor_pass");
|
|
|
|
path.setTarget("texpreview_icon");
|
|
path.bindTarget("texpreview", "tex");
|
|
path.drawShader("shader_datas/supersample_resolve/supersample_resolve");
|
|
}
|
|
|
|
public static function commandsDecal() {
|
|
path.setTarget("gbuffer2");
|
|
path.clearTarget(0xff000000);
|
|
|
|
#if (arm_world || kha_metal)
|
|
var clearColor = 0xffffffff;
|
|
#else
|
|
var clearColor: Null<Int> = null;
|
|
#end
|
|
|
|
path.setTarget("gbuffer0");
|
|
path.clearTarget(clearColor, 1.0);
|
|
path.setTarget("gbuffer0", ["gbuffer1", "gbuffer2"]);
|
|
path.drawMeshes("mesh");
|
|
|
|
// ---
|
|
// Deferred light
|
|
// ---
|
|
path.setTarget("tex");
|
|
path.bindTarget("_main", "gbufferD");
|
|
path.bindTarget("gbuffer0", "gbuffer0");
|
|
path.bindTarget("gbuffer1", "gbuffer1");
|
|
{
|
|
path.bindTarget("empty_white", "ssaotex");
|
|
}
|
|
path.drawShader("deferred_light/deferred_light/deferred_light");
|
|
|
|
#if (kha_direct3d11 || kha_direct3d12 || kha_metal || kha_vulkan)
|
|
path.setDepthFrom("tex", "gbuffer0"); // Bind depth for world pass
|
|
#end
|
|
|
|
path.setTarget("tex");
|
|
path.drawSkydome("world_pass/world_pass/world_pass");
|
|
|
|
#if (kha_direct3d11 || kha_direct3d12 || kha_metal || kha_vulkan)
|
|
path.setDepthFrom("tex", "gbuffer1"); // Unbind depth
|
|
#end
|
|
|
|
var framebuffer = "texpreview";
|
|
RenderPath.active.renderTargets.get("texpreview").image = Context.decalImage;
|
|
|
|
path.setTarget(framebuffer);
|
|
|
|
path.bindTarget("tex", "tex");
|
|
path.drawShader("shader_datas/compositor_pass/compositor_pass");
|
|
}
|
|
}
|