50 #define SET_GLOBAL(name, v) \
51 if (((const GR_Uniforms*)this)->globals().name != v) \
52 { globals().name = (v); } \
69 exint pushObjectUniforms();
70 void popObjectUniforms(
exint l=-1);
92 void assignRVBindings(
109 objects().myModel =
v;
114 objects().myInvModel = *inv;
118 objects().myInvModel = objects().myModel;
119 objects().myInvModel.invert();
125 objects().myModelView = objects().myModel * global_var.
myView;
127 objects().myModelF = objects().myModel;
128 objects().myInvModelF = objects().myInvModel;
129 objects().myModelViewF = objects().myModelView;
138 globals().myView =
v;
141 globals().myInvView = globals().myView;
142 globals().myInvView.invert();
144 globals().myNormalMat = globals().myView;
145 globals().myNormalMat.invert();
146 globals().myNormalMat.transpose();
148 globals().myViewF = globals().myView;
149 globals().myInvViewF = globals().myInvView;
150 globals().myNormalMatF = globals().myNormalMat;
151 globals().myNormalMatFr1 = globals().myNormalMat[0];
152 globals().myNormalMatFr2 = globals().myNormalMat[1];
153 globals().myNormalMatFr3 = globals().myNormalMat[2];
155 objects().myModelView = globals().myView * objects().myModel;
156 objects().myModelViewF = objects().myModelView;
166 globals().myProjection =
v;
169 globals().myInvProjection = globals().myProjection;
170 globals().myInvProjection.invert();
178 0.0
f, 1.0
f, 0.0
f, 0.0
f,
179 0.0
f, 0.0
f, 0.5
f, 0.0
f,
180 0.0
f, 0.0
f, 0.5
f, 1.0
f);
181 globals().myProjectionF =
185 globals().myProjectionF =
UT_Matrix4F(globals().myProjection);
186 globals().myInvProjectionF = globals().myProjectionF;
187 globals().myInvProjectionF.invert();
188 globals().myIsOrtho = is_ortho;
227 objects().myConstColorMap =
v;
228 objects().myConstColorEnableVK = v.
isVulkan();
229 objects().myConstColorEnableGL = v.
isGL();
234 objects().myEmitColor =
c;
238 objects().myGhostColor =
v;
239 objects().myGhostFactor = gfact;
240 objects().myHasGhosting =
true;
247 objects().myBackfaceColor =
UT_Vector4(v, gfact);
248 objects().myHasBackfaceTint =
true;
278 { objects().myPickBaseID =
v; }
280 {
return objects().myPickBaseID; }
283 { objects().myPickComponentID =
v; }
285 {
return objects().myPickComponentID; }
289 objects().myColorRamp =
v;
290 objects().myColorRampEnableVK = v.
isVulkan();
291 objects().myColorRampEnableGL = v.
isGL();
293 objects().myColorRange =
range;
298 objects().myColorIgnoreGeo =
v;
302 return objects().myColorIgnoreGeo;
309 objects().myColorIgnoreGeo = -1;
314 objects().myColorTransformMode =
mode;
315 objects().myColorTransformRef =
ref;
320 objects().myUseInstancePrimId =
v;
324 { objects().myMaxLocatedId =
v; }
327 {
return objects().myMaxLocatedId; }
330 { objects().myMinLocatedId =
v; }
333 {
return objects().myMinLocatedId; }
338 objects().myLocatedBufVK =
buf;
339 objects().myUseLocatedBufVK = buf ? 1 : 0;
345 objects().myLocatedBufGL =
buf;
346 objects().myUseLocatedBufGL = buf ? 1 : 0;
350 { objects().myLightingEnabled =
v; }
353 {
return objects().myLightingEnabled; }
356 { objects().myTexturesEnabled =
v; }
359 {
return objects().myTexturesEnabled; }
365 #define VK_BLOCK_START (offsetof(ObjectUniforms, myModelF))
377 int mySelectMode = 0;
378 int mySelectType = 0;
379 int mySelectInstance = 0;
380 int myFillSelection = 0;
382 int myPrimConstantID = 0;
383 int myPrimInstanceBase = 0;
412 #define VK_BLOCK_END (offsetof(ObjectUniforms, myTexturesEnabled )\
413 + sizeof(ObjectUniforms::myTexturesEnabled))
419 bool myHasPrimLightMask =
false;
422 bool myHasBackfaceTint =
false;
467 float getDiffuse()
const {
return globals().myDiffuseFactor; }
470 float getAmbient()
const {
return globals().myAmbientFactor; }
486 bool use_world_space)
527 RV_TextureRef &envlightMap() {
return globals().myEnvlightMapRef; }
528 RV_TextureRef &bgenvMap() {
return globals().myBGEnvMapRef; }
543 {
return RenderPass(globals().myRenderPass); }
566 SET_GLOBAL(myPickHasMapVK, (use && globals().myPickMap.isVulkan()));
567 SET_GLOBAL(myPickHasMapGL, (use && globals().myPickMap.isGL()));
573 SET_GLOBAL(myHasDepthMapVK, (use && globals().myDepthMap.isVulkan()));
574 SET_GLOBAL(myHasDepthMapGL, (use && globals().myDepthMap.isGL()));
590 bool myIsGlobalUniformLocked =
false;
593 myIsGlobalUniformLocked =
true;
597 myIsGlobalUniformLocked =
false;
599 bool myGlobalUniformDirty =
true;
601 #define UT_Vector2F_UBO alignas(8) UT_Vector2F
602 #define UT_Vector3F_UBO alignas(16) UT_Vector3F
603 #define UT_Vector4F_UBO alignas(16) UT_Vector4F
604 #define UT_Vector2i_UBO alignas(8) UT_Vector2i
605 #define UT_Vector3i_UBO alignas(16) UT_Vector3i
606 #define UT_Vector4i_UBO alignas(16) UT_Vector4i
607 #define UT_Matrix4F_UBO alignas(16) UT_Matrix4F
611 #define VK_GLOBAL_BLOCK_START (offsetof(GlobalUniforms, myProjectionF))
640 int32 myRenderPass = RENDER_MATERIAL;
674 float myDecorOcclusionFade = 1.0;
697 #define VK_GLOBAL_BLOCK_END (offsetof(GlobalUniforms, myUseEnvlight ) \
698 + sizeof(GlobalUniforms::myUseEnvlight))
728 static void initStaticResources(
RV_Instance* inst);
729 static void cleanupStaticResources();
731 static void prepareThreadedUniforms(
exint num_threads);
732 static void returnThreadedUniforms();
735 static void returnForThread(
int*
level);
740 return myObjectUniforms.last();
744 return myObjectUniforms.last();
750 myGlobalUniformDirty =
true;
751 return myGlobalUniforms;
755 return myGlobalUniforms;
760 GlobalUniforms myGlobalUniforms;
766 bool myIsREPushed =
false;
783 bool myUseVulkanProjection =
false;
796 bool* out_is_new_or_dirty);
798 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
UT_Vector2T< fpreal32 > UT_Vector2F
UT_Vector4T< fpreal32 > UT_Vector4F
FMT_INLINE void print(format_string< T...> fmt, T &&...args)