Shader Material System
Functions
- 
inline int get_shader_variable_id(const char *name, bool is_optional = false)
 
- 
inline int get_shader_glob_var_id(const char *name, bool is_optional = false)
 Obsolete.
- 
int shader_channel_type_size(int t)
 Get the size in bytes of a shader channel type.
- Parameters:
 type – Shader channel type enum.
- Returns:
 Size of shader channel for specified type
- 
ShaderMaterial *new_shader_material(const MaterialData &m, bool sec_dump_for_exp = false, bool do_log = true)
 
- 
ShaderMaterial *new_shader_material_by_name_optional(const char *shader_name, const char *mat_script = NULL, bool sec_dump_for_exp = false)
 
- 
ShaderMaterial *new_shader_material_by_name(const char *shader_name, const char *mat_script = NULL, bool sec_dump_for_exp = false)
 
- 
bool shader_exists(const char *shader_name)
 
- 
const char *get_shader_class_name_by_material_name(const char *mat_name)
 
- 
d3d::shadermodel::Version getMaxFSHVersion()
 
- 
void startup_shaders(const char *shbindump_base, d3d::shadermodel::Version shader_model_version = d3d::smAny)
 Startups shaders (if shbindump_base!= NULL schedules shaders data loading).
- 
bool load_shaders_bindump(const char *src_filename, d3d::shadermodel::Version shader_model_version, bool sec_dump_for_exp = false)
 Direct load/unload shaders binary dump (called from shaders startup proc).
- 
void unload_shaders_bindump(bool sec_dump_for_exp = false)
 
- 
void register_job_manager_requiring_shaders_bindump(int job_mgr_id)
 All job mangers whose jobs require shaders bindump to be loaded should call this function.
- 
bool load_shaders_bindump_with_fence(const char *src_filename, d3d::shadermodel::Version shader_model_version)
 (Re)load of shaders bindump which is allowed to be called concurrently with jobs that require valid dump (those on registered mgrs). Inside this call: 1) Manager registration via register_job_manager_requiring_shaders_bindump will be blocked. 2) All currently registered managers will be awaited to finish current work and then blocked. 3) Bindump will be (re)loaded. 4) The blocked managers (and in-flight registrations) will be released.
- 
bool load_shaders_debug_bindump(d3d::shadermodel::Version version)
 Load debug shaderdump (compiled with -debug).
- 
bool unload_shaders_debug_bindump(d3d::shadermodel::Version version)
 Unload debug shaderdump (compiled with -debug).
- 
inline void enable_shaders_use_stateblock(bool)
 Enable usage of stateblocks in shaders (default is platform-specific).
- 
inline void enable_shaders_emulate_stateblock(bool)
 Enable emulation of stateblocks in shaders (default is false).
- 
void rebuild_shaders_stateblocks()
 Discards shader stateblocks (useful after 3d reset or when internal texture data is changed).
- 
void defrag_shaders_stateblocks(bool force)
 Discards shader stateblocks, if too many were destroyed.
- 
void shaders_set_reload_flags()
 Enable or disable shaders reloading depending on build configuration and settings.
- 
float get_shader_global_time()
 Shaders global time.
- 
void set_shader_global_time(float)
 
- 
void advance_shader_global_time(float dt)
 Adds specified elapsed time to global time variable.
- 
real get_shader_global_time_phase(float period, float offset)
 - Returns:
 global time phase (number in range [0,1)) for specified period and time offset.
- 
void set_stcode_special_tag_interp(stcode::SpecialBlkTagInterpreter &&interp)
 Sets interpreter for custom directives in stcode tag: stcode/tag:t=$directive in blk.
Variables
- 
bool dgs_all_shader_vars_optionals
 Global flag for allowing all shader variables to be treated as optional.
- Return:
 variableId for shader variable name (with optional fatal when name not found)
- void void
 
- 
class ShaderMaterial : public DObject
 - #include <dag_shaders.h>
Abstract base class for all shader materials.
Provides an interface to manage shader parameters, flags, cloning, and binding behavior. Can be extended by scripting systems (e.g., ScriptedShaderMaterial).
Public Functions
- 
inline ScriptedShaderMaterial &native()
 
- 
inline const ScriptedShaderMaterial &native() const
 
- 
virtual ShaderMaterial *clone() const = 0
 
- 
virtual int get_flags() const = 0
 
- 
virtual void set_flags(int value, int mask) = 0
 
- 
virtual bool set_int_param(const int variable_id, const int v) = 0
 
- 
virtual bool set_real_param(const int variable_id, const real v) = 0
 
- 
virtual bool set_color4_param(const int variable_id, const struct Color4&) = 0
 
- 
virtual bool hasVariable(const int variable_id) const = 0
 
