10 #ifndef GR_MaterialTypes_h
11 #define GR_MaterialTypes_h
36 #define PARMKEY(NAME) static exint NAME();
38 #define MATPARM(TYPE, NAME) \
39 TYPE get##NAME() const { return mySimpleBlock.NAME; } \
40 void set##NAME(const TYPE &v) \
41 { if(mySimpleBlock.NAME != v) { mySimpleBlock.NAME=v; myBlockDirtyFlag=true; } } \
76 bool &created)
override;
87 struct SimpleMaterialBlock
112 int32 AlphaMode = ALPHA_BLEND;
118 int32 CoatSpecModel = 2;
119 int32 UseGeoColor = 1;
120 int32 UsePackedColor = 1;
121 int32 HasTextures = 0;
131 #define TEX_PARM(TYPE, NAME) \
132 TYPE get##NAME() const { return myTextureBlock.NAME; } \
133 void set##NAME(const TYPE &v) \
134 { if(myTextureBlock.NAME != v) \
135 { myTextureBlock.NAME=v; myTexBlockDirtyFlag=true; } \
140 #define TEXMAP_PARM(NAME, MAP) \
141 UT_StringHolder get##NAME() const { return my##NAME; } \
142 void set##NAME(const UT_StringHolder &v) \
143 { if(my##NAME != v) { my##NAME=v; my##MAP.reset(); myTexDirtyFlag=true; } } \
144 void set##NAME##Fallback(const UT_Vector4F &f) \
145 { if(my##NAME##Fallback!=f) { my##NAME##Fallback=f; myTexDirtyFlag=true; }} \
147 UT_StringHolder my##NAME; \
148 UT_Vector4F my##NAME##Fallback; \
149 RV_TextureRef my##MAP
151 #define TEXMAP_PARM(NAME, MAP) \
152 UT_StringHolder get##NAME() const { return my##NAME; } \
153 void set##NAME(const UT_StringHolder &v) \
154 { if(my##NAME != v) { my##NAME=v; myTexDirtyFlag=true; } } \
155 void set##NAME##Fallback(const UT_Vector4F &f) \
156 { if(my##NAME##Fallback!=f) { my##NAME##Fallback=f; myTexDirtyFlag=true; }} \
158 UT_Vector4F my##NAME##Fallback; \
159 UT_StringHolder my##NAME
262 bool &created)
override;
312 int32 HasDiffuse =
false;
313 int32 HasSpecular =
false;
314 int32 HasOpacity =
false;
315 int32 HasEmission =
false;
316 int32 HasNormal =
false;
317 int32 HasRough =
false;
318 int32 HasDisplace =
false;
319 int32 HasOcclusion =
false;
320 int32 HasMetallic =
false;
321 int32 HasCoatInt =
false;
322 int32 HasCoatRough =
false;
323 int32 HasReflectInt =
false;
325 int32 HasDiffuseUV =
false;
326 int32 HasSpecularUV =
false;
327 int32 HasOpacityUV =
false;
328 int32 HasEmissionUV =
false;
329 int32 HasNormalUV =
false;
330 int32 HasRoughUV =
false;
331 int32 HasDisplaceUV =
false;
332 int32 HasOcclusionUV =
false;
333 int32 HasMetallicUV =
false;
334 int32 HasCoatIntUV =
false;
335 int32 HasCoatRoughUV =
false;
336 int32 HasReflectIntUV =
false;
338 int32 NormalMapType = 0;
340 int32 DisplaceSpace = 0;
344 int32 DisplaceYUp =
true;
346 int32 InvertOpacity =
false;
347 int32 UseMatCap =
false;
348 int32 InvertRough =
false;
349 int32 ReflectAsIOR=
false;
352 bool myTexDirtyFlag =
true;
353 bool myTexBlockDirtyFlag =
true;
361 #define HAIR_PARM(TYPE, NAME) \
362 TYPE get##NAME() const { return myHairBlock.NAME; } \
363 void set##NAME(const TYPE &v) \
364 { if(myHairBlock.NAME != v) { myHairBlock.NAME=v; myBlockDirtyFlag=true; } } \
373 static constexpr
int32 DiffUseBaseMap = 0;
374 static constexpr
int32 DiffUseBlendRamp = 0;
380 static constexpr
int32 SpecUseBaseMap = 0;
381 static constexpr
int32 SpecUseBlendRamp = 0;
383 static constexpr
int32 AlphaUseRamp = 0;
384 static constexpr
int32 RandomDiffHue = 0;
386 static constexpr
int32 RandomDiffSat = 0;
388 static constexpr
int32 RandomDiffInt = 0;
390 static constexpr
int32 RandomSpecInt = 0;
424 TEXMAP_PARM(DiffRootTipBlendMap, DiffRootTipBlendID);
425 TEXMAP_PARM(SpecRootTipBlendMap, SpecRootTipBlendID);
426 TEXMAP_PARM(AlphaRootTipBlendMap, AlphaRootTipBlendID);
450 bool &created)
override;
475 Defaults::RandomDiffHueRange;
477 Defaults::RandomDiffSatRange;
479 Defaults::RandomDiffIntRange;
481 Defaults::RandomSpecIntRange;
485 fpreal32 DiffIntensity = Defaults::DiffIntensity;
487 fpreal32 SpecIntensity = Defaults::SpecIntensity;
488 fpreal32 SpecAngle = Defaults::SpecAngle;
489 fpreal32 SpecShift = Defaults::SpecShift;
491 fpreal32 HairAlpha = Defaults::HairAlpha;
493 int32 RandomDiffHue = Defaults::RandomDiffHue;
494 int32 RandomDiffSat = Defaults::RandomDiffSat;
495 int32 RandomDiffInt = Defaults::RandomDiffInt;
496 int32 RandomSpecInt = Defaults::RandomSpecInt;
499 int32 HasDiffRootTipBlend =
false;
500 int32 HasSpecRootTipBlend =
false;
501 int32 HasAlphaRootTipBlend =
false;
502 int32 HasDiffuse =
false;
503 int32 HasSpecular =
false;
506 int32 HasDiffuseUV =
false;
507 int32 HasSpecularUV =
false;
510 bool myTexDirtyFlag =
true;
539 if(enable != myEnableLighting)
541 myEnableLighting = enable;
542 myBlockDirtyFlag =
true;
547 { mySurfShaderID =
id; }
550 { myCurveShaderID =
id; }
560 bool &created)
override;
564 { myCachedName = std::move(name); }
583 bool myShaderDirty =
true;
584 bool myTexturesDirty =
true;
585 bool myEnableLighting =
true;
586 bool myBadShader =
false;
587 bool myShaderCompiled =
true;
588 exint myMatXVersion = 0;
592 bool is_color =
true;
608 exint mySurfShaderID=0;
609 exint myCurveShaderID=0;
612 #define LAYER_INST(NAME, TYPE) \
613 TYPE get##NAME(int idx) const { return myLayer.layer[idx].NAME; } \
614 void set##NAME(int idx, const TYPE &v) \
615 { if(myLayer.layer[idx].NAME != v) { myLayer.layer[idx].NAME=v; myLayerDirtyFlag=true; } } \
619 #define LAYER_PARM(NAME, TYPE) \
620 TYPE get##NAME() const { return myLayer.NAME; } \
621 void set##NAME(const TYPE &v) \
622 { if(myLayer.NAME != v) { myLayer.NAME=v; myLayerDirtyFlag=true; } } \
680 bool &created)
override;
699 int32 UseTint =
true;
700 int32 HasMap =
false;
701 int32 UseTriplanar =
false;
714 int32 UseBlendMap =
false;
715 int32 HasTriplanar =
false;
720 bool myTexDirtyFlag =
true;
721 bool myLayerDirtyFlag =
true;
722 int64 myDisplaceVersion = 0;
723 int64 myNormalVersion = 0;
724 int64 myColorVersion = 0;
725 int64 myBlendVersion = 0;
726 bool myClampToEdge[10];
737 #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)
virtual RV_ShaderProgram * getSurfaceShader() const
GT_API const UT_StringHolder filename
#define LAYER_INST(NAME, TYPE)
#define LAYER_PARM(NAME, TYPE)
#define TEX_PARM(TYPE, NAME)
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 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)
vint4 blend(const vint4 &a, const vint4 &b, const vbool4 &mask)
void setShaderDirty(bool dirty)
Abstract data class for an array of float, int or string data.
void setCachedName(UT_StringHolder &name)
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
GLenum GLsizei GLsizei GLint * values
virtual RV_ShaderProgram * getCurveShader() const
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.
GA_API const UT_StringHolder Alpha
bool initBlocks(RV_Render *r, const GR_DisplayOption *opts) override
void setShaderCompiled(bool comp)
void setCurveShader(exint id)