A base class representing the implementation (code) of a shader, used in conjunction with HdRenderPass. More...
Classes | |
struct | NamedTextureHandle |
Information necessary to bind textures and create accessor for the texture. More... | |
class | ResourceContext |
The context available in implementations of AddResourcesFromTextures. More... | |
Public Types | |
typedef size_t | ID |
Public Member Functions | |
virtual ID | ComputeHash () const =0 |
Returns the hash value of the shader code and configuration. More... | |
virtual ID | ComputeTextureSourceHash () const |
Returns the hash value of the paths of the texture prims consumed by this shader. More... | |
virtual std::string | GetSource (TfToken const &shaderStageKey) const =0 |
Returns the shader source provided by this shader for shaderStageKey. More... | |
virtual HDST_API HdSt_MaterialParamVector const & | GetParams () const |
Returns the shader parameters for this shader. More... | |
virtual HDST_API bool | IsEnabledPrimvarFiltering () const |
Returns whether primvar filtering is enabled for this shader. More... | |
virtual HDST_API TfTokenVector const & | GetPrimvarNames () const |
Returns the names of primvar that are used by this shader. More... | |
virtual HDST_API HdBufferArrayRangeSharedPtr const & | GetShaderData () const |
Returns a buffer which stores parameter fallback values and texture handles. More... | |
virtual void | BindResources (int program, HdSt_ResourceBinder const &binder, HdRenderPassState const &state)=0 |
Binds shader-specific resources to program XXX: this interface is meant to be used for bridging the GlfSimpleLightingContext mechanism, and not for generic use-cases. More... | |
virtual void | UnbindResources (int program, HdSt_ResourceBinder const &binder, HdRenderPassState const &state)=0 |
Unbinds shader-specific resources. More... | |
virtual void | AddBindings (HdBindingRequestVector *customBindings)=0 |
Add custom bindings (used by codegen) More... | |
virtual HDST_API TfToken | GetMaterialTag () const |
Material tags can be set in the meta-data of a glslfx file to control what rprim collection that prims using this shader should go into. More... | |
virtual HDST_API void | AddResourcesFromTextures (ResourceContext &ctx) const |
This function is called after textures have been allocated and loaded to add buffer sources and computations to the resource registry that require texture meta data not available until the texture is allocated or loaded. More... | |
Static Public Member Functions | |
static HDST_API ID | ComputeHash (HdStShaderCodeSharedPtrVector const &shaders) |
Returns the combined hash values of multiple shaders. More... | |
Texture system | |
using | NamedTextureHandleVector = std::vector< NamedTextureHandle > |
virtual HDST_API NamedTextureHandleVector const & | GetNamedTextureHandles () const |
Textures that need to be bound for this shader. More... | |
A base class representing the implementation (code) of a shader, used in conjunction with HdRenderPass.
This interface provides a simple way for clients to affect the composition of shading programs used for a render pass.
Definition at line 75 of file shaderCode.h.
struct HdStShaderCode::NamedTextureHandle |
Information necessary to bind textures and create accessor for the texture.
Definition at line 136 of file shaderCode.h.
Class Members | ||
---|---|---|
HdStTextureHandleSharedPtr | handle | The texture. |
size_t | hash | A hash unique to the corresponding asset; used to split draw batches when not using bindless textures. |
TfToken | name | Name by which the texture will be accessed, i.e., the name of the accesor for thexture will be HdGet_name(...). |
HdTextureType | type |
Equal to handle->GetTextureObject()->GetTextureType(). Saved here for convenience (note that name and type completely determine the creation of the texture accesor HdGet_name(...)). |
|
pure virtual |
Add custom bindings (used by codegen)
Implemented in HdStSurfaceShader, HdStRenderPassShader, and HdStSimpleLightingShader.
|
virtual |
This function is called after textures have been allocated and loaded to add buffer sources and computations to the resource registry that require texture meta data not available until the texture is allocated or loaded.
For example, the OpenGl texture sampler handle (in the bindless case) is not available until after the texture commit phase.
Reimplemented in HdStSurfaceShader, and HdStSimpleLightingShader.
|
pure virtual |
Binds shader-specific resources to program XXX: this interface is meant to be used for bridging the GlfSimpleLightingContext mechanism, and not for generic use-cases.
Implemented in HdStSurfaceShader, HdStRenderPassShader, and HdStSimpleLightingShader.
|
pure virtual |
Returns the hash value of the shader code and configuration.
It is computed from the the GLSL code as well as the resource signature of the shader (as determined from its parameters). If two shaders have the same hash, the GLSL code as expanded by codegen should also be the same.
Implemented in HdStSurfaceShader, HdStRenderPassShader, and HdStSimpleLightingShader.
|
static |
Returns the combined hash values of multiple shaders.
|
virtual |
Returns the hash value of the paths of the texture prims consumed by this shader.
Unless textures are bindless, shaders using different textures cannot be used in the same draw batch. Since textures can be animated, it can happen that two texture prims use the same texture at some time but different textures at other times. To avoid re-computing the draw batches over time, we use the this hash when grouping the draw batches.
Reimplemented in HdStSurfaceShader.
|
virtual |
Material tags can be set in the meta-data of a glslfx file to control what rprim collection that prims using this shader should go into.
E.g. We can use it to split opaque and translucent prims into different collections. When no material tags are specified in the shader, a empty token is returned.
Reimplemented in HdStSurfaceShader.
|
virtual |
Textures that need to be bound for this shader.
Reimplemented in HdStSimpleLightingShader, HdStSurfaceShader, and HdStRenderPassShader.
|
virtual |
Returns the shader parameters for this shader.
Reimplemented in HdStSimpleLightingShader, HdStRenderPassShader, and HdStSurfaceShader.
|
virtual |
Returns the names of primvar that are used by this shader.
Reimplemented in HdStSurfaceShader.
|
virtual |
Returns a buffer which stores parameter fallback values and texture handles.
Reimplemented in HdStSurfaceShader.
|
pure virtual |
Returns the shader source provided by this shader for shaderStageKey.
Implemented in HdStSurfaceShader, HdStRenderPassShader, and HdStSimpleLightingShader.
|
virtual |
Returns whether primvar filtering is enabled for this shader.
Reimplemented in HdStSurfaceShader.
|
pure virtual |
Unbinds shader-specific resources.
Implemented in HdStSurfaceShader, HdStRenderPassShader, and HdStSimpleLightingShader.