HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GR_LightTypes.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: GR_LightTypes.h (GR Library, C++)
7  *
8  * COMMENTS:
9  *
10  */
11 #ifndef GR_LightTypes_h
12 #define GR_LightTypes_h
13 
14 #include "GR_Light.h"
15 #include "GR_Defines.h"
16 
17 #include <RV/RV_Render.h>
18 #include <RV/RV_TextureCache.h>
19 #include <RV/RV_VKEnum.h>
20 
21 #include <UT/UT_StringHolder.h>
22 #include <UT/UT_VectorTypes.h>
23 #include <UT/UT_Vector3.h>
24 #include <UT/UT_Matrix4.h>
25 #include <UT/UT_UniquePtr.h>
26 
27 class GR_DistantShadowMap;
28 class GR_PointShadowMap;
29 class RV_Render;
30 class RV_Geometry;
31 class RV_ShaderProgram;
32 class GUI_DetailLook;
33 
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; } }
42 // parameters affecting the shadowmap
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;} }
54 
55 /// Distant (infinite) light. Rays parallel
57 {
58  typedef UT_FixedArray<UT_Matrix4F, 4> XformsArray;
59  typedef UT_FixedArray<UT_Matrix4F, 2> InvXformsArray;
60  typedef UT_FixedArray<fpreal32, 4> BiasesArray;
61  typedef UT_FixedArray<fpreal32, 4> DepthsArray;
62 public:
64  ~GR_DistantLight() override; // For UT_UniquePtr<> on WIN
66 
69  LIGHTPARM_SM(int32, WorldSpace);
70  LIGHTPARM(int32, UseSpecular);
71  LIGHTPARM(fpreal32, Softness);
72 
73  SHADOWPARM_SM(XformsArray, Xforms);
74  SHADOWPARM_SM(InvXformsArray, InvXforms);
75  SHADOWPARM_SM(BiasesArray, Biases);
76  SHADOWPARM_SM(DepthsArray, Depths);
77  SHADOWPARM(fpreal32, ShadowIntensity);
78 
79  bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
80  {
81  return privInitBlocks(r, &myLight, sizeof(Light),
82  &myShadow, sizeof(Shadow));
83  }
84 
85  RV_ShaderProgram *getShader(bool shadows, bool per_sample,
86  bool is_antialiased,
87  bool is_raytrace) override;
88 
89  void clearShadowMap() override;
90 private:
92  GR_RenderMode &out_render_mode,
93  bool scene_changed,
94  unsigned shadowmap_size,
95  const GR_DistantShadowMapParms&) override;
97  unsigned shadowmap_index) override;
98  void finishShadowRender(RE_RenderContext) override;
100  bool needsShadowMap() override { return true; }
101  bool hasShadowMap() override { return myShadowMap.get(); }
102  void attachShadowMap(RE_RenderContext) override;
103 
105  GR_RenderMode &out_render_mode,
106  bool scene_changed,
107  unsigned shadowmap_size,
108  const GR_DistantShadowMapParms&) override;
110  unsigned shadowmap_index) override;
113  bool hasGsplatShadowMap() override { return myGsplatShadowMap.get(); }
115  void clearGsplatShadowMap() override;
116 
117  struct Light
118  {
119  UT_Vector3F Dir = {0.0, 0.0, 1.0};
120  int32 WorldSpace = true;
121  UT_Vector3F Color = {1.0, 1.0, 1.0};
122  int32 UseSpecular = true;
123  fpreal32 Softness = 0.0;
124  } myLight;
125 
126  struct Shadow
127  {
128  XformsArray Xforms;
129  InvXformsArray InvXforms;
130  BiasesArray Biases;
131  DepthsArray Depths;
132  fpreal32 ShadowIntensity;
133  } myShadow;
134 
136  bool myShadowMapDirtyFlag = true;
137  // Secondary shadow map excluding gsplat casters
138  UT_UniquePtr<GR_DistantShadowMap> myGsplatShadowMap;
139 };
140 
141 // Point Light (spot or omni). Inifinitely small source.
143 {
144 public:
145  GR_PointLight(const UT_StringHolder &name);
146  ~GR_PointLight() override; // For UT_UniquePtr<> on WIN
148 
150  LIGHTPARM(UT_Vector4F, Focus);
153  LIGHTPARM(UT_Vector3F, LightX);
154  LIGHTPARM(UT_Vector3F, LightY);
156  LIGHTPARM(UT_Vector3F, Atten);
157  LIGHTPARM(UT_Vector2F, ActiveRadius);
158  LIGHTPARM(UT_Vector2F, AttenRange);
159  LIGHTPARM(UT_Vector2F, AttenRampRange);
160  LIGHTPARM(UT_Vector2F, LeftBarn);
161  LIGHTPARM(UT_Vector2F, RightBarn);
162  LIGHTPARM(UT_Vector2F, TopBarn);
163  LIGHTPARM(UT_Vector2F, BottomBarn);
164  LIGHTPARM_SM(fpreal32, Cutoff);
165  LIGHTPARM(fpreal32, Falloff);
166  LIGHTPARM(fpreal32, SpotRolloff);
167  LIGHTPARM(int32, HasSpot);
168  LIGHTPARM(int32, HasProject);
169  LIGHTPARM(int32, ProjectClamp);
170  LIGHTPARM(int32, HasAttenRamp);
171 
172  SHADOWPARM_SM(UT_Matrix4F, ShadowTransform);
173  SHADOWPARM_SM(fpreal32, ShadowBias);
174  SHADOWPARM(fpreal32, ShadowIntensity);
175 
176  void setProjectMap(const UT_StringHolder &map_name, int op_id)
177  {
178  if(myProjectMap != map_name || myProjectMapOpId != op_id)
179  {
180  myProjectMap = map_name;
181  myProjectMapOpId = op_id;
182  myProjectMapRef.reset();
183  myTexDirty = true;
184  }
185  }
186  const UT_StringHolder &projectMap() const { return myProjectMap; }
187  int projectMapOpId() const { return myProjectMapOpId; }
188 
189  bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
190  {
191  RV_TextureCache::checkTextureDirty(myProjectMapRef, myTexDirty);
192  if(myTexDirty)
193  {
194  myTexDirty = false;
195  privBindTexture(r, myProjectMap, myProjectMapOpId, myProjectMapRef,
196  "projectMap", opts);
197  }
198  return privInitBlocks(r, &myLight, sizeof(Light),
199  &myShadow, sizeof(Shadow));
200  }
201 
202  RV_ShaderProgram *getShader(bool shadows, bool per_sample,
203  bool is_antialiased,
204  bool is_raytrace) override;
205 
206  void clearShadowMap() override;
207  bool shouldUseCubeMap();
208  bool hasShadowMap() override { return myShadowMap.get(); }
209 private:
210  friend class GR_PointShadowMap;
212  GR_RenderMode &out_render_mode,
213  bool scene_changed,
214  unsigned shadowmap_size,
215  const GR_DistantShadowMapParms&) override;
217  unsigned shadowmap_index) override;
218  void finishShadowRender(RE_RenderContext) override;
219  void finishShadowRenders(RE_RenderContext) override;
220  bool needsShadowMap() override { return true; }
221  bool canRayTraceShadow() const override { return true; }
222  void attachShadowMap(RE_RenderContext) override;
223 
225  GR_RenderMode &out_render_mode,
226  bool scene_changed,
227  unsigned shadowmap_size,
228  const GR_DistantShadowMapParms&) override;
230  unsigned shadowmap_index) override;
233  bool hasGsplatShadowMap() override { return myGsplatShadowMap.get(); }
235  void clearGsplatShadowMap() override;
236 
237  struct Light
238  {
240  UT_Vector4F Focus = {0.0, 0.0, 0.0, 0.0};
241  UT_Vector3F Pos = {0.0, 0.0, 1.0};
242  fpreal32 unused1 = 0.0;
243  UT_Vector3F Dir = {0.0, 0.0, 1.0};
244  fpreal32 unused2 = 0.0;
245  UT_Vector3F LightX= {1.0, 0.0, 0.0};
246  fpreal32 unused3 = 0.0;
247  UT_Vector3F LightY= {0.0, 1.0, 0.0};
248  fpreal32 unused4 = 0.0;
249  UT_Vector3F Color = {1.0, 1.0, 1.0};
250  fpreal32 unused5 = 0.0;
251  UT_Vector3F Atten = {0.0, 0.0, 1.0};
252  fpreal32 unused6 = 0;
253  UT_Vector2F ActiveRadius = { 0.0, 1e20 };
254  UT_Vector2F LeftBarn = { 0.0, 0.0 };
255  UT_Vector2F RightBarn = { 0.0, 0.0 };
256  UT_Vector2F TopBarn = { 0.0, 0.0 };
257  UT_Vector2F BottomBarn = { 0.0, 0.0 };
258  UT_Vector2F AttenRange = { 0.0, 1e20 };
259  UT_Vector2F AttenRampRange = { 0.0, 0.0 };
260  fpreal32 Cutoff = -1.0;
261  fpreal32 Falloff = -1.0;
262  fpreal32 SpotRolloff = 1.0;
263  int32 HasSpot = false;
264  int32 HasProject = false;
265  int32 ProjectClamp = false;
266  int32 HasAttenRamp = false;
267  } myLight;
268 
269  struct Shadow
270  {
271  UT_Matrix4F ShadowTransform;
272  fpreal32 ShadowBias = 0.01;
273  fpreal32 ShadowIntensity = 1.0;
274  } myShadow;
275 
276  bool myTexDirty = true;
277  UT_StringHolder myProjectMap;
278  int myProjectMapOpId = -999;
279  RV_TextureRef myProjectMapRef;
280 
281  bool myShadowMapDirtyFlag = true;
283  // Secondary shadow map excluding gsplat casters (see GR_GaussianSplatVK).
284  UT_UniquePtr<GR_PointShadowMap> myGsplatShadowMap;
285 };
286 
287 /// Distant (infinite) light. Rays parallel
289 {
290 public:
292  : GR_Light(name, AMBIENT)
293  {}
294  ~GR_AmbientLight() override; // For UT_UniquePtr<> on WIN
296 
298 
299  bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
300  {
301  return privInitBlocks(r, &myLight, sizeof(Light), nullptr, 0);
302  }
303 
304  RV_ShaderProgram *getShader(bool shadows, bool per_sample,
305  bool is_antialiased,
306  bool is_raytrace) override;
307 
309  GR_RenderMode &out_render_mode,
310  bool scene_changed,
311  unsigned shadowmap_size,
312  const GR_DistantShadowMapParms&) override
313  { return 0; }
314  bool needsShadowMap() override { return false; }
315  bool hasShadowMap() override { return false; }
316 
317 private:
318  struct Light
319  {
320  UT_Vector3F Color = {1.0, 1.0, 1.0};
321  } myLight;
322 };
323 
324 /// Environment light. Infinitely far away incoming rays from all directions.
326 {
327 public:
329  : GR_Light(name, ENVIRONMENT)
330  {}
331  ~GR_EnvLight() override; // For UT_UniquePtr<> on WIN
333 
334  LIGHTPARM(UT_Matrix4F, EnvRotate);
336 
337  void setEnvMap(const UT_StringHolder &map_name, int op_id)
338  {
339  if(myEnvMap != map_name || myEnvMapOpId != op_id)
340  {
341  myEnvMap = map_name;
342  myEnvMapOpId = op_id;
343  if(map_name.isstring() != (myLight.HasMap!=0))
344  {
345  myLight.HasMap = map_name.isstring();
346  myDirtyFlag = true;
347  }
348 
349  myEnvMapRef.reset();
350  myTexDirty = true;
351  }
352  else if (myEnvMapOpId && !myIsSkyMap)
353  {
354  // always dirty Op textures
355  myTexDirty = true;
356  }
357  myIsSkyMap = false;
358  }
359  const UT_StringHolder &envMap() const { return myEnvMap; }
360  int envMapOpId() const { return myEnvMapOpId; }
361 
362  bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
363  {
364  RV_TextureCache::checkTextureDirty(myEnvMapRef, myTexDirty);
365  if(myTexDirty)
366  {
367  myTexDirty = false;
368  if(myIsSkyMap)
369  {
370  createAndCacheSkyMap(r, myEnvMap, 256,
371  myGroundColor,myGroundAlbedo, myTurbidity,
372  myHorizonBlur,myAltitude,myAzimuth);
373 
374  }
376  parms.MipMap = true;
377  initTexParms(r, opts, parms);
378  privBindTexture(r, myEnvMap, myEnvMapOpId, myEnvMapRef, "envMap",
379  opts, &parms, true);
380  }
381  return privInitBlocks(r, &myLight, sizeof(Light), nullptr, 0);
382  }
383 
384  RV_ShaderProgram *getShader(bool shadows, bool per_sample,
385  bool is_antialiased,
386  bool is_raytrace) override;
387 
388  bool setSkyMapParms(const char *map_name,
389  const UT_Vector3F &gcol,
390  const UT_Vector3F &galbedo,
391  fpreal turbidity,
392  fpreal horizon_blur,
393  fpreal solar_altitude,
394  fpreal solar_azimuth)
395  {
396  if(gcol != myGroundColor || galbedo != myGroundAlbedo ||
397  turbidity != myTurbidity || horizon_blur != myHorizonBlur ||
398  solar_altitude != myAltitude || solar_azimuth != myAzimuth)
399  {
400  myGroundColor = gcol;
401  myGroundAlbedo = galbedo;
402  myTurbidity = turbidity;
403  myHorizonBlur = horizon_blur;
404  myAltitude = solar_altitude;
405  myAzimuth = solar_azimuth;
406  myEnvMap = map_name;
407  myEnvMapOpId = -999;
408  myTexDirty = true;
409  myIsSkyMap = true;
410  myLight.HasMap = true;
411  return true;
412  }
413  return false;
414  }
415 
416  bool hasMap() const { return myLight.HasMap; }
417 
418 private:
419  unsigned setupShadowRenders(RE_RenderContext,GR_RenderMode&,bool,unsigned,
420  const GR_DistantShadowMapParms&) override
421  { return 0; }
422  bool needsShadowMap() override { return false; }
423  bool hasShadowMap() override { return false; }
424 
425  // Defined in GR_Light.C.
426  bool createAndCacheSkyMap(RV_Render *r,
427  const UT_StringHolder &map_name,
428  int map_res,
429  const UT_Vector3F &gcol,
430  const UT_Vector3F &galbedo,
431  fpreal turbidity,
432  fpreal horizon_blur,
433  fpreal solar_altitude,
434  fpreal solar_azimuth);
435  struct Light
436  {
437  UT_Matrix4F EnvRotate;
438  UT_Vector3F Color = {1.0, 1.0, 1.0};
439  int32 HasMap = 0;
440  } myLight;
441 
442  UT_Vector3F myGroundColor = { 0.0f, 0.0f, 0.0f };
443  UT_Vector3F myGroundAlbedo = { 0.0f, 0.0f, 0.0f };
444  fpreal myTurbidity = 0.0;
445  fpreal myHorizonBlur = 0.0;
446  fpreal myAltitude = 0.0;
447  fpreal myAzimuth = 0.0;
448 
449  bool myTexDirty = true;
450  bool myIsSkyMap = false;
451  UT_StringHolder myEnvMap;
452  int myEnvMapOpId = -999;
453  RV_TextureRef myEnvMapRef;
454 };
455 
456 /// Area light. Light whose source has a funky shape.
458 {
459 public:
461  ~GR_AreaLight() override; // For UT_UniquePtr<> on WIN
463 
464  enum Shapes
465  {
470  GEOMETRY
471  };
472 
474  LIGHTPARM_SM(UT_Vector4F, XAxis);
475  LIGHTPARM_SM(UT_Vector4F, YAxis);
476  LIGHTPARM_SM(UT_Vector4F, ZAxis);
477  LIGHTPARM_SM(int32, IsSingleSided);
478  LIGHTPARM_SM(int32, IsReversed);
480  LIGHTPARM(fpreal32, DiffuseIntensity);
481  LIGHTPARM(fpreal32, SpecularIntensity);
482  LIGHTPARM(fpreal32, BoundingRadius);
483  LIGHTPARM(int32, UseBoundingRadius);
484  LIGHTPARM(int32, UseSpotlight);
485  LIGHTPARM(UT_Vector2F, LeftBarn);
486  LIGHTPARM(UT_Vector2F, RightBarn);
487  LIGHTPARM(UT_Vector2F, TopBarn);
488  LIGHTPARM(UT_Vector2F, BottomBarn);
489  LIGHTPARM(fpreal32, Cutoff);
490  LIGHTPARM(fpreal32, Falloff);
491  LIGHTPARM(fpreal32, SpotRolloff);
492 
493  SHADOWPARM(UT_Matrix4F, ShadowTransform);
494  SHADOWPARM(fpreal32, ShadowIntensity);
495 
497  GR_RenderMode &out_render_mode,
498  bool scene_changed,
499  unsigned shadowmap_size,
500  const GR_DistantShadowMapParms&) override;
502  unsigned shadowmap_index) override;
503  void finishShadowRender(RE_RenderContext) override;
504  void finishShadowRenders(RE_RenderContext) override;
505  bool needsShadowMap() override { return true; }
506  bool hasShadowMap() override { return myShadowMap.get(); }
507  void attachShadowMap(RE_RenderContext) override;
508  void clearShadowMap() override;
509  void setShadowMask(const UT_StringHolder &mask) override;
510  bool canRayTraceShadow() const override { return true; }
511 
512  bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override;
513  RV_ShaderProgram *getShader(bool shadows, bool per_sample,
514  bool is_antialiased,
515  bool is_raytrace) override;
516 
517  void setShape(const Shapes shape) { myShape = shape; }
518  Shapes getShape() { return myShape; }
519 
520  void setGeometryLook(GUI_DetailLook *look) { myLook = look; }
521  GUI_DetailLook* getGeometryLook() const { return myLook; }
522 
523  UT_UniquePtr<RV_Geometry> &getGeometry() { return myGeometry; }
524 
525  void setTransform(const UT_Matrix4F &t) { myTransform = t; }
526  const UT_Matrix4F &getTransform() const { return myTransform; }
527 
528  void setSize(fpreal w, fpreal h) { myWidth = w; myHeight = h; }
529  fpreal getWidth() const { return myWidth; }
530  fpreal getHeight() const { return myHeight; }
531 
532 private:
533  struct Light
534  {
535  UT_Vector3F Pos = {0.0, 0.0, 1.0};
536  int32 IsSingleSided = false;
537  UT_Vector4F XAxis = {1.0, 0.0, 0.0};
538  UT_Vector4F YAxis = {0.0, 1.0, 0.0};
539  UT_Vector4F ZAxis = {0.0, 0.0, 1.0};
540  UT_Vector3F Color = {1.0, 1.0, 1.0};
541  int32 IsReversed = false;
542  fpreal32 DiffuseIntensity = 1.0;
543  fpreal32 SpecularIntensity = 1.0;
544  fpreal32 BoundingRadius = 0.0;
545  int32 UseBoundingRadius = 0;
546  int32 UseSpotlight = 0;
547  fpreal32 Cutoff = -1.0;
548  fpreal32 Falloff = -1.0;
549  fpreal32 SpotRolloff = 1.0;
550  UT_Vector2F LeftBarn = { 0.0, 0.0 };
551  UT_Vector2F RightBarn = { 0.0, 0.0 };
552  UT_Vector2F TopBarn = { 0.0, 0.0 };
553  UT_Vector2F BottomBarn = { 0.0, 0.0 };
554  } myLight;
555 
556  struct Shadow
557  {
558  UT_Matrix4F ShadowTransform;
559  fpreal32 ShadowBias = 0.01;
560  fpreal32 ShadowIntensity = 1.0;
561  } myShadow;
562 
564  bool myShadowMapDirtyFlag = true;
565  Shapes myShape;
566  GUI_DetailLook *myLook = nullptr;
567  UT_UniquePtr<RV_Geometry> myGeometry;
568  UT_Matrix4F myTransform;
569  fpreal myWidth = 1.0;
570  fpreal myHeight = 1.0;
571 };
572 #endif
virtual void finishGsplatShadowRenders(RE_RenderContext)
Definition: GR_Light.h:120
GR_AmbientLight(const UT_StringHolder &name)
Area light. Light whose source has a funky shape.
bool needsShadowMap() override
int int32
Definition: SYS_Types.h:39
UT_UniquePtr< RV_Geometry > & getGeometry()
bool needsShadowMap() override
virtual void startGsplatShadowRender(RE_RenderContext, unsigned shadowmap_index)
Definition: GR_Light.h:117
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 ...
Definition: RV_Geometry.h:165
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.
Definition: RV_TextureRef.h:21
Distant (infinite) light. Rays parallel.
Definition: GR_LightTypes.h:56
virtual void clearShadowMap()
Definition: GR_Light.h:107
float fpreal32
Definition: SYS_Types.h:200
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 &)
Definition: GR_Light.h:111
Temporary container for either a RV_Render and an RE_Render.
virtual void clearGsplatShadowMap()
Definition: GR_Light.h:123
int projectMapOpId() const
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
Definition: UT_UniquePtr.h:39
virtual void startShadowRender(RE_RenderContext rc, unsigned shadowmap_index)
Definition: GR_Light.h:100
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
Definition: glcorearb.h:108
int envMapOpId() const
std::array< T, N > UT_FixedArray
Definition: UT_FixedArray.h:19
GR_RenderMode
Definition: GR_Defines.h:48
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 hasMap() const
fpreal getHeight() const
bool hasShadowMap() override
#define LIGHTPARM_SM(TYPE, NAME)
Definition: GR_LightTypes.h:43
bool hasShadowMap() override
const UT_StringHolder & projectMap() const
GLint GLuint mask
Definition: glcorearb.h:124
virtual bool canRayTraceShadow() const
Definition: GR_Light.h:96
Base class for all light types.
Definition: GR_Light.h:41
#define GR_API
Definition: GR_API.h:10
GLuint const GLchar * name
Definition: glcorearb.h:786
virtual void finishGsplatShadowRender(RE_RenderContext)
Definition: GR_Light.h:119
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)
GLdouble t
Definition: glad.h:2397
bool hasShadowMap() override
#define SHADOWPARM(TYPE, NAME)
Definition: GR_LightTypes.h:38
const UT_Matrix4F & getTransform() const
virtual bool hasGsplatShadowMap()
Definition: GR_Light.h:121
virtual void attachShadowMap(RE_RenderContext)
Definition: GR_Light.h:106
GLfloat GLfloat GLfloat GLfloat h
Definition: glcorearb.h:2002
GA_API const UT_StringHolder parms
virtual void finishShadowRenders(RE_RenderContext)
Definition: GR_Light.h:103
fpreal64 fpreal
Definition: SYS_Types.h:283
void setEnvMap(const UT_StringHolder &map_name, int op_id)
void setGeometryLook(GUI_DetailLook *look)
Shapes getShape()
virtual bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts)=0
GR_EnvLight(const UT_StringHolder &name)
GLubyte GLubyte GLubyte GLubyte w
Definition: glcorearb.h:857
#define LIGHTPARM(TYPE, NAME)
Definition: GR_LightTypes.h:34
GLboolean r
Definition: glcorearb.h:1222
bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
Definition: GR_LightTypes.h:79
virtual void finishShadowRender(RE_RenderContext)
Definition: GR_Light.h:102
fpreal getWidth() const
virtual void attachGsplatShadowMap(RE_RenderContext)
Definition: GR_Light.h:122
GUI_DetailLook * getGeometryLook() const
#define SHADOWPARM_SM(TYPE, NAME)
Definition: GR_LightTypes.h:48
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)
Definition: GR_Light.h:130
SYS_FORCE_INLINE bool isstring() const
void setSize(fpreal w, fpreal h)
bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override