Blender V5.0
ShaderManager Class Referenceabstract

#include <shader.h>

Inherited by SVMShaderManager.

Public Types

enum  : uint32_t { SHADER_ADDED = (1 << 0) , SHADER_MODIFIED = (1 << 2) , UPDATE_ALL = ~0u , UPDATE_NONE = 0u }
enum class  SceneLinearSpace { Rec709 , Rec2020 , ACEScg , Unknown }

Public Member Functions

virtual ~ShaderManager ()
virtual bool use_osl ()
void device_update_pre (Device *device, DeviceScene *dscene, Scene *scene, Progress &progress)
void device_update_post (Device *device, DeviceScene *dscene, Scene *scene, Progress &progress)
virtual void device_free (Device *device, DeviceScene *dscene, Scene *scene)=0
virtual uint64_t get_attribute_id (ustring name)
virtual uint64_t get_attribute_id (AttributeStandard std)
int get_shader_id (Shader *shader, bool smooth=false)
uint get_kernel_features (Scene *scene)
float linear_rgb_to_gray (const float3 c)
float3 rec709_to_scene_linear (const float3 c)
string get_cryptomatte_materials (Scene *scene)
void tag_update (Scene *scene, const uint32_t flag)
bool need_update () const
void init_xyz_transforms ()
SceneLinearSpace get_scene_linear_space ()

Static Public Member Functions

static unique_ptr< ShaderManagercreate (const int shadingsystem)
static void add_default (Scene *scene)

Protected Types

using AttributeIDMap = unordered_map<ustring, uint64_t>

Protected Member Functions

 ShaderManager ()
template<std::size_t n>
size_t ensure_bsdf_table (DeviceScene *dscene, Scene *scene, const float(&table)[n])
size_t ensure_bsdf_table_impl (DeviceScene *dscene, Scene *scene, const float *table, const size_t n)
void compute_thin_film_table (const Transform &xyz_to_rgb)
uint get_graph_kernel_features (ShaderGraph *graph)
virtual void device_update_specific (Device *device, DeviceScene *dscene, Scene *scene, Progress &progress)=0
void device_update_common (Device *device, DeviceScene *dscene, Scene *scene, Progress &progress)
void device_free_common (Device *device, DeviceScene *dscene, Scene *scene)

Protected Attributes

uint32_t update_flags
AttributeIDMap unique_attribute_id
unordered_map< const float *, size_t > bsdf_tables
size_t thin_film_table_offset_
thread_spin_lock attribute_lock_
float3 xyz_to_r
float3 xyz_to_g
float3 xyz_to_b
float3 rgb_to_y
float3 white_xyz
float3 rec709_to_r
float3 rec709_to_g
float3 rec709_to_b
SceneLinearSpace scene_linear_space
vector< floatthin_film_table

Static Protected Attributes

static thread_mutex lookup_table_mutex

Detailed Description

Definition at line 175 of file scene/shader.h.

Member Typedef Documentation

◆ AttributeIDMap

using ShaderManager::AttributeIDMap = unordered_map<ustring, uint64_t>
protected

Definition at line 237 of file scene/shader.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum : uint32_t
Enumerator
SHADER_ADDED 
SHADER_MODIFIED 
UPDATE_ALL 
UPDATE_NONE 

Definition at line 177 of file scene/shader.h.

◆ SceneLinearSpace

Enumerator
Rec709 
Rec2020 
ACEScg 
Unknown 

Definition at line 225 of file scene/shader.h.

Constructor & Destructor Documentation

◆ ~ShaderManager()

ShaderManager::~ShaderManager ( )
virtualdefault

◆ ShaderManager()

ShaderManager::ShaderManager ( )
protected

Member Function Documentation

◆ add_default()

◆ compute_thin_film_table()

void ShaderManager::compute_thin_film_table ( const Transform & xyz_to_rgb)
protected

◆ create()

unique_ptr< ShaderManager > ShaderManager::create ( const int shadingsystem)
static

Definition at line 457 of file scene/shader.cpp.

References SHADINGSYSTEM_OSL.

Referenced by Scene::Scene().

◆ device_free()

virtual void ShaderManager::device_free ( Device * device,
DeviceScene * dscene,
Scene * scene )
pure virtual

Implemented in SVMShaderManager.

References flag, and name.

◆ device_free_common()

void ShaderManager::device_free_common ( Device * device,
DeviceScene * dscene,
Scene * scene )
protected

◆ device_update_common()

