Blender
V5.0
source
blender
imbuf
opencolorio
intern
gpu_shader_binder_internal.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
12
13
#pragma once
14
15
#include <list>
16
17
#include "
BLI_string_ref.hh
"
18
#include "
BLI_utility_mixins.hh
"
19
#include "
BLI_vector.hh
"
20
21
#include "
ocio_shader_shared.hh
"
22
23
#if defined(WITH_OPENCOLORIO)
24
# include "
opencolorio.hh
"
25
#endif
26
27
struct
CurveMapping
;
28
namespace
blender::gpu
{
29
class
Shader
;
30
class
UniformBuf
;
31
class
Texture
;
32
}
// namespace blender::gpu
33
34
namespace
blender::ocio
{
35
36
struct
GPUDisplayParameters
;
37
38
namespace
internal
{
39
40
/* Namespaces mnemonic index for texture slot that can be passed as integer argument. */
41
struct
TextureSlot
{
42
enum
{
43
IMAGE
= 0,
44
OVERLAY
= 1,
45
CURVE_MAPPING
= 2,
46
LUTS_OFFSET
= 3,
47
};
48
};
49
50
/* Namespaces mnemonic index for uniform buffer slot that can be passed as integer argument. */
51
struct
UniformBufferSlot
{
52
enum
{
53
DISPLAY
= 0,
54
CURVE_MAPPING
= 1,
55
LUTS
= 2,
56
};
57
};
58
59
struct
GPULutTexture
{
60
blender::gpu::Texture
*
texture
=
nullptr
;
61
std::string
sampler_name
;
62
};
63
64
struct
GPUUniform
{
65
std::string
name
;
66
67
/* They are only required for processors generated by the OpenColorIO. For the simplicity of the
68
* internal API use OpenColorIO type (avoiding making extra copies of the data coming from the
69
* OpenColorIO library). */
70
#if defined(WITH_OPENCOLORIO)
71
OCIO_NAMESPACE::GpuShaderDesc::UniformData
data
;
72
#endif
73
};
74
75
class
GPUTextures
:
NonCopyable
,
NonMovable
{
76
public
:
77
Vector<GPULutTexture>
luts
;
78
79
/* Dummy in case of no overlay. */
80
blender::gpu::Texture
*
dummy
=
nullptr
;
81
82
/* Uniforms */
83
Vector<GPUUniform>
uniforms
;
84
gpu::UniformBuf
*
uniforms_buffer
=
nullptr
;
85
86
~GPUTextures
();
87
94
bool
initialize_common
();
95
};
96
97
class
GPUCurveMappping
:
NonCopyable
,
NonMovable
{
98
public
:
99
int
lut_size
= 0;
100
float
*
lut
=
nullptr
;
101
102
gpu::UniformBuf
*
buffer
=
nullptr
;
103
blender::gpu::Texture
*
texture
=
nullptr
;
104
size_t
cache_id
= 0;
105
106
~GPUCurveMappping
();
107
111
void
rasterize
(
CurveMapping
&curve_mapping);
112
121
bool
initialize_common
(
bool
use_curve_mapping);
122
};
123
124
class
GPUDisplayShader
:
NonCopyable
,
NonMovable
{
125
public
:
126
/* Cached display parameters. */
127
std::string
from_colorspace
;
128
std::string
view
;
129
std::string
display
;
130
std::string
look
;
131
bool
use_curve_mapping
=
false
;
132
bool
use_hdr_buffer
=
false
;
133
bool
use_hdr_display
=
false
;
134
bool
use_display_emulation
=
false
;
135
136
/* The shader is valid and can be bound.
137
* Note that the cache might contain invalid shaders to prevent Blender from attempting to keep
138
* re-trying to build the same failing shader. */
139
bool
is_valid
=
false
;
140
141
gpu::Shader
*
shader
=
nullptr
;
142
143
/* Uniform parameters. */
144
OCIO_GPUParameters
parameters
= {};
145
gpu::UniformBuf
*
parameters_buffer
=
nullptr
;
146
147
GPUTextures
textures
;
148
GPUCurveMappping
curve_mapping
;
149
150
~GPUDisplayShader
();
151
152
bool
matches
(
const
GPUDisplayParameters
&display_parameters)
const
;
153
163
bool
initialize_common
();
164
};
165
166
class
GPUShaderCache
{
167
/* The maximum number of cached shaders. */
168
static
constexpr
int
MAX_SIZE = 4;
169
170
public
:
171
~GPUShaderCache
();
172
177
GPUDisplayShader
*
get
(
const
GPUDisplayParameters
&display_parameters);
178
183
GPUDisplayShader
&
create_default
();
184
188
void
clear
();
189
190
private
:
191
std::list<GPUDisplayShader> cache_;
192
};
193
194
}
// namespace internal
195
}
// namespace blender::ocio
BLI_string_ref.hh
BLI_utility_mixins.hh
BLI_vector.hh
data
BMesh const char void * data
Definition
bmesh_iterators_inline.hh:37
blender::NonCopyable::NonCopyable
NonCopyable(const NonCopyable &other)=delete
blender::NonMovable::NonMovable
NonMovable(NonMovable &&other)=delete
blender::Vector
Definition
BLI_vector.hh:76
blender::gpu::Shader
Definition
gpu_shader_private.hh:43
blender::gpu::Texture
Definition
gpu_texture_private.hh:99
blender::gpu::UniformBuf
Definition
gpu_uniform_buffer_private.hh:25
blender::ocio::internal::GPUCurveMappping
Definition
gpu_shader_binder_internal.hh:97
blender::ocio::internal::GPUCurveMappping::lut
float * lut
Definition
gpu_shader_binder_internal.hh:100
blender::ocio::internal::GPUCurveMappping::texture
blender::gpu::Texture * texture
Definition
gpu_shader_binder_internal.hh:103
blender::ocio::internal::GPUCurveMappping::buffer
gpu::UniformBuf * buffer
Definition
gpu_shader_binder_internal.hh:102
blender::ocio::internal::GPUCurveMappping::rasterize
void rasterize(CurveMapping &curve_mapping)
Definition
gpu_shader_binder.cc:80
blender::ocio::internal::GPUCurveMappping::lut_size
int lut_size
Definition
gpu_shader_binder_internal.hh:99
blender::ocio::internal::GPUCurveMappping::initialize_common
bool initialize_common(bool use_curve_mapping)
Definition
gpu_shader_binder.cc:91
blender::ocio::internal::GPUCurveMappping::~GPUCurveMappping
~GPUCurveMappping()
Definition
gpu_shader_binder.cc:66
blender::ocio::internal::GPUCurveMappping::cache_id
size_t cache_id
Definition
gpu_shader_binder_internal.hh:104
blender::ocio::internal::GPUDisplayShader
Definition
gpu_shader_binder_internal.hh:124
blender::ocio::internal::GPUDisplayShader::matches
bool matches(const GPUDisplayParameters &display_parameters) const
Definition
gpu_shader_binder.cc:131
blender::ocio::internal::GPUDisplayShader::is_valid
bool is_valid
Definition
gpu_shader_binder_internal.hh:139
blender::ocio::internal::GPUDisplayShader::~GPUDisplayShader
~GPUDisplayShader()
Definition
gpu_shader_binder.cc:121
blender::ocio::internal::GPUDisplayShader::look
std::string look
Definition
gpu_shader_binder_internal.hh:130
blender::ocio::internal::GPUDisplayShader::textures
GPUTextures textures
Definition
gpu_shader_binder_internal.hh:147
blender::ocio::internal::GPUDisplayShader::initialize_common
bool initialize_common()
Definition
gpu_shader_binder.cc:142
blender::ocio::internal::GPUDisplayShader::shader
gpu::Shader * shader
Definition
gpu_shader_binder_internal.hh:141
blender::ocio::internal::GPUDisplayShader::parameters_buffer
gpu::UniformBuf * parameters_buffer
Definition
gpu_shader_binder_internal.hh:145
blender::ocio::internal::GPUDisplayShader::view
std::string view
Definition
gpu_shader_binder_internal.hh:128
blender::ocio::internal::GPUDisplayShader::parameters
OCIO_GPUParameters parameters
Definition
gpu_shader_binder_internal.hh:144
blender::ocio::internal::GPUDisplayShader::use_curve_mapping
bool use_curve_mapping
Definition
gpu_shader_binder_internal.hh:131
blender::ocio::internal::GPUDisplayShader::from_colorspace
std::string from_colorspace
Definition
gpu_shader_binder_internal.hh:127
blender::ocio::internal::GPUDisplayShader::use_hdr_display
bool use_hdr_display
Definition
gpu_shader_binder_internal.hh:133
blender::ocio::internal::GPUDisplayShader::display
std::string display
Definition
gpu_shader_binder_internal.hh:129
blender::ocio::internal::GPUDisplayShader::use_hdr_buffer
bool use_hdr_buffer
Definition
gpu_shader_binder_internal.hh:132
blender::ocio::internal::GPUDisplayShader::use_display_emulation
bool use_display_emulation
Definition
gpu_shader_binder_internal.hh:134
blender::ocio::internal::GPUDisplayShader::curve_mapping
GPUCurveMappping curve_mapping
Definition
gpu_shader_binder_internal.hh:148
blender::ocio::internal::GPUShaderCache
Definition
gpu_shader_binder_internal.hh:166
blender::ocio::internal::GPUShaderCache::get
GPUDisplayShader * get(const GPUDisplayParameters &display_parameters)
Definition
gpu_shader_binder.cc:168
blender::ocio::internal::GPUShaderCache::clear
void clear()
Definition
gpu_shader_binder.cc:195
blender::ocio::internal::GPUShaderCache::~GPUShaderCache
~GPUShaderCache()
Definition
gpu_shader_binder.cc:163
blender::ocio::internal::GPUShaderCache::create_default
GPUDisplayShader & create_default()
Definition
gpu_shader_binder.cc:182
blender::ocio::internal::GPUTextures
Definition
gpu_shader_binder_internal.hh:75
blender::ocio::internal::GPUTextures::dummy
blender::gpu::Texture * dummy
Definition
gpu_shader_binder_internal.hh:80
blender::ocio::internal::GPUTextures::initialize_common
bool initialize_common()
Definition
gpu_shader_binder.cc:50
blender::ocio::internal::GPUTextures::~GPUTextures
~GPUTextures()
Definition
gpu_shader_binder.cc:37
blender::ocio::internal::GPUTextures::uniforms
Vector< GPUUniform > uniforms
Definition
gpu_shader_binder_internal.hh:83
blender::ocio::internal::GPUTextures::luts
Vector< GPULutTexture > luts
Definition
gpu_shader_binder_internal.hh:77
blender::ocio::internal::GPUTextures::uniforms_buffer
gpu::UniformBuf * uniforms_buffer
Definition
gpu_shader_binder_internal.hh:84
blender::gpu
Definition
blf_internal_types.hh:32
blender::ocio::internal
Definition
gpu_shader_binder.cc:32
blender::ocio
Definition
BLF_api.hh:35
ocio_shader_shared.hh
opencolorio.hh
CurveMapping
Definition
DNA_color_types.h:63
OCIO_GPUParameters
Definition
ocio_shader_shared.hh:33
blender::ocio::GPUDisplayParameters
Definition
OCIO_gpu_shader_binder.hh:38
blender::ocio::internal::GPULutTexture
Definition
gpu_shader_binder_internal.hh:59
blender::ocio::internal::GPULutTexture::sampler_name
std::string sampler_name
Definition
gpu_shader_binder_internal.hh:61
blender::ocio::internal::GPULutTexture::texture
blender::gpu::Texture * texture
Definition
gpu_shader_binder_internal.hh:60
blender::ocio::internal::GPUUniform
Definition
gpu_shader_binder_internal.hh:64
blender::ocio::internal::GPUUniform::name
std::string name
Definition
gpu_shader_binder_internal.hh:65
blender::ocio::internal::TextureSlot
Definition
gpu_shader_binder_internal.hh:41
blender::ocio::internal::TextureSlot::OVERLAY
@ OVERLAY
Definition
gpu_shader_binder_internal.hh:44
blender::ocio::internal::TextureSlot::CURVE_MAPPING
@ CURVE_MAPPING
Definition
gpu_shader_binder_internal.hh:45
blender::ocio::internal::TextureSlot::IMAGE
@ IMAGE
Definition
gpu_shader_binder_internal.hh:43
blender::ocio::internal::TextureSlot::LUTS_OFFSET
@ LUTS_OFFSET
Definition
gpu_shader_binder_internal.hh:46
blender::ocio::internal::UniformBufferSlot
Definition
gpu_shader_binder_internal.hh:51
blender::ocio::internal::UniformBufferSlot::CURVE_MAPPING
@ CURVE_MAPPING
Definition
gpu_shader_binder_internal.hh:54
blender::ocio::internal::UniformBufferSlot::DISPLAY
@ DISPLAY
Definition
gpu_shader_binder_internal.hh:53
blender::ocio::internal::UniformBufferSlot::LUTS
@ LUTS
Definition
gpu_shader_binder_internal.hh:55
Generated on
for Blender by
doxygen
1.16.1