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>
This commit is contained in:
parent
12809ff171
commit
fa52c0f22f
3 changed files with 9 additions and 8 deletions
|
@ -12,7 +12,7 @@ precision mediump float;
|
||||||
varying vec2 textureOut;
|
varying vec2 textureOut;
|
||||||
|
|
||||||
uniform sampler2D tex_y;
|
uniform sampler2D tex_y;
|
||||||
uniform float tex_stepx;
|
uniform vec2 tex_step;
|
||||||
|
|
||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
|
@ -49,10 +49,10 @@ void main(void)
|
||||||
* a = fract(x) * 2 - 1 if fract(x) >= 0.5
|
* a = fract(x) * 2 - 1 if fract(x) >= 0.5
|
||||||
*/
|
*/
|
||||||
vec2 pos = textureOut;
|
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 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_stepx , pos.y));
|
vec4 right = texture2D(tex_y, vec2(pos.x + (1.0 - f_x) * tex_step.x , pos.y));
|
||||||
|
|
||||||
#if defined(YUV_PATTERN_UYVY)
|
#if defined(YUV_PATTERN_UYVY)
|
||||||
float y_left = mix(left.g, left.a, f_x * 2.0);
|
float y_left = mix(left.g, left.a, f_x * 2.0);
|
||||||
|
|
|
@ -289,7 +289,7 @@ bool ViewFinderGL::createFragmentShader()
|
||||||
textureUniformY_ = shaderProgram_.uniformLocation("tex_y");
|
textureUniformY_ = shaderProgram_.uniformLocation("tex_y");
|
||||||
textureUniformU_ = shaderProgram_.uniformLocation("tex_u");
|
textureUniformU_ = shaderProgram_.uniformLocation("tex_u");
|
||||||
textureUniformV_ = shaderProgram_.uniformLocation("tex_v");
|
textureUniformV_ = shaderProgram_.uniformLocation("tex_v");
|
||||||
textureUniformStepX_ = shaderProgram_.uniformLocation("tex_stepx");
|
textureUniformStep_ = shaderProgram_.uniformLocation("tex_step");
|
||||||
|
|
||||||
/* Create the textures. */
|
/* Create the textures. */
|
||||||
for (std::unique_ptr<QOpenGLTexture> &texture : 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
|
* ([0, 1]). There are exactly width - 1 steps between the
|
||||||
* leftmost and rightmost texels.
|
* leftmost and rightmost texels.
|
||||||
*/
|
*/
|
||||||
shaderProgram_.setUniformValue(textureUniformStepX_,
|
shaderProgram_.setUniformValue(textureUniformStep_,
|
||||||
1.0f / (size_.width() / 2 - 1));
|
1.0f / (size_.width() / 2 - 1),
|
||||||
|
1.0f /* not used */);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case libcamera::formats::ABGR8888:
|
case libcamera::formats::ABGR8888:
|
||||||
|
|
|
@ -85,7 +85,7 @@ private:
|
||||||
GLuint textureUniformU_;
|
GLuint textureUniformU_;
|
||||||
GLuint textureUniformV_;
|
GLuint textureUniformV_;
|
||||||
GLuint textureUniformY_;
|
GLuint textureUniformY_;
|
||||||
GLuint textureUniformStepX_;
|
GLuint textureUniformStep_;
|
||||||
unsigned int horzSubSample_;
|
unsigned int horzSubSample_;
|
||||||
unsigned int vertSubSample_;
|
unsigned int vertSubSample_;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue