[PATCH 24/27] libcamera: shaders: Move GL shader programs to src/libcamera/assets/shader

Bryan O'Donoghue bryan.odonoghue at linaro.org
Tue Apr 22 23:59:17 CEST 2025


Moving the GL shaders to src/libcamera/assets/shader to allow for reuse of
these inside of the SoftISP.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue at linaro.org>
---
 .../libcamera/internal/shaders}/RGB.frag      |  0
 .../internal/shaders}/YUV_2_planes.frag       |  0
 .../internal/shaders}/YUV_3_planes.frag       |  0
 .../internal/shaders}/YUV_packed.frag         |  0
 .../internal/shaders}/bayer_1x_packed.frag    |  0
 .../libcamera/internal/shaders}/bayer_8.frag  |  0
 .../libcamera/internal/shaders}/bayer_8.vert  |  0
 .../libcamera/internal/shaders}/identity.vert |  0
 src/apps/qcam/assets/shader/shaders.qrc       | 16 ++---
 src/apps/qcam/viewfinder_gl.cpp               | 70 +++++++++----------
 10 files changed, 43 insertions(+), 43 deletions(-)
 rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/RGB.frag (100%)
 rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/YUV_2_planes.frag (100%)
 rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/YUV_3_planes.frag (100%)
 rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/YUV_packed.frag (100%)
 rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/bayer_1x_packed.frag (100%)
 rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/bayer_8.frag (100%)
 rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/bayer_8.vert (100%)
 rename {src/apps/qcam/assets/shader => include/libcamera/internal/shaders}/identity.vert (100%)

diff --git a/src/apps/qcam/assets/shader/RGB.frag b/include/libcamera/internal/shaders/RGB.frag
similarity index 100%
rename from src/apps/qcam/assets/shader/RGB.frag
rename to include/libcamera/internal/shaders/RGB.frag
diff --git a/src/apps/qcam/assets/shader/YUV_2_planes.frag b/include/libcamera/internal/shaders/YUV_2_planes.frag
similarity index 100%
rename from src/apps/qcam/assets/shader/YUV_2_planes.frag
rename to include/libcamera/internal/shaders/YUV_2_planes.frag
diff --git a/src/apps/qcam/assets/shader/YUV_3_planes.frag b/include/libcamera/internal/shaders/YUV_3_planes.frag
similarity index 100%
rename from src/apps/qcam/assets/shader/YUV_3_planes.frag
rename to include/libcamera/internal/shaders/YUV_3_planes.frag
diff --git a/src/apps/qcam/assets/shader/YUV_packed.frag b/include/libcamera/internal/shaders/YUV_packed.frag
similarity index 100%
rename from src/apps/qcam/assets/shader/YUV_packed.frag
rename to include/libcamera/internal/shaders/YUV_packed.frag
diff --git a/src/apps/qcam/assets/shader/bayer_1x_packed.frag b/include/libcamera/internal/shaders/bayer_1x_packed.frag
similarity index 100%
rename from src/apps/qcam/assets/shader/bayer_1x_packed.frag
rename to include/libcamera/internal/shaders/bayer_1x_packed.frag
diff --git a/src/apps/qcam/assets/shader/bayer_8.frag b/include/libcamera/internal/shaders/bayer_8.frag
similarity index 100%
rename from src/apps/qcam/assets/shader/bayer_8.frag
rename to include/libcamera/internal/shaders/bayer_8.frag
diff --git a/src/apps/qcam/assets/shader/bayer_8.vert b/include/libcamera/internal/shaders/bayer_8.vert
similarity index 100%
rename from src/apps/qcam/assets/shader/bayer_8.vert
rename to include/libcamera/internal/shaders/bayer_8.vert
diff --git a/src/apps/qcam/assets/shader/identity.vert b/include/libcamera/internal/shaders/identity.vert
similarity index 100%
rename from src/apps/qcam/assets/shader/identity.vert
rename to include/libcamera/internal/shaders/identity.vert
diff --git a/src/apps/qcam/assets/shader/shaders.qrc b/src/apps/qcam/assets/shader/shaders.qrc
index 96c709f9..04f9d706 100644
--- a/src/apps/qcam/assets/shader/shaders.qrc
+++ b/src/apps/qcam/assets/shader/shaders.qrc
@@ -1,13 +1,13 @@
 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
 <!DOCTYPE RCC><RCC version="1.0">
 <qresource>
