Renderer: rewrite render scheduling (#8683)
This rewrites renderer scheduling. Occlusion is now unified in a new Pass type.
This commit is contained in:
parent
1cc1a46c2e
commit
e536b02248
42 changed files with 1576 additions and 775 deletions
82
src/render/pass/SurfacePassElement.hpp
Normal file
82
src/render/pass/SurfacePassElement.hpp
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
#pragma once
|
||||
#include "PassElement.hpp"
|
||||
#include <optional>
|
||||
|
||||
class CWLSurfaceResource;
|
||||
class CTexture;
|
||||
class CSyncTimeline;
|
||||
|
||||
class CSurfacePassElement : public IPassElement {
|
||||
public:
|
||||
struct SRenderData {
|
||||
PHLMONITORREF pMonitor;
|
||||
timespec* when = nullptr;
|
||||
Vector2D pos, localPos;
|
||||
|
||||
// for iters
|
||||
void* data = nullptr;
|
||||
SP<CWLSurfaceResource> surface = nullptr;
|
||||
SP<CTexture> texture = nullptr;
|
||||
bool mainSurface = true;
|
||||
double w = 0, h = 0;
|
||||
|
||||
// for rounding
|
||||
bool dontRound = true;
|
||||
|
||||
// for fade
|
||||
float fadeAlpha = 1.f;
|
||||
|
||||
// for alpha settings
|
||||
float alpha = 1.f;
|
||||
|
||||
// for decorations (border)
|
||||
bool decorate = false;
|
||||
|
||||
// for custom round values
|
||||
int rounding = -1; // -1 means not set
|
||||
|
||||
// for blurring
|
||||
bool blur = false;
|
||||
bool blockBlurOptimization = false;
|
||||
|
||||
// only for windows, not popups
|
||||
bool squishOversized = true;
|
||||
|
||||
// for calculating UV
|
||||
PHLWINDOW pWindow;
|
||||
PHLLS pLS;
|
||||
|
||||
bool popup = false;
|
||||
|
||||
// counts how many surfaces this pass has rendered
|
||||
int surfaceCounter = 0;
|
||||
|
||||
CBox clipBox = {}; // scaled coordinates
|
||||
|
||||
uint32_t discardMode = 0;
|
||||
float discardOpacity = 0.f;
|
||||
|
||||
bool useNearestNeighbor = false;
|
||||
|
||||
bool flipEndFrame = false;
|
||||
};
|
||||
|
||||
CSurfacePassElement(const SRenderData& data);
|
||||
virtual ~CSurfacePassElement() = default;
|
||||
|
||||
virtual void draw(const CRegion& damage);
|
||||
virtual bool needsLiveBlur();
|
||||
virtual bool needsPrecomputeBlur();
|
||||
virtual std::optional<CBox> boundingBox();
|
||||
virtual CRegion opaqueRegion();
|
||||
virtual void discard();
|
||||
|
||||
virtual const char* passName() {
|
||||
return "CSurfacePassElement";
|
||||
}
|
||||
|
||||
private:
|
||||
SRenderData data;
|
||||
|
||||
CBox getTexBox();
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue