コード例 #1
0
    private void Update()
    {
        if (!_tex || _tex.width != Resolution)
        {
            _tex            = new Texture2D(Resolution, Resolution, TextureFormat.RGBA32, mipChain: false, linear: true);
            _tex.wrapMode   = TextureWrapMode.Clamp;
            _tex.filterMode = FilterMode.Trilinear;

            QuadRenderer.material.mainTexture = _tex;
        }

        NativeArray <Color32> color = _tex.GetRawTextureData <Color32>();

        SDFBehaviour sdfBehaviour = GetComponent <SDFBehaviour>();
        var          node         = sdfBehaviour.GetNode();

        if (node == null)
        {
            return;
        }

        NativeSDF sdf = node.Compile(Allocator.TempJob);

        Vector3 rectCorner = QuadRenderer.transform.TransformPoint(new Vector3(-0.5f, -0.5f) + new Vector3(0.5f, 0.5f) / Resolution);
        Vector3 rectXAxis  = QuadRenderer.transform.TransformVector(Vector3.right) / Resolution;
        Vector3 rectYAxis  = QuadRenderer.transform.TransformVector(Vector3.up) / Resolution;

        new BuildTextureJob()
        {
            SDF          = sdf,
            Texture      = color,
            TextureWidth = Resolution,
            RectCorner   = rectCorner,
            RectXAxis    = rectXAxis,
            RectYAxis    = rectYAxis
        }.Schedule(color.Length, 32).Complete();

        _tex.Apply(updateMipmaps: false, makeNoLongerReadable: false);

        sdf.Dispose();
    }