78 void setTimeDependent(
bool timedep,
fpreal t = 0.0);
79 void setOPTimeDependent(
bool timedep,
fpreal t = 0.0);
89 exint cache_version = 0;
93 if(myTexCacheVersion != cache_version)
96 if(myDirtyFlag || myDepNode.isDirty())
107 myDepNode.update(myTime);
143 return bindSets(r, shader, for_curve);
149 bool created =
false;
150 return (initMaterialSetForRender(r, shader, created) &&
151 initBlocks(r, opts) &&
152 bindSets(r, shader, for_curve));
160 virtual bool initMaterialSetForRender(
RV_Render *
r,
178 void setOverrides(
const UT_Options *overrides);
181 void setFallbacks(
const UT_Options *attrib_fallbacks);
193 { myExtraInputs = extra_inputs; }
196 static exint getUniqueMaterialID();
204 void clearOpIDs() { myOpNodes.clear(); myOpDepsDirty =
true; }
205 void addOpID(
int id);
207 bool timeChangeCheck()
const;
229 exint myTexCacheVersion = 0;
230 unsigned myTimeDep : 1,
235 myHasDisplacement : 1,
238 myTexturesLoaded : 1,
255 {
return myDefault; }
259 {
return myFactory; }
267 if(myAltAtlas && material_id < 0)
268 return myAltAtlas->get(-material_id);
270 return myDefault ? myDefault : myFactory;
273 return entry->second;
281 if(myAltAtlas && material_id < 0)
282 return myAltAtlas->get(-material_id);
284 if(material_id == 0 && dp.vk_default_mat_id != 0)
285 material_id = dp.vk_default_mat_id;
288 return myDefault ? myDefault : myFactory;
292 return entry->second;
298 { (*this)[ material->id() ] = material; }
303 { myDefault = material;
if(add_list && material)
add(material); }
308 { myFactory = material;
if(add_list && material)
add(material); }
313 { myAltAtlas = atlas; }
320 return (entry !=
end());
344 bool hasParm(
exint ptype)
const;
346 int getParmI(
exint ptype,
int defval = 0)
const;
369 static void initCache();
370 static void destroyCache();
371 static void clearCache();
388 static void cacheComputeShader(
exint entry,
const GR_Material &for_material,
411 exint myCurrentID = 1;
void setFactoryMaterial(const GR_MaterialPtr &material, bool add_list=true)
void dirty(bool dirty=true)
virtual RV_ShaderProgram * getSurfaceShader() const
virtual void dirtyTextures()
const GR_MaterialPtr & getFactoryMaterial() const
Base class for various things that can appear in a scene outside of geometry.
bool isTimeDependent() const
bool opDependenciesDirty() const
GT_API const UT_StringHolder time
const UT_Options * getOverrides() const
GLsizei const GLfloat * value
bool isOPTimeDependent() const
FMT_CONSTEXPR auto find(Ptr first, Ptr last, T value, Ptr &out) -> bool
UT_NON_COPYABLE(GR_SceneItem)
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
bool texturesLoaded() const
const GR_MaterialAtlas * alternateMaterials() const
fpreal getCurrentTime() const
void setTransparent(bool has_tex)
bool isTransparent() const
GLint GLint GLsizei GLint GLenum GLenum type
bool bindWithoutUpdate(RV_Render *r, RV_ShaderProgramBase *shader, const GR_DisplayOption *opts, bool for_curve=false)
bool needsTangents() const
const UT_StringMap< InputType > & extraInputs() const
const UT_Options * getFallbacks() const
static const UT_Matrix4T< float > & getIdentityMatrix()
MaterialType type() const
void setHasDisplacement(bool has_disp)
#define UT_NON_COPYABLE(CLASS)
Define deleted copy constructor and assignment operator inside a class.
const UT_Set< int > opDependencies() const
void add(const GR_MaterialPtr &material)
virtual RV_ShaderCompute * getDisplaceShader() const
void setNeedsTangents(bool tan)
static exint cacheRefresh()
bool isDirty(fpreal time)
GLuint const GLchar * name
bool bind(RV_Render *r, RV_ShaderProgramBase *shader, const GR_DisplayOption *opts, bool for_curve=false)
void clearOpDependenciesDirty()
SYS_API double tan(double x)
A map of string to various well defined value types.
GA_API const UT_StringHolder parms
DEP_MicroNode & dependencies()
void setTextured(bool has_tex)
void setNeedsUVs(bool uvs)
void setHasUDIM(bool has_udim)
void setTexturesLoaded(bool loaded)
virtual RV_ShaderProgram * getCurveShader() const
void setDefaultMaterial(const GR_MaterialPtr &material, bool add_list=true)
bool hasMaterial(int material_id) const
bool hasDisplacement() const
GR_MaterialAtlas * alternateMaterials()
ImageBuf OIIO_API add(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
This is a fast, non-string access and cut-down version of UT_Options.
void setAlternateMaterials(GR_MaterialAtlas *atlas)
bool SYSisEqual(const UT_Vector2T< T > &a, const UT_Vector2T< T > &b, S tol=SYS_FTOLERANCE)
Componentwise equality.
const GR_MaterialPtr & getDefaultMaterial() const
Reader/Writer mutex class.
Base::const_iterator const_iterator
void setExtraInputs(const UT_StringMap< InputType > &extra_inputs)