//require a PRNG compute buffer for camera.
    public ComputeBuffer RequirePRNGStates(Camera vCamera)
    {
        var CameraId = vCamera.GetInstanceID();

        if (_PRNGStates.TryGetValue(CameraId, out var OutBuffer))
        {
            return(OutBuffer);
        }

        OutBuffer = new ComputeBuffer(vCamera.pixelWidth * vCamera.pixelHeight, 4 * 4, ComputeBufferType.Structured, ComputeBufferMode.Immutable);

        var Mt19937 = new MersenneTwister.MT.mt19937ar_cok_opt_t();

        Mt19937.init_genrand((uint)System.DateTime.Now.Ticks);

        var Data = new uint[vCamera.pixelWidth * vCamera.pixelHeight * 4];

        for (var i = 0; i < vCamera.pixelWidth * vCamera.pixelHeight * 4; ++i)
        {
            Data[i] = Mt19937.genrand_int32();
        }
        OutBuffer.SetData(Data);

        _PRNGStates.Add(CameraId, OutBuffer);
        return(OutBuffer);
    }
Beispiel #2
0
    /// <summary>
    /// require a PRNG compute buffer for camera.
    /// </summary>
    /// <param name="width">the buffer width.</param>
    /// <param name="height">the buffer height.</param>
    /// <returns></returns>
    public ComputeBuffer RequirePRNGStates(Camera camera)
    {
        var id = camera.GetInstanceID();

        if (_PRNGStates.TryGetValue(id, out var buffer))
        {
            return(buffer);
        }

        buffer = new ComputeBuffer(camera.pixelWidth * camera.pixelHeight, 4 * 4, ComputeBufferType.Structured, ComputeBufferMode.Immutable);

        var _mt19937 = new MersenneTwister.MT.mt19937ar_cok_opt_t();

        _mt19937.init_genrand((uint)System.DateTime.Now.Ticks);

        var data = new uint[camera.pixelWidth * camera.pixelHeight * 4];

        for (var i = 0; i < camera.pixelWidth * camera.pixelHeight * 4; ++i)
        {
            data[i] = _mt19937.genrand_int32();
        }
        buffer.SetData(data);

        _PRNGStates.Add(id, buffer);
        return(buffer);
    }
Beispiel #3
0
    void CreatePRNGStates()
    {
        var mapSize = renderTextures[0].width;

        PRNGStates = new ComputeBuffer(mapSize * mapSize, 4 * 4, ComputeBufferType.Structured, ComputeBufferMode.Immutable);

        var _mt19937 = new MersenneTwister.MT.mt19937ar_cok_opt_t();

        _mt19937.init_genrand((uint)System.DateTime.Now.Ticks);

        var data = new uint[mapSize * mapSize * 4];

        for (var i = 0; i < mapSize * mapSize * 4; ++i)
        {
            data[i] = _mt19937.genrand_int32();
        }

        PRNGStates.SetData(data);
    }