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;} }
81 &myShadow,
sizeof(Shadow));
86 bool is_raytrace)
override;
93 unsigned shadowmap_size,
96 unsigned shadowmap_index)
override;
100 bool hasShadowMap()
override {
return myShadowMap.get(); }
108 int32 UseSpecular =
true;
114 InvXformsArray InvXforms;
121 bool myShadowMapDirtyFlag =
true;
161 if(myProjectMap != map_name || myProjectMapOpId != op_id)
163 myProjectMap = map_name;
164 myProjectMapOpId = op_id;
166 myProjectMapRef.reset();
188 &myShadow,
sizeof(Shadow));
193 bool is_raytrace)
override;
197 friend class GR_PointShadowMap;
198 bool shouldUseCubeMap();
202 unsigned shadowmap_size,
205 unsigned shadowmap_index)
override;
210 bool hasShadowMap()
override {
return myShadowMap.get(); }
239 int32 HasSpot =
false;
240 int32 HasProject =
false;
241 int32 ProjectClamp =
false;
242 int32 HasAttenRamp =
false;
252 bool myTexDirty =
true;
254 int myProjectMapOpId = -999;
259 bool myShadowMapDirtyFlag =
true;
282 bool is_raytrace)
override;
287 unsigned shadowmap_size,
315 if(myEnvMap != map_name || myEnvMapOpId != op_id)
318 myEnvMapOpId = op_id;
319 if(map_name.
isstring() != (myLight.HasMap!=0))
321 myLight.HasMap = map_name.
isstring();
332 else if (myEnvMapOpId && !myIsSkyMap)
352 createAndCacheSkyMap(r, myEnvMap, 256,
353 myGroundColor,myGroundAlbedo, myTurbidity,
354 myHorizonBlur,myAltitude,myAzimuth);
370 bool is_raytrace)
override;
380 if(gcol != myGroundColor || galbedo != myGroundAlbedo ||
381 turbidity != myTurbidity || horizon_blur != myHorizonBlur ||
382 solar_altitude != myAltitude || solar_azimuth != myAzimuth)
384 myGroundColor = gcol;
385 myGroundAlbedo = galbedo;
386 myTurbidity = turbidity;
387 myHorizonBlur = horizon_blur;
388 myAltitude = solar_altitude;
389 myAzimuth = solar_azimuth;
394 myLight.HasMap =
true;
400 bool hasMap()
const {
return myLight.HasMap; }
429 fpreal myHorizonBlur = 0.0;
433 bool myTexDirty =
true;
434 bool myIsSkyMap =
false;
436 int myEnvMapOpId = -999;
483 unsigned shadowmap_size,
486 unsigned shadowmap_index)
override;
499 bool is_raytrace)
override;
520 int32 IsSingleSided =
false;
525 int32 IsReversed =
false;
529 int32 UseBoundingRadius = 0;
530 int32 UseSpotlight = 0;
548 bool myShadowMapDirtyFlag =
true;
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
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
Temporary container for either a RV_Render and an RE_Render.
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 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)
#define SHADOWPARM(TYPE, NAME)
const UT_Matrix4F & getTransform() const
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)
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