From 0ea5fc66924303d1bf73ba283a383e2aadee02f2 Mon Sep 17 00:00:00 2001 From: neodarz Date: Sat, 11 Aug 2018 20:21:34 +0200 Subject: Initial commit --- docs/doxygen/nel/a03684.html | 839 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 839 insertions(+) create mode 100644 docs/doxygen/nel/a03684.html (limited to 'docs/doxygen/nel/a03684.html') diff --git a/docs/doxygen/nel/a03684.html b/docs/doxygen/nel/a03684.html new file mode 100644 index 00000000..1dd3c9f9 --- /dev/null +++ b/docs/doxygen/nel/a03684.html @@ -0,0 +1,839 @@ + + +NeL: NL3D::CVegetableSortBlock class Reference + + + +
+

NL3D::CVegetableSortBlock Class Reference

#include <vegetable_sort_block.h> +

+

Inheritance diagram for NL3D::CVegetableSortBlock: +

+ +NL3D::CTessNodeList + +

Detailed Description

+A block of vegetable instance groups. CVegetableSortBlock are sorted in Z order. NB: for speed and convenience, only the RdrPass NL3D_VEGETABLE_RDRPASS_UNLIT_2SIDED_ZSORT is sorted. A block have a number of quadrants (8). Each quadrant has an array of triangles to render. Internal to VegetableManager. Just an Handle for public.
Author:
Lionel Berenguier

+Nevrax France

+
Date:
2001
+ +

+ +

+Definition at line 56 of file vegetable_sort_block.h. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Public Member Functions

 CVegetableSortBlock ()
 Constructor.

const CVectorgetCenter () const
void updateSortBlock (CVegetableManager &vegetManager)

Data Fields

CTessNodeListNext
CTessNodeListPrec

Private Attributes

bool _Dirty
CTessList< CVegetableInstanceGroup_InstanceGroupList
CVegetableClipBlock_Owner
bool _UnderWater
bool ZSortHardMode
Fast sorting.
CVector _Center
 center of the sort block.

uint _NIndices
 number of indeices= numTriangles*3.

uint _NTriangles
 number of triangles.

uint _QuadrantId
 current quadrant used. computed at each render.

float _Radius
 approximate Radius of the sort block.

NLMISC::CObjectVector< uint32,
+ false > 
_SortedTriangleArray
uint32_SortedTriangleIndices [NL3D_VEGETABLE_NUM_QUADRANT]
 start ptr.

float _SortKey
 Positive value used for sort. (square of distance to viewer + threshold). temp computed at each render().


Friends

class CSortVSB
class CVegetableBlendLayerModel
class CVegetableClipBlock
class CVegetableManager
+


Constructor & Destructor Documentation

+

+ + + + +
+ + + + + + + + + +
NL3D::CVegetableSortBlock::CVegetableSortBlock  ) 
+
+ + + + + +
+   + + +

+Constructor. +

+ +

+Definition at line 46 of file vegetable_sort_block.cpp. +

+References _NIndices, _NTriangles, _UnderWater, and ZSortHardMode. +

+

00047 {
+00048         ZSortHardMode= true;
+00049         _NTriangles= 0;
+00050         _NIndices= 0;
+00051         _Dirty= false;
+00052         _UnderWater= false;
+00053 }
+
+


Member Function Documentation

+

+ + + + +
+ + + + + + + + + +
const CVector& NL3D::CVegetableSortBlock::getCenter  )  const [inline]
+
+ + + + + +
+   + + +

+ +

+Definition at line 64 of file vegetable_sort_block.h. +

+

00064 {return _Center;}
+
+

+ + + + +
+ + + + + + + + + + +
void NL3D::CVegetableSortBlock::updateSortBlock CVegetableManager vegetManager  ) 
+
+ + + + + +
+   + + +

+After adding some instance to any instance group of a sorted block, you must recall this method NB: CVegetableManager::addInstance() and CVegetableManager::deleteIg() flag this SB as Dirty, when needed only. if !Dirty, updateSortBlock() is a no-op. /see CVegetableManager::addInstance() CVegetableManager::deleteIg() Warning! Use OptFastFloor()! So call must be enclosed with a OptFastFloorBegin()/OptFastFloorEnd(). +

+Definition at line 74 of file vegetable_sort_block.cpp. +

