fix transformed border thickness

This commit is contained in:
vaxerski 2022-11-26 20:36:05 +00:00
parent afe688e6ab
commit 0db75852f3
3 changed files with 7 additions and 4 deletions

View file

@ -237,6 +237,7 @@ void CHyprOpenGLImpl::initShaders() {
m_RenderData.pCurrentMonData->m_shBORDER1.topLeft = glGetUniformLocation(prog, "topLeft"); m_RenderData.pCurrentMonData->m_shBORDER1.topLeft = glGetUniformLocation(prog, "topLeft");
m_RenderData.pCurrentMonData->m_shBORDER1.bottomRight = glGetUniformLocation(prog, "bottomRight"); m_RenderData.pCurrentMonData->m_shBORDER1.bottomRight = glGetUniformLocation(prog, "bottomRight");
m_RenderData.pCurrentMonData->m_shBORDER1.fullSize = glGetUniformLocation(prog, "fullSize"); m_RenderData.pCurrentMonData->m_shBORDER1.fullSize = glGetUniformLocation(prog, "fullSize");
m_RenderData.pCurrentMonData->m_shBORDER1.fullSizeUntransformed = glGetUniformLocation(prog, "fullSizeUntransformed");
m_RenderData.pCurrentMonData->m_shBORDER1.radius = glGetUniformLocation(prog, "radius"); m_RenderData.pCurrentMonData->m_shBORDER1.radius = glGetUniformLocation(prog, "radius");
m_RenderData.pCurrentMonData->m_shBORDER1.primitiveMultisample = glGetUniformLocation(prog, "primitiveMultisample"); m_RenderData.pCurrentMonData->m_shBORDER1.primitiveMultisample = glGetUniformLocation(prog, "primitiveMultisample");
m_RenderData.pCurrentMonData->m_shBORDER1.gradient = glGetUniformLocation(prog, "gradient"); m_RenderData.pCurrentMonData->m_shBORDER1.gradient = glGetUniformLocation(prog, "gradient");
@ -863,8 +864,8 @@ void CHyprOpenGLImpl::renderBorder(wlr_box* box, const CGradientValueData& grad,
const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height); const auto FULLSIZE = Vector2D(transformedBox.width, transformedBox.height);
glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.topLeft, (float)TOPLEFT.x, (float)TOPLEFT.y); glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.topLeft, (float)TOPLEFT.x, (float)TOPLEFT.y);
//glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.bottomRight, (float)BOTTOMRIGHT.x, (float)BOTTOMRIGHT.y);
glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.fullSize, (float)FULLSIZE.x, (float)FULLSIZE.y); glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.fullSize, (float)FULLSIZE.x, (float)FULLSIZE.y);
glUniform2f(m_RenderData.pCurrentMonData->m_shBORDER1.fullSizeUntransformed, (float)box->width, (float)box->height);
glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.radius, round); glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.radius, round);
glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.thick, scaledBorderSize); glUniform1f(m_RenderData.pCurrentMonData->m_shBORDER1.thick, scaledBorderSize);
glUniform1i(m_RenderData.pCurrentMonData->m_shBORDER1.primitiveMultisample, *PMULTISAMPLE); glUniform1i(m_RenderData.pCurrentMonData->m_shBORDER1.primitiveMultisample, *PMULTISAMPLE);

View file

@ -19,6 +19,7 @@ public:
GLint topLeft; GLint topLeft;
GLint bottomRight; GLint bottomRight;
GLint fullSize; GLint fullSize;
GLint fullSizeUntransformed;
GLint radius; GLint radius;
GLint primitiveMultisample; GLint primitiveMultisample;

View file

@ -10,6 +10,7 @@ varying vec2 v_texcoord;
uniform vec2 topLeft; uniform vec2 topLeft;
uniform vec2 fullSize; uniform vec2 fullSize;
uniform vec2 fullSizeUntransformed;
uniform float radius; uniform float radius;
uniform float thick; uniform float thick;
uniform int primitiveMultisample; uniform int primitiveMultisample;
@ -51,7 +52,7 @@ vec4 getColorForCoord(vec2 normalizedCoord) {
void main() { void main() {
highp vec2 pixCoord = vec2(gl_FragCoord); highp vec2 pixCoord = vec2(gl_FragCoord);
vec2 originalPixCoord = fullSize * v_texcoord; vec2 originalPixCoord = fullSizeUntransformed * v_texcoord;
vec4 pixColor = getColorForCoord(v_texcoord); vec4 pixColor = getColorForCoord(v_texcoord);
pixColor[3] *= alpha; pixColor[3] *= alpha;
@ -96,9 +97,9 @@ void main() {
if (!done) { if (!done) {
// distance to all straight bb borders // distance to all straight bb borders
float distanceT = originalPixCoord[1]; float distanceT = originalPixCoord[1];
float distanceB = fullSize[1] - originalPixCoord[1]; float distanceB = fullSizeUntransformed[1] - originalPixCoord[1];
float distanceL = originalPixCoord[0]; float distanceL = originalPixCoord[0];
float distanceR = fullSize[0] - originalPixCoord[0]; float distanceR = fullSizeUntransformed[0] - originalPixCoord[0];
// get the smallest // get the smallest
float smallest = min(min(distanceT, distanceB), min(distanceL, distanceR)); float smallest = min(min(distanceT, distanceB), min(distanceL, distanceR));