9 #ifndef GwNavGen_DynamicRasterCell_H
10 #define GwNavGen_DynamicRasterCell_H
25 class GeneratorSystem;
26 class SingleStagePixel;
31 class DynamicRasterCell
38 const GeneratorParameters& config, const CellDesc& cellDesc,
39 const KyArrayPOD<const InputCellBlob*>* inputCells,
40 const KyArrayTLS_POD<const NavTag*>* navTagArray,
42 const PixelBox* modifiedPixelBox =
KY_NULL);
44 void Setup(const GeneratorParameters& config, const CellDesc& cellDesc,
45 const KyArrayPOD<const InputCellBlob*>* inputCells,
KyFloat32 rasterPrecision, const PixelBox& pixelBox);
54 void PushPixelToLocal(const PixelPos& localPixelPos, const SingleStagePixel& pixel,
KyUInt32 navTagIdx);
57 void PushPixel(
KyInt32 rowMajorIdx, const SingleStagePixel& pixel,
KyUInt32 navTagIdx,
KyUInt32 ownerIdx = KyUInt32MAXVAL);
64 const BoxOfArrays<
KyFloat32>::Column& GetFinalColumnFromLocal(const PixelPos& localPixelPos) const;
67 const BoxOfArrays<
KyFloat32>::Column& GetFinalColumn(const PixelPos& pixelPos) const;
70 const BoxOfArrays<
KyUInt32>::Column& GetFinalNavTagColumnFromLocal(const PixelPos& localPixelPos) const;
73 const BoxOfArrays<
KyUInt32>::Column& GetFinalNavTagIndicesColumn(const PixelPos& pixelPos) const;
76 KyResult WriteIntermediateRasterFile(GeneratorSystem* system) const;
78 bool IsEmpty()
const {
return m_isEmpty; }
79 bool AreAllInputCellsOverlapping()
const {
return m_inputCells->GetCount() == 1 || m_areAllInputCellsOverlapping; }
80 bool HasMultipleNavTags()
const {
return m_hasMultipleNavTags; }
82 void SetHasMultipleNavTags(
bool hasMultipleNavTags) { m_hasMultipleNavTags = hasMultipleNavTags; }
84 const PixelBox& GetPixelBox()
const {
return m_pixelBox; }
85 const CellDesc& GetCellDesc()
const {
return m_cellDesc; }
87 const BoxOfArrays<KyFloat32>& GetFinalColumns()
const {
return m_finalColumns; }
88 BoxOfArrays<KyFloat32>& GetFinalColumns() {
return m_finalColumns; }
90 const BoxOfArrays<KyUInt32>& GetFinalColorColumns()
const {
return m_finalNavTagIdxColumns; }
91 BoxOfArrays<KyUInt32>& GetFinalColorColumns() {
return m_finalNavTagIdxColumns; }
94 KyResult Copy(
const DynamicRasterCell& from);
96 KyInt32 GetPixelSize()
const {
return IntCoordSystem::IntPixelSize(); }
97 KyFloat32 GetRasterPrecision()
const {
return m_rasterPrecision; }
99 const KyArrayTLS_POD<const NavTag*>& GetNavTagArray()
const {
return *m_navTagArray; }
101 void ComputeUniqueTagVolumes(KyArray<RasterCellTagVolume>& rasterVolumes);
102 void MakeFinalColumns();
103 void ReleaseDynamicColumns();
107 GeneratorParameters m_config;
110 const KyArrayPOD<const InputCellBlob*>* m_inputCells;
111 const KyArrayTLS_POD<const NavTag*>* m_navTagArray;
114 DynamicRasterColumnPool m_dynamicColumns;
117 BoxOfArrays<KyFloat32> m_finalColumns;
120 BoxOfArrays<KyUInt32> m_finalNavTagIdxColumns;
123 bool m_hasMultipleNavTags;
124 bool m_areAllInputCellsOverlapping;
126 friend class DynamicRasterCellBlobBuilder;
133 inline void DynamicRasterCell::PushPixelToLocal(
const PixelPos& localPixelPos,
const SingleStagePixel& pixel,
KyUInt32 navTagIdx)
135 KyInt32 idx = m_pixelBox.GetRowMajorIndexFromLocalPos(localPixelPos);
136 PushPixel(idx, pixel, navTagIdx);
139 inline void DynamicRasterCell::PushPixel(
const PixelPos& pixelPos,
const SingleStagePixel& pixel,
KyUInt32 navTagIdx,
KyUInt32 ownerIdx)
141 KyInt32 idx = m_pixelBox.GetRowMajorIndex(pixelPos);
142 PushPixel(idx, pixel, navTagIdx, ownerIdx);
145 inline const BoxOfArrays<KyFloat32>::Column& DynamicRasterCell::GetFinalColumnFromLocal(
const PixelPos& localPixelPos)
const
147 return m_finalColumns.GetColumn(localPixelPos.x, localPixelPos.y);
150 inline const BoxOfArrays<KyFloat32>::Column& DynamicRasterCell::GetFinalColumn(
const PixelPos& pixelPos)
const
152 KyInt32 idx = m_pixelBox.GetRowMajorIndex(pixelPos);
153 return m_finalColumns.GetColumn(idx);
156 inline const BoxOfArrays<KyUInt32>::Column& DynamicRasterCell::GetFinalNavTagColumnFromLocal(
const PixelPos& localPixelPos)
const
158 return m_finalNavTagIdxColumns.GetColumn(localPixelPos.x, localPixelPos.y);
161 inline const BoxOfArrays<KyUInt32>::Column& DynamicRasterCell::GetFinalNavTagIndicesColumn(
const PixelPos& pixelPos)
const
163 KyInt32 idx = m_pixelBox.GetRowMajorIndex(pixelPos);
164 return m_finalNavTagIdxColumns.GetColumn(idx);
KyInt32 KyResult
Defines a type that can be returned by methods or functions in the Gameware Navigation SDK to indicat...
Definition: types.h:254
int KyInt32
Type used internally to represent a 32-bit integer.
Definition: types.h:35
#define KY_NULL
Null value.
Definition: types.h:247
#define KY_CLASS_WITHOUT_COPY(ClassName)
Define to forbid copy constructor and copy assignment.
Definition: types.h:387
Definition: gamekitcrowddispersion.h:20
#define KY_DEFINE_NEW_DELETE_OPERATORS(MemStat)
This macro defines new and delete operators.
Definition: memory.h:137
unsigned int KyUInt32
Type used internally to represent an unsigned 32-bit integer.
Definition: types.h:36
#define KyUInt32MAXVAL
The maximum value that can be stored in the KyUInt32 variable type.
Definition: types.h:226
float KyFloat32
Type used internally to represent a 32-bit floating-point number.
Definition: types.h:43