Blender V5.0
COM_denoised_auxiliary_pass.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#ifdef WITH_OPENIMAGEDENOISE
8
9# include <cstdint>
10# include <memory>
11# include <string>
12
13# include "BLI_map.hh"
14
15# include <OpenImageDenoise/oidn.hpp>
16
17namespace blender::compositor {
18
19class Context;
20class Result;
21
22enum class DenoisedAuxiliaryPassType : uint8_t {
23 Albedo,
24 Normal,
25};
26
27/* ------------------------------------------------------------------------------------------------
28 * Denoised Auxiliary Pass Key.
29 */
30class DenoisedAuxiliaryPassKey {
31 public:
32 DenoisedAuxiliaryPassType type;
33 oidn::Quality quality;
34
35 DenoisedAuxiliaryPassKey(const DenoisedAuxiliaryPassType type, const oidn::Quality quality);
36
37 uint64_t hash() const;
38};
39
40bool operator==(const DenoisedAuxiliaryPassKey &a, const DenoisedAuxiliaryPassKey &b);
41
42/* -------------------------------------------------------------------------------------------------
43 * Denoised Auxiliary Pass.
44 *
45 * A derived result that stores a denoised version of the auxiliary pass of the given type using
46 * the given quality. */
47class DenoisedAuxiliaryPass {
48 public:
49 float *denoised_buffer = nullptr;
50
51 public:
52 DenoisedAuxiliaryPass(Context &context,
53 const Result &pass,
54 const DenoisedAuxiliaryPassType type,
55 const oidn::Quality quality);
56
57 ~DenoisedAuxiliaryPass();
58};
59
60/* ------------------------------------------------------------------------------------------------
61 * Denoised Auxiliary Pass Container.
62 */
64 private:
65 Map<DenoisedAuxiliaryPassKey, std::unique_ptr<DenoisedAuxiliaryPass>> map_;
66
67 public:
68 /* Check if there is an available DenoisedAuxiliaryPass derived resource with the given
69 * parameters in the container, if one exists, return it, otherwise, return a newly created one
70 * and add it to the container. */
71 DenoisedAuxiliaryPass &get(Context &context,
72 const Result &pass,
73 const DenoisedAuxiliaryPassType type,
74 const oidn::Quality quality);
75};
76
77} // namespace blender::compositor
78
79#else
80
81namespace blender::compositor {
82
83/* Building without OIDN, define a dummy container. User is not expected to use it if OIDN is not
84 * available. */
86
87} // namespace blender::compositor
88
89#endif
unsigned long long int uint64_t
bool operator==(const BokehKernelKey &a, const BokehKernelKey &b)
std::shared_ptr< const T > get(const GenericKey &key, FunctionRef< std::unique_ptr< T >()> compute_fn)
#define hash
Definition noise_c.cc:154