mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-02 02:26:00 +01:00
renderer: make contrast and brightness adjustments before rendering
This commit is contained in:
parent
aed1f66bec
commit
df691859fb
1 changed files with 51 additions and 9 deletions
|
@ -867,7 +867,53 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o
|
||||||
const auto PMIRRORFB = &m_RenderData.pCurrentMonData->mirrorFB;
|
const auto PMIRRORFB = &m_RenderData.pCurrentMonData->mirrorFB;
|
||||||
const auto PMIRRORSWAPFB = &m_RenderData.pCurrentMonData->mirrorSwapFB;
|
const auto PMIRRORSWAPFB = &m_RenderData.pCurrentMonData->mirrorSwapFB;
|
||||||
|
|
||||||
CFramebuffer* currentRenderToFB = &m_RenderData.pCurrentMonData->primaryFB;
|
CFramebuffer* currentRenderToFB = PMIRRORFB;
|
||||||
|
|
||||||
|
// begin with color adjustments
|
||||||
|
// TODO: make this a part of the first pass maybe to save on a drawcall?
|
||||||
|
{
|
||||||
|
static auto* const PBLURCONTRAST = &g_pConfigManager->getConfigValuePtr("decoration:blur:contrast")->floatValue;
|
||||||
|
static auto* const PBLURBRIGHTNESS = &g_pConfigManager->getConfigValuePtr("decoration:blur:brightness")->floatValue;
|
||||||
|
|
||||||
|
PMIRRORSWAPFB->bind();
|
||||||
|
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
|
||||||
|
glBindTexture(m_RenderData.pCurrentMonData->primaryFB.m_cTex.m_iTarget, m_RenderData.pCurrentMonData->primaryFB.m_cTex.m_iTexID);
|
||||||
|
|
||||||
|
glTexParameteri(m_RenderData.pCurrentMonData->primaryFB.m_cTex.m_iTarget, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
|
||||||
|
glUseProgram(m_RenderData.pCurrentMonData->m_shBLURFINISH.program);
|
||||||
|
|
||||||
|
#ifndef GLES2
|
||||||
|
glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBLURFINISH.proj, 1, GL_TRUE, glMatrix);
|
||||||
|
#else
|
||||||
|
wlr_matrix_transpose(glMatrix, glMatrix);
|
||||||
|
glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBLURFINISH.proj, 1, GL_FALSE, glMatrix);
|
||||||
|
#endif
|
||||||
|
glUniform1f(m_RenderData.pCurrentMonData->m_shBLURFINISH.contrast, *PBLURCONTRAST);
|
||||||
|
glUniform1f(m_RenderData.pCurrentMonData->m_shBLURFINISH.brightness, *PBLURBRIGHTNESS);
|
||||||
|
|
||||||
|
glUniform1i(m_RenderData.pCurrentMonData->m_shBLURFINISH.tex, 0);
|
||||||
|
|
||||||
|
glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shBLURFINISH.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts);
|
||||||
|
glVertexAttribPointer(m_RenderData.pCurrentMonData->m_shBLURFINISH.texAttrib, 2, GL_FLOAT, GL_FALSE, 0, fullVerts);
|
||||||
|
|
||||||
|
glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURFINISH.posAttrib);
|
||||||
|
glEnableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURFINISH.texAttrib);
|
||||||
|
|
||||||
|
if (!damage.empty()) {
|
||||||
|
for (auto& RECT : damage.getRects()) {
|
||||||
|
scissor(&RECT, false /* this region is already transformed */);
|
||||||
|
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURFINISH.posAttrib);
|
||||||
|
glDisableVertexAttribArray(m_RenderData.pCurrentMonData->m_shBLURFINISH.texAttrib);
|
||||||
|
|
||||||
|
currentRenderToFB = PMIRRORSWAPFB;
|
||||||
|
}
|
||||||
|
|
||||||
// declare the draw func
|
// declare the draw func
|
||||||
auto drawPass = [&](CShader* pShader, CRegion* pDamage) {
|
auto drawPass = [&](CShader* pShader, CRegion* pDamage) {
|
||||||
|
@ -923,9 +969,9 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o
|
||||||
};
|
};
|
||||||
|
|
||||||
// draw the things.
|
// draw the things.
|
||||||
// first draw is prim -> mirr
|
// first draw is swap -> mirr
|
||||||
PMIRRORFB->bind();
|
PMIRRORFB->bind();
|
||||||
glBindTexture(m_RenderData.pCurrentMonData->primaryFB.m_cTex.m_iTarget, m_RenderData.pCurrentMonData->primaryFB.m_cTex.m_iTexID);
|
glBindTexture(PMIRRORSWAPFB->m_cTex.m_iTarget, PMIRRORSWAPFB->m_cTex.m_iTexID);
|
||||||
|
|
||||||
// damage region will be scaled, make a temp
|
// damage region will be scaled, make a temp
|
||||||
CRegion tempDamage{damage};
|
CRegion tempDamage{damage};
|
||||||
|
@ -944,11 +990,9 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o
|
||||||
drawPass(&m_RenderData.pCurrentMonData->m_shBLUR2, &tempDamage); // up
|
drawPass(&m_RenderData.pCurrentMonData->m_shBLUR2, &tempDamage); // up
|
||||||
}
|
}
|
||||||
|
|
||||||
// finalize with effects
|
// finalize with noise
|
||||||
{
|
{
|
||||||
static auto* const PBLURCONTRAST = &g_pConfigManager->getConfigValuePtr("decoration:blur:contrast")->floatValue;
|
static auto* const PBLURNOISE = &g_pConfigManager->getConfigValuePtr("decoration:blur:noise")->floatValue;
|
||||||
static auto* const PBLURNOISE = &g_pConfigManager->getConfigValuePtr("decoration:blur:noise")->floatValue;
|
|
||||||
static auto* const PBLURBRIGHTNESS = &g_pConfigManager->getConfigValuePtr("decoration:blur:brightness")->floatValue;
|
|
||||||
|
|
||||||
if (currentRenderToFB == PMIRRORFB)
|
if (currentRenderToFB == PMIRRORFB)
|
||||||
PMIRRORSWAPFB->bind();
|
PMIRRORSWAPFB->bind();
|
||||||
|
@ -969,9 +1013,7 @@ CFramebuffer* CHyprOpenGLImpl::blurMainFramebufferWithDamage(float a, CRegion* o
|
||||||
wlr_matrix_transpose(glMatrix, glMatrix);
|
wlr_matrix_transpose(glMatrix, glMatrix);
|
||||||
glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBLURFINISH.proj, 1, GL_FALSE, glMatrix);
|
glUniformMatrix3fv(m_RenderData.pCurrentMonData->m_shBLURFINISH.proj, 1, GL_FALSE, glMatrix);
|
||||||
#endif
|
#endif
|
||||||
glUniform1f(m_RenderData.pCurrentMonData->m_shBLURFINISH.contrast, *PBLURCONTRAST);
|
|
||||||
glUniform1f(m_RenderData.pCurrentMonData->m_shBLURFINISH.noise, *PBLURNOISE);
|
glUniform1f(m_RenderData.pCurrentMonData->m_shBLURFINISH.noise, *PBLURNOISE);
|
||||||
glUniform1f(m_RenderData.pCurrentMonData->m_shBLURFINISH.brightness, *PBLURBRIGHTNESS);
|
|
||||||
|
|
||||||
glUniform1i(m_RenderData.pCurrentMonData->m_shBLURFINISH.tex, 0);
|
glUniform1i(m_RenderData.pCurrentMonData->m_shBLURFINISH.tex, 0);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue