Esempio n. 1
0
        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;
            }
        }