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 
72  SHADOWPARM_SM(XformsArray, Xforms);
73  SHADOWPARM_SM(InvXformsArray, InvXforms);
74  SHADOWPARM_SM(BiasesArray, Biases);
75  SHADOWPARM_SM(DepthsArray, Depths);
76  SHADOWPARM(fpreal32, ShadowIntensity);
77 
78  bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
79  {
80  return privInitBlocks(r, &myLight, sizeof(Light),
81  &myShadow, sizeof(Shadow));
82  }
83 
84  RV_ShaderProgram *getShader(bool shadows, bool per_sample,
85  bool is_antialiased,
86  bool is_raytrace) override;
87 
88  void clearShadowMap() override;
89 private:
91  GR_RenderMode &out_render_mode,
92  bool scene_changed,
93  unsigned shadowmap_size,
94  const GR_DistantShadowMapParms&) override;
96  unsigned shadowmap_index) override;
97  void finishShadowRender(RE_RenderContext) override;
99  bool needsShadowMap() override { return true; }
100  bool hasShadowMap() override { return myShadowMap.get(); }
101  void attachShadowMap(RE_RenderContext) override;
102 
103  struct Light
104  {
105  UT_Vector3F Dir = {0.0, 0.0, 1.0};
106  int32 WorldSpace = true;
107  UT_Vector3F Color = {1.0, 1.0, 1.0};
108  int32 UseSpecular = true;
109  } myLight;
110 
111  struct Shadow
112  {
113  XformsArray Xforms;
114  InvXformsArray InvXforms;
115  BiasesArray Biases;
116  DepthsArray Depths;
117  fpreal32 ShadowIntensity;
118  } myShadow;
119 
121  bool myShadowMapDirtyFlag = true;
122 };
123 
124 // Point Light (spot or omni). Inifinitely small source.
126 {
127 public:
128  GR_PointLight(const UT_StringHolder &name);
129  ~GR_PointLight() override; // For UT_UniquePtr<> on WIN
131 
132  LIGHTPARM(UT_Matrix4F, Projection);
133  LIGHTPARM(UT_Vector4F, Focus);
136  LIGHTPARM(UT_Vector3F, LightX);
137  LIGHTPARM(UT_Vector3F, LightY);
139  LIGHTPARM(UT_Vector3F, Atten);
140  LIGHTPARM(UT_Vector2F, ActiveRadius);
141  LIGHTPARM(UT_Vector2F, AttenRange);
142  LIGHTPARM(UT_Vector2F, AttenRampRange);
143  LIGHTPARM(UT_Vector2F, LeftBarn);
144  LIGHTPARM(UT_Vector2F, RightBarn);
145  LIGHTPARM(UT_Vector2F, TopBarn);
146  LIGHTPARM(UT_Vector2F, BottomBarn);
147  LIGHTPARM_SM(fpreal32, Cutoff);
148  LIGHTPARM(fpreal32, Falloff);
149  LIGHTPARM(fpreal32, SpotRolloff);
150  LIGHTPARM(int32, HasSpot);
151  LIGHTPARM(int32, HasProject);
152  LIGHTPARM(int32, ProjectClamp);
153  LIGHTPARM(int32, HasAttenRamp);
154 
155  SHADOWPARM_SM(UT_Matrix4F, ShadowTransform);
156  SHADOWPARM_SM(fpreal32, ShadowBias);
157  SHADOWPARM(fpreal32, ShadowIntensity);
158 
159  void setProjectMap(const UT_StringHolder &map_name, int op_id)
160  {
161  if(myProjectMap != map_name || myProjectMapOpId != op_id)
162  {
163  myProjectMap = map_name;
164  myProjectMapOpId = op_id;
165 #ifdef USE_VULKAN
166  myProjectMapRef.reset();
167 #endif
168  myTexDirty = true;
169  }
170  }
171  const UT_StringHolder &projectMap() const { return myProjectMap; }
172  int projectMapOpId() const { return myProjectMapOpId; }
173 
174  bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
175  {
176 #ifdef USE_VULKAN
177  RV_TextureCache::checkTextureDirty(myProjectMapRef, myTexDirty);
178 #endif
179  if(myTexDirty)
180  {
181  myTexDirty = false;
182 #ifdef USE_VULKAN
183  privBindTexture(r, myProjectMap, myProjectMapOpId, myProjectMapRef,
184  "projectMap", opts);
185 #endif
186  }
187  return privInitBlocks(r, &myLight, sizeof(Light),
188  &myShadow, sizeof(Shadow));
189  }
190 
191  RV_ShaderProgram *getShader(bool shadows, bool per_sample,
192  bool is_antialiased,
193  bool is_raytrace) override;
194 
195  void clearShadowMap() override;
196 private:
197  friend class GR_PointShadowMap;
198  bool shouldUseCubeMap();
200  GR_RenderMode &out_render_mode,
201  bool scene_changed,
202  unsigned shadowmap_size,
203  const GR_DistantShadowMapParms&) override;
205  unsigned shadowmap_index) override;
206  void finishShadowRender(RE_RenderContext) override;
207  void finishShadowRenders(RE_RenderContext) override;
208  bool needsShadowMap() override { return true; }
209  bool canRayTraceShadow() const override { return true; }
210  bool hasShadowMap() override { return myShadowMap.get(); }
211  void attachShadowMap(RE_RenderContext) override;
212 
213  struct Light
214  {
215  UT_Matrix4F Projection;
216  UT_Vector4F Focus = {0.0, 0.0, 0.0, 0.0};
217  UT_Vector3F Pos = {0.0, 0.0, 1.0};
218  fpreal32 unused1 = 0.0;
219  UT_Vector3F Dir = {0.0, 0.0, 1.0};
220  fpreal32 unused2 = 0.0;
221  UT_Vector3F LightX= {1.0, 0.0, 0.0};
222  fpreal32 unused3 = 0.0;
223  UT_Vector3F LightY= {0.0, 1.0, 0.0};
224  fpreal32 unused4 = 0.0;
225  UT_Vector3F Color = {1.0, 1.0, 1.0};
226  fpreal32 unused5 = 0.0;
227  UT_Vector3F Atten = {0.0, 0.0, 1.0};
228  fpreal32 unused6 = 0;
229  UT_Vector2F ActiveRadius = { 0.0, 1e20 };
230  UT_Vector2F LeftBarn = { 0.0, 0.0 };
231  UT_Vector2F RightBarn = { 0.0, 0.0 };
232  UT_Vector2F TopBarn = { 0.0, 0.0 };
233  UT_Vector2F BottomBarn = { 0.0, 0.0 };
234  UT_Vector2F AttenRange = { 0.0, 1e20 };
235  UT_Vector2F AttenRampRange = { 0.0, 0.0 };
236  fpreal32 Cutoff = -1.0;
237  fpreal32 Falloff = -1.0;
238  fpreal32 SpotRolloff = 1.0;
239  int32 HasSpot = false;
240  int32 HasProject = false;
241  int32 ProjectClamp = false;
242  int32 HasAttenRamp = false;
243  } myLight;
244 
245  struct Shadow
246  {
247  UT_Matrix4F ShadowTransform;
248  fpreal32 ShadowBias = 0.01;
249  fpreal32 ShadowIntensity = 1.0;
250  } myShadow;
251 
252  bool myTexDirty = true;
253  UT_StringHolder myProjectMap;
254  int myProjectMapOpId = -999;
255 #ifdef USE_VULKAN
256  RV_TextureRef myProjectMapRef;
257 #endif
258 
259  bool myShadowMapDirtyFlag = true;
261 };
262 
263 /// Distant (infinite) light. Rays parallel
265 {
266 public:
268  : GR_Light(name, AMBIENT)
269  {}
270  ~GR_AmbientLight() override; // For UT_UniquePtr<> on WIN
272 
274 
275  bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
276  {
277  return privInitBlocks(r, &myLight, sizeof(Light), nullptr, 0);
278  }
279 
280  RV_ShaderProgram *getShader(bool shadows, bool per_sample,
281  bool is_antialiased,
282  bool is_raytrace) override;
283 
285  GR_RenderMode &out_render_mode,
286  bool scene_changed,
287  unsigned shadowmap_size,
288  const GR_DistantShadowMapParms&) override
289  { return 0; }
290  bool needsShadowMap() override { return false; }
291  bool hasShadowMap() override { return false; }
292 
293 private:
294  struct Light
295  {
296  UT_Vector3F Color = {1.0, 1.0, 1.0};
297  } myLight;
298 };
299 
300 /// Environment light. Infinitely far away incoming rays from all directions.
302 {
303 public:
305  : GR_Light(name, ENVIRONMENT)
306  {}
307  ~GR_EnvLight() override; // For UT_UniquePtr<> on WIN
309 
310  LIGHTPARM(UT_Matrix4F, EnvRotate);
312 
313  void setEnvMap(const UT_StringHolder &map_name, int op_id)
314  {
315  if(myEnvMap != map_name || myEnvMapOpId != op_id)
316  {
317  myEnvMap = map_name;
318  myEnvMapOpId = op_id;
319  if(map_name.isstring() != (myLight.HasMap!=0))
320  {
321  myLight.HasMap = map_name.isstring();
322  myDirtyFlag = true;
323  }
324 
325 #ifdef USE_VULKAN
326  myEnvMapRef.reset();
327 #else
328  myEnvMapRef = 0; // to suppress unused member warning
329 #endif
330  myTexDirty = true;
331  }
332  else if (myEnvMapOpId && !myIsSkyMap)
333  {
334  // always dirty Op textures
335  myTexDirty = true;
336  }
337  myIsSkyMap = false;
338  }
339  const UT_StringHolder &envMap() const { return myEnvMap; }
340  int envMapOpId() const { return myEnvMapOpId; }
341 
342  bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override
343  {
344 #ifdef USE_VULKAN
345  RV_TextureCache::checkTextureDirty(myEnvMapRef, myTexDirty);
346 #endif
347  if(myTexDirty)
348  {
349  myTexDirty = false;
350  if(myIsSkyMap)
351  {
352  createAndCacheSkyMap(r, myEnvMap, 256,
353  myGroundColor,myGroundAlbedo, myTurbidity,
354  myHorizonBlur,myAltitude,myAzimuth);
355 
356  }
357 #ifdef USE_VULKAN
359  parms.MipMap = true;
360  initTexParms(r, opts, parms);
361  privBindTexture(r, myEnvMap, myEnvMapOpId, myEnvMapRef, "envMap",
362  opts, &parms, true);
363 #endif
364  }
365  return privInitBlocks(r, &myLight, sizeof(Light), nullptr, 0);
366  }
367 
368  RV_ShaderProgram *getShader(bool shadows, bool per_sample,
369  bool is_antialiased,
370  bool is_raytrace) override;
371 
372  bool setSkyMapParms(const char *map_name,
373  const UT_Vector3F &gcol,
374  const UT_Vector3F &galbedo,
375  fpreal turbidity,
376  fpreal horizon_blur,
377  fpreal solar_altitude,
378  fpreal solar_azimuth)
379  {
380  if(gcol != myGroundColor || galbedo != myGroundAlbedo ||
381  turbidity != myTurbidity || horizon_blur != myHorizonBlur ||
382  solar_altitude != myAltitude || solar_azimuth != myAzimuth)
383  {
384  myGroundColor = gcol;
385  myGroundAlbedo = galbedo;
386  myTurbidity = turbidity;
387  myHorizonBlur = horizon_blur;
388  myAltitude = solar_altitude;
389  myAzimuth = solar_azimuth;
390  myEnvMap = map_name;
391  myEnvMapOpId = -999;
392  myTexDirty = true;
393  myIsSkyMap = true;
394  myLight.HasMap = true;
395  return true;
396  }
397  return false;
398  }
399 
400  bool hasMap() const { return myLight.HasMap; }
401 
402 private:
403  unsigned setupShadowRenders(RE_RenderContext,GR_RenderMode&,bool,unsigned,
404  const GR_DistantShadowMapParms&) override
405  { return 0; }
406  bool needsShadowMap() override { return false; }
407  bool hasShadowMap() override { return false; }
408 
409  // Defined in GR_Light.C.
410  bool createAndCacheSkyMap(RV_Render *r,
411  const UT_StringHolder &map_name,
412  int map_res,
413  const UT_Vector3F &gcol,
414  const UT_Vector3F &galbedo,
415  fpreal turbidity,
416  fpreal horizon_blur,
417  fpreal solar_altitude,
418  fpreal solar_azimuth);
419  struct Light
420  {
421  UT_Matrix4F EnvRotate;
422  UT_Vector3F Color = {1.0, 1.0, 1.0};
423  int32 HasMap = 0;
424  } myLight;
425 
426  UT_Vector3F myGroundColor = { 0.0f, 0.0f, 0.0f };
427  UT_Vector3F myGroundAlbedo = { 0.0f, 0.0f, 0.0f };
428  fpreal myTurbidity = 0.0;
429  fpreal myHorizonBlur = 0.0;
430  fpreal myAltitude = 0.0;
431  fpreal myAzimuth = 0.0;
432 
433  bool myTexDirty = true;
434  bool myIsSkyMap = false;
435  UT_StringHolder myEnvMap;
436  int myEnvMapOpId = -999;
437  RV_TextureRef myEnvMapRef;
438 };
439 
440 /// Area light. Light whose source has a funky shape.
442 {
443 public:
445  ~GR_AreaLight() override; // For UT_UniquePtr<> on WIN
447 
448  enum Shapes
449  {
454  GEOMETRY
455  };
456 
458  LIGHTPARM_SM(UT_Vector4F, XAxis);
459  LIGHTPARM_SM(UT_Vector4F, YAxis);
460  LIGHTPARM_SM(UT_Vector4F, ZAxis);
461  LIGHTPARM_SM(int32, IsSingleSided);
462  LIGHTPARM_SM(int32, IsReversed);
464  LIGHTPARM(fpreal32, DiffuseIntensity);
465  LIGHTPARM(fpreal32, SpecularIntensity);
466  LIGHTPARM(fpreal32, BoundingRadius);
467  LIGHTPARM(int32, UseBoundingRadius);
468  LIGHTPARM(int32, UseSpotlight);
469  LIGHTPARM(UT_Vector2F, LeftBarn);
470  LIGHTPARM(UT_Vector2F, RightBarn);
471  LIGHTPARM(UT_Vector2F, TopBarn);
472  LIGHTPARM(UT_Vector2F, BottomBarn);
473  LIGHTPARM(fpreal32, Cutoff);
474  LIGHTPARM(fpreal32, Falloff);
475  LIGHTPARM(fpreal32, SpotRolloff);
476 
477  SHADOWPARM(UT_Matrix4F, ShadowTransform);
478  SHADOWPARM(fpreal32, ShadowIntensity);
479 
481  GR_RenderMode &out_render_mode,
482  bool scene_changed,
483  unsigned shadowmap_size,
484  const GR_DistantShadowMapParms&) override;
486  unsigned shadowmap_index) override;
487  void finishShadowRender(RE_RenderContext) override;
488  void finishShadowRenders(RE_RenderContext) override;
489  bool needsShadowMap() override { return true; }
490  bool hasShadowMap() override { return myShadowMap.get(); }
491  void attachShadowMap(RE_RenderContext) override;
492  void clearShadowMap() override;
493  void setShadowMask(const UT_StringHolder &mask) override;
494  bool canRayTraceShadow() const override { return true; }
495 
496  bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override;
497  RV_ShaderProgram *getShader(bool shadows, bool per_sample,
498  bool is_antialiased,
499  bool is_raytrace) override;
500 
501  void setShape(const Shapes shape) { myShape = shape; }
502  Shapes getShape() { return myShape; }
503 
504  void setGeometryLook(GUI_DetailLook *look) { myLook = look; }
505  GUI_DetailLook* getGeometryLook() const { return myLook; }
506 
507  UT_UniquePtr<RV_Geometry> &getGeometry() { return myGeometry; }
508 
509  void setTransform(const UT_Matrix4F &t) { myTransform = t; }
510  const UT_Matrix4F &getTransform() const { return myTransform; }
511 
512  void setSize(fpreal w, fpreal h) { myWidth = w; myHeight = h; }
513  fpreal getWidth() const { return myWidth; }
514  fpreal getHeight() const { return myHeight; }
515 
516 private:
517  struct Light
518  {
519  UT_Vector3F Pos = {0.0, 0.0, 1.0};
520  int32 IsSingleSided = false;
521  UT_Vector4F XAxis = {1.0, 0.0, 0.0};
522  UT_Vector4F YAxis = {0.0, 1.0, 0.0};
523  UT_Vector4F ZAxis = {0.0, 0.0, 1.0};
524  UT_Vector3F Color = {1.0, 1.0, 1.0};
525  int32 IsReversed = false;
526  fpreal32 DiffuseIntensity = 1.0;
527  fpreal32 SpecularIntensity = 1.0;
528  fpreal32 BoundingRadius = 0.0;
529  int32 UseBoundingRadius = 0;
530  int32 UseSpotlight = 0;
531  fpreal32 Cutoff = -1.0;
532  fpreal32 Falloff = -1.0;
533  fpreal32 SpotRolloff = 1.0;
534  UT_Vector2F LeftBarn = { 0.0, 0.0 };
535  UT_Vector2F RightBarn = { 0.0, 0.0 };
536  UT_Vector2F TopBarn = { 0.0, 0.0 };
537  UT_Vector2F BottomBarn = { 0.0, 0.0 };
538  } myLight;
539 
540  struct Shadow
541  {
542  UT_Matrix4F ShadowTransform;
543  fpreal32 ShadowBias = 0.01;
544  fpreal32 ShadowIntensity = 1.0;
545  } myShadow;
546 
548  bool myShadowMapDirtyFlag = true;
549  Shapes myShape;
550  GUI_DetailLook *myLook = nullptr;
551  UT_UniquePtr<RV_Geometry> myGeometry;
552  UT_Matrix4F myTransform;
553  fpreal myWidth = 1.0;
554  fpreal myHeight = 1.0;
555 };
556 #endif
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
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_Type.h:203
Distant (infinite) light. Rays parallel.
Definition: GR_LightTypes.h:56
virtual void clearShadowMap()
Definition: GR_Light.h:104
float fpreal32
Definition: SYS_Types.h:200
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.
Definition: UT_UniquePtr.h:39
virtual void startShadowRender(RE_RenderContext rc, unsigned shadowmap_index)
Definition: GR_Light.h:97
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:93
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 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
#define SHADOWPARM(TYPE, NAME)
Definition: GR_LightTypes.h:38
const UT_Matrix4F & getTransform() const
virtual void attachShadowMap(RE_RenderContext)
Definition: GR_Light.h:103
GLfloat GLfloat GLfloat GLfloat h
Definition: glcorearb.h:2002
GA_API const UT_StringHolder parms
virtual void finishShadowRenders(RE_RenderContext)
Definition: GR_Light.h:100
fpreal64 fpreal
Definition: SYS_Types.h:278
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:78
virtual void finishShadowRender(RE_RenderContext)
Definition: GR_Light.h:99
fpreal getWidth() const
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:111
SYS_FORCE_INLINE bool isstring() const
void setSize(fpreal w, fpreal h)
bool initBlocks(RV_Render *r, const GR_CommonDispOption &opts) override