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 = {})