11/* **************************************************************************
2- * Copyright 1998-2020 by authors (see AUTHORS.txt) *
2+ * Copyright 1998-2025 by authors (see AUTHORS.txt) *
33 * *
44 * This file is part of LuxCoreRender. *
55 * *
3232#include " slg/engines/tilepathocl/tilepathocl.h"
3333#include " slg/engines/rtpathocl/rtpathocl.h"
3434#include " slg/engines/filesaver/filesaver.h"
35+ #include " slg/film/imagepipeline/plugins/intel_oidn.h"
3536#include " luxcore/luxcore.h"
3637#include " luxcore/luxcoreimpl.h"
3738
@@ -445,7 +446,7 @@ void FilmImpl::DeleteAllImagePipelines() {
445446 renderSession->renderSession ->renderConfig ->DeleteAllFilmImagePipelinesProperties ();
446447 } else
447448 standAloneFilm->SetImagePipelines (NULL );
448-
449+
449450 API_END ();
450451}
451452
@@ -467,7 +468,7 @@ void FilmImpl::AsyncExecuteImagePipeline(const u_int index) {
467468 renderSession->renderSession ->film ->AsyncExecuteImagePipeline (index);
468469 } else
469470 standAloneFilm->AsyncExecuteImagePipeline (index);
470-
471+
471472 API_END ();
472473}
473474
@@ -494,12 +495,28 @@ bool FilmImpl::HasDoneAsyncExecuteImagePipeline() {
494495 result = renderSession->renderSession ->film ->HasDoneAsyncExecuteImagePipeline ();
495496 } else
496497 result = standAloneFilm->HasDoneAsyncExecuteImagePipeline ();
497-
498+
498499 API_RETURN (" {}" , result);
499-
500+
500501 return result;
501502}
502503
504+
505+ void FilmImpl::ApplyOIDN (const u_int index) {
506+ API_BEGIN (" {}" , index);
507+ slg::IntelOIDN oidn (" RT" , 6000 , 0 .f , true );
508+
509+ if (renderSession) {
510+ std::unique_lock<std::mutex> lock (renderSession->renderSession ->filmMutex );
511+
512+ oidn.Apply (*renderSession->renderSession ->film , index);
513+ } else {
514+ oidn.Apply (*standAloneFilm, index);
515+ }
516+
517+ API_END ();
518+ }
519+
503520// ------------------------------------------------------------------------------
504521// CameraImpl
505522// ------------------------------------------------------------------------------
@@ -1500,7 +1517,7 @@ RenderState *RenderSessionImpl::GetRenderState() {
15001517 API_BEGIN_NOARGS ();
15011518
15021519 RenderState *result = new RenderStateImpl (renderSession->GetRenderState ());
1503-
1520+
15041521 API_RETURN (" {}" , (void *)result);
15051522
15061523 return result;
@@ -1620,7 +1637,7 @@ Film &RenderSessionImpl::GetFilm() {
16201637 API_BEGIN_NOARGS ();
16211638
16221639 Film &result = *film;
1623-
1640+
16241641 API_RETURN (" {}" , (void *)&result);
16251642
16261643 return result;
@@ -1685,8 +1702,9 @@ void RenderSessionImpl::UpdateStats() {
16851702 double totalPerf = 0.0 ;
16861703 for (IntersectionDevice *dev: idevices) {
16871704 const string &devName = dev->GetName ();
1688-
1689- // Append a device index for the case where the same device is used multiple times
1705+
1706+ // Append a device index for the case where the same device is used
1707+ // multiple times
16901708 unsigned int index = devCounters[devName]++;
16911709 const string uniqueName = devName + " -" + ToString (index);
16921710 devicesNames.Add (uniqueName);
@@ -1706,7 +1724,7 @@ void RenderSessionImpl::UpdateStats() {
17061724 stats.Set (Property (prefix + " .memory.used" )((u_longlong)hardDev->GetUsedMemory ()));
17071725 } else {
17081726 stats.Set (Property (prefix + " .memory.total" )(0ull ));
1709- stats.Set (Property (prefix + " .memory.used" )(0ull ));
1727+ stats.Set (Property (prefix + " .memory.used" )(0ull ));
17101728 }
17111729 }
17121730 stats.Set (devicesNames);
0 commit comments