mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-15 16:35:06 +03:00
qcam: viewfinder_gl: Keep fragment shader when format doesn't change
When ViewFinderGL::setFormat() is called, the fragment shader is deleted and recreated for the new format. This results in unnecessary shader recompilation if only the size is changed and the pixel format remains the same. Keep the existing shader in that case. The null test for fragmentShader_ can be removed, as if the shader program is linked, the fragment shader is guaranteed to exist. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Andrey Konovalov <andrey.konovalov@linaro.org> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
parent
4b9a774a4c
commit
3b9a582f95
1 changed files with 10 additions and 6 deletions
|
@ -53,19 +53,23 @@ const QList<libcamera::PixelFormat> &ViewFinderGL::nativeFormats() const
|
|||
int ViewFinderGL::setFormat(const libcamera::PixelFormat &format,
|
||||
const QSize &size)
|
||||
{
|
||||
/* If the fragment is created remove it and create a new one. */
|
||||
if (fragmentShader_) {
|
||||
if (format != format_) {
|
||||
/*
|
||||
* If the fragment already exists, remove it and create a new
|
||||
* one for the new format.
|
||||
*/
|
||||
if (shaderProgram_.isLinked()) {
|
||||
shaderProgram_.release();
|
||||
shaderProgram_.removeShader(fragmentShader_.get());
|
||||
fragmentShader_.reset();
|
||||
}
|
||||
|
||||
if (!selectFormat(format))
|
||||
return -1;
|
||||
|
||||
format_ = format;
|
||||
}
|
||||
|
||||
if (!selectFormat(format))
|
||||
return -1;
|
||||
|
||||
format_ = format;
|
||||
size_ = size;
|
||||
|
||||
updateGeometry();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue