using System;
using UnityEngine;

// Token: 0x02000073 RID: 115
[ExecuteInEditMode]
public class CaptureBackgrounds : MonoBehaviour
{
	// Token: 0x06000B85 RID: 2949 RVA: 0x000DF670 File Offset: 0x000DD870
	public void Setup()
	{
		if (this.normalsTexture)
		{
			this.normalsTexture.Release();
		}
		if (this.albedoTexture)
		{
			this.albedoTexture.Release();
		}
		if (this.smoothnessTexture)
		{
			this.smoothnessTexture.Release();
		}
		if (this.depthTexture)
		{
			this.depthTexture.Release();
		}
		if (this.pointLightTexture)
		{
			this.pointLightTexture.Release();
		}
		if (this.albedoTempTexture)
		{
			this.albedoTempTexture.Release();
		}
		if (this.directionalLightTexture)
		{
			this.directionalLightTexture.Release();
		}
		if (this.specularTexture)
		{
			this.specularTexture.Release();
		}
		if (this.specShadowsTexture)
		{
			this.specShadowsTexture.Release();
		}
		this.depthTexture = new RenderTexture(this.depthWidth, this.depthHeight, 24, RenderTextureFormat.ARGBFloat);
		this.normalsTexture = new RenderTexture(this.normalWidth, this.normalHeight, 24, RenderTextureFormat.ARGBFloat);
		this.albedoTexture = new RenderTexture(this.albedoWidth, this.albedoHeight, 24, RenderTextureFormat.ARGBFloat);
		this.smoothnessTexture = new RenderTexture(this.albedoWidth, this.albedoHeight, 24, RenderTextureFormat.ARGBFloat);
		this.pointLightTexture = new RenderTexture(this.depthWidth, this.depthHeight, 24, RenderTextureFormat.ARGBHalf);
		this.directionalLightTexture = new RenderTexture(this.shadowWidth, this.shadowHeight, 24, RenderTextureFormat.ARGBFloat);
		this.albedoTempTexture = new RenderTexture(this.albedoWidth, this.albedoHeight, 24, RenderTextureFormat.ARGBFloat);
		this.specularTexture = new RenderTexture(this.shadowWidth, this.shadowHeight, 24, RenderTextureFormat.ARGBFloat);
		this.specShadowsTexture = new RenderTexture(this.shadowWidth, this.shadowHeight, 24, RenderTextureFormat.ARGBFloat);
	}

	// Token: 0x06000B86 RID: 2950 RVA: 0x000DF848 File Offset: 0x000DDA48
	private void OnDisable()
	{
		if (this.normalsTexture)
		{
			this.normalsTexture.Release();
		}
		if (this.albedoTexture)
		{
			this.albedoTexture.Release();
		}
		if (this.smoothnessTexture)
		{
			this.smoothnessTexture.Release();
		}
		if (this.depthTexture)
		{
			this.depthTexture.Release();
		}
		if (this.pointLightTexture)
		{
			this.pointLightTexture.Release();
		}
		if (this.albedoTempTexture)
		{
			this.albedoTempTexture.Release();
		}
		if (this.directionalLightTexture)
		{
			this.directionalLightTexture.Release();
		}
		if (this.specularTexture)
		{
			this.specularTexture.Release();
		}
		if (this.specShadowsTexture)
		{
			this.specShadowsTexture.Release();
		}
	}

	// Token: 0x06000B87 RID: 2951 RVA: 0x000DF930 File Offset: 0x000DDB30
	private void Update()
	{
		if (!this.cam)
		{
			this.cam = base.gameObject.GetComponent<Camera>();
		}
		if (!this.normalsTexture)
		{
			this.Setup();
		}
		if (!this.cam)
		{
			return;
		}
		if (this.albedo || this.directionalShadows)
		{
			this.cam.enabled = true;
		}
		else
		{
			this.cam.enabled = false;
		}
		if (this.normalsTexture.width != this.normalWidth || this.normalsTexture.height != this.normalHeight || this.albedoTexture.width != this.albedoWidth || this.albedoTexture.height != this.albedoHeight || this.depthTexture.height != this.depthHeight || this.pointLightTexture.height != this.depthHeight || this.directionalLightTexture.height != this.shadowHeight)
		{
			this.Setup();
		}
		if (this.directionalShadows)
		{
			if (!this.directionalLightShader)
			{
				this.directionalLightShader = Shader.Find("Hidden/ViewDirectionalShadows");
			}
			Shader.SetGlobalFloat("passNumber", 1f);
			this.cam.targetTexture = this.directionalLightTexture;
			this.cam.RenderWithShader(this.directionalLightShader, "RenderType");
			this.cam.targetTexture = null;
			Shader.SetGlobalFloat("passNumber", 0f);
			this.cam.targetTexture = this.specularTexture;
			this.cam.RenderWithShader(this.directionalLightShader, "RenderType");
			this.cam.targetTexture = null;
		}
		if (this.normalsTexture && this.normals)
		{
			if (!this.normalsShader)
			{
				this.normalsShader = Shader.Find("Hidden/ViewNormals");
			}
			this.cam.targetTexture = this.normalsTexture;
			this.cam.RenderWithShader(this.normalsShader, "RenderType");
			this.cam.targetTexture = null;
			Shader.SetGlobalTexture("_GlobalNormalsTex", this.normalsTexture);
		}
		if (this.depthTexture && this.depth)
		{
			if (!this.depthShader)
			{
				this.depthShader = Shader.Find("Hidden/ViewDepthOrtho");
			}
			this.cam.targetTexture = this.depthTexture;
			this.cam.RenderWithShader(this.depthShader, "RenderType");
			this.cam.targetTexture = null;
			Shader.SetGlobalTexture("_GlobalDepthTex", this.depthTexture);
		}
		if (this.smoothnessTexture && this.albedo)
		{
			if (!this.smoothnessShader)
			{
				this.smoothnessShader = Shader.Find("Hidden/ViewSmoothness");
			}
			this.cam.targetTexture = this.smoothnessTexture;
			this.cam.RenderWithShader(this.smoothnessShader, "RenderType");
			this.cam.targetTexture = null;
			this.doAlbedo = true;
			this.cam.targetTexture = this.albedoTempTexture;
			this.cam.Render();
			this.cam.targetTexture = null;
			this.doAlbedo = false;
		}
	}

