void Awake() { m_Convolution = new Convolution2D <float>(Kernels.Short.Sobel.X.ToFloat()); SetupTextures(); var inputData = new Image <Color24>(m_InputTexture); m_GreyscaleJob = new GreyscaleByLuminanceFloatJob24(inputData.Buffer, m_GrayscaleInput.Buffer, LuminanceWeights.FloatNormalized); m_ConvolveJob = new FloatWithFloatConvolveJob(m_Convolution, m_GrayscaleInput, m_Convolved); m_BiasedReluJob = new BiasedReluActivationCopyJob(m_Convolved.Buffer, m_Activated.Buffer, 0f); m_JobHandle = m_GreyscaleJob.Schedule(m_GrayscaleInput.Buffer.Length, 4096); m_JobHandle = m_ConvolveJob.Schedule(m_JobHandle); m_JobHandle = m_BiasedReluJob.Schedule(m_Convolved.Buffer.Length, 4096, m_JobHandle); }
void OnInputUpdate(Image <Color24> rgbImage, JobHandle dependency) { m_Dependency = dependency; if (m_OutputImage == default(Image <float>)) { m_OutputImage = new Image <float>(rgbImage.Width, rgbImage.Height); } else if (m_OutputImage.Width != rgbImage.Width || m_OutputImage.Height != rgbImage.Height) { Debug.Log("output image dimensions different from input"); m_OutputImage.Dispose(); m_OutputImage = new Image <float>(rgbImage.Width, rgbImage.Height); } Debug.Log("on input update event in grayscale conversion node"); m_InputImage = rgbImage; m_Job = new GreyscaleByLuminanceFloatJob24() { Weights = LuminanceWeights.FloatNormalized, InputTexture = rgbImage.Buffer, Grayscale = m_OutputImage.Buffer }; UpdateData(); }
void Update() { switch (Time.frameCount) { case 3: m_GreyscaleJob = new GreyscaleByLuminanceFloatJob24(m_InputTexture.GetRawTextureData <Color24>(), m_GrayscaleInput.Buffer, LuminanceWeights.FloatNormalized); m_GrayScaleJobHandle = m_GreyscaleJob.Schedule(m_GrayscaleInput.Buffer.Length, 1024); var width = m_InputTexture.width; var height = m_InputTexture.width; m_GaussJob = new FloatWithFloatConvolveJob() { Convolution = m_GaussianBlur3x3, Input = new Image <float>(m_GreyscaleJob.Grayscale, width, height), Output = m_GaussInput }; m_GrayScaleJobHandle = m_GaussJob.Schedule(m_GrayScaleJobHandle); break; case 8: m_GrayScaleJobHandle.Complete(); m_GrayscaleInputTexture.LoadRawTextureData(m_GreyscaleJob.Grayscale); m_GrayscaleInputTexture.Apply(); m_GaussTexture.LoadImageData(m_GaussJob.Output); m_Sobel = new SobelFloatPrototype(m_GaussJob.Output); break; case 9: m_JobHandle = m_Sobel.Schedule(m_GrayScaleJobHandle); break; case 13: m_JobHandle.Complete(); m_Sobel.OnJobsComplete(); m_KernelOneRenderer.material.mainTexture = m_Sobel.ConvolvedTextureOne; m_KernelTwoRenderer.material.mainTexture = m_Sobel.ConvolvedTextureTwo; m_ConvolutionOutputRenderer.material.mainTexture = m_Sobel.ConvolutionOutputTexture; break; case 15: m_JobHandle = m_Sobel.Schedule(m_GrayScaleJobHandle); break; case 22: m_JobHandle.Complete(); m_Sobel.Complete(); m_Sobel.OnJobsComplete(); break; case 24: m_KernelOneRenderer.material.mainTexture = m_Sobel.ConvolvedTextureOne; m_KernelTwoRenderer.material.mainTexture = m_Sobel.ConvolvedTextureTwo; m_ConvolutionOutputRenderer.material.mainTexture = m_Sobel.ConvolutionOutputTexture; break; } }