public int PeformFFT(RenderTexture[] data0, RenderTexture[] data1, RenderTexture[] data2) { if (ButterFlyLookupTable == null) { return(-1); } if (SystemInfo.supportedRenderTargetCount < 3) { throw new InvalidOperationException("System does not support at least 3 render targets"); } var pass0 = new RenderTexture[] { data0[0], data1[0], data2[0] }; var pass1 = new RenderTexture[] { data0[1], data1[1], data2[1] }; int i; int idx = 0; int idx1; int j = 0; for (i = 0; i < Passes; i++, j++) { idx = j % 2; idx1 = (j + 1) % 2; FourierMaterial.SetTexture("_ButterFlyLookUp", ButterFlyLookupTable[i]); FourierMaterial.SetTexture("_ReadBuffer0", data0[idx1]); FourierMaterial.SetTexture("_ReadBuffer1", data1[idx1]); FourierMaterial.SetTexture("_ReadBuffer2", data2[idx1]); if (idx == 0) { RTUtility.MultiTargetBlit(pass0, FourierMaterial, PASS_X_3); } else { RTUtility.MultiTargetBlit(pass1, FourierMaterial, PASS_X_3); } } for (i = 0; i < Passes; i++, j++) { idx = j % 2; idx1 = (j + 1) % 2; FourierMaterial.SetTexture("_ButterFlyLookUp", ButterFlyLookupTable[i]); FourierMaterial.SetTexture("_ReadBuffer0", data0[idx1]); FourierMaterial.SetTexture("_ReadBuffer1", data1[idx1]); FourierMaterial.SetTexture("_ReadBuffer2", data2[idx1]); if (idx == 0) { RTUtility.MultiTargetBlit(pass0, FourierMaterial, PASS_Y_3); } else { RTUtility.MultiTargetBlit(pass1, FourierMaterial, PASS_Y_3); } } return(idx); }
/// <summary> /// Initialize the enabled buffers with the current conditions spectrum for this time. /// </summary> protected override void Initilize(WaveSpectrumCondition condition, float time) { if (InitMaterial == null) { throw new InvalidOperationException("GPU buffer has not had its Init material set"); } if (InitPass == -1) { throw new InvalidOperationException("GPU buffer has not had its Init material pass set"); } InitMaterial.SetTexture("Ceto_Spectrum01", (condition.Spectrum01 != null) ? condition.Spectrum01 : Texture2D.blackTexture); InitMaterial.SetTexture("Ceto_Spectrum23", (condition.Spectrum23 != null) ? condition.Spectrum23 : Texture2D.blackTexture); InitMaterial.SetTexture("Ceto_WTable", condition.WTable); InitMaterial.SetVector("Ceto_InverseGridSizes", condition.InverseGridSizes()); InitMaterial.SetVector("Ceto_GridSizes", condition.GridSizes); InitMaterial.SetVector("Ceto_Offset", m_offset); InitMaterial.SetFloat("Ceto_Time", time); m_tmpList.Clear(); int count = m_buffers.Length; for (int i = 0; i < count; i++) { if (!m_buffers[i].disabled) { m_tmpList.Add(m_buffers[i].data[1]); } } count = m_tmpList.Count; if (count == 0) { return; } else if (count == 1) { Graphics.Blit(null, m_tmpList[0], InitMaterial, InitPass); } else if (count == 2) { m_tmpBuffer2[0] = m_tmpList[0].colorBuffer; m_tmpBuffer2[1] = m_tmpList[1].colorBuffer; RTUtility.MultiTargetBlit(m_tmpBuffer2, m_tmpList[0].depthBuffer, InitMaterial, InitPass); } else if (count == 3) { m_tmpBuffer3[0] = m_tmpList[0].colorBuffer; m_tmpBuffer3[1] = m_tmpList[1].colorBuffer; m_tmpBuffer3[2] = m_tmpList[2].colorBuffer; RTUtility.MultiTargetBlit(m_tmpBuffer3, m_tmpList[0].depthBuffer, InitMaterial, InitPass); } else if (count == 4) { m_tmpBuffer4[0] = m_tmpList[0].colorBuffer; m_tmpBuffer4[1] = m_tmpList[1].colorBuffer; m_tmpBuffer4[2] = m_tmpList[2].colorBuffer; m_tmpBuffer4[3] = m_tmpList[3].colorBuffer; RTUtility.MultiTargetBlit(m_tmpBuffer4, m_tmpList[0].depthBuffer, InitMaterial, InitPass); } }
public int PeformFFT(RenderTexture[] data0, RenderTexture[] data1, RenderTexture[] data2, RenderTexture[] data3) { if (this.m_butterflyLookupTable == null) { return(-1); } if (SystemInfo.supportedRenderTargetCount < 4) { throw new InvalidOperationException("System does not support at least 4 render targets"); } this.m_pass0RT4[0] = data0[0].colorBuffer; this.m_pass0RT4[1] = data1[0].colorBuffer; this.m_pass0RT4[2] = data2[0].colorBuffer; this.m_pass0RT4[3] = data3[0].colorBuffer; this.m_pass1RT4[0] = data0[1].colorBuffer; this.m_pass1RT4[1] = data1[1].colorBuffer; this.m_pass1RT4[2] = data2[1].colorBuffer; this.m_pass1RT4[3] = data3[1].colorBuffer; RenderBuffer depthBuffer = data0[0].depthBuffer; RenderBuffer depthBuffer2 = data0[1].depthBuffer; int num = 0; int num2 = 0; int i = 0; while (i < this.m_passes) { num = num2 % 2; int num3 = (num2 + 1) % 2; this.m_fourier.SetTexture("Ceto_ButterFlyLookUp", this.m_butterflyLookupTable[i]); this.m_fourier.SetTexture("Ceto_ReadBuffer0", data0[num3]); this.m_fourier.SetTexture("Ceto_ReadBuffer1", data1[num3]); this.m_fourier.SetTexture("Ceto_ReadBuffer2", data2[num3]); this.m_fourier.SetTexture("Ceto_ReadBuffer3", data3[num3]); if (num == 0) { RTUtility.MultiTargetBlit(this.m_pass0RT4, depthBuffer, this.m_fourier, 6); } else { RTUtility.MultiTargetBlit(this.m_pass1RT4, depthBuffer2, this.m_fourier, 6); } i++; num2++; } i = 0; while (i < this.m_passes) { num = num2 % 2; int num3 = (num2 + 1) % 2; this.m_fourier.SetTexture("Ceto_ButterFlyLookUp", this.m_butterflyLookupTable[i]); this.m_fourier.SetTexture("Ceto_ReadBuffer0", data0[num3]); this.m_fourier.SetTexture("Ceto_ReadBuffer1", data1[num3]); this.m_fourier.SetTexture("Ceto_ReadBuffer2", data2[num3]); this.m_fourier.SetTexture("Ceto_ReadBuffer3", data3[num3]); if (num == 0) { RTUtility.MultiTargetBlit(this.m_pass0RT4, depthBuffer, this.m_fourier, 7); } else { RTUtility.MultiTargetBlit(this.m_pass1RT4, depthBuffer2, this.m_fourier, 7); } i++; num2++; } return(num); }
/// <summary> /// Perform fourier transform on four textures. /// </summary> public int PeformFFT(RenderTexture[] data0, RenderTexture[] data1, RenderTexture[] data2, RenderTexture[] data3) { if (m_butterflyLookupTable == null) { return(-1); } if (SystemInfo.supportedRenderTargetCount < 4) { throw new InvalidOperationException("System does not support at least 4 render targets"); } //RenderTexture[] pass0 = new RenderTexture[] { data0[0], data1[0], data2[0], data3[0] }; //RenderTexture[] pass1 = new RenderTexture[] { data0[1], data1[1], data2[1], data3[1] }; m_pass0RT4[0] = data0[0].colorBuffer; m_pass0RT4[1] = data1[0].colorBuffer; m_pass0RT4[2] = data2[0].colorBuffer; m_pass0RT4[3] = data3[0].colorBuffer; m_pass1RT4[0] = data0[1].colorBuffer; m_pass1RT4[1] = data1[1].colorBuffer; m_pass1RT4[2] = data2[1].colorBuffer; m_pass1RT4[3] = data3[1].colorBuffer; RenderBuffer depth0 = data0[0].depthBuffer; RenderBuffer depth1 = data0[1].depthBuffer; int i; int idx = 0; int idx1; int j = 0; for (i = 0; i < m_passes; i++, j++) { idx = j % 2; idx1 = (j + 1) % 2; m_fourier.SetTexture("Ceto_ButterFlyLookUp", m_butterflyLookupTable[i]); m_fourier.SetTexture("Ceto_ReadBuffer0", data0[idx1]); m_fourier.SetTexture("Ceto_ReadBuffer1", data1[idx1]); m_fourier.SetTexture("Ceto_ReadBuffer2", data2[idx1]); m_fourier.SetTexture("Ceto_ReadBuffer3", data3[idx1]); //if (idx == 0) // RTUtility.MultiTargetBlit(pass0, m_fourier, PASS_X_4); //else // RTUtility.MultiTargetBlit(pass1, m_fourier, PASS_X_4); if (idx == 0) { RTUtility.MultiTargetBlit(m_pass0RT4, depth0, m_fourier, PASS_X_4); } else { RTUtility.MultiTargetBlit(m_pass1RT4, depth1, m_fourier, PASS_X_4); } } for (i = 0; i < m_passes; i++, j++) { idx = j % 2; idx1 = (j + 1) % 2; m_fourier.SetTexture("Ceto_ButterFlyLookUp", m_butterflyLookupTable[i]); m_fourier.SetTexture("Ceto_ReadBuffer0", data0[idx1]); m_fourier.SetTexture("Ceto_ReadBuffer1", data1[idx1]); m_fourier.SetTexture("Ceto_ReadBuffer2", data2[idx1]); m_fourier.SetTexture("Ceto_ReadBuffer3", data3[idx1]); //if (idx == 0) // RTUtility.MultiTargetBlit(pass0, m_fourier, PASS_Y_4); //else // RTUtility.MultiTargetBlit(pass1, m_fourier, PASS_Y_4); if (idx == 0) { RTUtility.MultiTargetBlit(m_pass0RT4, depth0, m_fourier, PASS_Y_4); } else { RTUtility.MultiTargetBlit(m_pass1RT4, depth1, m_fourier, PASS_Y_4); } } return(idx); }