11 #ifndef GR_LightTypes_h
12 #define GR_LightTypes_h
27 class GR_DistantShadowMap;
28 class GR_PointShadowMap;
34 #define LIGHTPARM(TYPE, NAME) \
35 TYPE get##NAME() const { return myLight.NAME; } \
36 void set##NAME(const TYPE &v) \
37 { if(myLight.NAME != v) { myLight.NAME=v; myDirtyFlag=true; } }
38 #define SHADOWPARM(TYPE, NAME) \
39 TYPE get##NAME() const { return myShadow.NAME; } \
40 void set##NAME(const TYPE &v) \
41 { if(myShadow.NAME != v) { myShadow.NAME=v; myShadowDirtyFlag=true; } }
43 #define LIGHTPARM_SM(TYPE, NAME) \
44 TYPE get##NAME() const { return myLight.NAME; } \
45 void set##NAME(const TYPE &v) \
46 { if(myLight.NAME != v) { \
47 myLight.NAME=v; myDirtyFlag=true; myShadowMapDirtyFlag=true; } }
48 #define SHADOWPARM_SM(TYPE, NAME) \
49 TYPE get##NAME() const { return myShadow.NAME; } \
50 void set##NAME(const TYPE &v) \
51 { if(myShadow.NAME != v) { \
52 myShadow.NAME=v; myShadowDirtyFlag=true; \
53 myShadowMapDirtyFlag=true;} }
82 &myShadow,
sizeof(Shadow));
87 bool is_raytrace)
override;
94 unsigned shadowmap_size,
97 unsigned shadowmap_index)
override;
101 bool hasShadowMap()
override {
return myShadowMap.get(); }
107 unsigned shadowmap_size,
110 unsigned shadowmap_index)
override;
122 int32 UseSpecular =
true;
129 InvXformsArray InvXforms;
136 bool myShadowMapDirtyFlag =
true;
178 if(myProjectMap != map_name || myProjectMapOpId != op_id)
180 myProjectMap = map_name;
181 myProjectMapOpId = op_id;
182 myProjectMapRef.reset();
199 &myShadow,
sizeof(Shadow));
204 bool is_raytrace)
override;
207 bool shouldUseCubeMap();
210 friend class GR_PointShadowMap;
214 unsigned shadowmap_size,
217 unsigned shadowmap_index)
override;
227 unsigned shadowmap_size,
230 unsigned shadowmap_index)
override;
263 int32 HasSpot =
false;
264 int32 HasProject =
false;
265 int32 ProjectClamp =
false;
266 int32 HasAttenRamp =
false;
276 bool myTexDirty =
true;
278 int myProjectMapOpId = -999;
281 bool myShadowMapDirtyFlag =
true;
306 bool is_raytrace)
override;
311 unsigned shadowmap_size,
339 if(myEnvMap != map_name || myEnvMapOpId != op_id)
342 myEnvMapOpId = op_id;
343 if(map_name.
isstring() != (myLight.HasMap!=0))
345 myLight.HasMap = map_name.
isstring();
352 else if (myEnvMapOpId && !myIsSkyMap)
370 createAndCacheSkyMap(r, myEnvMap, 256,
371 myGroundColor,myGroundAlbedo, myTurbidity,
372 myHorizonBlur,myAltitude,myAzimuth);
386 bool is_raytrace)
override;
396 if(gcol != myGroundColor || galbedo != myGroundAlbedo ||
397 turbidity != myTurbidity || horizon_blur != myHorizonBlur ||
398 solar_altitude != myAltitude || solar_azimuth != myAzimuth)
400 myGroundColor = gcol;
401 myGroundAlbedo = galbedo;
402 myTurbidity = turbidity;
403 myHorizonBlur = horizon_blur;
404 myAltitude = solar_altitude;
405 myAzimuth = solar_azimuth;
410 myLight.HasMap =
true;
416 bool hasMap()
const {
return myLight.HasMap; }
445 fpreal myHorizonBlur = 0.0;
449 bool myTexDirty =
true;
450 bool myIsSkyMap =
false;
452 int myEnvMapOpId = -999;
499 unsigned shadowmap_size,
502 unsigned shadowmap_index)
override;
515 bool is_raytrace)
override;
536 int32 IsSingleSided =
false;
541 int32 IsReversed =
false;
545 int32 UseBoundingRadius = 0;
546 int32 UseSpotlight = 0;
564 bool myShadowMapDirtyFlag =
true;
virtual void finishGsplatShadowRenders(RE_RenderContext)
GR_AmbientLight(const UT_StringHolder &name)
Area light. Light whose source has a funky shape.
bool needsShadowMap() override
UT_UniquePtr< RV_Geometry > & getGeometry()
bool needsShadowMap() override
virtual void startGsplatShadowRender(RE_RenderContext, unsigned shadowmap_index)
Distant (infinite) light. Rays parallel.
void initTexParms(RV_Render *r, const GR_CommonDispOption &opts, RV_TextureParms &parms) const
virtual bool needsShadowMap()=0
virtual bool hasShadowMap()=0
virtual RV_ShaderProgram * getShader(bool shadows, bool per_sample, bool is_antialiased, bool is_raytrace)=0
Object that represents drawable geometry. This object holds vertex, instancing and index buffers for ...
bool canRayTraceShadow() const override
void setShape(const Shapes shape)
void setTransform(const UT_Matrix4F &t)
Opaque reference to a texture stored in the RV_TextureCache.
Distant (infinite) light. Rays parallel.
virtual void clearShadowMap()
bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
virtual unsigned setupGsplatShadowRenders(RE_RenderContext, GR_RenderMode &out_render_mode, bool scene_changed, unsigned shadowmap_size, const GR_DistantShadowMapParms &)
Temporary container for either a RV_Render and an RE_Render.
virtual void clearGsplatShadowMap()
int projectMapOpId() const
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
virtual void startShadowRender(RE_RenderContext rc, unsigned shadowmap_index)
static void checkTextureDirty(RV_TextureRef &map, bool &dirty)
void privBindTexture(RV_Render *r, const UT_StringHolder &map_name, int rel_op_id, RV_TextureRef &map_id, const UT_StringHolder &sampler_name, const GR_CommonDispOption &opts, RV_TextureParms *tex_parms=nullptr, bool is_cube=false)
GLint GLint GLsizei GLint GLenum GLenum type
std::array< T, N > UT_FixedArray
bool privInitBlocks(RV_Render *r, void *light_block, int light_size, void *shadow_block, int shadow_size)
const UT_StringHolder & envMap() const
bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
bool hasShadowMap() override
#define LIGHTPARM_SM(TYPE, NAME)
bool hasShadowMap() override
const UT_StringHolder & projectMap() const
virtual bool canRayTraceShadow() const
Base class for all light types.
GLuint const GLchar * name
virtual void finishGsplatShadowRender(RE_RenderContext)
virtual unsigned setupShadowRenders(RE_RenderContext, GR_RenderMode &out_render_mode, bool scene_changed, unsigned shadowmap_size, const GR_DistantShadowMapParms &)=0
unsigned setupShadowRenders(RE_RenderContext, GR_RenderMode &out_render_mode, bool scene_changed, unsigned shadowmap_size, const GR_DistantShadowMapParms &) override
UT_NON_COPYABLE(GR_Light)
bool hasShadowMap() override
#define SHADOWPARM(TYPE, NAME)
const UT_Matrix4F & getTransform() const
virtual bool hasGsplatShadowMap()
virtual void attachShadowMap(RE_RenderContext)
GLfloat GLfloat GLfloat GLfloat h
GA_API const UT_StringHolder parms
virtual void finishShadowRenders(RE_RenderContext)
void setEnvMap(const UT_StringHolder &map_name, int op_id)
void setGeometryLook(GUI_DetailLook *look)
virtual bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts)=0
GR_EnvLight(const UT_StringHolder &name)
GLubyte GLubyte GLubyte GLubyte w
#define LIGHTPARM(TYPE, NAME)
bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
virtual void finishShadowRender(RE_RenderContext)
virtual void attachGsplatShadowMap(RE_RenderContext)
GUI_DetailLook * getGeometryLook() const
#define SHADOWPARM_SM(TYPE, NAME)
bool setSkyMapParms(const char *map_name, const UT_Vector3F &gcol, const UT_Vector3F &galbedo, fpreal turbidity, fpreal horizon_blur, fpreal solar_altitude, fpreal solar_azimuth)
Environment light. Infinitely far away incoming rays from all directions.
void setProjectMap(const UT_StringHolder &map_name, int op_id)
virtual void setShadowMask(const UT_StringHolder &mask)
SYS_FORCE_INLINE bool isstring() const
void setSize(fpreal w, fpreal h)
bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override