void ShaderManager::device_update_common ( Device * device,
DeviceScene * dscene,
Scene * scene,
Progress & progress )
protected

Definition at line 594 of file scene/shader.cpp.

References device_vector< T >::alloc(), KernelShader::constant_emission, KernelShader::cryptomatte_id, DeviceScene::data, DISPLACE_BUMP, Shader::emission_estimate, Shader::emission_is_constant, Shader::emission_sampling, EMISSION_SAMPLING_BACK, EMISSION_SAMPLING_FRONT, EMISSION_SAMPLING_FRONT_BACK, unique_ptr_vector< T >::empty(), ensure_bsdf_table(), flag, KernelShader::flags, device_vector< T >::free(), KernelTables::ggx_E, KernelTables::ggx_Eavg, KernelTables::ggx_gen_schlick_ior_s, KernelTables::ggx_gen_schlick_s, KernelTables::ggx_glass_E, KernelTables::ggx_glass_Eavg, KernelTables::ggx_glass_inv_E, KernelTables::ggx_glass_inv_Eavg, Shader::has_bssrdf_bump, Shader::has_bump, Shader::has_light_path_node, Shader::has_surface, Shader::has_surface_raytrace, Shader::has_surface_transparent, Shader::has_volume, Shader::has_volume_attribute_dependency, Shader::has_volume_connected, Shader::has_volume_spatial_varying, is_zero(), Scene::lookup_tables, make_float4, Node::name, KernelShader::pass_id, Rec709, rec709_to_b, rec709_to_g, rec709_to_r, rgb_to_y, scene_linear_space, SD_HAS_BSSRDF_BUMP, SD_HAS_BUMP, SD_HAS_CONSTANT_EMISSION, SD_HAS_DISPLACEMENT, SD_HAS_EMISSION, SD_HAS_LIGHT_PATH_NODE, SD_HAS_ONLY_VOLUME, SD_HAS_RAYTRACE, SD_HAS_TRANSPARENT_SHADOW, SD_HAS_VOLUME, SD_HETEROGENEOUS_VOLUME, SD_MIS_BACK, SD_MIS_FRONT, SD_NEED_VOLUME_ATTRIBUTES, SD_USE_BUMP_MAP_CORRECTION, SD_VOLUME_CUBIC, SD_VOLUME_EQUIANGULAR, SD_VOLUME_MIS, DeviceScene::shaders, Scene::shaders, KernelTables::sheen_ltc, unique_ptr_vector< T >::size(), TABLE_OFFSET_INVALID, thin_film_table, thin_film_table_offset_, util_hash_to_float(), util_murmur_hash3(), VOLUME_INTERPOLATION_CUBIC, VOLUME_SAMPLING_EQUIANGULAR, VOLUME_SAMPLING_MULTIPLE_IMPORTANCE, white_xyz, float3::x, xyz_to_b, xyz_to_g, xyz_to_r, float3::y, and float3::z.

Referenced by SVMShaderManager::device_update_specific().

◆ device_update_post()

void ShaderManager::device_update_post ( Device * device,
DeviceScene * dscene,
Scene * scene,
Progress & progress )

◆ device_update_pre()

◆ device_update_specific()

virtual void ShaderManager::device_update_specific ( Device * device,
DeviceScene * dscene,
Scene * scene,
Progress & progress )
protectedpure virtual

Implemented in SVMShaderManager.

Referenced by device_update_post().

◆ ensure_bsdf_table()

template<std::size_t n>
size_t ShaderManager::ensure_bsdf_table ( DeviceScene * dscene,
Scene * scene,
const float(&) table[n] )
inlineprotected

Definition at line 259 of file scene/shader.h.

References ensure_bsdf_table_impl().

Referenced by device_update_common().

◆ ensure_bsdf_table_impl()

size_t ShaderManager::ensure_bsdf_table_impl ( DeviceScene * dscene,
Scene * scene,
const float * table,
const size_t n )
protected

Definition at line 1142 of file scene/shader.cpp.

References bsdf_tables, and Scene::lookup_tables.

Referenced by ensure_bsdf_table().

◆ get_attribute_id() [1/2]

uint64_t ShaderManager::get_attribute_id ( AttributeStandard std)
virtual

Definition at line 492 of file scene/shader.cpp.

◆ get_attribute_id() [2/2]

uint64_t ShaderManager::get_attribute_id ( ustring name)
virtual

Definition at line 476 of file scene/shader.cpp.

