Rather than plugging a matrix into the video input node, the matrix is now multiplied by the video input using a math node. This is probably more sensible from a user perspective. This also means the renderer is tolerant of texture sizes that are not equal to the sequence size, however most nodes will downsample the texture to the sequence size (and if not, it will be downsampled once it is cached). Textures will still *always* be in reference space and the sequence's format. This seems like the best compromise between backend and frontend congruity.
38 lines
724 B
GLSL
38 lines
724 B
GLSL
#version 150
|
|
|
|
uniform mat4 %1;
|
|
|
|
uniform vec2 %2_resolution;
|
|
uniform vec2 ove_resolution;
|
|
|
|
in vec4 a_position;
|
|
in vec2 a_texcoord;
|
|
|
|
out vec2 ove_texcoord;
|
|
|
|
mat4 scale_mat4(vec3 scale) {
|
|
return mat4(
|
|
scale.x, 0.0, 0.0, 0.0,
|
|
0.0, scale.y, 0.0, 0.0,
|
|
0.0, 0.0, scale.z, 0.0,
|
|
0.0, 0.0, 0.0, 1.0
|
|
);
|
|
}
|
|
|
|
void main() {
|
|
// Create identity matrix
|
|
mat4 transform = mat4(1.0);
|
|
|
|
// Scale to square
|
|
transform *= scale_mat4(vec3(1.0 / ove_resolution, 1.0));
|
|
|
|
// Multiply by received matrix
|
|
transform *= %1;
|
|
|
|
// Scale back out to footage size
|
|
transform *= scale_mat4(vec3(%2_resolution, 1.0));
|
|
|
|
gl_Position = transform * a_position;
|
|
ove_texcoord = a_texcoord;
|
|
}
|