Blender
V4.5
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
struct
GPUUniformBuf;
29
struct
GPUShader;
30
struct
GPUTexture;
31
32
namespace
blender::ocio
{
33
34
struct
GPUDisplayParameters
;
35
36
namespace
internal
{
37
38
/* Namespaces mnemonic index for texture slot that can be passed as integer argument. */
39
struct
TextureSlot
{
40
enum
{
41
IMAGE
= 0,
42
OVERLAY
= 1,
43
CURVE_MAPPING
= 2,
44
LUTS_OFFSET
= 3,
45
};
46
};
47
48
/* Namespaces mnemonic index for uniform buffer slot that can be passed as integer argument. */
49
struct
UniformBufferSlot
{
50
enum
{
51
DISPLAY
= 0,
52
CURVE_MAPPING
= 1,
53
LUTS
= 2,
54
};
55
};
56
57
struct
GPULutTexture
{
58
GPUTexture *
texture
=
nullptr
;
59
std::string
sampler_name
;
60
};
61
62
struct
GPUUniform
{
63
std::string
name
;
64
65
/* They are only required for processors generated by the OpenColorIO. For the simplicity of the
66
* internal API use OpenColorIO type (avoiding making extra copies of the data coming from the
67
* OpenColorIO library). */
68
#if defined(WITH_OPENCOLORIO)
69
OCIO_NAMESPACE::GpuShaderDesc::UniformData
data
;
70
#endif
71
};
72
73
class
GPUTextures
:
NonCopyable
,
NonMovable
{
74
public
:
75
Vector<GPULutTexture>
luts
;
76
77
/* Dummy in case of no overlay. */
78
GPUTexture *
dummy
=
nullptr
;
79
80
/* Uniforms */
81
Vector<GPUUniform>
uniforms
;
82
GPUUniformBuf *
uniforms_buffer
=
nullptr
;
83
84
~GPUTextures
();
85
92
bool
initialize_common
();
93
};
94
95
class
GPUCurveMappping
:
NonCopyable
,
NonMovable
{
96
public
:
97
int
lut_size
= 0;
98
float
*
lut
=
nullptr
;
99
100
GPUUniformBuf *
buffer
=
nullptr
;
101
GPUTexture *
texture
=
nullptr
;
102
size_t
cache_id
= 0;
103
104
~GPUCurveMappping
();
105
109
void
rasterize
(
CurveMapping
&curve_mapping);
110
119
bool
initialize_common
(
bool
use_curve_mapping);
120
};
121
122
class
GPUDisplayShader
:
NonCopyable
,
NonMovable
{
123
public
:
124
/* Cache variables. */
125
std::string
from_colorspace
;
126
std::string
view
;
127
std::string
display
;
128
std::string
look
;
129
bool
use_curve_mapping
=
false
;
130
131
/* The shader is valid and can be bound.
132
* Note that the cache might contain invalid shaders to prevent Blender from attempting to keep
133
* re-trying to build the same failing shader. */
134
bool
is_valid
=
false
;
135
136
GPUShader *
shader
=
nullptr
;
137
138
/* Uniform parameters. */
139
OCIO_GPUParameters
parameters
= {};
140
GPUUniformBuf *
parameters_buffer
=
nullptr
;
141
142
GPUTextures
textures
;
143
GPUCurveMappping
curve_mapping
;
144
145
~GPUDisplayShader
();
146
147
bool
matches
(
const
GPUDisplayParameters
&display_parameters)
const
;
148
158
bool
initialize_common
();
159
};
160
161
class
GPUShaderCache
{
162
/* The maximum number of cached shaders. */
163
static
constexpr
int
MAX_SIZE = 4;
164
165
public
:
166
~GPUShaderCache
();
167
172
GPUDisplayShader
*
get
(
const
GPUDisplayParameters
&display_parameters);
173
178
GPUDisplayShader
&
create_default
();
179
183
void
clear
();
184
185
private
:
186
std::list<GPUDisplayShader> cache_;
187
};
188
189
}
// namespace internal
190
}
// 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::ocio::internal::GPUCurveMappping
Definition
gpu_shader_binder_internal.hh:95
blender::ocio::internal::GPUCurveMappping::lut
float * lut
Definition
gpu_shader_binder_internal.hh:98
blender::ocio::internal::GPUCurveMappping::texture
GPUTexture * texture
Definition
gpu_shader_binder_internal.hh:101
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:97
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::buffer
GPUUniformBuf * buffer
Definition
gpu_shader_binder_internal.hh:100
blender::ocio::internal::GPUCurveMappping::cache_id
size_t cache_id
Definition
gpu_shader_binder_internal.hh:102
blender::ocio::internal::GPUDisplayShader
Definition
gpu_shader_binder_internal.hh:122
blender::ocio::internal::GPUDisplayShader::shader
GPUShader * shader
Definition
gpu_shader_binder_internal.hh:136
blender::ocio::internal::GPUDisplayShader::matches
bool matches(const GPUDisplayParameters &display_parameters) const
Definition
gpu_shader_binder.cc:127
blender::ocio::internal::GPUDisplayShader::is_valid
bool is_valid
Definition
gpu_shader_binder_internal.hh:134
blender::ocio::internal::GPUDisplayShader::~GPUDisplayShader
~GPUDisplayShader()
Definition
gpu_shader_binder.cc:117
blender::ocio::internal::GPUDisplayShader::look
std::string look
Definition
gpu_shader_binder_internal.hh:128
blender::ocio::internal::GPUDisplayShader::textures
GPUTextures textures
Definition
gpu_shader_binder_internal.hh:142
blender::ocio::internal::GPUDisplayShader::initialize_common
bool initialize_common()
Definition
gpu_shader_binder.cc:135
blender::ocio::internal::GPUDisplayShader::view
std::string view
Definition
gpu_shader_binder_internal.hh:126
blender::ocio::internal::GPUDisplayShader::parameters
OCIO_GPUParameters parameters
Definition
gpu_shader_binder_internal.hh:139
blender::ocio::internal::GPUDisplayShader::use_curve_mapping
bool use_curve_mapping
Definition
gpu_shader_binder_internal.hh:129
blender::ocio::internal::GPUDisplayShader::from_colorspace
std::string from_colorspace
Definition
gpu_shader_binder_internal.hh:125
blender::ocio::internal::GPUDisplayShader::display
std::string display
Definition
gpu_shader_binder_internal.hh:127
blender::ocio::internal::GPUDisplayShader::parameters_buffer
GPUUniformBuf * parameters_buffer
Definition
gpu_shader_binder_internal.hh:140
blender::ocio::internal::GPUDisplayShader::curve_mapping
GPUCurveMappping curve_mapping
Definition
gpu_shader_binder_internal.hh:143
blender::ocio::internal::GPUShaderCache
Definition
gpu_shader_binder_internal.hh:161
blender::ocio::internal::GPUShaderCache::get
GPUDisplayShader * get(const GPUDisplayParameters &display_parameters)
Definition
gpu_shader_binder.cc:161
blender::ocio::internal::GPUShaderCache::clear
void clear()
Definition
gpu_shader_binder.cc:188
blender::ocio::internal::GPUShaderCache::~GPUShaderCache
~GPUShaderCache()
Definition
gpu_shader_binder.cc:156
blender::ocio::internal::GPUShaderCache::create_default
GPUDisplayShader & create_default()
Definition
gpu_shader_binder.cc:175
blender::ocio::internal::GPUTextures
Definition
gpu_shader_binder_internal.hh:73
blender::ocio::internal::GPUTextures::dummy
GPUTexture * dummy
Definition
gpu_shader_binder_internal.hh:78
blender::ocio::internal::GPUTextures::initialize_common
bool initialize_common()
Definition
gpu_shader_binder.cc:50
blender::ocio::internal::GPUTextures::uniforms_buffer
GPUUniformBuf * uniforms_buffer
Definition
gpu_shader_binder_internal.hh:82
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:81
blender::ocio::internal::GPUTextures::luts
Vector< GPULutTexture > luts
Definition
gpu_shader_binder_internal.hh:75
blender::ocio::internal
Definition
gpu_shader_binder.cc:32
blender::ocio
Definition
BLF_api.hh:32
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:36
blender::ocio::internal::GPULutTexture
Definition
gpu_shader_binder_internal.hh:57
blender::ocio::internal::GPULutTexture::sampler_name
std::string sampler_name
Definition
gpu_shader_binder_internal.hh:59
blender::ocio::internal::GPULutTexture::texture
GPUTexture * texture
Definition
gpu_shader_binder_internal.hh:58
blender::ocio::internal::GPUUniform
Definition
gpu_shader_binder_internal.hh:62
blender::ocio::internal::GPUUniform::name
std::string name
Definition
gpu_shader_binder_internal.hh:63
blender::ocio::internal::TextureSlot
Definition
gpu_shader_binder_internal.hh:39
blender::ocio::internal::TextureSlot::OVERLAY
@ OVERLAY
Definition
gpu_shader_binder_internal.hh:42
blender::ocio::internal::TextureSlot::CURVE_MAPPING
@ CURVE_MAPPING
Definition
gpu_shader_binder_internal.hh:43
blender::ocio::internal::TextureSlot::IMAGE
@ IMAGE
Definition
gpu_shader_binder_internal.hh:41
blender::ocio::internal::TextureSlot::LUTS_OFFSET
@ LUTS_OFFSET
Definition
gpu_shader_binder_internal.hh:44
blender::ocio::internal::UniformBufferSlot
Definition
gpu_shader_binder_internal.hh:49
blender::ocio::internal::UniformBufferSlot::CURVE_MAPPING
@ CURVE_MAPPING
Definition
gpu_shader_binder_internal.hh:52
blender::ocio::internal::UniformBufferSlot::DISPLAY
@ DISPLAY
Definition
gpu_shader_binder_internal.hh:51
blender::ocio::internal::UniformBufferSlot::LUTS
@ LUTS
Definition
gpu_shader_binder_internal.hh:53
Generated on
for Blender by
doxygen
1.15.0