public CorrectorRenderThread(int index, IIntersectionEngine device, RayEngineScene scn, bool lowLatency, CorrectorImageFilm pixelDevice, GlobalSamplingContext sc, IFrameManager fM) : base(index, scn) { this.pixelDevice = pixelDevice; this.frameManager = fM; Init(device, lowLatency, pixelDevice, sc); }
private void Init(IIntersectionEngine device, bool lowLatency, CorrectorImageFilm pixelDevice, GlobalSamplingContext sc) { this.samplers = sc; intersectionDevice = device; width = pixelDevice.Width; height = pixelDevice.Height; var rayBufferSize = lowLatency ? (RayBuffer.RayBufferSize / 8) : RayBuffer.RayBufferSize; rayBuffers = new RayBuffer[DeviceRenderBufferCount]; this.pixelDevice = pixelDevice; for (int i = 0; i < DeviceRenderBufferCount; i++) { rayBuffers[i] = new RayBuffer(rayBufferSize); rayBuffers[i].UserData = threadIndex; } _pathRayProcessors = new PathSampleProcessor(scene.MaxPaths, (RayEngineScene)scene, pixelDevice, samplers); //_pathRayProcessors.RequestSamplesFunc = (f)=>{ GenerateIm} renderThread = null; }
public virtual void Initialize() { this.deviceManager = new DeviceManager(); this.frameManager = new FrameManager(this.OutputSettings, this.QualitySettings, Scene); this.deviceManager.Init(lowLatency, Scene); //this.frameManager.SetDevices(deviceManager, Film); this.film = new CorrectorImageFilm(Width, Height); this.engine = new CorrectorRenderer(CurrentFrame, film); this.deviceManager.RenderThreads = engine.CreateThreads(this.RenderThreadsCount, deviceManager.IntersectionDevice, frameManager); Tracer.TraceLine("Starting Corrector [Renderer type : {0}] ( Preprocessing : {1} )", engineType, false); //Tracer.TraceLine("..Sampler Type [{0}]", deviceManager.RenderThreads.First().sampler.GetType().Name); Tracer.TraceLine("..Image Film Type [{0}]", film.GetType().Name); CommandManager.Instance.OnExecuteCommand += command => { if (command.Name == "init.config") { } return new EngineCommandContext() { Success = true }; }; }
public void Merge(CorrectorImageFilm b) { if (b.pixelData.Length != pixelData.Length) { throw new ArgumentException("Invalid film size"); } for (int index = 0; index < b.pixelData.Length; index++) { var pixelA = pixelData[index]; var pixelB = b.pixelData[index]; pixelData[index] = new SamplePixel() { Radiance = (pixelA.Radiance + pixelB.Radiance) * 0.5f, Weight = (pixelA.Weight + pixelB.Weight) * 0.5f, }; } }