@@ -107,6 +107,7 @@ public:
int createInputDMABufTexture2D(eGLImage &eglImage, int fd);
int createOutputDMABufTexture2D(eGLImage &eglImage, int fd);
void createInputTexture2D(eGLImage &eglImage, void *data);
+ void updateInputTexture2D(eGLImage &eglImage, void *data);
void createOutputTexture2D(eGLImage &eglImage);
int attachTextureToFBO(eGLImage &eglImage);
@@ -297,6 +297,33 @@ void eGL::createInputTexture2D(eGLImage &eglImage, void *data)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
}
+void eGL::updateInputTexture2D(eGLImage &eglImage, void *data)
+{
+ GLenum format;
+ GLenum type = GL_UNSIGNED_BYTE;
+
+ ASSERT(tid_ == Thread::currentId());
+
+ glActiveTexture(eglImage.texture_unit_);
+ glBindTexture(GL_TEXTURE_2D, eglImage.texture_);
+
+ switch (eglImage.format_) {
+ case GL_R16F:
+ format = GL_RED;
+ type = GL_HALF_FLOAT;
+ break;
+ case GL_RG8:
+ format = GL_RG;
+ break;
+ case GL_LUMINANCE:
+ format = GL_LUMINANCE;
+ break;
+ }
+
+ // Update an already exsiting texture
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, eglImage.width_, eglImage.height_, format, type, data);
+}
+
/**
* \brief Create a 2D texture attached to an FBO for render-to-texture
* \param[in,out] eglImage EGL image to associate with the texture
The internet box tells me that glTextSubImage2D lets us update a texture's data only, instead of recreating the texture and uploading data. This is a smallish optimisation but we are hunting for every possible cycle and watt so add the routine as precursor to using it in-place of createTexture2D on every upload cycle. Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> --- include/libcamera/internal/egl.h | 1 + src/libcamera/egl.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+)