diff options
| author | vaxerski <vaxry@vaxry.net> | 2023-04-04 14:49:58 +0100 |
|---|---|---|
| committer | vaxerski <vaxry@vaxry.net> | 2023-04-04 14:50:03 +0100 |
| commit | 7d9977d02815d3111b8cb97da4695d1c39f4d808 (patch) | |
| tree | 9e242ccc4830b0992b6c9d477d668f47c4f69131 /src/render/OpenGL.cpp | |
| parent | 882be7765b820d075bbeecde12695f1696f577cf (diff) | |
debug: added manual_crash
Diffstat (limited to 'src/render/OpenGL.cpp')
| -rw-r--r-- | src/render/OpenGL.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 8b5fb2ef..57fae086 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -205,6 +205,16 @@ void CHyprOpenGLImpl::initShaders() { m_RenderData.pCurrentMonData->m_shPASSTHRURGBA.texAttrib = glGetAttribLocation(prog, "texcoord"); m_RenderData.pCurrentMonData->m_shPASSTHRURGBA.posAttrib = glGetAttribLocation(prog, "pos"); + prog = createProgram(TEXVERTSRC, FRAGGLITCH); + m_RenderData.pCurrentMonData->m_shGLITCH.program = prog; + m_RenderData.pCurrentMonData->m_shGLITCH.proj = glGetUniformLocation(prog, "proj"); + m_RenderData.pCurrentMonData->m_shGLITCH.tex = glGetUniformLocation(prog, "tex"); + m_RenderData.pCurrentMonData->m_shGLITCH.texAttrib = glGetAttribLocation(prog, "texcoord"); + m_RenderData.pCurrentMonData->m_shGLITCH.posAttrib = glGetAttribLocation(prog, "pos"); + m_RenderData.pCurrentMonData->m_shGLITCH.distort = glGetUniformLocation(prog, "distort"); + m_RenderData.pCurrentMonData->m_shGLITCH.time = glGetUniformLocation(prog, "time"); + m_RenderData.pCurrentMonData->m_shGLITCH.fullSize = glGetUniformLocation(prog, "screenSize"); + prog = createProgram(TEXVERTSRC, TEXFRAGSRCRGBX); m_RenderData.pCurrentMonData->m_shRGBX.program = prog; m_RenderData.pCurrentMonData->m_shRGBX.tex = glGetUniformLocation(prog, "tex"); @@ -318,7 +328,7 @@ void CHyprOpenGLImpl::applyScreenShader(const std::string& path) { 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) { + if (m_sFinalScreenShader.time != -1 && g_pConfigManager->getInt("debug:damage_tracking") != 0 && !g_pHyprRenderer->m_bCrashingInProgress) { // 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" @@ -502,9 +512,14 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(const CTexture& tex, wlr_b glEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - bool usingFinalShader = false; + bool usingFinalShader = false; + + const bool CRASHING = m_bApplyFinalShader && g_pHyprRenderer->m_bCrashingInProgress; - if (m_bApplyFinalShader && m_sFinalScreenShader.program) { + if (CRASHING) { + shader = &m_RenderData.pCurrentMonData->m_shGLITCH; + usingFinalShader = true; + } else if (m_bApplyFinalShader && m_sFinalScreenShader.program) { shader = &m_sFinalScreenShader; usingFinalShader = true; } else { @@ -539,13 +554,18 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(const CTexture& tex, wlr_b #endif glUniform1i(shader->tex, 0); - if (usingFinalShader && g_pConfigManager->getInt("debug:damage_tracking") == 0) { + if ((usingFinalShader && g_pConfigManager->getInt("debug:damage_tracking") == 0) || CRASHING) { glUniform1f(shader->time, m_tGlobalTimer.getSeconds()); } else if (usingFinalShader && shader->time > 0) { // Don't let time be unitialised glUniform1f(shader->time, 0.f); } + if (CRASHING) { + glUniform1f(shader->distort, g_pHyprRenderer->m_fCrashingDistort); + glUniform2f(shader->fullSize, m_RenderData.pMonitor->vecPixelSize.x, m_RenderData.pMonitor->vecPixelSize.y); + } + if (!usingFinalShader) { glUniform1f(shader->alpha, alpha); |
