50 #define SET_GLOBAL(name, v) \
51 if (((const GR_Uniforms*)this)->globals().name != (v)) \
52 { globals().name = (v); } \
70 exint pushObjectUniforms();
71 void popObjectUniforms(
exint l=-1);
96 void assignRVBindings(
121 objects().myModel =
v;
126 objects().myInvModel = *inv;
130 objects().myInvModel = objects().myModel;
131 objects().myInvModel.invert();
137 objects().myModelView = objects().myModel * global_var.
myView;
139 objects().myModelF = objects().myModel;
140 objects().myInvModelF = objects().myInvModel;
141 objects().myModelViewF = objects().myModelView;
150 globals().myView =
v;
153 globals().myInvView = globals().myView;
154 globals().myInvView.invert();
156 globals().myNormalMat = globals().myView;
157 globals().myNormalMat.invert();
158 globals().myNormalMat.transpose();
160 globals().myViewF = globals().myView;
161 globals().myInvViewF = globals().myInvView;
162 globals().myNormalMatF = globals().myNormalMat;
163 globals().myNormalMatFr1 = globals().myNormalMat[0];
164 globals().myNormalMatFr2 = globals().myNormalMat[1];
165 globals().myNormalMatFr3 = globals().myNormalMat[2];
167 objects().myModelView = globals().myView * objects().myModel;
168 objects().myModelViewF = objects().myModelView;
179 globals().myProjection =
v;
182 globals().myInvProjection = globals().myProjection;
183 globals().myInvProjection.invert();
191 0.0
f, 1.0
f, 0.0
f, 0.0
f,
192 0.0
f, 0.0
f, 0.5
f, 0.0
f,
193 0.0
f, 0.0
f, 0.5
f, 1.0
f);
194 globals().myProjectionF =
198 globals().myProjectionF =
UT_Matrix4F(globals().myProjection);
199 globals().myInvProjectionF = globals().myProjectionF;
200 globals().myInvProjectionF.invert();
201 globals().myIsOrtho = is_ortho;
224 { renderInfo().myExcludeGsplatShadowCasters =
v; }
226 {
return renderInfo().myExcludeGsplatShadowCasters; }
253 objects().myConstColorMap =
v;
254 objects().myConstColorEnableVK = v.
isVulkan();
255 objects().myConstColorEnableGL = v.
isGL();
260 objects().myEmitColor =
c;
264 objects().myGhostColor =
v;
265 objects().myGhostFactor = gfact;
266 objects().myHasGhosting =
true;
273 objects().myBackfaceColor =
UT_Vector4(v, gfact);
274 objects().myHasBackfaceTint =
true;
304 { objects().myPickBaseID =
v; }
306 {
return objects().myPickBaseID; }
309 { objects().myPickComponentID =
v; }
311 {
return objects().myPickComponentID; }
314 { objects().myPickDepthPass =
v; }
316 {
return objects().myPickDepthPass; }
320 objects().myColorRamp =
v;
321 objects().myColorRampEnableVK = v.
isVulkan();
322 objects().myColorRampEnableGL = v.
isGL();
324 objects().myColorRange =
range;
329 objects().myColorIgnoreGeo =
v;
333 return objects().myColorIgnoreGeo;
340 objects().myColorIgnoreGeo = -1;
345 objects().myColorTransformMode =
mode;
346 objects().myColorTransformRef =
ref;
351 objects().myUseInstancePrimId =
v;
355 { objects().myMaxLocatedId =
v; }
358 {
return objects().myMaxLocatedId; }
361 { objects().myMinLocatedId =
v; }
364 {
return objects().myMinLocatedId; }
369 objects().myLocatedBufVK =
buf;
370 objects().myUseLocatedBufVK = buf ? 1 : 0;
376 objects().myLocatedBufGL =
buf;
377 objects().myUseLocatedBufGL = buf ? 1 : 0;
381 { objects().myLightingEnabled =
v; }
384 {
return objects().myLightingEnabled; }
387 { objects().myTexturesEnabled =
v; }
390 {
return objects().myTexturesEnabled; }
393 { objects().myAlphaCutoff =
cut; }
396 {
return objects().myAlphaCutoff; }
402 #define VK_BLOCK_START (offsetof(ObjectUniforms, myModelF))
414 int mySelectMode = 0;
415 int mySelectType = 0;
416 int mySelectInstance = 0;
417 int myFillSelection = 0;
419 int myPrimConstantID = 0;
420 int myPrimInstanceBase = 0;
450 #define VK_BLOCK_END (offsetof(ObjectUniforms, myAlphaCutoff )\
451 + sizeof(ObjectUniforms::myAlphaCutoff))
457 bool myHasPrimLightMask =
false;
460 bool myHasBackfaceTint =
false;
505 float getDiffuse()
const {
return globals().myDiffuseFactor; }
508 float getAmbient()
const {
return globals().myAmbientFactor; }
527 bool use_world_space)
572 RV_TextureRef &envlightMap() {
return globals().myEnvlightMapRef; }
573 RV_TextureRef &bgenvMap() {
return globals().myBGEnvMapRef; }
588 {
return RenderPass(globals().myRenderPass); }
595 globals().myCamView =
v;
602 globals().myCamProject =
v;
622 SET_GLOBAL(myPickHasMapVK, (use && globals().myPickMap.isVulkan()));
623 SET_GLOBAL(myPickHasMapGL, (use && globals().myPickMap.isGL()));
630 if (use && globals().myDepthMap.isVulkan())
640 SET_GLOBAL(myHasDepthMapGL, (use && globals().myDepthMap.isGL()));
657 bool myIsGlobalUniformLocked =
false;
660 myIsGlobalUniformLocked =
true;
664 myIsGlobalUniformLocked =
false;
666 bool myGlobalUniformDirty =
true;
668 #define UT_Vector2F_UBO alignas(8) UT_Vector2F
669 #define UT_Vector3F_UBO alignas(16) UT_Vector3F
670 #define UT_Vector4F_UBO alignas(16) UT_Vector4F
671 #define UT_Vector2i_UBO alignas(8) UT_Vector2i
672 #define UT_Vector3i_UBO alignas(16) UT_Vector3i
673 #define UT_Vector4i_UBO alignas(16) UT_Vector4i
674 #define UT_Matrix4F_UBO alignas(16) UT_Matrix4F
678 #define VK_GLOBAL_BLOCK_START (offsetof(GlobalUniforms, myProjectionF))
708 int32 myRenderPass = RENDER_MATERIAL;
742 float myDecorOcclusionFade = 1.0;
767 #define VK_GLOBAL_BLOCK_END (offsetof(GlobalUniforms, myUseEnvlight ) \
768 + sizeof(GlobalUniforms::myUseEnvlight))
806 bool myExcludeGsplatShadowCasters =
false;
810 static void initStaticResources(
RV_Instance* inst);
811 static void cleanupStaticResources();
813 static void prepareThreadedUniforms(
exint num_threads);
814 static void returnThreadedUniforms();
817 static void returnForThread(
int*
level);
822 return myObjectUniforms.last();
826 return myObjectUniforms.last();
832 myGlobalUniformDirty =
true;
833 return myGlobalUniforms;
837 return myGlobalUniforms;
851 GlobalUniforms myGlobalUniforms;
852 RenderInfo myRenderInfo;
858 bool myIsREPushed =
false;
875 bool myUseVulkanProjection =
false;
888 bool* out_is_new_or_dirty);
890 gr_SetCache myGlobalSet;
A collection of Vulkan UBO, SSBO, and Image shader bindings (descriptor set)
GLenum GLuint GLenum GLsizei const GLchar * buf
GA_API const UT_StringHolder rot
Opaque reference to a texture stored in the RV_TextureCache.
A class that manages material assignments to different groups of primitives.
Temporary container for either a RV_Render and an RE_Render.
GR_API bool createOrReuseSet(RV_Render *r, UT_UniquePtr< RV_ShaderVariableSet > &set, int set_num, const RV_ShaderProgramBase *shader, bool *created=nullptr, const char *name=nullptr)
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
RE_TextureDimension getTextureType() const
UT_Vector4T< float > UT_Vector4
std::array< T, N > UT_FixedArray
constexpr auto set(type rhs) -> int
UT_Matrix4T< fpreal32 > UT_Matrix4F
Handle to the main interface of Vulkan.
UT_Vector3T< fpreal32 > UT_Vector3F
ImageBuf OIIO_API cut(const ImageBuf &src, ROI roi={}, int nthreads=0)
UT_Vector2T< fpreal32 > UT_Vector2F
UT_Vector4T< fpreal32 > UT_Vector4F
FMT_INLINE void print(format_string< T...> fmt, T &&...args)