+References _InstanceGroupList, _NIndices, _NTriangles, NL3D::CVegetableInstanceGroup::_RdrPass, _SortedTriangleArray, _SortedTriangleIndices, NL3D::CVegetableInstanceGroup::_TriangleQuadrantOrders, NL3D::CTessList< CVegetableInstanceGroup >::begin(), NLMISC::CObjectVector< uint32, false >::clear(), NL3D::CSortTri::Dist, NLMISC::CObjectVector< uint32, false >::getPtr(), H_AUTO, NL3D::CTessNodeList::Next, NL3D_VEGETABLE_NUM_QUADRANT, NL3D_VEGETABLE_RDRPASS_UNLIT_2SIDED_ZSORT, nlassert, NL3D::CVegetableInstanceGroup::CVegetableRdrPass::NTriangles, NLMISC::CObjectVector< uint32, false >::resize(), NL3D::CVegetableInstanceGroup::CVegetableRdrPass::TriangleIndices, NL3D::CSortTri::TriIndex, uint, and uint32. +

+Referenced by NL3D::CLandscapeVegetableBlock::update(). +

+

00075 {
+00076         H_AUTO( NL3D_Vegetable_Update_SortBlock );
+00077 
+00078         // if nothing to update (ie instance added/deleted do not impact me).
+00079         if(!_Dirty)
+00080         {
+00081                 // nothing to do.
+00082                 return;
+00083         }
+00084         else
+00085         {
+00086                 // Ok clean me now.
+00087                 _Dirty= false;
+00088         }
+00089 
+00090         // compute number of triangles.
+00091         _NTriangles= 0;
+00092         CVegetableInstanceGroup         *ptrIg= _InstanceGroupList.begin();
+00093         while(ptrIg)
+00094         {
+00095                 // add only zsort rdrPass triangles.
+00096                 _NTriangles+= ptrIg->_RdrPass[NL3D_VEGETABLE_RDRPASS_UNLIT_2SIDED_ZSORT].NTriangles;
+00097 
+00098                 // next Ig in the SortBlock
+00099                 ptrIg= (CVegetableInstanceGroup*)(ptrIg->Next);
+00100         }
+00101         // compute number of indices
+00102         _NIndices= _NTriangles*3;
+00103 
+00104 
+00105         // if no triangles, clear and go
+00106         if(_NTriangles == 0)
+00107         {
+00108                 // reset the array of indices.
+00109                 _SortedTriangleArray.clear();
+00110                 // bye
+00111                 return;
+00112         }
+00113         else
+00114         {
+00115                 // else, re-allocate the array
+00116                 _SortedTriangleArray.resize(_NIndices * NL3D_VEGETABLE_NUM_QUADRANT);
+00117         }
+00118 
+00119         // resize an array for sorting.
+00120         nlassert(_NTriangles < 65536);
+00121         static  std::vector<CSortTri>   triSort;
+00122         static  std::vector<uint32>             triIndices;
+00123         // don't use resize because fill with default values. size() is the capacity here.
+00124         if(triSort.size()<_NTriangles)
+00125         {
+00126                 triSort.resize(_NTriangles);
+00127                 triIndices.resize(_NIndices);
+00128         }
+00129 
+00130         // fill indices with all ig info.
+00131         //-------------
+00132         {
+00133                 uint32          *triIdxPtr= &triIndices[0];
+00134                 // for all igs in the sortBlock.
+00135                 ptrIg= _InstanceGroupList.begin();
+00136                 while(ptrIg)
+00137                 {
+00138                         CVegetableInstanceGroup::CVegetableRdrPass      &vegetRdrPass= ptrIg->_RdrPass[NL3D_VEGETABLE_RDRPASS_UNLIT_2SIDED_ZSORT];
+00139                         uint32          *triSrcPtr= vegetRdrPass.TriangleIndices.getPtr();
+00140 
+00141                         // add only zsort rdrPass triangles.
+00142                         for(uint i=0; i<vegetRdrPass.NTriangles; i++)
+00143                         {
+00144                                 // fill the triangle indices.
+00145                                 *(triIdxPtr++)= *(triSrcPtr++);
+00146                                 *(triIdxPtr++)= *(triSrcPtr++);
+00147                                 *(triIdxPtr++)= *(triSrcPtr++);
+00148                         }
+00149 
+00150                         // next Ig in the SortBlock
+00151                         ptrIg= (CVegetableInstanceGroup*)(ptrIg->Next);
+00152                 }
+00153         }
+00154 
+00155         // Sort for all quadrants
+00156         //-------------
+00157         for(uint quadrant=0; quadrant<NL3D_VEGETABLE_NUM_QUADRANT; quadrant++)
+00158         {
+00159                 // ReFill SortTris with Start Data
+00160                 //-------------
+00161                 CSortTri        *triPtr= &triSort[0];
+00162                 uint            triId= 0;
+00163                 // for all igs in the sortBlock.
+00164                 ptrIg= _InstanceGroupList.begin();
+00165                 while(ptrIg)
+00166                 {
+00167                         CVegetableInstanceGroup::CVegetableRdrPass      &vegetRdrPass= ptrIg->_RdrPass[NL3D_VEGETABLE_RDRPASS_UNLIT_2SIDED_ZSORT];
+00168 
+00169                         // add only zsort rdrPass triangles.
+00170                         for(uint i=0; i<vegetRdrPass.NTriangles; i++, triPtr++, triId++)
+00171                         {
+00172                                 // QSort.
+00173                                 triPtr->Dist = ptrIg->_TriangleQuadrantOrders[quadrant][i];
+00174 
+00175                                 // copy tri info
+00176                                 triPtr->TriIndex= triId;
+00177                         }
+00178 
+00179                         // next Ig in the SortBlock
+00180                         ptrIg= (CVegetableInstanceGroup*)(ptrIg->Next);
+00181                 }
+00182 
+00183                 // sort the array according to distance
+00184                 //-------------
+00185                 // QSort.
+00186                 sort(triSort.begin(), triSort.begin()+_NTriangles);
+00187 
+00188 
+00189                 // Fill result.
+00190                 //-------------
+00191                 // init quadrant ptr.
+00192                 _SortedTriangleIndices[quadrant]= _SortedTriangleArray.getPtr() + quadrant * _NIndices;
+00193 
+00194                 // fill the indices.
+00195                 uint32  *pIdx= _SortedTriangleIndices[quadrant];
+00196                 for(uint i=0; i<_NTriangles; i++)
+00197                 {
+00198                         uint32  idTriIdx= triSort[i].TriIndex * 3;
+00199                         *(pIdx++)= triIndices[idTriIdx+0];
+00200                         *(pIdx++)= triIndices[idTriIdx+1];
+00201                         *(pIdx++)= triIndices[idTriIdx+2];
+00202                 }
+00203         }
+00204 }
+
+


