raze/source/core/rendering/hw_sections2.h

52 lines
1.4 KiB
C
Raw Normal View History

2021-12-08 18:17:45 +00:00
struct Section2;
2021-12-09 19:44:04 +00:00
enum ESEctionFlag
{
Unclosed = 1, // at least one unclosed loop
Dumped = 2, // builder was unable to properly construct, so content may not be usable for triangulator.
BadWinding = 4,
};
2021-12-08 18:17:45 +00:00
struct Section2Wall
{
int index;
int section;
int startpoint;
int endpoint;
int wall; // points to the actual wall this belongs to - this is NOT necessarily the same as startpoint and can be -1.
Section2Wall* backside; // this is better kept as pointer because of reindexing when splitting a section.
vec2_t v1() const { return ::wall[startpoint].pos; }
vec2_t v2() const { return ::wall[endpoint].pos; }
walltype* wallp() const { return &::wall[wall]; }
2021-12-08 18:17:45 +00:00
};
2021-12-09 19:44:04 +00:00
struct Section2Loop
2021-12-08 18:17:45 +00:00
{
TArrayView<Section2Wall*> walls;
};
struct Section2
{
uint8_t flags;
uint8_t dirty;
uint8_t geomflags;
unsigned index;
2021-12-08 18:17:45 +00:00
sectortype* sector;
// this uses a memory arena for storage, so use TArrayView instead of TArray
TArrayView<Section2Wall*> walls;
2021-12-09 19:44:04 +00:00
TArrayView<Section2Loop> loops;
2021-12-08 18:17:45 +00:00
};
2021-12-09 19:44:04 +00:00
extern TArray<Section2*> sections2;
extern TArrayView<TArrayView<Section2*>> sections2PerSector;
extern TArray<Section2Wall*> section2walls;
2021-12-09 19:44:04 +00:00
void hw_CreateSections2();
using Outline = TArray<TArray<vec2_t>>;
using Point = std::pair<float, float>;
using FOutline = std::vector<std::vector<Point>> ; // Data type was chosen so it can be passed directly into Earcut.
Outline BuildOutline(Section2* section);