LCOV - code coverage report
Current view: top level - engine/render - renderva.h (source / functions) Hit Total Coverage
Test: Libprimis Test Coverage Lines: 1 3 33.3 %
Date: 2024-11-22 05:07:59 Functions: 1 2 50.0 %

          Line data    Source code
       1             : #ifndef RENDERVA_H_
       2             : #define RENDERVA_H_
       3             : 
       4             : struct vtxarray;
       5             : 
       6             : struct occludequery
       7             : {
       8             :     const void *owner;
       9             :     GLuint id;
      10             :     int fragments;
      11             : 
      12             :     void startquery() const;
      13             : };
      14             : 
      15             : class vfc
      16             : {
      17             :     public:
      18             :         int isfoggedcube(const ivec &o, int size) const;
      19             :         int isvisiblecube(const ivec &o, int size) const;
      20             :         void visiblecubes(bool cull = true);
      21             :         bool isfoggedsphere(float rad, const vec &cv) const;
      22             :         int isvisiblesphere(float rad, const vec &cv) const;
      23             :         int isvisiblebb(const ivec &bo, const ivec &br) const;
      24             :         int cullfrustumsides(const vec &lightpos, float lightradius, float size, float border);
      25             :     private:
      26             :         static constexpr uint numvfc = 5;
      27             :         void calcvfcD();
      28             :         void setvfcP(const vec &bbmin = vec(-1, -1, -1), const vec &bbmax = vec(1, 1, 1));
      29             : 
      30             :         std::array<plane, numvfc> vfcP;  // perpindictular vectors to view frustrum bounding planes
      31             :         float vfcDfog;  // far plane culling distance (fog limit).
      32             :         std::array<float, numvfc> vfcDnear,
      33             :                              vfcDfar;
      34             : };
      35             : 
      36             : class Occluder
      37             : {
      38             :     public:
      39             :         void setupmodelquery(occludequery *q);
      40             :         void clearqueries();
      41             :         void flipqueries();
      42             :         void endquery();
      43             :         void endmodelquery(); // starts the model query (!)
      44             :         bool checkquery(occludequery *query, bool nowait = false);
      45             :         void resetqueries();
      46             :         int getnumqueries() const;
      47           0 :         occludequery *newquery(const void *owner)
      48             :         {
      49           0 :             return queryframes[flipquery].newquery(owner);
      50             :         }
      51             :     private:
      52             :         class queryframe
      53             :         {
      54             :             public:
      55             :                 int cur;
      56             : 
      57           2 :                 queryframe() : cur(0), max(0), defer(0) {}
      58             : 
      59             :                 void flip();
      60             :                 occludequery *newquery(const void *owner);
      61             :                 void reset();
      62             :                 void cleanup();
      63             :             private:
      64             :                 static constexpr int maxquery = 2048;
      65             : 
      66             :                 int max, defer;
      67             :                 occludequery queries[maxquery];
      68             :         };
      69             :         static constexpr int maxqueryframes = 2;
      70             :         std::array<queryframe, maxqueryframes> queryframes;
      71             :         uint flipquery = 0;
      72             : 
      73             :         occludequery *modelquery = nullptr;
      74             :         int modelquerybatches = -1,
      75             :            modelquerymodels = -1,
      76             :            modelqueryattached = -1;
      77             : 
      78             : };
      79             : 
      80             : extern Occluder occlusionengine;
      81             : 
      82             : extern vfc view;
      83             : 
      84             : extern int oqfrags;
      85             : 
      86             : extern vec shadoworigin, shadowdir;
      87             : extern float shadowradius, shadowbias;
      88             : extern size_t shadowside;
      89             : extern int shadowspot;
      90             : 
      91             : extern vtxarray *visibleva;
      92             : 
      93             : extern void renderrefractmask();
      94             : extern void renderalphageom(int side);
      95             : extern void rendermapmodels();
      96             : extern void renderoutline();
      97             : extern bool renderexplicitsky(bool outline = false);
      98             : extern bvec outlinecolor;
      99             : 
     100             : extern int deferquery;
     101             : extern void startbb(bool mask = true);
     102             : extern void endbb(bool mask = true);
     103             : extern void drawbb(const ivec &bo, const ivec &br);
     104             : 
     105             : extern void renderdecals();
     106             : 
     107             : struct shadowmesh;
     108             : extern void clearshadowmeshes();
     109             : extern void genshadowmeshes();
     110             : extern shadowmesh *findshadowmesh(int idx, const extentity &e);
     111             : extern void rendershadowmesh(const shadowmesh *m);
     112             : extern void dynamicshadowvabounds(int mask, vec &bbmin, vec &bbmax);
     113             : 
     114             : #endif

Generated by: LCOV version 1.14