summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Konovalov <andrey.konovalov@linaro.org>2021-06-22 16:46:44 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-06-30 04:07:54 +0300
commitfa52c0f22faa239a3d1ddeede6f3b36ec35bdf5c (patch)
tree6918e91c269700874cc03a8715df2bfd9d8db671
parent12809ff171aee57b306a9b29d6593793ea984ae6 (diff)
qcam: viewfinder_gl: Change uniform float tex_stepx to vec2 tex_step
In preparation to extend the supported formats, extend the tex_stepx uniform to cover the steps between texels in both horizontal and vertical directions. Signed-off-by: Andrey Konovalov <andrey.konovalov@linaro.org> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r--src/qcam/assets/shader/YUV_packed.frag8
-rw-r--r--src/qcam/viewfinder_gl.cpp7
-rw-r--r--src/qcam/viewfinder_gl.h2
3 files changed, 9 insertions, 8 deletions
diff --git a/src/qcam/assets/shader/YUV_packed.frag b/src/qcam/assets/shader/YUV_packed.frag
index 224dfafe..d6efd4ce 100644
--- a/src/qcam/assets/shader/YUV_packed.frag
+++ b/src/qcam/assets/shader/YUV_packed.frag
@@ -12,7 +12,7 @@ precision mediump float;
varying vec2 textureOut;
uniform sampler2D tex_y;
-uniform float tex_stepx;
+uniform vec2 tex_step;
void main(void)
{
@@ -49,10 +49,10 @@ void main(void)
* a = fract(x) * 2 - 1 if fract(x) >= 0.5
*/
vec2 pos = textureOut;
- float f_x = fract(pos.x / tex_stepx);
+ float f_x = fract(pos.x / tex_step.x);
- vec4 left = texture2D(tex_y, vec2(pos.x - f_x * tex_stepx, pos.y));
- vec4 right = texture2D(tex_y, vec2(pos.x + (1.0 - f_x) * tex_stepx , pos.y));
+ vec4 left = texture2D(tex_y, vec2(pos.x - f_x * tex_step.x, pos.y));
+ vec4 right = texture2D(tex_y, vec2(pos.x + (1.0 - f_x) * tex_step.x , pos.y));
#if defined(YUV_PATTERN_UYVY)
float y_left = mix(left.g, left.a, f_x * 2.0);
diff --git a/src/qcam/viewfinder_gl.cpp b/src/qcam/viewfinder_gl.cpp
index 5d9b442e..ff719418 100644
--- a/src/qcam/viewfinder_gl.cpp
+++ b/src/qcam/viewfinder_gl.cpp
@@ -289,7 +289,7 @@ bool ViewFinderGL::createFragmentShader()
textureUniformY_ = shaderProgram_.uniformLocation("tex_y");
textureUniformU_ = shaderProgram_.uniformLocation("tex_u");
textureUniformV_ = shaderProgram_.uniformLocation("tex_v");
- textureUniformStepX_ = shaderProgram_.uniformLocation("tex_stepx");
+ textureUniformStep_ = shaderProgram_.uniformLocation("tex_step");
/* Create the textures. */
for (std::unique_ptr<QOpenGLTexture> &texture : textures_) {
@@ -508,8 +508,9 @@ void ViewFinderGL::doRender()
* ([0, 1]). There are exactly width - 1 steps between the
* leftmost and rightmost texels.
*/
- shaderProgram_.setUniformValue(textureUniformStepX_,
- 1.0f / (size_.width() / 2 - 1));
+ shaderProgram_.setUniformValue(textureUniformStep_,
+ 1.0f / (size_.width() / 2 - 1),
+ 1.0f /* not used */);
break;
case libcamera::formats::ABGR8888:
diff --git a/src/qcam/viewfinder_gl.h b/src/qcam/viewfinder_gl.h
index 150fa4ae..1b1faa91 100644
--- a/src/qcam/viewfinder_gl.h
+++ b/src/qcam/viewfinder_gl.h
@@ -85,7 +85,7 @@ private:
GLuint textureUniformU_;
GLuint textureUniformV_;
GLuint textureUniformY_;
- GLuint textureUniformStepX_;
+ GLuint textureUniformStep_;
unsigned int horzSubSample_;
unsigned int vertSubSample_;