Shader Material System

Typedefs

typedef Sbuffer Ibuffer
typedef Sbuffer Vbuffer
using ShaderReloadCb = eastl::fixed_function<sizeof(void*), void(bool)>

Registers console processor for shader-related commands, such as ‘reload_shader’.

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 set_texture_param(const int variable_id, const TEXTUREID v) = 0
virtual bool set_sampler_param(const int variable_id, d3d::SamplerHandle v) = 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 bool getTextureVariable(const int variable_id, TEXTUREID &value) const = 0
virtual bool getSamplerVariable(const int variable_id, d3d::SamplerHandle &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 TEXTUREID get_texture(int) const = 0
virtual void set_texture(int, TEXTUREID) = 0
virtual void gatherUsedTex(TextureIdSet &tex_id_list) const = 0
virtual bool replaceTexture(TEXTUREID tex_id_old, TEXTUREID tex_id_new) = 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
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 TEXTUREID getTexture(int index) const = 0
virtual void gatherUsedTex(TextureIdSet &tex_id_list) const = 0
virtual bool replaceTexture(TEXTUREID tex_id_prev, TEXTUREID tex_id_new) = 0
virtual bool hasTexture(TEXTUREID tex_id) 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 void replaceVdecl(VDECL vDecl) = 0
virtual VDECL getEffectiveVDecl() 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).

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.

void convert_channels_to_vsd(const CompiledShaderChannelId *ch, int numch, Tab<VSDTYPE> &out_vsd)
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

Public Members

Ptr<ShaderElement> shElem

element to render

Ibuffer *ib

index buffer

Vbuffer *vb

vertex buffer

VDECL vDecl

vdecl

int stride

stride

int minVert
int numVert
int startIndex
int numPrim