diff options
| author | scorpion-26 <dev.scorpion26@gmail.com> | 2023-03-05 15:05:30 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-05 14:05:30 +0000 |
| commit | de5f1b2a833a59d3b0375f24675d27cea99e56d1 (patch) | |
| tree | 5c299606df594c758c8dd462680de4ac2a41d42d /src/render/OpenGL.cpp | |
| parent | dc7d783d1439b92b16bfe1851c2b699e7c7267e0 (diff) | |
Optionally expose time to screen shaders (#1700)
* Optionally expose time to screen shaders
Since that collides with damage tracking, it will only be done, when
damage tracking is disabled, meaning this comes at no cost for everyone
not using time.
* Rename m_Timer to m_tGlobalTimer
Diffstat (limited to 'src/render/OpenGL.cpp')
| -rw-r--r-- | src/render/OpenGL.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 6a9baedf..7caf8ad1 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -31,6 +31,8 @@ CHyprOpenGLImpl::CHyprOpenGLImpl() { pixman_region32_init(&m_rOriginalDamageRegion); RASSERT(eglMakeCurrent(wlr_egl_get_display(g_pCompositor->m_sWLREGL), EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT), "Couldn't unset current EGL!"); + + m_tGlobalTimer.reset(); } GLuint CHyprOpenGLImpl::createProgram(const std::string& vert, const std::string& frag, bool dynamic) { @@ -310,8 +312,15 @@ void CHyprOpenGLImpl::applyScreenShader(const std::string& path) { return; } - m_sFinalScreenShader.proj = glGetUniformLocation(m_sFinalScreenShader.program, "proj"); - m_sFinalScreenShader.tex = glGetUniformLocation(m_sFinalScreenShader.program, "tex"); + m_sFinalScreenShader.proj = glGetUniformLocation(m_sFinalScreenShader.program, "proj"); + m_sFinalScreenShader.tex = glGetUniformLocation(m_sFinalScreenShader.program, "tex"); + m_sFinalScreenShader.time = glGetUniformLocation(m_sFinalScreenShader.program, "time"); + if (m_sFinalScreenShader.time != -1 && g_pConfigManager->getInt("debug:damage_tracking") != 0) { + // The screen shader uses the "time" uniform + // Since the screen shader could change every frame, damage tracking *needs* to be disabled + g_pConfigManager->addParseError("Screen shader: Screen shader uses uniform 'time', which requires debug:damage_tracking to be switched off.\n" + "WARNING: Disabling damage tracking will *massively* increase GPU utilization!"); + } m_sFinalScreenShader.texAttrib = glGetAttribLocation(m_sFinalScreenShader.program, "texcoord"); m_sFinalScreenShader.posAttrib = glGetAttribLocation(m_sFinalScreenShader.program, "pos"); } @@ -523,6 +532,14 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(const CTexture& tex, wlr_b glUniformMatrix3fv(shader->proj, 1, GL_FALSE, glMatrix); #endif glUniform1i(shader->tex, 0); + + if (usingFinalShader && g_pConfigManager->getInt("debug:damage_tracking") == 0) { + glUniform1f(shader->time, m_tGlobalTimer.getSeconds()); + } else if (usingFinalShader) { + // Don't let time be unitialised + glUniform1f(shader->time, 0.f); + } + if (!usingFinalShader) { glUniform1f(shader->alpha, alpha); glUniform1i(shader->discardOpaque, (int)discardOpaque); |
