예제 #1
0
    public Texture Render()
    {
        var OldTarget = Source.targetTexture;

        Source.targetTexture = Target;
        Source.Render();
        Source.targetTexture = OldTarget;
        OnTargetChanged.Invoke(Target);
        return(Target);
    }
    void Update()
    {
        if (Decoder == null)
        {
            return;
        }

        var NewFrameNumber = Decoder.GetNextFrame(ref Planes, ref PlaneFormats);

        if (!NewFrameNumber.HasValue)
        {
            return;
        }
        if (EnableDebug)
        {
            Debug.Log(this.name + " decoded frame " + NewFrameNumber.Value + ". Planes x" + Planes.Count);
        }

        OnDepthTextureUpdated.Invoke(Planes[0]);

        //	update material
        if (CloudMaterial != null && LastPacketMeta != null)
        {
            UpdateMaterial(CloudMaterial, LastPacketMeta, Planes[0]);
        }
    }
예제 #3
0
    void Update()
    {
        try
        {
            var renderer    = Renderer as GarboDev.Renderer;
            var FrameArray  = renderer.GetFrame();
            var PixelsArray = Frame2D.GetPixels();

            unsafe
            {
                fixed(uint *Frame = &FrameArray[0])
                {
                    fixed(Color *Pixels = &PixelsArray[0])
                    {
                        ThreadedCopy(Frame, Pixels, Frame2D.width, Frame2D.height, FrameArray.Length, PixelsArray.Length);
                    }
                }
            }

            Frame2D.SetPixels(PixelsArray);
            Frame2D.Apply();

            if (FrameTarget != null)
            {
                Graphics.Blit(Frame2D, FrameTarget);
            }

            OnTextureUpdated.Invoke(Frame2D);
        }
        catch
        {
        }
    }
예제 #4
0
    void Update()
    {
        if (Webcam == null)
        {
            try
            {
                ListDevices();

                if (WebcamWidth > 0 && WebcamHeight > 0)
                {
                    Webcam = new WebCamTexture(WebcamName, WebcamWidth, WebcamHeight);
                }
                else
                {
                    Webcam = new WebCamTexture(WebcamName);
                }
                Webcam.Play();
                if (!Webcam.isPlaying)
                {
                    throw new System.Exception("No webcam");
                }
            }
            catch {
                Webcam = null;
            }
        }

        if (Webcam != null && Webcam.didUpdateThisFrame)
        {
            WebcamWidth  = Webcam.width;
            WebcamHeight = Webcam.height;
            OnNewFrameTexture.Invoke(Webcam as Texture);
            OnNewFrameWebCamTexture.Invoke(Webcam);
        }
    }
예제 #5
0
    static void UpdateTexture(ref Texture2D RamTexture, UnityEvent_Texture Event, byte[] Ram, ComponentSize Size, int Width = 256)
    {
        var DataLength = Ram.Length / (int)Size;
        var Height     = DataLength / Width;

        if (!Mathf.IsPowerOfTwo(Height))
        {
            Height = Mathf.NextPowerOfTwo(Height);
        }

        if (RamTexture == null || RamTexture.width != Width || RamTexture.height != Height)
        {
            RamTexture = null;
        }
        if (RamTexture == null)
        {
            var Format = Size == ComponentSize.Eight ? TextureFormat.R8 : TextureFormat.RG16;
            RamTexture            = new Texture2D(Width, Height, Format, false);
            RamTexture.filterMode = FilterMode.Point;
            RamTexture.wrapMode   = TextureWrapMode.Clamp;
        }

        var PixelData = GetTextureSizedBytes(RamTexture, Ram);

        RamTexture.LoadRawTextureData(PixelData);

        RamTexture.Apply();
        Event.Invoke(RamTexture);
    }
예제 #6
0
 void Update()
 {
     for (int i = 0; i < IterationsPerFrame; i++)
     {
         Iteration();
     }
     BestHitOutput.Apply(false, false);
     OnHitOutput.Invoke(BestHitOutput);
 }
예제 #7
0
    public void OnPixels(float[] Bytes, Vector2 Size, int ChannelCount)
    {
        //	convert to colours
        var Colours = new Color[(int)Size.x * (int)Size.y];

        Output = new Texture2D((int)Size.x, (int)Size.y, OutputFormat, false);
        OnError.Invoke("" + Colours.Length + " pixels");

        var TargetColours = Output.GetPixels();

        if (Colours.Length != TargetColours.Length)
        {
            OnError.Invoke("Colour length(" + Colours.Length + ") mis match to texture (" + TargetColours.Length + ")");
        }

        try
        {
            for (int p = 0; p < Colours.Length; p++)
            {
                var i = (p * ChannelCount);
                i %= ChannelCount * (int)Size.x * MaxRowsToRead;

                if (ReadBackwards)
                {
                    i = Bytes.Length - 4 - i;
                }

                Colours[p].r = Bytes[i + 0];
                Colours[p].g = Bytes[i + 1];
                Colours[p].b = Bytes[i + 2];
                Colours[p].a = Bytes[i + 3];

                if (ForceAlphaOne)
                {
                    Colours[p].a = 1;
                }
            }
        }
        catch (System.Exception e)
        {
            OnError.Invoke(e.Message);
        }

        /*
         * var ColourBytes = new byte[Colours.Length * 4 * 4];
         * Buffer.BlockCopy(floats, 0, bytes, 0, bytes.Length);
         * texture.LoadRawTextureData(bytes);
         * texture.Apply();
         * Output.LoadRawTextureData(
         */
        Output.SetPixels(Colours, 0);
        Output.Apply();
        OnOutputChanged.Invoke(Output);
    }
    public void Generate1DTexture()
    {
        if (Target == null)
        {
            Target            = new Texture2D(TargetWidth, 16, TargetFormat, false);
            Target.filterMode = FilterMode.Point;
        }

        var w = Target.width;

        var   Colour       = new Color(0, 0, 0);
        float Range        = Mathf.Max(1, w - 1);
        var   CurveTimeMin = Curve.keys [0].time;
        var   CurveTimeMax = Curve.keys [Curve.length - 1].time;

        var Pixels = Target.GetPixels();

        for (int x = 0; x < w; x++)
        {
            var xf    = x / Range;
            var Time  = Mathf.Lerp(CurveTimeMin, CurveTimeMax, xf);
            var Value = Curve.Evaluate(Time);

            //	todo; scale value to min/max of curve? maybe neccessary for non-float textures

            Colour.r = Value;
            Colour.g = Value;
            Colour.b = Value;

            for (int y = 0; y < Target.height; y++)
            {
                Pixels [x + y * w] = Colour;
            }
        }

        Target.SetPixels(Pixels);
        Target.Apply();
        OnGenerated.Invoke(Target);
    }
 void OnEnable()
 {
     //	invoke event, but only generate texture if required
     OnGenerated.Invoke(GetTexture());
 }
예제 #10
0
 void BlitFrame()
 {
     Graphics.Blit(null, RenderedFrame, FrameRenderer);
     OnTextureUpdated.Invoke(RenderedFrame);
 }
예제 #11
0
    void Update()
    {
        var OutputImage = ProcessImage();

        OnChanged.Invoke(OutputImage);
    }