2022-04-04 19:44:25 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "../defines.hpp"
|
|
|
|
#include "../helpers/Monitor.hpp"
|
|
|
|
#include "../helpers/Color.hpp"
|
2023-03-05 15:05:30 +01:00
|
|
|
#include "../helpers/Timer.hpp"
|
2024-06-19 16:20:06 +02:00
|
|
|
#include "../helpers/math/Math.hpp"
|
2024-06-08 10:07:59 +02:00
|
|
|
#include "../helpers/Format.hpp"
|
2024-07-21 13:09:54 +02:00
|
|
|
#include "../helpers/sync/SyncTimeline.hpp"
|
|
|
|
#include <cstdint>
|
2022-04-04 19:44:25 +02:00
|
|
|
#include <list>
|
2022-04-05 20:49:15 +02:00
|
|
|
#include <unordered_map>
|
2024-04-27 13:43:12 +02:00
|
|
|
#include <map>
|
2022-04-04 19:44:25 +02:00
|
|
|
|
2022-07-10 15:41:26 +02:00
|
|
|
#include <cairo/cairo.h>
|
|
|
|
|
2022-04-04 19:44:25 +02:00
|
|
|
#include "Shader.hpp"
|
2022-04-05 14:33:54 +02:00
|
|
|
#include "Texture.hpp"
|
2022-04-05 20:49:15 +02:00
|
|
|
#include "Framebuffer.hpp"
|
2023-10-21 15:15:48 +02:00
|
|
|
#include "Transformer.hpp"
|
2023-11-24 11:54:21 +01:00
|
|
|
#include "Renderbuffer.hpp"
|
2024-12-22 17:12:09 +01:00
|
|
|
#include "pass/Pass.hpp"
|
2023-11-24 11:54:21 +01:00
|
|
|
|
2024-07-21 13:09:54 +02:00
|
|
|
#include <EGL/egl.h>
|
|
|
|
#include <EGL/eglext.h>
|
2023-11-24 11:54:21 +01:00
|
|
|
#include <GLES2/gl2ext.h>
|
2024-07-21 13:09:54 +02:00
|
|
|
#include <aquamarine/buffer/Buffer.hpp>
|
2022-04-04 19:44:25 +02:00
|
|
|
|
2023-07-20 17:47:49 +02:00
|
|
|
#include "../debug/TracyDefines.hpp"
|
|
|
|
|
2024-07-21 13:09:54 +02:00
|
|
|
struct gbm_device;
|
2022-11-06 18:58:56 +01:00
|
|
|
class CHyprRenderer;
|
|
|
|
|
2022-04-04 21:45:35 +02:00
|
|
|
inline const float fullVerts[] = {
|
2022-12-16 18:17:31 +01:00
|
|
|
1, 0, // top right
|
|
|
|
0, 0, // top left
|
|
|
|
1, 1, // bottom right
|
|
|
|
0, 1, // bottom left
|
2022-05-02 16:54:40 +02:00
|
|
|
};
|
2022-12-16 18:17:31 +01:00
|
|
|
inline const float fanVertsFull[] = {-1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f};
|
2022-04-04 21:45:35 +02:00
|
|
|
|
2024-12-07 18:51:18 +01:00
|
|
|
enum eDiscardMode : uint8_t {
|
2023-06-11 19:30:31 +02:00
|
|
|
DISCARD_OPAQUE = 1,
|
|
|
|
DISCARD_ALPHA = 1 << 1
|
2023-03-18 00:16:13 +01:00
|
|
|
};
|
|
|
|
|
2023-04-12 13:41:23 +02:00
|
|
|
struct SRenderModifData {
|
2024-12-07 18:51:18 +01:00
|
|
|
enum eRenderModifType : uint8_t {
|
2024-01-07 18:35:44 +01:00
|
|
|
RMOD_TYPE_SCALE, /* scale by a float */
|
|
|
|
RMOD_TYPE_SCALECENTER, /* scale by a float from the center */
|
|
|
|
RMOD_TYPE_TRANSLATE, /* translate by a Vector2D */
|
|
|
|
RMOD_TYPE_ROTATE, /* rotate by a float in rad from top left */
|
|
|
|
RMOD_TYPE_ROTATECENTER, /* rotate by a float in rad from center */
|
|
|
|
};
|
|
|
|
|
|
|
|
std::vector<std::pair<eRenderModifType, std::any>> modifs;
|
|
|
|
|
|
|
|
void applyToBox(CBox& box);
|
2024-04-03 15:09:58 +02:00
|
|
|
void applyToRegion(CRegion& rg);
|
|
|
|
float combinedScale();
|
|
|
|
|
|
|
|
bool enabled = true;
|
2023-04-12 13:41:23 +02:00
|
|
|
};
|
|
|
|
|
2024-12-22 17:12:09 +01:00
|
|
|
enum eMonitorRenderFBs : uint8_t {
|
|
|
|
FB_MONITOR_RENDER_MAIN = 0,
|
|
|
|
FB_MONITOR_RENDER_CURRENT = 1,
|
|
|
|
FB_MONITOR_RENDER_OUT = 2,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum eMonitorExtraRenderFBs : uint8_t {
|
|
|
|
FB_MONITOR_RENDER_EXTRA_OFFLOAD = 0,
|
|
|
|
FB_MONITOR_RENDER_EXTRA_MIRROR,
|
|
|
|
FB_MONITOR_RENDER_EXTRA_MIRROR_SWAP,
|
|
|
|
FB_MONITOR_RENDER_EXTRA_OFF_MAIN,
|
|
|
|
FB_MONITOR_RENDER_EXTRA_MONITOR_MIRROR,
|
|
|
|
FB_MONITOR_RENDER_EXTRA_BLUR,
|
|
|
|
};
|
|
|
|
|
2022-06-29 12:54:53 +02:00
|
|
|
struct SMonitorRenderData {
|
2023-11-24 11:54:21 +01:00
|
|
|
CFramebuffer offloadFB;
|
2023-07-19 20:09:49 +02:00
|
|
|
CFramebuffer mirrorFB; // these are used for some effects,
|
|
|
|
CFramebuffer mirrorSwapFB; // etc
|
2023-10-21 15:15:48 +02:00
|
|
|
CFramebuffer offMainFB;
|
2024-04-24 17:29:41 +02:00
|
|
|
CFramebuffer monitorMirrorFB; // used for mirroring outputs, does not contain artifacts like offloadFB
|
2024-12-22 17:12:09 +01:00
|
|
|
CFramebuffer blurFB;
|
2022-06-29 12:54:53 +02:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
SP<CTexture> stencilTex = makeShared<CTexture>();
|
2022-07-31 23:44:04 +02:00
|
|
|
|
2022-12-18 13:41:13 +01:00
|
|
|
bool blurFBDirty = true;
|
|
|
|
bool blurFBShouldRender = false;
|
2022-08-01 12:16:33 +02:00
|
|
|
|
2022-08-11 20:29:21 +02:00
|
|
|
// Shaders
|
2022-12-20 03:18:47 +01:00
|
|
|
bool m_bShadersInitialized = false;
|
|
|
|
CShader m_shQUAD;
|
|
|
|
CShader m_shRGBA;
|
2023-03-04 15:59:27 +01:00
|
|
|
CShader m_shPASSTHRURGBA;
|
2023-11-04 20:32:50 +01:00
|
|
|
CShader m_shMATTE;
|
2022-12-20 03:18:47 +01:00
|
|
|
CShader m_shRGBX;
|
|
|
|
CShader m_shEXT;
|
|
|
|
CShader m_shBLUR1;
|
|
|
|
CShader m_shBLUR2;
|
2023-11-06 19:49:03 +01:00
|
|
|
CShader m_shBLURPREPARE;
|
2023-08-03 15:11:10 +02:00
|
|
|
CShader m_shBLURFINISH;
|
2022-12-20 03:18:47 +01:00
|
|
|
CShader m_shSHADOW;
|
|
|
|
CShader m_shBORDER1;
|
2023-04-04 15:49:58 +02:00
|
|
|
CShader m_shGLITCH;
|
2022-08-11 20:29:21 +02:00
|
|
|
//
|
2022-06-29 12:54:53 +02:00
|
|
|
};
|
|
|
|
|
2022-04-04 19:44:25 +02:00
|
|
|
struct SCurrentRenderData {
|
2024-10-20 00:03:29 +02:00
|
|
|
PHLMONITORREF pMonitor;
|
2024-09-25 11:01:13 +02:00
|
|
|
PHLWORKSPACE pWorkspace = nullptr;
|
|
|
|
Mat3x3 projection;
|
|
|
|
Mat3x3 savedProjection;
|
|
|
|
Mat3x3 monitorProjection;
|
|
|
|
|
|
|
|
SMonitorRenderData* pCurrentMonData = nullptr;
|
|
|
|
CFramebuffer* currentFB = nullptr; // current rendering to
|
|
|
|
CFramebuffer* mainFB = nullptr; // main to render to
|
|
|
|
CFramebuffer* outFB = nullptr; // out to render to (if offloaded, etc)
|
|
|
|
|
|
|
|
CRegion damage;
|
|
|
|
CRegion finalDamage; // damage used for funal off -> main
|
|
|
|
|
|
|
|
SRenderModifData renderModif;
|
|
|
|
float mouseZoomFactor = 1.f;
|
|
|
|
bool mouseZoomUseMouse = true; // true by default
|
|
|
|
bool useNearestNeighbor = false;
|
|
|
|
bool forceIntrospection = false; // cleaned in ::end()
|
|
|
|
bool blockScreenShader = false;
|
|
|
|
bool simplePass = false;
|
|
|
|
|
|
|
|
Vector2D primarySurfaceUVTopLeft = Vector2D(-1, -1);
|
|
|
|
Vector2D primarySurfaceUVBottomRight = Vector2D(-1, -1);
|
|
|
|
|
|
|
|
CBox clipBox = {}; // scaled coordinates
|
|
|
|
|
|
|
|
uint32_t discardMode = DISCARD_OPAQUE;
|
|
|
|
float discardOpacity = 0.f;
|
2024-12-22 17:12:09 +01:00
|
|
|
|
|
|
|
PHLLSREF currentLS;
|
|
|
|
PHLWINDOWREF currentWindow;
|
2022-04-04 19:44:25 +02:00
|
|
|
};
|
|
|
|
|
2024-07-21 13:09:54 +02:00
|
|
|
class CEGLSync {
|
|
|
|
public:
|
|
|
|
~CEGLSync();
|
|
|
|
|
|
|
|
EGLSyncKHR sync = nullptr;
|
|
|
|
|
2024-08-06 15:52:19 +02:00
|
|
|
int fd();
|
2024-07-21 13:09:54 +02:00
|
|
|
bool wait();
|
|
|
|
|
|
|
|
private:
|
|
|
|
CEGLSync() = default;
|
|
|
|
|
2024-08-06 15:52:19 +02:00
|
|
|
int m_iFd = -1;
|
|
|
|
|
2024-07-21 13:09:54 +02:00
|
|
|
friend class CHyprOpenGLImpl;
|
|
|
|
};
|
|
|
|
|
2022-11-26 18:56:43 +01:00
|
|
|
class CGradientValueData;
|
|
|
|
|
2022-04-04 19:44:25 +02:00
|
|
|
class CHyprOpenGLImpl {
|
2022-12-16 18:17:31 +01:00
|
|
|
public:
|
2022-04-04 19:44:25 +02:00
|
|
|
CHyprOpenGLImpl();
|
2024-07-29 19:19:47 +02:00
|
|
|
~CHyprOpenGLImpl();
|
2022-04-04 19:44:25 +02:00
|
|
|
|
2024-10-20 00:03:29 +02:00
|
|
|
void begin(PHLMONITOR, const CRegion& damage, CFramebuffer* fb = nullptr, std::optional<CRegion> finalDamage = {});
|
|
|
|
void beginSimple(PHLMONITOR, const CRegion& damage, SP<CRenderbuffer> rb = nullptr, CFramebuffer* fb = nullptr);
|
2024-06-08 10:07:59 +02:00
|
|
|
void end();
|
2022-04-04 19:44:25 +02:00
|
|
|
|
2024-12-03 19:58:24 +01:00
|
|
|
void renderRect(CBox*, const CHyprColor&, int round = 0);
|
|
|
|
void renderRectWithBlur(CBox*, const CHyprColor&, int round = 0, float blurA = 1.f, bool xray = false);
|
2024-12-22 17:12:09 +01:00
|
|
|
void renderRectWithDamage(CBox*, const CHyprColor&, const CRegion& damage, int round = 0);
|
2024-06-08 10:07:59 +02:00
|
|
|
void renderTexture(SP<CTexture>, CBox*, float a, int round = 0, bool discardActive = false, bool allowCustomUV = false);
|
2024-12-22 17:12:09 +01:00
|
|
|
void renderTextureWithDamage(SP<CTexture>, CBox*, const CRegion& damage, float a, int round = 0, bool discardActive = false, bool allowCustomUV = false,
|
2024-07-21 13:09:54 +02:00
|
|
|
SP<CSyncTimeline> waitTimeline = nullptr, uint64_t waitPoint = 0);
|
2024-06-08 10:07:59 +02:00
|
|
|
void renderTextureWithBlur(SP<CTexture>, CBox*, float a, SP<CWLSurfaceResource> pSurface, int round = 0, bool blockBlurOptimization = false, float blurA = 1.f);
|
2024-12-03 19:58:24 +01:00
|
|
|
void renderRoundedShadow(CBox*, int round, int range, const CHyprColor& color, float a = 1.0);
|
2024-06-08 10:07:59 +02:00
|
|
|
void renderBorder(CBox*, const CGradientValueData&, int round, int borderSize, float a = 1.0, int outerRound = -1 /* use round */);
|
2024-12-03 19:58:24 +01:00
|
|
|
void renderBorder(CBox*, const CGradientValueData&, const CGradientValueData&, float lerp, int round, int borderSize, float a = 1.0, int outerRound = -1 /* use round */);
|
2024-06-08 10:07:59 +02:00
|
|
|
void renderTextureMatte(SP<CTexture> tex, CBox* pBox, CFramebuffer& matte);
|
2023-11-04 20:35:49 +01:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
void setMonitorTransformEnabled(bool enabled);
|
|
|
|
void setRenderModifEnabled(bool enabled);
|
2022-04-04 21:45:35 +02:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
void saveMatrix();
|
|
|
|
void setMatrixScaleTranslate(const Vector2D& translate, const float& scale);
|
|
|
|
void restoreMatrix();
|
2023-04-12 13:41:23 +02:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
void blend(bool enabled);
|
2023-07-20 13:49:28 +02:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
bool shouldUseNewBlurOptimizations(PHLLS pLayer, PHLWINDOW pWindow);
|
2022-04-05 20:49:15 +02:00
|
|
|
|
2024-12-03 19:58:24 +01:00
|
|
|
void clear(const CHyprColor&);
|
2024-06-08 10:07:59 +02:00
|
|
|
void clearWithTex();
|
|
|
|
void scissor(const CBox*, bool transform = true);
|
|
|
|
void scissor(const pixman_box32*, bool transform = true);
|
|
|
|
void scissor(const int x, const int y, const int w, const int h, bool transform = true);
|
2022-04-04 19:44:25 +02:00
|
|
|
|
2024-10-20 00:03:29 +02:00
|
|
|
void destroyMonitorResources(PHLMONITOR);
|
2022-04-19 19:01:23 +02:00
|
|
|
|
2024-10-20 00:03:29 +02:00
|
|
|
void markBlurDirtyForMonitor(PHLMONITOR);
|
2022-08-01 12:16:33 +02:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
void preWindowPass();
|
|
|
|
bool preBlurQueued();
|
2024-10-20 00:03:29 +02:00
|
|
|
void preRender(PHLMONITOR);
|
2022-08-01 12:23:09 +02:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
void saveBufferForMirror(CBox*);
|
|
|
|
void renderMirrored();
|
2022-09-13 15:25:42 +02:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
void applyScreenShader(const std::string& path);
|
2022-12-01 14:36:07 +01:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
void bindOffMain();
|
|
|
|
void renderOffToMain(CFramebuffer* off);
|
|
|
|
void bindBackOnMain();
|
2023-10-21 15:15:48 +02:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
void setDamage(const CRegion& damage, std::optional<CRegion> finalDamage = {});
|
2024-02-23 02:02:32 +01:00
|
|
|
|
2024-10-20 00:03:29 +02:00
|
|
|
uint32_t getPreferredReadFormat(PHLMONITOR pMonitor);
|
2024-10-26 03:06:13 +02:00
|
|
|
std::vector<SDRMFormat> getDRMFormats();
|
|
|
|
EGLImageKHR createEGLImage(const Aquamarine::SDMABUFAttrs& attrs);
|
|
|
|
SP<CEGLSync> createEGLSync(int fenceFD);
|
|
|
|
bool waitForTimelinePoint(SP<CSyncTimeline> timeline, uint64_t point);
|
2023-12-01 18:20:56 +01:00
|
|
|
|
2024-10-26 03:06:13 +02:00
|
|
|
SCurrentRenderData m_RenderData;
|
2022-04-04 19:44:25 +02:00
|
|
|
|
2024-10-26 03:06:13 +02:00
|
|
|
GLint m_iCurrentOutputFb = 0;
|
2022-04-05 20:49:15 +02:00
|
|
|
|
2024-11-01 16:52:03 +01:00
|
|
|
int m_iGBMFD = -1;
|
|
|
|
gbm_device* m_pGbmDevice = nullptr;
|
|
|
|
EGLContext m_pEglContext = nullptr;
|
|
|
|
EGLDisplay m_pEglDisplay = nullptr;
|
|
|
|
EGLDeviceEXT m_pEglDevice = nullptr;
|
|
|
|
uint failedAssetsNo = 0;
|
2024-07-21 13:09:54 +02:00
|
|
|
|
2024-10-26 03:06:13 +02:00
|
|
|
bool m_bReloadScreenShader = true; // at launch it can be set
|
2022-12-01 14:36:07 +01:00
|
|
|
|
2024-10-26 03:06:13 +02:00
|
|
|
std::map<PHLWINDOWREF, CFramebuffer> m_mWindowFramebuffers;
|
|
|
|
std::map<PHLLSREF, CFramebuffer> m_mLayerFramebuffers;
|
|
|
|
std::map<PHLMONITORREF, SMonitorRenderData> m_mMonitorRenderResources;
|
|
|
|
std::map<PHLMONITORREF, CFramebuffer> m_mMonitorBGFBs;
|
2022-04-05 20:49:15 +02:00
|
|
|
|
2023-11-24 11:54:21 +01:00
|
|
|
struct {
|
|
|
|
PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC glEGLImageTargetRenderbufferStorageOES = nullptr;
|
2024-06-08 10:07:59 +02:00
|
|
|
PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES = nullptr;
|
|
|
|
PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR = nullptr;
|
2023-11-24 13:37:10 +01:00
|
|
|
PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR = nullptr;
|
2024-06-08 10:07:59 +02:00
|
|
|
PFNEGLQUERYDMABUFFORMATSEXTPROC eglQueryDmaBufFormatsEXT = nullptr;
|
|
|
|
PFNEGLQUERYDMABUFMODIFIERSEXTPROC eglQueryDmaBufModifiersEXT = nullptr;
|
2024-07-21 13:09:54 +02:00
|
|
|
PFNEGLGETPLATFORMDISPLAYEXTPROC eglGetPlatformDisplayEXT = nullptr;
|
|
|
|
PFNEGLDEBUGMESSAGECONTROLKHRPROC eglDebugMessageControlKHR = nullptr;
|
|
|
|
PFNEGLQUERYDEVICESEXTPROC eglQueryDevicesEXT = nullptr;
|
|
|
|
PFNEGLQUERYDEVICESTRINGEXTPROC eglQueryDeviceStringEXT = nullptr;
|
|
|
|
PFNEGLQUERYDISPLAYATTRIBEXTPROC eglQueryDisplayAttribEXT = nullptr;
|
|
|
|
PFNEGLCREATESYNCKHRPROC eglCreateSyncKHR = nullptr;
|
|
|
|
PFNEGLDESTROYSYNCKHRPROC eglDestroySyncKHR = nullptr;
|
|
|
|
PFNEGLDUPNATIVEFENCEFDANDROIDPROC eglDupNativeFenceFDANDROID = nullptr;
|
|
|
|
PFNEGLWAITSYNCKHRPROC eglWaitSyncKHR = nullptr;
|
2023-11-24 11:54:21 +01:00
|
|
|
} m_sProc;
|
|
|
|
|
2023-12-02 15:51:35 +01:00
|
|
|
struct {
|
2024-06-08 10:07:59 +02:00
|
|
|
bool EXT_read_format_bgra = false;
|
|
|
|
bool EXT_image_dma_buf_import = false;
|
|
|
|
bool EXT_image_dma_buf_import_modifiers = false;
|
2024-07-21 13:09:54 +02:00
|
|
|
bool KHR_display_reference = false;
|
|
|
|
bool IMG_context_priority = false;
|
|
|
|
bool EXT_create_context_robustness = false;
|
2023-12-02 15:51:35 +01:00
|
|
|
} m_sExts;
|
|
|
|
|
2022-12-16 18:17:31 +01:00
|
|
|
private:
|
2024-06-08 10:07:59 +02:00
|
|
|
std::list<GLuint> m_lBuffers;
|
|
|
|
std::list<GLuint> m_lTextures;
|
|
|
|
|
|
|
|
std::vector<SDRMFormat> drmFormats;
|
|
|
|
bool m_bHasModifiers = false;
|
2022-04-04 19:44:25 +02:00
|
|
|
|
2024-07-21 13:09:54 +02:00
|
|
|
int m_iDRMFD = -1;
|
2024-06-08 10:07:59 +02:00
|
|
|
std::string m_szExtensions;
|
2022-04-04 19:44:25 +02:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
bool m_bFakeFrame = false;
|
|
|
|
bool m_bEndFrame = false;
|
|
|
|
bool m_bApplyFinalShader = false;
|
|
|
|
bool m_bBlend = false;
|
|
|
|
bool m_bOffloadedFramebuffer = false;
|
2022-12-01 14:36:07 +01:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
CShader m_sFinalScreenShader;
|
|
|
|
CTimer m_tGlobalTimer;
|
2022-05-18 20:33:54 +02:00
|
|
|
|
2024-11-01 16:52:03 +01:00
|
|
|
SP<CTexture> m_pMissingAssetTexture, m_pBackgroundTexture, m_pLockDeadTexture, m_pLockDead2Texture, m_pLockTtyTextTexture;
|
2024-07-26 19:53:24 +02:00
|
|
|
|
2024-06-08 10:07:59 +02:00
|
|
|
void logShaderError(const GLuint&, bool program = false);
|
|
|
|
GLuint createProgram(const std::string&, const std::string&, bool dynamic = false);
|
|
|
|
GLuint compileShader(const GLuint&, std::string, bool dynamic = false);
|
2024-10-20 00:03:29 +02:00
|
|
|
void createBGTextureForMonitor(PHLMONITOR);
|
2024-06-08 10:07:59 +02:00
|
|
|
void initShaders();
|
|
|
|
void initDRMFormats();
|
2024-07-21 13:09:54 +02:00
|
|
|
void initEGL(bool gbm);
|
2024-07-24 17:48:38 +02:00
|
|
|
EGLDeviceEXT eglDeviceFromDRMFD(int drmFD);
|
2024-08-29 23:30:12 +02:00
|
|
|
SP<CTexture> loadAsset(const std::string& file);
|
2024-12-03 19:58:24 +01:00
|
|
|
SP<CTexture> renderText(const std::string& text, CHyprColor col, int pt, bool italic = false);
|
2024-08-29 23:30:12 +02:00
|
|
|
void initAssets();
|
2024-11-01 16:52:03 +01:00
|
|
|
void initMissingAssetTexture();
|
2024-06-14 21:59:21 +02:00
|
|
|
|
|
|
|
//
|
|
|
|
std::optional<std::vector<uint64_t>> getModsForFormat(EGLint format);
|
2022-04-14 16:43:29 +02:00
|
|
|
|
2022-05-02 16:54:40 +02:00
|
|
|
// returns the out FB, can be either Mirror or MirrorSwap
|
2023-08-25 17:43:23 +02:00
|
|
|
CFramebuffer* blurMainFramebufferWithDamage(float a, CRegion* damage);
|
2022-05-02 16:54:40 +02:00
|
|
|
|
2024-12-22 17:12:09 +01:00
|
|
|
void renderTextureInternalWithDamage(SP<CTexture>, CBox* pBox, float a, const CRegion& damage, int round = 0, bool discardOpaque = false, bool noAA = false,
|
2024-07-21 13:09:54 +02:00
|
|
|
bool allowCustomUV = false, bool allowDim = false, SP<CSyncTimeline> = nullptr, uint64_t waitPoint = 0);
|
2024-06-08 10:07:59 +02:00
|
|
|
void renderTexturePrimitive(SP<CTexture> tex, CBox* pBox);
|
2024-01-30 00:11:00 +01:00
|
|
|
void renderSplash(cairo_t* const, cairo_surface_t* const, double offset, const Vector2D& size);
|
2022-08-01 12:16:33 +02:00
|
|
|
|
2022-12-20 03:18:47 +01:00
|
|
|
void preBlurForCurrentMonitor();
|
2022-11-06 18:58:56 +01:00
|
|
|
|
2024-10-20 00:03:29 +02:00
|
|
|
bool passRequiresIntrospection(PHLMONITOR pMonitor);
|
2023-11-24 13:37:10 +01:00
|
|
|
|
2022-11-06 18:58:56 +01:00
|
|
|
friend class CHyprRenderer;
|
2024-12-22 17:12:09 +01:00
|
|
|
friend class CTexPassElement;
|
|
|
|
friend class CPreBlurElement;
|
|
|
|
friend class CSurfacePassElement;
|
2022-04-04 19:44:25 +02:00
|
|
|
};
|
|
|
|
|
2022-09-29 04:01:26 +02:00
|
|
|
inline std::unique_ptr<CHyprOpenGLImpl> g_pHyprOpenGL;
|