Update leenkx/Sources/leenkx/renderpath/RenderPathDeferred.hx
This commit is contained in:
		@ -15,6 +15,11 @@ class RenderPathDeferred {
 | 
				
			|||||||
	static var bloomUpsampler: Upsampler;
 | 
						static var bloomUpsampler: Upsampler;
 | 
				
			||||||
	#end
 | 
						#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						#if (rp_ssgi == "SSGI")
 | 
				
			||||||
 | 
						static var ssgitex = "singleb";
 | 
				
			||||||
 | 
						static var ssgitexb = "singleb";
 | 
				
			||||||
 | 
						#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	public static inline function setTargetMeshes() {
 | 
						public static inline function setTargetMeshes() {
 | 
				
			||||||
		//Always keep the order of render targets the same as defined in compiled.inc
 | 
							//Always keep the order of render targets the same as defined in compiled.inc
 | 
				
			||||||
		path.setTarget("gbuffer0", [
 | 
							path.setTarget("gbuffer0", [
 | 
				
			||||||
@ -57,12 +62,11 @@ class RenderPathDeferred {
 | 
				
			|||||||
			Inc.initGI("voxels");
 | 
								Inc.initGI("voxels");
 | 
				
			||||||
			Inc.initGI("voxelsOut");
 | 
								Inc.initGI("voxelsOut");
 | 
				
			||||||
			Inc.initGI("voxelsOutB");
 | 
								Inc.initGI("voxelsOutB");
 | 
				
			||||||
			#if (lnx_voxelgi_shadows || rp_voxels == "Voxel GI")
 | 
								#if (rp_voxels == "Voxel GI" || lnx_voxelgi_shadows)
 | 
				
			||||||
			Inc.initGI("voxelsSDF");
 | 
								Inc.initGI("voxelsSDF");
 | 
				
			||||||
			Inc.initGI("voxelsSDFtmp");
 | 
								Inc.initGI("voxelsSDFtmp");
 | 
				
			||||||
			#end
 | 
								#end
 | 
				
			||||||
			#if (rp_voxels == "Voxel GI")
 | 
								#if (rp_voxels == "Voxel GI")
 | 
				
			||||||
			Inc.initGI("voxelsLight");
 | 
					 | 
				
			||||||
			Inc.initGI("voxels_diffuse");
 | 
								Inc.initGI("voxels_diffuse");
 | 
				
			||||||
			Inc.initGI("voxels_specular");
 | 
								Inc.initGI("voxels_specular");
 | 
				
			||||||
			#else
 | 
								#else
 | 
				
			||||||
@ -195,16 +199,26 @@ class RenderPathDeferred {
 | 
				
			|||||||
			path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_x");
 | 
								path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_x");
 | 
				
			||||||
			path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_y");
 | 
								path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_y");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							#elseif (rp_ssgi == "SSGI")
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								path.loadShader("shader_datas/ssgi_pass/ssgi_pass");
 | 
				
			||||||
 | 
								path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_x");
 | 
				
			||||||
 | 
								path.loadShader("shader_datas/blur_edge_pass/blur_edge_pass_y");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		#end
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#if ((rp_ssgi != "Off") || rp_volumetriclight)
 | 
							#if (rp_ssgi != "Off")
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			var t = new RenderTargetRaw();
 | 
								var t = new RenderTargetRaw();
 | 
				
			||||||
			t.name = "singlea";
 | 
								t.name = "singlea";
 | 
				
			||||||
			t.width = 0;
 | 
								t.width = 0;
 | 
				
			||||||
			t.height = 0;
 | 
								t.height = 0;
 | 
				
			||||||
			t.displayp = Inc.getDisplayp();
 | 
								t.displayp = Inc.getDisplayp();
 | 
				
			||||||
 | 
								#if (rp_ssgi == "SSGI")
 | 
				
			||||||
 | 
								t.format = "RGBA32";
 | 
				
			||||||
 | 
								#else
 | 
				
			||||||
			t.format = "R8";
 | 
								t.format = "R8";
 | 
				
			||||||
 | 
								#end
 | 
				
			||||||
			t.scale = Inc.getSuperSampling();
 | 
								t.scale = Inc.getSuperSampling();
 | 
				
			||||||
			#if rp_ssgi_half
 | 
								#if rp_ssgi_half
 | 
				
			||||||
			t.scale *= 0.5;
 | 
								t.scale *= 0.5;
 | 
				
			||||||
@ -216,6 +230,38 @@ class RenderPathDeferred {
 | 
				
			|||||||
			t.width = 0;
 | 
								t.width = 0;
 | 
				
			||||||
			t.height = 0;
 | 
								t.height = 0;
 | 
				
			||||||
			t.displayp = Inc.getDisplayp();
 | 
								t.displayp = Inc.getDisplayp();
 | 
				
			||||||
 | 
								#if (rp_ssgi == "SSGI")
 | 
				
			||||||
 | 
								t.format = "RGBA32";
 | 
				
			||||||
 | 
								#else
 | 
				
			||||||
 | 
								t.format = "R8";
 | 
				
			||||||
 | 
								#end
 | 
				
			||||||
 | 
								t.scale = Inc.getSuperSampling();
 | 
				
			||||||
 | 
								#if rp_ssgi_half
 | 
				
			||||||
 | 
								t.scale *= 0.5;
 | 
				
			||||||
 | 
								#end
 | 
				
			||||||
 | 
								path.createRenderTarget(t);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							#if rp_volumetriclight
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								var t = new RenderTargetRaw();
 | 
				
			||||||
 | 
								t.name = "volumetrica";
 | 
				
			||||||
 | 
								t.width = 0;
 | 
				
			||||||
 | 
								t.height = 0;
 | 
				
			||||||
 | 
								t.displayp = Inc.getDisplayp();
 | 
				
			||||||
 | 
								t.format = "R8";
 | 
				
			||||||
 | 
								t.scale = Inc.getSuperSampling();
 | 
				
			||||||
 | 
								#if rp_ssgi_half // Do we keep this ?
 | 
				
			||||||
 | 
								t.scale *= 0.5;
 | 
				
			||||||
 | 
								#end
 | 
				
			||||||
 | 
								path.createRenderTarget(t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								var t = new RenderTargetRaw();
 | 
				
			||||||
 | 
								t.name = "volumetricb";
 | 
				
			||||||
 | 
								t.width = 0;
 | 
				
			||||||
 | 
								t.height = 0;
 | 
				
			||||||
 | 
								t.displayp = Inc.getDisplayp();
 | 
				
			||||||
			t.format = "R8";
 | 
								t.format = "R8";
 | 
				
			||||||
			t.scale = Inc.getSuperSampling();
 | 
								t.scale = Inc.getSuperSampling();
 | 
				
			||||||
			#if rp_ssgi_half
 | 
								#if rp_ssgi_half
 | 
				
			||||||
@ -358,6 +404,7 @@ class RenderPathDeferred {
 | 
				
			|||||||
			path.loadShader("shader_datas/ssrefr_pass/ssrefr_pass");
 | 
								path.loadShader("shader_datas/ssrefr_pass/ssrefr_pass");
 | 
				
			||||||
			path.loadShader("shader_datas/copy_pass/copy_pass");
 | 
								path.loadShader("shader_datas/copy_pass/copy_pass");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								path.createDepthBuffer("refraction", "DEPTH24");
 | 
				
			||||||
			// holds background depth
 | 
								// holds background depth
 | 
				
			||||||
			var t = new RenderTargetRaw();
 | 
								var t = new RenderTargetRaw();
 | 
				
			||||||
			t.name = "gbufferD1";
 | 
								t.name = "gbufferD1";
 | 
				
			||||||
@ -473,13 +520,6 @@ class RenderPathDeferred {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		#end
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#if rp_ssrefr
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			path.setTarget("gbuffer_refraction");
 | 
					 | 
				
			||||||
			path.clearTarget(0xffffff00);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		#end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		RenderPathCreator.setTargetMeshes();
 | 
							RenderPathCreator.setTargetMeshes();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#if rp_dynres
 | 
							#if rp_dynres
 | 
				
			||||||
@ -524,30 +564,16 @@ class RenderPathDeferred {
 | 
				
			|||||||
		path.drawShader("shader_datas/downsample_depth/downsample_depth");
 | 
							path.drawShader("shader_datas/downsample_depth/downsample_depth");
 | 
				
			||||||
		#end
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#if ((rp_ssgi == "RTGI") || (rp_ssgi == "RTAO"))
 | 
							#if (rp_shadowmap)
 | 
				
			||||||
		{
 | 
							// atlasing is exclusive for now
 | 
				
			||||||
			if (leenkx.data.Config.raw.rp_ssgi != false) {
 | 
							#if lnx_shadowmap_atlas
 | 
				
			||||||
				path.setTarget("singlea");
 | 
							Inc.drawShadowMapAtlas();
 | 
				
			||||||
				#if rp_ssgi_half
 | 
					 | 
				
			||||||
				path.bindTarget("half", "gbufferD");
 | 
					 | 
				
			||||||
		#else
 | 
							#else
 | 
				
			||||||
				path.bindTarget("_main", "gbufferD");
 | 
							Inc.drawShadowMap();
 | 
				
			||||||
 | 
							#end
 | 
				
			||||||
		#end
 | 
							#end
 | 
				
			||||||
				path.bindTarget("gbuffer0", "gbuffer0");
 | 
					 | 
				
			||||||
				path.drawShader("shader_datas/ssgi_pass/ssgi_pass");
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
				path.setTarget("singleb");
 | 
							#if (rp_ssgi == "SSAO")
 | 
				
			||||||
				path.bindTarget("singlea", "tex");
 | 
					 | 
				
			||||||
				path.bindTarget("gbuffer0", "gbuffer0");
 | 
					 | 
				
			||||||
				path.drawShader("shader_datas/blur_edge_pass/blur_edge_pass_x");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				path.setTarget("singlea");
 | 
					 | 
				
			||||||
				path.bindTarget("singleb", "tex");
 | 
					 | 
				
			||||||
				path.bindTarget("gbuffer0", "gbuffer0");
 | 
					 | 
				
			||||||
				path.drawShader("shader_datas/blur_edge_pass/blur_edge_pass_y");
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		#elseif (rp_ssgi == "SSAO")
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (leenkx.data.Config.raw.rp_ssgi != false) {
 | 
								if (leenkx.data.Config.raw.rp_ssgi != false) {
 | 
				
			||||||
				path.setTarget("singlea");
 | 
									path.setTarget("singlea");
 | 
				
			||||||
@ -566,15 +592,43 @@ class RenderPathDeferred {
 | 
				
			|||||||
				path.drawShader("shader_datas/blur_edge_pass/blur_edge_pass_y");
 | 
									path.drawShader("shader_datas/blur_edge_pass/blur_edge_pass_y");
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							#elseif (rp_ssgi == "SSGI")
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (leenkx.data.Config.raw.rp_ssgi != false) {
 | 
				
			||||||
 | 
									path.setTarget("singlea");
 | 
				
			||||||
 | 
									path.bindTarget("_main", "gbufferD");
 | 
				
			||||||
 | 
									path.bindTarget("gbuffer0", "gbuffer0");
 | 
				
			||||||
 | 
									path.bindTarget("gbuffer1", "gbuffer1");
 | 
				
			||||||
 | 
									#if rp_gbuffer_emission
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										path.bindTarget("gbuffer_emission", "gbufferEmission");
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									#end
 | 
				
			||||||
 | 
									#if rp_gbuffer2
 | 
				
			||||||
 | 
									path.bindTarget("gbuffer2", "sveloc");
 | 
				
			||||||
 | 
									#end
 | 
				
			||||||
 | 
									#if rp_shadowmap
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										#if lnx_shadowmap_atlas
 | 
				
			||||||
 | 
										Inc.bindShadowMapAtlas();
 | 
				
			||||||
 | 
										#else
 | 
				
			||||||
 | 
										Inc.bindShadowMap();
 | 
				
			||||||
 | 
										#end
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
				#end
 | 
									#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#if (rp_shadowmap)
 | 
									path.drawShader("shader_datas/ssgi_pass/ssgi_pass");
 | 
				
			||||||
		// atlasing is exclusive for now
 | 
									path.setTarget("singleb");
 | 
				
			||||||
		#if lnx_shadowmap_atlas
 | 
									path.bindTarget("singlea", "tex");
 | 
				
			||||||
		Inc.drawShadowMapAtlas();
 | 
									path.bindTarget("gbuffer0", "gbuffer0");
 | 
				
			||||||
		#else
 | 
									path.drawShader("shader_datas/blur_edge_pass/blur_edge_pass_x");
 | 
				
			||||||
		Inc.drawShadowMap();
 | 
					
 | 
				
			||||||
		#end
 | 
									path.setTarget("singlea");
 | 
				
			||||||
 | 
									path.bindTarget("singleb", "tex");
 | 
				
			||||||
 | 
									path.bindTarget("gbuffer0", "gbuffer0");
 | 
				
			||||||
 | 
									path.drawShader("shader_datas/blur_edge_pass/blur_edge_pass_y");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		#end
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Voxels
 | 
							// Voxels
 | 
				
			||||||
@ -587,9 +641,6 @@ class RenderPathDeferred {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			if (iron.RenderPath.pre_clear == true)
 | 
								if (iron.RenderPath.pre_clear == true)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				#if (rp_voxels == "Voxel GI")
 | 
					 | 
				
			||||||
				path.clearImage("voxelsLight", 0x00000000);
 | 
					 | 
				
			||||||
				#end
 | 
					 | 
				
			||||||
				path.clearImage("voxels", 0x00000000);
 | 
									path.clearImage("voxels", 0x00000000);
 | 
				
			||||||
				path.clearImage("voxelsOut", 0x00000000);
 | 
									path.clearImage("voxelsOut", 0x00000000);
 | 
				
			||||||
				path.clearImage("voxelsOutB", 0x00000000);
 | 
									path.clearImage("voxelsOutB", 0x00000000);
 | 
				
			||||||
@ -601,22 +652,26 @@ class RenderPathDeferred {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				#if (rp_voxels == "Voxel GI")
 | 
					 | 
				
			||||||
				path.clearImage("voxelsLight", 0x00000000);
 | 
					 | 
				
			||||||
				#end
 | 
					 | 
				
			||||||
				path.clearImage("voxels", 0x00000000);
 | 
									path.clearImage("voxels", 0x00000000);
 | 
				
			||||||
				Inc.computeVoxelsOffsetPrev();
 | 
									Inc.computeVoxelsOffsetPrev();
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			path.setTarget("");
 | 
								path.setTarget("");
 | 
				
			||||||
 | 
								path.bindTarget("voxels", "voxels");
 | 
				
			||||||
 | 
								#if rp_shadowmap
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									#if lnx_shadowmap_atlas
 | 
				
			||||||
 | 
									Inc.bindShadowMapAtlas();
 | 
				
			||||||
 | 
									#else
 | 
				
			||||||
 | 
									Inc.bindShadowMap();
 | 
				
			||||||
 | 
									#end
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			var res = iron.RenderPath.getVoxelRes();
 | 
								var res = iron.RenderPath.getVoxelRes();
 | 
				
			||||||
			path.setViewport(res, res);
 | 
								path.setViewport(res, res);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			path.bindTarget("voxels", "voxels");
 | 
					 | 
				
			||||||
			path.drawMeshes("voxel");
 | 
								path.drawMeshes("voxel");
 | 
				
			||||||
			#if (rp_voxels == "Voxel GI")
 | 
					 | 
				
			||||||
			Inc.computeVoxelsLight();
 | 
					 | 
				
			||||||
			#end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			Inc.computeVoxelsTemporal();
 | 
								Inc.computeVoxelsTemporal();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -632,6 +687,10 @@ class RenderPathDeferred {
 | 
				
			|||||||
				#else
 | 
									#else
 | 
				
			||||||
				path.clearImage("voxels_ao", 0x00000000);
 | 
									path.clearImage("voxels_ao", 0x00000000);
 | 
				
			||||||
				#end
 | 
									#end
 | 
				
			||||||
 | 
									#if lnx_voxelgi_shadows
 | 
				
			||||||
 | 
									path.bindTarget("voxelsOut", "voxels");
 | 
				
			||||||
 | 
									path.bindTarget("voxelsSDF", "voxelsSDF");
 | 
				
			||||||
 | 
									#end
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		#end
 | 
							#end
 | 
				
			||||||
@ -767,15 +826,9 @@ class RenderPathDeferred {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		#end
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#if (rp_translucency && !rp_ssrefr)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			Inc.drawTranslucency("tex");
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		#end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		#if rp_volumetriclight
 | 
							#if rp_volumetriclight
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			path.setTarget("singlea");
 | 
								path.setTarget("volumetrica");
 | 
				
			||||||
			path.bindTarget("_main", "gbufferD");
 | 
								path.bindTarget("_main", "gbufferD");
 | 
				
			||||||
			#if lnx_shadowmap_atlas
 | 
								#if lnx_shadowmap_atlas
 | 
				
			||||||
			Inc.bindShadowMapAtlas();
 | 
								Inc.bindShadowMapAtlas();
 | 
				
			||||||
@ -784,85 +837,16 @@ class RenderPathDeferred {
 | 
				
			|||||||
			#end
 | 
								#end
 | 
				
			||||||
			path.drawShader("shader_datas/volumetric_light/volumetric_light");
 | 
								path.drawShader("shader_datas/volumetric_light/volumetric_light");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			path.setTarget("singleb");
 | 
								path.setTarget("volumetricb");
 | 
				
			||||||
			path.bindTarget("singlea", "tex");
 | 
								path.bindTarget("volumetrica", "tex");
 | 
				
			||||||
			path.drawShader("shader_datas/blur_bilat_pass/blur_bilat_pass_x");
 | 
								path.drawShader("shader_datas/blur_bilat_pass/blur_bilat_pass_x");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			path.setTarget("tex");
 | 
								path.setTarget("tex");
 | 
				
			||||||
			path.bindTarget("singleb", "tex");
 | 
								path.bindTarget("volumetricb", "tex");
 | 
				
			||||||
			path.drawShader("shader_datas/blur_bilat_blend_pass/blur_bilat_blend_pass_y");
 | 
								path.drawShader("shader_datas/blur_bilat_blend_pass/blur_bilat_blend_pass_y");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		#end
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#if rp_bloom
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			inline Inc.drawBloom("tex", bloomDownsampler, bloomUpsampler);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		#end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		#if rp_sss
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			#if (!kha_opengl)
 | 
					 | 
				
			||||||
			path.setDepthFrom("tex", "gbuffer1"); // Unbind depth so we can read it
 | 
					 | 
				
			||||||
			#end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			path.setTarget("buf");
 | 
					 | 
				
			||||||
			path.bindTarget("tex", "tex");
 | 
					 | 
				
			||||||
			path.bindTarget("_main", "gbufferD");
 | 
					 | 
				
			||||||
			path.bindTarget("gbuffer0", "gbuffer0");
 | 
					 | 
				
			||||||
			path.drawShader("shader_datas/sss_pass/sss_pass_x");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			path.setTarget("tex");
 | 
					 | 
				
			||||||
			path.bindTarget("buf", "tex");
 | 
					 | 
				
			||||||
			path.bindTarget("_main", "gbufferD");
 | 
					 | 
				
			||||||
			path.bindTarget("gbuffer0", "gbuffer0");
 | 
					 | 
				
			||||||
			path.drawShader("shader_datas/sss_pass/sss_pass_y");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			#if (!kha_opengl)
 | 
					 | 
				
			||||||
			path.setDepthFrom("tex", "gbuffer0");
 | 
					 | 
				
			||||||
			#end
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		#end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		#if rp_ssrefr
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if (leenkx.data.Config.raw.rp_ssrefr != false)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				//save depth
 | 
					 | 
				
			||||||
				path.setTarget("gbufferD1");
 | 
					 | 
				
			||||||
				path.bindTarget("_main", "tex");
 | 
					 | 
				
			||||||
				path.drawShader("shader_datas/copy_pass/copy_pass");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				//save background color
 | 
					 | 
				
			||||||
				path.setTarget("refr");
 | 
					 | 
				
			||||||
				path.bindTarget("tex", "tex");
 | 
					 | 
				
			||||||
				path.drawShader("shader_datas/copy_pass/copy_pass");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				path.setTarget("gbuffer0", ["tex", "gbuffer_refraction"]);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				#if (rp_voxels != "Off")
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					path.bindTarget("voxelsOut", "voxels");
 | 
					 | 
				
			||||||
					path.bindTarget("voxelsSDF", "voxelsSDF");
 | 
					 | 
				
			||||||
					path.bindTarget("gbuffer2", "gbuffer2");
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				#end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				path.drawMeshes("refraction");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				path.setTarget("tex");
 | 
					 | 
				
			||||||
				path.bindTarget("tex", "tex");
 | 
					 | 
				
			||||||
				path.bindTarget("refr", "tex1");
 | 
					 | 
				
			||||||
				path.bindTarget("_main", "gbufferD");
 | 
					 | 
				
			||||||
				path.bindTarget("gbufferD1", "gbufferD1");
 | 
					 | 
				
			||||||
				path.bindTarget("gbuffer0", "gbuffer0");
 | 
					 | 
				
			||||||
				path.bindTarget("gbuffer_refraction", "gbuffer_refraction");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
				path.drawShader("shader_datas/ssrefr_pass/ssrefr_pass");
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		#end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		#if rp_ssr
 | 
							#if rp_ssr
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (leenkx.data.Config.raw.rp_ssr != false) {
 | 
								if (leenkx.data.Config.raw.rp_ssr != false) {
 | 
				
			||||||
@ -907,6 +891,87 @@ class RenderPathDeferred {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		#end
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							#if rp_sss
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								#if (!kha_opengl)
 | 
				
			||||||
 | 
								path.setDepthFrom("tex", "gbuffer1"); // Unbind depth so we can read it
 | 
				
			||||||
 | 
								#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								path.setTarget("buf");
 | 
				
			||||||
 | 
								path.bindTarget("tex", "tex");
 | 
				
			||||||
 | 
								path.bindTarget("_main", "gbufferD");
 | 
				
			||||||
 | 
								path.bindTarget("gbuffer0", "gbuffer0");
 | 
				
			||||||
 | 
								path.drawShader("shader_datas/sss_pass/sss_pass_x");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								path.setTarget("tex");
 | 
				
			||||||
 | 
								path.bindTarget("buf", "tex");
 | 
				
			||||||
 | 
								path.bindTarget("_main", "gbufferD");
 | 
				
			||||||
 | 
								path.bindTarget("gbuffer0", "gbuffer0");
 | 
				
			||||||
 | 
								path.drawShader("shader_datas/sss_pass/sss_pass_y");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								#if (!kha_opengl)
 | 
				
			||||||
 | 
								path.setDepthFrom("tex", "gbuffer0");
 | 
				
			||||||
 | 
								#end
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							#if (rp_translucency && !rp_ssrefr)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Inc.drawTranslucency("tex");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							#if rp_ssrefr
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								if (leenkx.data.Config.raw.rp_ssrefr != false)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									//save depth
 | 
				
			||||||
 | 
									path.setTarget("gbufferD1");
 | 
				
			||||||
 | 
									path.bindTarget("_main", "tex");
 | 
				
			||||||
 | 
									path.drawShader("shader_datas/copy_pass/copy_pass");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									//save background color
 | 
				
			||||||
 | 
									path.setTarget("refr");
 | 
				
			||||||
 | 
									path.bindTarget("tex", "tex");
 | 
				
			||||||
 | 
									path.drawShader("shader_datas/copy_pass/copy_pass");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									path.setTarget("gbuffer0", ["tex", "gbuffer_refraction"]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									#if rp_shadowmap
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										#if lnx_shadowmap_atlas
 | 
				
			||||||
 | 
										Inc.bindShadowMapAtlas();
 | 
				
			||||||
 | 
										#else
 | 
				
			||||||
 | 
										Inc.bindShadowMap();
 | 
				
			||||||
 | 
										#end
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									#if (rp_voxels != "Off")
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										path.bindTarget("voxelsOut", "voxels");
 | 
				
			||||||
 | 
										path.bindTarget("voxelsSDF", "voxelsSDF");
 | 
				
			||||||
 | 
										#if rp_gbuffer2
 | 
				
			||||||
 | 
										path.bindTarget("gbuffer2", "gbuffer2");
 | 
				
			||||||
 | 
										#end
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									path.drawMeshes("refraction");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									path.setTarget("tex");
 | 
				
			||||||
 | 
									path.bindTarget("tex", "tex");
 | 
				
			||||||
 | 
									path.bindTarget("refr", "tex1");
 | 
				
			||||||
 | 
									path.bindTarget("_main", "gbufferD");
 | 
				
			||||||
 | 
									path.bindTarget("gbufferD1", "gbufferD1");
 | 
				
			||||||
 | 
									path.bindTarget("gbuffer0", "gbuffer0");
 | 
				
			||||||
 | 
									path.bindTarget("gbuffer_refraction", "gbuffer_refraction");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									path.drawShader("shader_datas/ssrefr_pass/ssrefr_pass");
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#if ((rp_motionblur == "Camera") || (rp_motionblur == "Object"))
 | 
							#if ((rp_motionblur == "Camera") || (rp_motionblur == "Object"))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (leenkx.data.Config.raw.rp_motionblur != false) {
 | 
								if (leenkx.data.Config.raw.rp_motionblur != false) {
 | 
				
			||||||
@ -971,6 +1036,12 @@ class RenderPathDeferred {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		#end
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							#if rp_bloom
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								inline Inc.drawBloom("tex", bloomDownsampler, bloomUpsampler);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							#end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		#if (rp_supersampling == 4)
 | 
							#if (rp_supersampling == 4)
 | 
				
			||||||
		var framebuffer = "buf";
 | 
							var framebuffer = "buf";
 | 
				
			||||||
		#else
 | 
							#else
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user