- 
virtual bool getColor4Variable(const int variable_id, Color4 &value) const = 0
 
- 
virtual bool getRealVariable(const int variable_id, real &value) const = 0
 
- 
virtual bool getIntVariable(const int variable_id, int &value) const = 0
 
- 
virtual ShaderVarType getVariableType(const int variable_id) const = 0
 
- 
virtual bool enum_channels(ShaderChannelsEnumCB&, int &ret_code_flags) const = 0
 - Returns:
 false if shader is not renderable in specified mode (if pi==NULL - default rm).
- 
virtual ShaderElement *make_elem(bool acquire_tex_refs, const char *info) = 0
 
- 
inline ShaderElement *make_elem(const char *info = NULL)
 
- 
virtual bool isPositionPacked() const = 0
 
- 
virtual bool checkChannels(CompiledShaderChannelId *ch, int ch_count) const = 0
 - Returns:
 true, if channels are valid for this material & specified render mode (if pi==NULL - default rm).
- 
virtual int get_num_textures() const = 0
 
- 
virtual void gatherUsedTex(TextureIdSet &tex_id_list) const = 0
 
- 
virtual void getMatData(ShaderMatData &out_data) const = 0
 
- 
virtual void buildMaterialData(MaterialData &out_data, const char *orig_mat_script = nullptr) = 0
 Build material data from shader material (if orig_mat_script is passed then it is used to filter out default values).
- 
virtual const char *getShaderClassName() const = 0
 Get shader script name.
- 
virtual bool isSelectedForDebug() const = 0
 Disable some shaders for debug.
- 
virtual const String getInfo() const = 0
 Get material info for debug.
Public Static Functions
- 
static void setLoadingString(const char *s)
 Set sting for error info while loading material.
Note
Don’t forget to clear it after loading!
- 
static const char *getLoadingString()
 Get string for error info.
- Returns:
 NULL, if no error string set.
Private Static Attributes
- 
static const char *loadingStirngInfo
 
 - 
inline ScriptedShaderMaterial &native()
 
- 
class ShaderElement : public DObject
 Public Functions
- 
inline ScriptedShaderElement &native()
 
- 
inline const ScriptedShaderElement &native() const
 
- 
virtual bool setStates() const = 0
 
- 
inline bool setStates(int, bool)
 
- 
virtual bool setStatesDispatch() const = 0
 
- 
virtual void render(int minvert, int numvert, int sind, int numf, int base_vertex = 0, int prim = PRIM_TRILIST) const = 0
 
- 
virtual int getTextureCount() const = 0
 
- 
virtual void gatherUsedTex(TextureIdSet &tex_id_list) const = 0
 
- 
virtual void acquireTexRefs() = 0
 
- 
virtual void releaseTexRefs() = 0
 
- 
virtual const char *getShaderClassName() const = 0
 - Returns:
 element flags.
- 
virtual void setProgram(uint32_t variant) = 0
 
- 
virtual unsigned int getVertexStride() const = 0
 - Returns:
 vertex size on shader input.
- 
virtual dag::ConstSpan<ShaderChannelId> getChannels() const = 0
 
- 
virtual int getSupportedBlock(int variant, int layer) const = 0
 
- 
virtual bool setReqTexLevel(int req_level = 15) const = 0
 
- 
virtual bool checkAndPrefetchMissingTextures() const = 0
 
Public Static Functions
- 
static void invalidate_cached_state_block()
 Invalidates internal cached state block (to force block re-apply and d3d program update).
- 
inline ScriptedShaderElement &native()
 
- 
namespace dynrender
 Functions
- 
VDECL addShaderVdecl(const CompiledShaderChannelId *ch, int numch, int stride = -1, dag::Span<VSDTYPE> add_vsd = {})
 Add vdecl or get existing for specified channel set. If stride < 0, calculate it automatically.
- 
int getStride(const CompiledShaderChannelId *ch, int numch)
 Get stride for channel set.
- Returns:
 -1, if failed.
- 
struct RElem
 - #include <dag_shaders.h>
[9/28/2004] Tigrenok This is optional structure for rendering. You can use this structure (fill it & call render()) or set params to driver and render all data manually (shElem->render())
Public Functions
- 
inline RElem()
 
- 
void render(bool indexed = true, int base_vertex_index = 0) const
 set ib, vb, vdecl & render this element if ib field is NULL or indexed == false, use d3d::draw instead d3d::drawind
- 
void setBuffers(bool indexed = true) const
 
- 
void setStates(bool indexed = true) const
 
 - 
inline RElem()
 
- 
VDECL addShaderVdecl(const CompiledShaderChannelId *ch, int numch, int stride = -1, dag::Span<VSDTYPE> add_vsd = {})