10 #ifndef GR_MaterialTypes_h
11 #define GR_MaterialTypes_h
38 #define PARMKEY(NAME) static exint NAME();
40 #define MATPARM(TYPE, NAME) \
41 TYPE get##NAME() const { return mySimpleBlock.NAME; } \
42 void set##NAME(const TYPE &v) \
43 { if(mySimpleBlock.NAME != v) { mySimpleBlock.NAME=v; myBlockDirtyFlag=true; } } \
47 #define TEXMAP_PARM(NAME, MAP) \
48 UT_StringHolder get##NAME() const { return my##NAME; } \
49 void set##NAME(const UT_StringHolder &v) \
50 { if(my##NAME != v) { my##NAME=v; my##MAP.reset(); myTexDirtyFlag=true; } } \
51 void set##NAME##Fallback(const UT_Vector4F &f) \
52 { if(my##NAME##Fallback!=f) { my##NAME##Fallback=f; myTexDirtyFlag=true; }} \
54 UT_StringHolder my##NAME; \
55 UT_Vector4F my##NAME##Fallback; \
59 #define TEXMAP_PARM(NAME, MAP) \
60 UT_StringHolder get##NAME() const { return my##NAME; } \
61 void set##NAME(const UT_StringHolder &v) \
62 { if(my##NAME != v) { my##NAME=v; myTexDirtyFlag=true; } } \
63 void set##NAME##Fallback(const UT_Vector4F &f) \
64 { if(my##NAME##Fallback!=f) { my##NAME##Fallback=f; myTexDirtyFlag=true; }} \
66 UT_Vector4F my##NAME##Fallback; \
67 UT_StringHolder my##NAME
103 bool &created)
override;
107 { myVertexOverrides = ovr; }
109 {
return myVertexOverrides; }
113 MaterialType
type = SIMPLE_SURFACE);
119 struct SimpleMaterialBlock
144 int32 AlphaMode = ALPHA_BLEND;
150 int32 CoatSpecModel = 2;
151 int32 UseGeoColor = 1;
152 int32 UsePackedColor = 1;
153 int32 HasTextures = 0;
171 { mySimpleBlock.udim_area = udim; myBlockDirtyFlag =
true; }
176 bool &created)
override;
183 MaterialType
type = MATCAP_SURFACE);
194 bool myTexDirtyFlag =
true;
204 #define TEX_PARM(TYPE, NAME) \
205 TYPE get##NAME() const { return myTextureBlock.NAME; } \
206 void set##NAME(const TYPE &v) \
207 { if(myTextureBlock.NAME != v) \
208 { myTextureBlock.NAME=v; myTexBlockDirtyFlag=true; } \
324 bool &created)
override;
376 int32 HasDiffuse =
false;
377 int32 HasSpecular =
false;
378 int32 HasOpacity =
false;
379 int32 HasEmission =
false;
380 int32 HasNormal =
false;
381 int32 HasRough =
false;
382 int32 HasDisplace =
false;
383 int32 HasOcclusion =
false;
384 int32 HasMetallic =
false;
385 int32 HasCoatInt =
false;
386 int32 HasCoatRough =
false;
387 int32 HasReflectInt =
false;
389 int32 HasDiffuseUV =
false;
390 int32 HasSpecularUV =
false;
391 int32 HasOpacityUV =
false;
392 int32 HasEmissionUV =
false;
393 int32 HasNormalUV =
false;
394 int32 HasRoughUV =
false;
395 int32 HasDisplaceUV =
false;
396 int32 HasOcclusionUV =
false;
397 int32 HasMetallicUV =
false;
398 int32 HasCoatIntUV =
false;
399 int32 HasCoatRoughUV =
false;
400 int32 HasReflectIntUV =
false;
402 int32 NormalMapType = 0;
404 int32 DisplaceSpace = 0;
408 int32 DisplaceYUp =
true;
410 int32 InvertOpacity =
false;
411 int32 InvertRough =
false;
412 int32 ReflectAsIOR =
false;
415 bool myTexDirtyFlag =
true;
416 bool myTexBlockDirtyFlag =
true;
430 #define HAIR_PARM(TYPE, NAME) \
431 TYPE get##NAME() const { return myHairBlock.NAME; } \
432 void set##NAME(const TYPE &v) \
433 { if(myHairBlock.NAME != v) { myHairBlock.NAME=v; myBlockDirtyFlag=true; } } \
442 static constexpr
int32 DiffUseBaseMap = 0;
443 static constexpr
int32 DiffUseBlendRamp = 0;
449 static constexpr
int32 SpecUseBaseMap = 0;
450 static constexpr
int32 SpecUseBlendRamp = 0;
452 static constexpr
int32 AlphaUseRamp = 0;
453 static constexpr
int32 RandomDiffHue = 0;
455 static constexpr
int32 RandomDiffSat = 0;
457 static constexpr
int32 RandomDiffInt = 0;
459 static constexpr
int32 RandomSpecInt = 0;
493 TEXMAP_PARM(DiffRootTipBlendMap, DiffRootTipBlendID);
494 TEXMAP_PARM(SpecRootTipBlendMap, SpecRootTipBlendID);
495 TEXMAP_PARM(AlphaRootTipBlendMap, AlphaRootTipBlendID);
519 bool &created)
override;
546 Defaults::RandomDiffHueRange;
548 Defaults::RandomDiffSatRange;
550 Defaults::RandomDiffIntRange;
552 Defaults::RandomSpecIntRange;
556 fpreal32 DiffIntensity = Defaults::DiffIntensity;
558 fpreal32 SpecIntensity = Defaults::SpecIntensity;
559 fpreal32 SpecAngle = Defaults::SpecAngle;
560 fpreal32 SpecShift = Defaults::SpecShift;
562 fpreal32 HairAlpha = Defaults::HairAlpha;
564 int32 RandomDiffHue = Defaults::RandomDiffHue;
565 int32 RandomDiffSat = Defaults::RandomDiffSat;
566 int32 RandomDiffInt = Defaults::RandomDiffInt;
567 int32 RandomSpecInt = Defaults::RandomSpecInt;
570 int32 HasDiffRootTipBlend =
false;
571 int32 HasSpecRootTipBlend =
false;
572 int32 HasAlphaRootTipBlend =
false;
573 int32 HasDiffuse =
false;
574 int32 HasSpecular =
false;
577 int32 HasDiffuseUV =
false;
578 int32 HasSpecularUV =
false;
581 bool myTexDirtyFlag =
true;
611 if(enable != myEnableLighting)
613 myEnableLighting = enable;
614 myBlockDirtyFlag =
true;
620 if (
id != mySurfShaderID) { resetResources(); }
625 {
if (
id != mySurfShaderID) { resetResources(); }
626 myCurveShaderID =
id; }
636 bool &created)
override;
641 { myCachedName = std::move(name); }
648 if (myCachedName.isEmpty())
650 name.
format(
"{}?{}", myCachedName,
id());
654 if (myCachedName.isEmpty())
656 name.
format(
"{}?{}&curve", myCachedName,
id());
684 void resetResources();
688 bool myShaderDirty =
true;
689 bool myTexturesDirty =
true;
690 bool myEnableLighting =
true;
691 bool myBadShader =
false;
692 bool myShaderCompiled =
true;
693 bool mySurfShaderAssigned =
false;
694 bool myCurveShaderAssigned =
false;
695 exint myMatXVersion = 0;
699 bool is_color =
true;
718 exint mySurfShaderID=0;
719 exint myCurveShaderID=0;
722 #define LAYER_INST(NAME, TYPE) \
723 TYPE get##NAME(int idx) const { return myLayer.layer[idx].NAME; } \
724 void set##NAME(int idx, const TYPE &v) \
725 { if(myLayer.layer[idx].NAME != v) { myLayer.layer[idx].NAME=v; myLayerDirtyFlag=true; } } \
729 #define LAYER_PARM(NAME, TYPE) \
730 TYPE get##NAME() const { return myLayer.NAME; } \
731 void set##NAME(const TYPE &v) \
732 { if(myLayer.NAME != v) { myLayer.NAME=v; myLayerDirtyFlag=true; } } \
790 bool &created)
override;
811 int32 UseTint =
true;
812 int32 HasMap =
false;
813 int32 UseTriplanar =
false;
826 int32 UseBlendMap =
false;
827 int32 HasTriplanar =
false;
832 bool myTexDirtyFlag =
true;
833 bool myLayerDirtyFlag =
true;
834 int64 myDisplaceVersion = 0;
835 int64 myNormalVersion = 0;
836 int64 myColorVersion = 0;
837 int64 myBlendVersion = 0;
838 bool myClampToEdge[10];
849 #undef TEXMAP_PARM_VK
void enableLighting(bool enable)
A collection of Vulkan UBO, SSBO, and Image shader bindings (descriptor set)
void dirty(bool dirty=true)
const UT_StringHolder & getUVSet() const
virtual RV_ShaderProgram * getSurfaceShader() const
GT_API const UT_StringHolder filename
bool isShaderCompiled() const
void dirtyTextures() override
#define LAYER_INST(NAME, TYPE)
OIIO_UTIL_API bool copy(string_view from, string_view to, std::string &err)
#define LAYER_PARM(NAME, TYPE)
#define TEX_PARM(TYPE, NAME)
void dirtyTextures() override
virtual void update(const GR_MaterialParms &options)=0
int64 getMatXNodeVersion() const
bool initMaterialSetForRender(RV_Render *r, RV_ShaderProgram *shader, bool &created) override
UT_NON_COPYABLE(GR_Material)
void setUVSet(const UT_StringRef &set)
void update(const GR_MaterialParms &options) override
void setMatXNodeVersion(int64 version)
#define TEXMAP_PARM(NAME, MAP)
GLenum GLuint GLint GLint layer
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
UT_NON_COPYABLE(GR_SimpleMaterial)
void dirtyTextures() override
vint4 blend(const vint4 &a, const vint4 &b, const vbool4 &mask)
void setCurveShaderAssigned(bool comp)
void setShaderDirty(bool dirty)
Abstract data class for an array of float, int or string data.
bool isCurveShaderAssigned() const
void setCachedName(UT_StringHolder &name)
void setUDIM(const UT_Vector4i &udim)
void setVertexOverrides(const UT_StringMap< UT_StringHolder > &ovr)
const UT_StringMap< UT_StringHolder > & vertexOverrides() const
GLuint const GLchar * name
virtual bool initBlocks(RV_Render *r, const GR_DisplayOption *opts)=0
const UT_StringHolder & cachedName() const
#define MATPARM(TYPE, NAME)
GT_API const UT_StringHolder version
virtual bool initMaterialSetForRender(RV_Render *r, RV_ShaderProgram *shader, bool &created)=0
size_t format(const char *fmt, const Args &...args)
More of a builtin material for the MatCap display mode.
GLenum GLsizei GLsizei GLint * values
void makeUniqueCachedName(UT_WorkBuffer &name) const
bool isSurfShaderAssigned() const
virtual RV_ShaderProgram * getCurveShader() const
void setSurfShaderAssigned(bool comp)
void setSurfaceShader(exint id)
#define HAIR_PARM(TYPE, NAME)
bool isShaderDirty() const
This is a fast, non-string access and cut-down version of UT_Options.
void makeCachedCurveName(UT_WorkBuffer &name) const
GA_API const UT_StringHolder Alpha
bool initBlocks(RV_Render *r, const GR_DisplayOption *opts) override
void setShaderCompiled(bool comp)
void setCurveShader(exint id)
void dirtyTextures() override