mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-01 06:01:00 +00:00
5585351c0f
This is by no means a permanent solution but having it buys some time to find something more universal that won't affect performance too badly and investigate the need for a more robust solution. The idea here is to define pairs of walls where when the first element of the pair is seen, it will treat the second one as view blocking. This is used as the two offending windows (sectors 151 and 152) to cope with the lack of a height sensitive clipper.
63 lines
1.5 KiB
C++
63 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include "tarray.h"
|
|
#include "basics.h"
|
|
|
|
struct HWDrawInfo;
|
|
class Clipper;
|
|
|
|
struct FBunch
|
|
{
|
|
int sectnum;
|
|
int startline;
|
|
int endline;
|
|
bool portal;
|
|
binangle startangle;
|
|
binangle endangle;
|
|
};
|
|
|
|
class BunchDrawer
|
|
{
|
|
HWDrawInfo *di;
|
|
Clipper *clipper;
|
|
int LastBunch;
|
|
int StartTime;
|
|
TArray<FBunch> Bunches;
|
|
TArray<int> CompareData;
|
|
double viewx, viewy;
|
|
vec2_t iview;
|
|
float gcosang, gsinang;
|
|
FixedBitArray<MAXSECTORS> gotsector;
|
|
FixedBitArray<MAXSECTORS> gotsector2;
|
|
FixedBitArray<MAXWALLS> gotwall;
|
|
FixedBitArray<MAXWALLS> blockwall;
|
|
binangle ang1, ang2;
|
|
|
|
int sectstartang[MAXSECTORS], sectendang[MAXSECTORS];
|
|
|
|
private:
|
|
|
|
enum
|
|
{
|
|
CL_Skip = 0,
|
|
CL_Draw = 1,
|
|
CL_Pass = 2,
|
|
};
|
|
|
|
void StartScene();
|
|
bool StartBunch(int sectnum, int linenum, binangle startan, binangle endan, bool portal);
|
|
bool AddLineToBunch(int line, binangle newan);
|
|
void DeleteBunch(int index);
|
|
bool CheckClip(walltype* wal);
|
|
int ClipLine(int line, bool portal);
|
|
void ProcessBunch(int bnch);
|
|
int WallInFront(int wall1, int wall2);
|
|
int BunchInFront(FBunch* b1, FBunch* b2);
|
|
int FindClosestBunch();
|
|
void ProcessSector(int sectnum, bool portal);
|
|
|
|
public:
|
|
void Init(HWDrawInfo* _di, Clipper* c, vec2_t& view, binangle a1, binangle a2);
|
|
void RenderScene(const int* viewsectors, unsigned sectcount, bool portal);
|
|
const FixedBitArray<MAXSECTORS>& GotSector() const { return gotsector; }
|
|
};
|