-	<file>RGB.frag</file>
-	<file>YUV_2_planes.frag</file>
-	<file>YUV_3_planes.frag</file>
-	<file>YUV_packed.frag</file>
-	<file>bayer_1x_packed.frag</file>
-	<file>bayer_8.frag</file>
-	<file>bayer_8.vert</file>
-	<file>identity.vert</file>
+	<file>../../../../../include/libcamera/internal/shaders/RGB.frag</file>
+	<file>../../../../../include/libcamera/internal/shaders/YUV_2_planes.frag</file>
+	<file>../../../../../include/libcamera/internal/shaders/YUV_3_planes.frag</file>
+	<file>../../../../../include/libcamera/internal/shaders/YUV_packed.frag</file>
+	<file>../../../../../include/libcamera/internal/shaders/bayer_1x_packed.frag</file>
+	<file>../../../../../include/libcamera/internal/shaders/bayer_8.frag</file>
+	<file>../../../../../include/libcamera/internal/shaders/bayer_8.vert</file>
+	<file>../../../../../include/libcamera/internal/shaders/identity.vert</file>
 </qresource>
 </RCC>
diff --git a/src/apps/qcam/viewfinder_gl.cpp b/src/apps/qcam/viewfinder_gl.cpp
index f31956ff..70f60065 100644
--- a/src/apps/qcam/viewfinder_gl.cpp
+++ b/src/apps/qcam/viewfinder_gl.cpp
@@ -141,7 +141,7 @@ bool ViewFinderGL::selectFormat(const libcamera::PixelFormat &format)
 	textureMinMagFilters_ = GL_LINEAR;
 
 	/* Use identity.vert as the default vertex shader. */
-	vertexShaderFile_ = ":identity.vert";
+	vertexShaderFile_ = ":include/libcamera/internal/shaders/identity.vert";
 
 	fragmentShaderDefines_.clear();
 
@@ -150,170 +150,170 @@ bool ViewFinderGL::selectFormat(const libcamera::PixelFormat &format)
 		horzSubSample_ = 2;
 		vertSubSample_ = 2;
 		fragmentShaderDefines_.append("#define YUV_PATTERN_UV");
-		fragmentShaderFile_ = ":YUV_2_planes.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_2_planes.frag";
 		break;
 	case libcamera::formats::NV21:
 		horzSubSample_ = 2;
 		vertSubSample_ = 2;
 		fragmentShaderDefines_.append("#define YUV_PATTERN_VU");
-		fragmentShaderFile_ = ":YUV_2_planes.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_2_planes.frag";
 		break;
 	case libcamera::formats::NV16:
 		horzSubSample_ = 2;
 		vertSubSample_ = 1;
 		fragmentShaderDefines_.append("#define YUV_PATTERN_UV");
-		fragmentShaderFile_ = ":YUV_2_planes.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_2_planes.frag";
 		break;
 	case libcamera::formats::NV61:
 		horzSubSample_ = 2;
 		vertSubSample_ = 1;
 		fragmentShaderDefines_.append("#define YUV_PATTERN_VU");
-		fragmentShaderFile_ = ":YUV_2_planes.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_2_planes.frag";
 		break;
 	case libcamera::formats::NV24:
 		horzSubSample_ = 1;
 		vertSubSample_ = 1;
 		fragmentShaderDefines_.append("#define YUV_PATTERN_UV");
-		fragmentShaderFile_ = ":YUV_2_planes.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_2_planes.frag";
 		break;
 	case libcamera::formats::NV42:
 		horzSubSample_ = 1;
 		vertSubSample_ = 1;
 		fragmentShaderDefines_.append("#define YUV_PATTERN_VU");
-		fragmentShaderFile_ = ":YUV_2_planes.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_2_planes.frag";
 		break;
 	case libcamera::formats::YUV420:
 		horzSubSample_ = 2;
 		vertSubSample_ = 2;
-		fragmentShaderFile_ = ":YUV_3_planes.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_3_planes.frag";
 		break;
 	case libcamera::formats::YVU420:
 		horzSubSample_ = 2;
 		vertSubSample_ = 2;
-		fragmentShaderFile_ = ":YUV_3_planes.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_3_planes.frag";
 		break;
 	case libcamera::formats::UYVY:
 		fragmentShaderDefines_.append("#define YUV_PATTERN_UYVY");
-		fragmentShaderFile_ = ":YUV_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_packed.frag";
 		break;
 	case libcamera::formats::VYUY:
 		fragmentShaderDefines_.append("#define YUV_PATTERN_VYUY");
-		fragmentShaderFile_ = ":YUV_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_packed.frag";
 		break;
 	case libcamera::formats::YUYV:
 		fragmentShaderDefines_.append("#define YUV_PATTERN_YUYV");
-		fragmentShaderFile_ = ":YUV_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_packed.frag";
 		break;
 	case libcamera::formats::YVYU:
 		fragmentShaderDefines_.append("#define YUV_PATTERN_YVYU");
-		fragmentShaderFile_ = ":YUV_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/YUV_packed.frag";
 		break;
 	case libcamera::formats::ABGR8888:
 		fragmentShaderDefines_.append("#define RGB_PATTERN rgb");
-		fragmentShaderFile_ = ":RGB.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/RGB.frag";
 		break;
 	case libcamera::formats::ARGB8888:
 		fragmentShaderDefines_.append("#define RGB_PATTERN bgr");
