VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtTileSpaceLightGrid.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 #pragma once
10 
14 
15 #pragma warning( push )
16 #pragma warning( disable : 4251 )
17 
18 // the maximum number if lights supported, this is limited by constant buffer size,
19 // commonly this is 64kb, but AMD only seem to allow 2048 lights...
20 #define NUM_POSSIBLE_LIGHTS (1024)
21 
22 // Must be a power of two, configure to suit hardware/wishes, also limited at
23 // runtime by glGet GL_MAX_COLOR_TEXTURE_SAMPLES. The smaller value is used.
24 #define MAX_ALLOWED_MSAA_SAMPLES 16
25 
29 #include <vrvGraphicsUtils/DtVector2.h>
33 
34 namespace makVrv
35 {
36  class DtLightScreenSpacePerViewData;
37 
41  {
42  public:
45 
47  virtual ~DtTileSpaceLightGrid();
48 
50  void setTileSize(const Vector2_uint32& tileSize);
52  const Vector2_uint32& tileSize(void) const;
53  const Vector2_uint32 tileSizeLog2(void) const;
55 
56 
58  const Vector2_uint32& gridMaxDims(void) const;
60  uint32 getGridMaxDimsFlattened(void) const;
61 
62 
64  void update(const VectorLights& frustumVisibleLights
67  , const std::vector<Matrix4_64>& view_projection_matrix
68  , const Vector3_64& vWorldEye
69  , const Vector3_64& vWorldCenter
70  , const Vector3_64& vWorldUp
71  , const Vector2_uint32& viewportSize);
73 
74 
76  int tileLightCount(uint32 x, uint32 y) const;
78  const int *tileLightIndexList(uint32 x, uint32 y) const;
80 
81 
82 
84  const int *tileDataPtr() const
86  {
87  return myGridOffsets;
88  }
89  const int *tileCountsDataPtr() const
90  {
91  return myGridCounts;
92  }
93  const int *tileLightIndexListsPtr() const
94  {
95  return &myTileLightIndexLists[0];
96  }
97 
99  {
100  return uint32(myTileLightIndexLists.size());
101  }
103 
104 
106  void setScreenAreaCullSize(uint32 val);
108  uint32 screenAreaCullSize(void) const;
110 
111  private:
112  void updateScreenSpaceRectangles(const VectorLights& frustumVisibleLights
113  , const DtLightScreenSpacePerViewData& perViewData);
114 
116 
117 #if 0
118  const Vector2_32 getTileMinMax(uint32 x, uint32 y) const
119  {
120  return m_minMaxGridValid ?
121  m_gridMinMaxZ[x + y * m_gridDim.x]
122  : chag::make_vector(0.0f, 0.0f);
123  }
124  std::vector<chag::float2> m_gridMinMaxZ;
125 #endif
126 
129  void updateToAccountForScreenRes(const Vector2_uint32& viewport_size);
130 
132 
135 
136  std::vector<int> myTileLightIndexLists;
138 
139  std::vector< DtLightScreenSpaceDataVector > myScreenSpaceData;
140 
141  inline int& GridOffset(int x, int y)
142  {
143  return myGridOffsets[x + y * myGridMaxDims.x];
144  }
145  inline int& GridCount(int x, int y)
146  {
147  return myGridCounts[x + y * myGridMaxDims.x];
148  }
149 
151  };
152 
153 } //namespace makVrv
154 
155 #pragma warning(pop)
Dll export defines.
int & GridCount(int x, int y)
Definition: DtTileSpaceLightGrid.h:145
Per-view data used to calculate the DtLightScreenSpaceData below.
Definition: DtLightScreenSpaceData.h:26
int32 * myGridCounts
Definition: DtTileSpaceLightGrid.h:134
Screenspace light data.
Vector2_uint32 myGridMaxDims
Definition: DtTileSpaceLightGrid.h:131
Screen Space Rectangle class.
std::vector< DtLightScreenSpaceDataVector > myScreenSpaceData
Definition: DtTileSpaceLightGrid.h:139
#define FORWARD_DECLARE_DIFFERENT_SUFFIX(T, U)
Definition: DtForwardDeclare.h:31
const int * tileLightIndexListsPtr() const
Definition: DtTileSpaceLightGrid.h:93
Camera forward declarations.
Vector2_uint32 myTileSize
Definition: DtTileSpaceLightGrid.h:115
int32 * myGridOffsets
Definition: DtTileSpaceLightGrid.h:133
const int * tileCountsDataPtr() const
Definition: DtTileSpaceLightGrid.h:89
Vector2_uint32 myCurrentMaxScreenResolution
Definition: DtTileSpaceLightGrid.h:128
Light class.
static const Vector2_uint32 m_InitialMaxScreenResolution
Definition: DtTileSpaceLightGrid.h:127
Class doing all the heavy lifting in regards of forward+ lighting.
Definition: DtTileSpaceLightGrid.h:40
uint32 totalTileLightIndexListLength() const
Definition: DtTileSpaceLightGrid.h:98
DtIntSize class.
unsigned int uint32
Definition: DtCommonTypes.h:28
int & GridOffset(int x, int y)
Definition: DtTileSpaceLightGrid.h:141
uint32 myMaxTileLightCount
Definition: DtTileSpaceLightGrid.h:137
#define DT_DLL_VRVGRAPHICSUTILS
Definition: vrvGraphicsUtils.h:18
Helpers to easily define forward declarations.
uint32 myRejectArea
Definition: DtTileSpaceLightGrid.h:150
std::vector< int > myTileLightIndexLists
Definition: DtTileSpaceLightGrid.h:136
4 dimensional matrix

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)