Friends And Related Function Documentation

+

+ + + + +
+ + +
friend class CSortVSB [friend] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 78 of file vegetable_sort_block.h.

+

+ + + + +
+ + +
friend class CVegetableBlendLayerModel [friend] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 80 of file vegetable_sort_block.h.

+

+ + + + +
+ + +
friend class CVegetableClipBlock [friend] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 79 of file vegetable_sort_block.h.

+

+ + + + +
+ + +
friend class CVegetableManager [friend] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 77 of file vegetable_sort_block.h.

+


Field Documentation

+

+ + + + +
+ + +
CVector NL3D::CVegetableSortBlock::_Center [private] +
+
+ + + + + +
+   + + +

+center of the sort block. +

+ +

+Definition at line 96 of file vegetable_sort_block.h. +

+Referenced by NL3D::CVegetableManager::addInstance(), NL3D::CVegetableManager::createSortBlock(), and NL3D::CVegetableManager::render().

+

+ + + + +
+ + +
bool NL3D::CVegetableSortBlock::_Dirty [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 88 of file vegetable_sort_block.h. +

+Referenced by NL3D::CVegetableManager::addInstance(), and NL3D::CVegetableManager::deleteIg().

+

+ + + + +
+ + +
CTessList<CVegetableInstanceGroup> NL3D::CVegetableSortBlock::_InstanceGroupList [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 118 of file vegetable_sort_block.h. +

+Referenced by NL3D::CVegetableManager::addInstance(), NL3D::CVegetableManager::createIg(), NL3D::CVegetableManager::deleteIg(), NL3D::CVegetableManager::deleteSortBlock(), NL3D::CVegetableManager::render(), and updateSortBlock().

+

+ + + + +
+ + +
uint NL3D::CVegetableSortBlock::_NIndices [private] +
+
+ + + + + +
+   + + +

+number of indeices= numTriangles*3. +

+ +

+Definition at line 113 of file vegetable_sort_block.h. +

+Referenced by CVegetableSortBlock(), and updateSortBlock().

+

+ + + + +
+ + +
uint NL3D::CVegetableSortBlock::_NTriangles [private] +
+
+ + + + + +
+   + + +

+number of triangles. +

+ +

+Definition at line 111 of file vegetable_sort_block.h. +

+Referenced by CVegetableSortBlock(), NL3D::CVegetableManager::render(), NL3D::CVegetableBlendLayerModel::render(), and updateSortBlock().

+

+ + + + +
+ + +
CVegetableClipBlock* NL3D::CVegetableSortBlock::_Owner [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 84 of file vegetable_sort_block.h. +

+Referenced by NL3D::CVegetableManager::createIg(), NL3D::CVegetableManager::createSortBlock(), and NL3D::CVegetableManager::deleteSortBlock().

+

+ + + + +
+ + +
uint NL3D::CVegetableSortBlock::_QuadrantId [private] +
+
+ + + + + +
+   + + +

+current quadrant used. computed at each render. +

+ +

+Definition at line 103 of file vegetable_sort_block.h. +

+Referenced by NL3D::CVegetableManager::render(), and NL3D::CVegetableBlendLayerModel::render().

+

+ + + + +
+ + +
float NL3D::CVegetableSortBlock::_Radius [private] +
+
+ + + + + +
+   + + +

+approximate Radius of the sort block. +

+ +

+Definition at line 98 of file vegetable_sort_block.h. +

+Referenced by NL3D::CVegetableManager::addInstance(), NL3D::CVegetableManager::createSortBlock(), and NL3D::CVegetableManager::render().

+

+ + + + +
+ + +
NLMISC::CObjectVector<uint32, false> NL3D::CVegetableSortBlock::_SortedTriangleArray [private] +
+
+ + + + + +
+   + + +

+Quadrants. the big array of indices, for the NL3D_VEGETABLE_NUM_QUADRANT quadrants. +

+Definition at line 107 of file vegetable_sort_block.h. +

+Referenced by updateSortBlock().

+

+ + + + +
+ + +
uint32* NL3D::CVegetableSortBlock::_SortedTriangleIndices[NL3D_VEGETABLE_NUM_QUADRANT] [private] +
+
+ + + + + +
+   + + +

+start ptr. +

+ +

+Definition at line 109 of file vegetable_sort_block.h. +

+Referenced by NL3D::CVegetableBlendLayerModel::render(), and updateSortBlock().

+

+ + + + +
+ + +
float NL3D::CVegetableSortBlock::_SortKey [private] +
+
+ + + + + +
+   + + +

+Positive value used for sort. (square of distance to viewer + threshold). temp computed at each render(). +

+ +

+Definition at line 101 of file vegetable_sort_block.h. +

+Referenced by NL3D::CSortVSB::operator<(), and NL3D::CVegetableManager::render().

+

+ + + + +
+ + +
bool NL3D::CVegetableSortBlock::_UnderWater [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 91 of file vegetable_sort_block.h. +

+Referenced by NL3D::CVegetableManager::addInstance(), CVegetableSortBlock(), and NL3D::CVegetableManager::render().

+

+ + + + +
+ + +
CTessNodeList* NL3D::CTessNodeList::Next [inherited] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 44 of file tess_list.h. +

+Referenced by NL3D::CVegetableManager::addInstance(), NL3D::CLandscape::computeDynamicLighting(), NL3D::CPatch::computeGeomorphAlphaFar1VertexListVB(), NL3D::CPatch::computeGeomorphFar0VertexListVB(), NL3D::CPatch::computeGeomorphTileVertexListVB(), NL3D::CPatch::computeGeomorphVertexList(), NL3D::CPatch::debugAllocationMarkIndicesFarList(), NL3D::CPatch::debugAllocationMarkIndicesNearList(), NL3D::CPatch::fillFar0DLMUvOnlyVertexListVB(), NL3D::CPatch::fillFar0VertexListVB(), NL3D::CPatch::fillFar1DLMUvOnlyVertexListVB(), NL3D::CPatch::fillFar1VertexListVB(), NL3D::CPatch::fillTileVertexListVB(), NL3D::CLandscape::getDynamicLightingMemoryLoad(), NL3D::CTessBlock::refillFaceVectorFar0(), NL3D::CTessBlock::refillFaceVectorFar1(), NL3D::CTessBlock::refillFaceVectorTile(), NL3D::CLandscape::refine(), NL3D::CVegetableManager::render(), NL3D::CLandscape::render(), NL3D::CPatch::updateFar0VBAlloc(), NL3D::CPatch::updateFar1VBAlloc(), updateSortBlock(), and NL3D::CPatch::updateTileVBAlloc().

+

+ + + + +
+ + +
CTessNodeList* NL3D::CTessNodeList::Prec [inherited] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 43 of file tess_list.h. +

+Referenced by NL3D::CTessNodeList::CTessNodeList().

+

+ + + + +
+ + +
bool NL3D::CVegetableSortBlock::ZSortHardMode [private] +
+
+ + + + + +
+   + + +

+ +

+Definition at line 122 of file vegetable_sort_block.h. +

+Referenced by NL3D::CVegetableManager::addInstance(), NL3D::CVegetableManager::createIg(), CVegetableSortBlock(), and NL3D::CVegetableBlendLayerModel::render().

+


The documentation for this class was generated from the following files: +
Generated on Tue Mar 16 08:22:39 2004 for NeL by + +doxygen +1.3.6
+ + -- cgit v1.2.1