-		fragmentShaderFile_ = ":RGB.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/RGB.frag";
 		break;
 	case libcamera::formats::BGRA8888:
 		fragmentShaderDefines_.append("#define RGB_PATTERN gba");
-		fragmentShaderFile_ = ":RGB.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/RGB.frag";
 		break;
 	case libcamera::formats::RGBA8888:
 		fragmentShaderDefines_.append("#define RGB_PATTERN abg");
-		fragmentShaderFile_ = ":RGB.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/RGB.frag";
 		break;
 	case libcamera::formats::BGR888:
 		fragmentShaderDefines_.append("#define RGB_PATTERN rgb");
-		fragmentShaderFile_ = ":RGB.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/RGB.frag";
 		break;
 	case libcamera::formats::RGB888:
 		fragmentShaderDefines_.append("#define RGB_PATTERN bgr");
-		fragmentShaderFile_ = ":RGB.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/RGB.frag";
 		break;
 	case libcamera::formats::SBGGR8:
 		firstRed_.setX(1.0);
 		firstRed_.setY(1.0);
-		vertexShaderFile_ = ":bayer_8.vert";
-		fragmentShaderFile_ = ":bayer_8.frag";
+		vertexShaderFile_ = ":include/libcamera/internal/shaders/bayer_8.vert";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_8.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	case libcamera::formats::SGBRG8:
 		firstRed_.setX(0.0);
 		firstRed_.setY(1.0);
-		vertexShaderFile_ = ":bayer_8.vert";
-		fragmentShaderFile_ = ":bayer_8.frag";
+		vertexShaderFile_ = ":include/libcamera/internal/shaders/bayer_8.vert";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_8.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	case libcamera::formats::SGRBG8:
 		firstRed_.setX(1.0);
 		firstRed_.setY(0.0);
-		vertexShaderFile_ = ":bayer_8.vert";
-		fragmentShaderFile_ = ":bayer_8.frag";
+		vertexShaderFile_ = ":include/libcamera/internal/shaders/bayer_8.vert";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_8.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	case libcamera::formats::SRGGB8:
 		firstRed_.setX(0.0);
 		firstRed_.setY(0.0);
-		vertexShaderFile_ = ":bayer_8.vert";
-		fragmentShaderFile_ = ":bayer_8.frag";
+		vertexShaderFile_ = ":include/libcamera/internal/shaders/bayer_8.vert";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_8.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	case libcamera::formats::SBGGR10_CSI2P:
 		firstRed_.setX(1.0);
 		firstRed_.setY(1.0);
 		fragmentShaderDefines_.append("#define RAW10P");
-		fragmentShaderFile_ = ":bayer_1x_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_1x_packed.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	case libcamera::formats::SGBRG10_CSI2P:
 		firstRed_.setX(0.0);
 		firstRed_.setY(1.0);
 		fragmentShaderDefines_.append("#define RAW10P");
-		fragmentShaderFile_ = ":bayer_1x_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_1x_packed.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	case libcamera::formats::SGRBG10_CSI2P:
 		firstRed_.setX(1.0);
 		firstRed_.setY(0.0);
 		fragmentShaderDefines_.append("#define RAW10P");
-		fragmentShaderFile_ = ":bayer_1x_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_1x_packed.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	case libcamera::formats::SRGGB10_CSI2P:
 		firstRed_.setX(0.0);
 		firstRed_.setY(0.0);
 		fragmentShaderDefines_.append("#define RAW10P");
-		fragmentShaderFile_ = ":bayer_1x_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_1x_packed.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	case libcamera::formats::SBGGR12_CSI2P:
 		firstRed_.setX(1.0);
 		firstRed_.setY(1.0);
 		fragmentShaderDefines_.append("#define RAW12P");
-		fragmentShaderFile_ = ":bayer_1x_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_1x_packed.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	case libcamera::formats::SGBRG12_CSI2P:
 		firstRed_.setX(0.0);
 		firstRed_.setY(1.0);
 		fragmentShaderDefines_.append("#define RAW12P");
-		fragmentShaderFile_ = ":bayer_1x_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_1x_packed.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	case libcamera::formats::SGRBG12_CSI2P:
 		firstRed_.setX(1.0);
 		firstRed_.setY(0.0);
 		fragmentShaderDefines_.append("#define RAW12P");
-		fragmentShaderFile_ = ":bayer_1x_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_1x_packed.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	case libcamera::formats::SRGGB12_CSI2P:
 		firstRed_.setX(0.0);
 		firstRed_.setY(0.0);
 		fragmentShaderDefines_.append("#define RAW12P");
-		fragmentShaderFile_ = ":bayer_1x_packed.frag";
+		fragmentShaderFile_ = ":include/libcamera/internal/shaders/bayer_1x_packed.frag";
 		textureMinMagFilters_ = GL_NEAREST;
 		break;
 	default:
-- 
2.49.0



More information about the libcamera-devel mailing list