References ATTR_STD_NUM, attribute_lock_, lock, name, and unique_attribute_id.

◆ get_cryptomatte_materials()

string ShaderManager::get_cryptomatte_materials ( Scene * scene)

Definition at line 883 of file scene/shader.cpp.

References Node::name, Scene::shaders, string_printf(), and util_murmur_hash3().

◆ get_graph_kernel_features()

◆ get_kernel_features()

◆ get_scene_linear_space()

SceneLinearSpace ShaderManager::get_scene_linear_space ( )
inline

Definition at line 227 of file scene/shader.h.

References scene_linear_space.

◆ get_shader_id()

int ShaderManager::get_shader_id ( Shader * shader,
bool smooth = false )

◆ init_xyz_transforms()

◆ linear_rgb_to_gray()

float ShaderManager::linear_rgb_to_gray ( const float3 c)

Definition at line 873 of file scene/shader.cpp.

References dot(), and rgb_to_y.

◆ need_update()

bool ShaderManager::need_update ( ) const

Definition at line 906 of file scene/shader.cpp.

References update_flags, and UPDATE_NONE.

Referenced by device_update_pre(), and SVMShaderManager::device_update_specific().

◆ rec709_to_scene_linear()

float3 ShaderManager::rec709_to_scene_linear ( const float3 c)

Definition at line 878 of file scene/shader.cpp.

References rec709_to_b, rec709_to_g, rec709_to_r, and to_local().

◆ tag_update()

void ShaderManager::tag_update ( Scene * scene,
const uint32_t flag )

Definition at line 900 of file scene/shader.cpp.

References UPDATE_ALL, and update_flags.

◆ use_osl()

virtual bool ShaderManager::use_osl ( )
inlinevirtual

Definition at line 190 of file scene/shader.h.

Referenced by get_kernel_features(), and xml_read_shader_graph().

Member Data Documentation

◆ attribute_lock_

thread_spin_lock ShaderManager::attribute_lock_
protected

Definition at line 245 of file scene/shader.h.

Referenced by get_attribute_id().

◆ bsdf_tables

unordered_map<const float *, size_t> ShaderManager::bsdf_tables
protected

Definition at line 242 of file scene/shader.h.

Referenced by device_free_common(), and ensure_bsdf_table_impl().

◆ lookup_table_mutex

CCL_NAMESPACE_BEGIN thread_mutex ShaderManager::lookup_table_mutex
staticprotected

Definition at line 240 of file scene/shader.h.

◆ rec709_to_b

float3 ShaderManager::rec709_to_b
protected

◆ rec709_to_g

float3 ShaderManager::rec709_to_g
protected

◆ rec709_to_r

float3 ShaderManager::rec709_to_r
protected

◆ rgb_to_y

float3 ShaderManager::rgb_to_y
protected

Definition at line 250 of file scene/shader.h.

Referenced by device_update_common(), init_xyz_transforms(), and linear_rgb_to_gray().

◆ scene_linear_space

SceneLinearSpace ShaderManager::scene_linear_space
protected

◆ thin_film_table

vector<float> ShaderManager::thin_film_table
protected

Definition at line 256 of file scene/shader.h.

Referenced by compute_thin_film_table(), and device_update_common().

◆ thin_film_table_offset_

size_t ShaderManager::thin_film_table_offset_
protected

Definition at line 243 of file scene/shader.h.

Referenced by device_free_common(), device_update_common(), and ShaderManager().

◆ unique_attribute_id

AttributeIDMap ShaderManager::unique_attribute_id
protected

Definition at line 238 of file scene/shader.h.

Referenced by get_attribute_id().

◆ update_flags

uint32_t ShaderManager::update_flags
protected

◆ white_xyz

float3 ShaderManager::white_xyz
protected

Definition at line 251 of file scene/shader.h.

Referenced by device_update_common(), and init_xyz_transforms().

◆ xyz_to_b

float3 ShaderManager::xyz_to_b
protected

Definition at line 249 of file scene/shader.h.

Referenced by device_update_common(), and init_xyz_transforms().

◆ xyz_to_g

float3 ShaderManager::xyz_to_g
protected

Definition at line 248 of file scene/shader.h.

Referenced by device_update_common(), and init_xyz_transforms().

◆ xyz_to_r

float3 ShaderManager::xyz_to_r
protected

Definition at line 247 of file scene/shader.h.

Referenced by device_update_common(), and init_xyz_transforms().


The documentation for this class was generated from the following files: