diff options
Diffstat (limited to 'src/render/OpenGL.hpp')
| -rw-r--r-- | src/render/OpenGL.hpp | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/render/OpenGL.hpp b/src/render/OpenGL.hpp index 4189e32b..a538aa4b 100644 --- a/src/render/OpenGL.hpp +++ b/src/render/OpenGL.hpp @@ -89,10 +89,8 @@ enum eMonitorExtraRenderFBs : uint8_t { enum ePreparedFragmentShader : uint8_t { SH_FRAG_QUAD = 0, - SH_FRAG_RGBA, SH_FRAG_PASSTHRURGBA, SH_FRAG_MATTE, - SH_FRAG_RGBX, SH_FRAG_EXT, SH_FRAG_BLUR1, SH_FRAG_BLUR2, @@ -103,14 +101,24 @@ enum ePreparedFragmentShader : uint8_t { SH_FRAG_CM_BORDER1, SH_FRAG_BORDER1, SH_FRAG_GLITCH, - SH_FRAG_CM_RGBA, - SH_FRAG_CM_RGBA_DISCARD, - SH_FRAG_CM_RGBX, - SH_FRAG_CM_RGBX_DISCARD, SH_FRAG_LAST, }; +enum ePreparedFragmentShaderFeature : uint8_t { + SH_FEAT_UNKNOWN = 0, // all features just in case + + SH_FEAT_RGBA = (1 << 0), // RGBA/RGBX texture sampling + SH_FEAT_DISCARD = (1 << 1), // RGBA/RGBX texture sampling + SH_FEAT_TINT = (1 << 2), // uniforms: tint; condition: applyTint + SH_FEAT_ROUNDING = (1 << 3), // uniforms: radius, roundingPower, topLeft, fullSize; condition: radius > 0 + SH_FEAT_CM = (1 << 4), // uniforms: srcTFRange, dstTFRange, srcRefLuminance, convertMatrix; condition: !skipCM + SH_FEAT_TONEMAP = (1 << 5), // uniforms: maxLuminance, dstMaxLuminance, dstRefLuminance; condition: maxLuminance < dstMaxLuminance * 1.01 + SH_FEAT_SDR_MOD = (1 << 6), // uniforms: sdrSaturation, sdrBrightnessMultiplier; condition: SDR <-> HDR && (sdrSaturation != 1 || sdrBrightnessMultiplier != 1) + + // uniforms: targetPrimariesXYZ; condition: SH_FEAT_TONEMAP || SH_FEAT_SDR_MOD +}; + struct SFragShaderDesc { ePreparedFragmentShader id; const char* file; @@ -126,6 +134,7 @@ struct SPreparedShaders { std::string TEXVERTSRC; std::string TEXVERTSRC320; std::array<SP<CShader>, SH_FRAG_LAST> frag; + std::map<uint8_t, SP<CShader>> fragVariants; }; struct SMonitorRenderData { @@ -307,9 +316,11 @@ class CHyprOpenGLImpl { void ensureLockTexturesRendered(bool load); bool explicitSyncSupported(); + WP<CShader> getSurfaceShader(uint8_t features); bool m_shadersInitialized = false; SP<SPreparedShaders> m_shaders; + std::map<std::string, std::string> m_includes; SCurrentRenderData m_renderData; |
