From a7d33bd15fc7baee243a92717fabcf474eaf561f Mon Sep 17 00:00:00 2001 From: Tom Englund Date: Thu, 8 Jan 2026 21:57:44 +0100 Subject: [PATCH] hyprtrails: adapt to hyprland shader refactor seems the old code was missing a gradient so im just commenting it out anyhow, adapt the code for hyprland #12926 --- hyprtrails/globals.hpp | 2 +- hyprtrails/main.cpp | 8 +------- hyprtrails/trail.cpp | 16 ++++++++-------- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/hyprtrails/globals.hpp b/hyprtrails/globals.hpp index 5abe3915..e5b08cb0 100644 --- a/hyprtrails/globals.hpp +++ b/hyprtrails/globals.hpp @@ -5,7 +5,7 @@ inline HANDLE PHANDLE = nullptr; struct SGlobalState { - SShader trailShader; + CShader trailShader; wl_event_source* tick = nullptr; }; diff --git a/hyprtrails/main.cpp b/hyprtrails/main.cpp index 76201a8c..18ed913a 100644 --- a/hyprtrails/main.cpp +++ b/hyprtrails/main.cpp @@ -85,13 +85,7 @@ int onTick(void* data) { void initGlobal() { g_pHyprRenderer->makeEGLCurrent(); - GLuint prog = CreateProgram(QUADTRAIL, FRAGTRAIL); - g_pGlobalState->trailShader.program = prog; - g_pGlobalState->trailShader.uniformLocations[SHADER_PROJ] = glGetUniformLocation(prog, "proj"); - g_pGlobalState->trailShader.uniformLocations[SHADER_TEX] = glGetUniformLocation(prog, "tex"); - g_pGlobalState->trailShader.uniformLocations[SHADER_COLOR] = glGetUniformLocation(prog, "color"); - g_pGlobalState->trailShader.uniformLocations[SHADER_POS_ATTRIB] = glGetAttribLocation(prog, "pos"); - g_pGlobalState->trailShader.uniformLocations[SHADER_GRADIENT] = glGetUniformLocation(prog, "snapshots"); + g_pGlobalState->trailShader.createProgram(QUADTRAIL, FRAGTRAIL); g_pGlobalState->tick = wl_event_loop_add_timer(g_pCompositor->m_wlEventLoop, &onTick, nullptr); wl_event_source_timer_update(g_pGlobalState->tick, 1); diff --git a/hyprtrails/trail.cpp b/hyprtrails/trail.cpp index 8598449f..8593e3b4 100644 --- a/hyprtrails/trail.cpp +++ b/hyprtrails/trail.cpp @@ -134,7 +134,7 @@ void CTrail::renderPass(PHLMONITOR pMonitor, const float& a) { g_pHyprOpenGL->blend(true); - glUseProgram(g_pGlobalState->trailShader.program); + glUseProgram(g_pGlobalState->trailShader.program()); glMatrix.transpose(); g_pGlobalState->trailShader.setUniformMatrix3fv(SHADER_PROJ, 1, GL_FALSE, glMatrix.getMatrix()); @@ -246,16 +246,16 @@ void CTrail::renderPass(PHLMONITOR pMonitor, const float& a) { sc((PWINDOW->m_realPosition->value().y - pMonitor->m_position.y) / pMonitor->m_size.y), sc((PWINDOW->m_realPosition->value().x + PWINDOW->m_realSize->value().x) / pMonitor->m_size.x), sc((PWINDOW->m_realPosition->value().y + PWINDOW->m_realSize->value().y) / pMonitor->m_size.y)}; - glUniform4f(g_pGlobalState->trailShader.uniformLocations[SHADER_GRADIENT], thisboxopengl.x, thisboxopengl.y, thisboxopengl.w, thisboxopengl.h); - glUniform4f(g_pGlobalState->trailShader.uniformLocations[SHADER_COLOR], COLOR.r, COLOR.g, COLOR.b, COLOR.a); + //glUniform4f(g_pGlobalState->trailShader.getUniformLocation(SHADER_GRADIENT), thisboxopengl.x, thisboxopengl.y, thisboxopengl.w, thisboxopengl.h); //#TODO this shader is missing a uniform 'gradient' in shaders.hpp + glUniform4f(g_pGlobalState->trailShader.getUniformLocation(SHADER_COLOR), COLOR.r, COLOR.g, COLOR.b, COLOR.a); CBox transformedBox = monbox; - transformedBox.transform(Math::wlTransformToHyprutils(Math::invertTransform(g_pHyprOpenGL->m_renderData.pMonitor->m_transform)), g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x, - g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y); + transformedBox.transform(Math::wlTransformToHyprutils(Math::invertTransform(g_pHyprOpenGL->m_renderData.pMonitor->m_transform)), + g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.x, g_pHyprOpenGL->m_renderData.pMonitor->m_transformedSize.y); - glVertexAttribPointer(g_pGlobalState->trailShader.uniformLocations[SHADER_POS_ATTRIB], 2, GL_FLOAT, GL_FALSE, 0, (float*)points.data()); + glVertexAttribPointer(g_pGlobalState->trailShader.getUniformLocation(SHADER_POS_ATTRIB), 2, GL_FLOAT, GL_FALSE, 0, (float*)points.data()); - glEnableVertexAttribArray(g_pGlobalState->trailShader.uniformLocations[SHADER_POS_ATTRIB]); + glEnableVertexAttribArray(g_pGlobalState->trailShader.getUniformLocation(SHADER_POS_ATTRIB)); if (g_pHyprOpenGL->m_renderData.clipBox.width != 0 && g_pHyprOpenGL->m_renderData.clipBox.height != 0) { CRegion damageClip{g_pHyprOpenGL->m_renderData.clipBox.x, g_pHyprOpenGL->m_renderData.clipBox.y, g_pHyprOpenGL->m_renderData.clipBox.width, @@ -275,7 +275,7 @@ void CTrail::renderPass(PHLMONITOR pMonitor, const float& a) { } } - glDisableVertexAttribArray(g_pGlobalState->trailShader.uniformLocations[SHADER_POS_ATTRIB]); + glDisableVertexAttribArray(g_pGlobalState->trailShader.getUniformLocation(SHADER_POS_ATTRIB)); glClearStencil(0); glClear(GL_STENCIL_BUFFER_BIT);