//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); }
/// <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); }
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); }