/*
SPDX-FileCopyrightText: 2021 Arjen Hiemstra <ahiemstra@heimr.nl>
SPDX-FileCopyrightText: 2023 Mike Noe <noeerover@gmail.com>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#version 440
// This shader performs UV coordinates that account for the aspect ratio of some
// source as specified by the sourceSize uniform. The effective result is that
// this results in behaviour similar to the "PreserveAspectFit" mode of QML Image.
layout(location = 0) in vec4 position;
layout(location = 1) in vec2 texcoord;
layout(location = 0) out vec2 coord;
layout(std140, binding = 0) uniform buf {
mat4 qt_Matrix;
float qt_Opacity;
vec2 sourceSize;
vec2 targetSize;
} ubuf;
void main() {
float scale = min(ubuf.targetSize.x / ubuf.sourceSize.x, ubuf.targetSize.y / ubuf.sourceSize.y);
vec2 newSize = ubuf.sourceSize * scale;
vec2 newOffset = (ubuf.targetSize - newSize) / 2.0;
vec2 uvOffset = (1.0 / newSize) * newOffset;
coord = -uvOffset + (ubuf.targetSize / newSize) * texcoord;
gl_Position = ubuf.qt_Matrix * position;
}