public void ChangeBufferTarget(ImageMeta newTarget, MaterialMeta mat, ShaderProperty.TextureValue parameter, PlaytimePainter painter) { if (newTarget != imgMetaUsingRendTex) { if (materialsUsingRenderTexture.Count > 0) { PlaytimePainter.SetOriginalShader(); } if (imgMetaUsingRendTex != null) { if (imgMetaUsingRendTex.texture2D) { imgMetaUsingRendTex.RenderTexture_To_Texture2D(); } imgMetaUsingRendTex.destination = TexTarget.Texture2D; foreach (var m in materialsUsingRenderTexture) { m.SetTextureOnLastTarget(imgMetaUsingRendTex); } } materialsUsingRenderTexture.Clear(); autodisabledBufferTarget = null; imgMetaUsingRendTex = newTarget; } mat.bufferParameterTarget = parameter; mat.painterTarget = painter; materialsUsingRenderTexture.Add(mat); }
public MaterialMeta GetMaterialDataFor(Material mat) { if (!mat) { return(null); } MaterialMeta meta = null; for (var i = 0; i < matMetas.Count; i++) { var md = matMetas[i]; if (md != null && md.material) { if (md.material != mat) { continue; } meta = md; if (i > 3) { matMetas.Move(i, 0); } break; } else { matMetas.RemoveAt(i); i--; } } if (meta != null) { return(meta); } meta = new MaterialMeta(mat); matMetas.Add(meta); return(meta); }
public void ChangeDestination(TexTarget changeTo, MaterialMeta mat, ShaderProperty.TextureValue parameter, PlaytimePainter painter) { if (changeTo != destination) { if (changeTo == TexTarget.RenderTexture) { if (!renderTexture) { PainterCamera.Inst.ChangeBufferTarget(this, mat, parameter, painter); } TextureToRenderTexture(texture2D); } else { if (!texture2D) { return; } if (!renderTexture) { PainterCamera.Inst.EmptyBufferTarget(); PainterCamera.Inst.DiscardAlphaBuffer(); } else if (painter.initialized && !painter.isBeingDisabled) { // To avoid Clear to black when exiting playmode RenderTexture_To_Texture2D(); Debug.Log("Is being switched to Tex2D"); } } destination = changeTo; painter.SetTextureOnMaterial(this); } else { Debug.Log("Destination already Set"); } }