	// Token: 0x06000B88 RID: 2952 RVA: 0x000DFC68 File Offset: 0x000DDE68
	private void OnRenderImage(RenderTexture src, RenderTexture dest)
	{
		if (this.albedoTexture && this.doAlbedo)
		{
			if (!this.albedoMaterial)
			{
				this.albedoMaterial = new Material(Shader.Find("Hidden/CombineCaptures"));
			}
			this.albedoMaterial.SetTexture("_SmoothnessTex", this.smoothnessTexture);
			this.albedoMaterial.SetTexture("_AlbedoTex", this.albedoTempTexture);
			Graphics.Blit(src, this.albedoTexture, this.albedoMaterial, 0);
		}
		if (this.specularTexture && this.directionalShadows)
		{
			if (!this.albedoMaterial)
			{
				this.albedoMaterial = new Material(Shader.Find("Hidden/CombineCaptures"));
			}
			this.albedoMaterial.SetTexture("_SpecTex", this.specularTexture);
			this.albedoMaterial.SetTexture("_LightTex", this.directionalLightTexture);
			Graphics.Blit(src, this.specShadowsTexture, this.albedoMaterial, 1);
		}
		Graphics.Blit(src, dest);
	}

	// Token: 0x0400117F RID: 4479
	public bool normals;

	// Token: 0x04001180 RID: 4480
	public bool albedo = true;

	// Token: 0x04001181 RID: 4481
	public bool depth;

	// Token: 0x04001182 RID: 4482
	public bool directionalShadows;

	// Token: 0x04001183 RID: 4483
	private Camera cam;

	// Token: 0x04001184 RID: 4484
	public RenderTexture normalsTexture;

	// Token: 0x04001185 RID: 4485
	public RenderTexture albedoTexture;

	// Token: 0x04001186 RID: 4486
	public RenderTexture smoothnessTexture;

	// Token: 0x04001187 RID: 4487
	public RenderTexture pointLightTexture;

	// Token: 0x04001188 RID: 4488
	public RenderTexture directionalLightTexture;

	// Token: 0x04001189 RID: 4489
	public RenderTexture specularTexture;

	// Token: 0x0400118A RID: 4490
	public RenderTexture albedoTempTexture;

	// Token: 0x0400118B RID: 4491
	public RenderTexture depthTexture;

	// Token: 0x0400118C RID: 4492
	public RenderTexture specShadowsTexture;

	// Token: 0x0400118D RID: 4493
	public Shader normalsShader;

	// Token: 0x0400118E RID: 4494
	public Shader smoothnessShader;

	// Token: 0x0400118F RID: 4495
	public Shader depthShader;

	// Token: 0x04001190 RID: 4496
	public Shader pointBakeShader;

	// Token: 0x04001191 RID: 4497
	public Shader directionalLightShader;

	// Token: 0x04001192 RID: 4498
	private Material albedoMaterial;

	// Token: 0x04001193 RID: 4499
	public int depthWidth = 2048;

	// Token: 0x04001194 RID: 4500
	public int depthHeight = 2048;

	// Token: 0x04001195 RID: 4501
	public int albedoWidth = 2048;

	// Token: 0x04001196 RID: 4502
	public int albedoHeight = 2048;

	// Token: 0x04001197 RID: 4503
	public int normalWidth = 2048;

	// Token: 0x04001198 RID: 4504
	public int normalHeight = 2048;

	// Token: 0x04001199 RID: 4505
	public int shadowWidth = 2048;

	// Token: 0x0400119A RID: 4506
	public int shadowHeight = 2048;

	// Token: 0x0400119B RID: 4507
	private bool doAlbedo;

	// Token: 0x0400119C RID: 4508
	public Transform lightTransform;
}
