70 DISPLACE_VECTOR_OBJECT
95 void setTimeDependent(
bool timedep,
fpreal t = 0.0);
96 void setOPTimeDependent(
bool timedep,
fpreal t = 0.0);
106 exint cache_version = 0;
108 if(myTexCacheVersion != cache_version)
111 if(myDirtyFlag || myDepNode.isDirty())
122 myDepNode.update(myTime);
156 return bindSets(r, shader, for_curve);
162 bool created =
false;
163 return (initMaterialSetForRender(r, shader, created) &&
164 initBlocks(r, opts) &&
165 bindSets(r, shader, for_curve));
173 virtual bool initMaterialSetForRender(
RV_Render *
r,
191 void setOverrides(
const UT_Options *overrides);
194 void setFallbacks(
const UT_Options *attrib_fallbacks);
206 { myExtraInputs = extra_inputs; }
209 static exint getUniqueMaterialID();
217 void clearOpIDs() { myOpNodes.clear(); myOpDepsDirty =
true; }
218 void addOpID(
int id);
220 bool timeChangeCheck()
const;
240 exint myTexCacheVersion = 0;
241 unsigned myTimeDep : 1,
246 myHasDisplacement : 1,
249 myTexturesLoaded : 1,
266 {
return myDefault; }
270 {
return myFactory; }
278 if(myAltAtlas && material_id < 0)
279 return myAltAtlas->get(-material_id);
281 return myDefault ? myDefault : myFactory;
284 return entry->second;
292 if(myAltAtlas && material_id < 0)
293 return myAltAtlas->get(-material_id);
295 if(material_id == 0 && dp.vk_default_mat_id != 0)
296 material_id = dp.vk_default_mat_id;
299 return myDefault ? myDefault : myFactory;
303 return entry->second;
309 { (*this)[ material->id() ] = material; }
314 { myDefault = material;
if(add_list && material)
add(material); }
319 { myFactory = material;
if(add_list && material)
add(material); }
324 { myAltAtlas = atlas; }
331 return (entry !=
end());
357 bool hasParm(
exint ptype)
const;
359 int getParmI(
exint ptype,
int defval = 0)
const;
382 static void initCache();
383 static void destroyCache();
384 static void clearCache();
401 static void cacheComputeShader(
exint entry,
const GR_Material &for_material,
422 exint myCurrentID = 1;
UT_UniquePtr< RV_ShaderVariableSet > myMaterialSet
bool SYSisEqual(const UT_Vector2T< T > &a, const UT_Vector2T< T > &b, S tol)
Componentwise equality.
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)
UT_UniquePtr< RV_ShaderVariableSet > myTexMaterialSet
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()
UT_UniquePtr< RV_ShaderVariableSet > myTexCurveMaterialSet
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)
const GR_MaterialPtr & getDefaultMaterial() const
Reader/Writer mutex class.
Base::const_iterator const_iterator
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
void setExtraInputs(const UT_StringMap< InputType > &extra_inputs)