16#include <libcamera/base/span.h>
25#define EGL_EGLEXT_PROTOTYPES
27#include <EGL/eglext.h>
28#define GL_GLEXT_PROTOTYPES
30#include <GLES2/gl2ext.h>
61 eGLImage(GLint format, uint32_t width, uint32_t height, uint32_t stride, GLenum texture_unit, uint32_t texture_unit_uniform_id)
62 : format_(format), width_(width), height_(height), stride_(stride),
63 framesize_(stride * height),
64 texture_unit_uniform_id_(texture_unit_uniform_id),
65 texture_unit_(texture_unit)
67 glGenTextures(1, &texture_);
68 glGenFramebuffers(1, &fbo_);
79 glDeleteFramebuffers(1, &fbo_);
80 glDeleteTextures(1, &texture_);
93 bool dmabuf_import_failed_ =
false;
111 void pushEnv(std::vector<std::string> &shaderEnv,
const char *str);
115 unsigned int shaderDataLen,
116 Span<const std::string> shaderEnv);
118 unsigned int shaderDataLen,
119 Span<const std::string> shaderEnv);
120 int linkProgram(GLuint &programId, GLuint fragmentshaderId, GLuint vertexshaderId);
132 EGLDisplay display_ = EGL_NO_DISPLAY;
133 EGLContext context_ = EGL_NO_CONTEXT;
134 EGLSurface surface_ = EGL_NO_SURFACE;
136 int compileShader(
int shaderType, GLuint &shaderId,
const unsigned char *shaderData,
137 unsigned int shaderDataLen,
138 Span<const std::string> shaderEnv);
140 int createDMABufTexture2D(
eGLImage &eglImage,
int fd,
bool output);
142 PFNGLEGLIMAGETARGETTEXTURE2DOESPROC glEGLImageTargetTexture2DOES;
143 PFNEGLCREATEIMAGEKHRPROC eglCreateImageKHR;
144 PFNEGLDESTROYIMAGEKHRPROC eglDestroyImageKHR;
145 PFNGLGETSTRINGPROC glGetString;
#define LIBCAMERA_DISABLE_COPY_AND_MOVE(klass)
Disable copy and move construction and assignment of the klass.
Definition class.h:29
Helper class for managing EGL image resources.
Definition egl.h:50
uint32_t offset_
Definition egl.h:87
~eGLImage()
Destroy the eGLImage.
Definition egl.h:77
GLuint texture_
Definition egl.h:91
GLuint fbo_
Definition egl.h:92
uint32_t stride_
Definition egl.h:86
uint32_t height_
Definition egl.h:85
GLenum texture_unit_
Definition egl.h:90
eGLImage(GLint format, uint32_t width, uint32_t height, uint32_t stride, GLenum texture_unit, uint32_t texture_unit_uniform_id)
Construct an eGLImage with explicit stride.
Definition egl.h:61
uint32_t framesize_
Definition egl.h:88
GLint format_
Definition egl.h:83
uint32_t texture_unit_uniform_id_
Definition egl.h:89
uint32_t width_
Definition egl.h:84
Helper class for managing OpenGL ES operations.
Definition egl.h:100
eGL()
Construct an EGL helper.
Definition egl.cpp:71
void flushOutput()
Flush the rendering pipeline.
Definition egl.cpp:108
int compileFragmentShader(GLuint &shaderId, const unsigned char *shaderData, unsigned int shaderDataLen, Span< const std::string > shaderEnv)
Compile a fragment shader.
Definition egl.cpp:461
int createInputDMABufTexture2D(eGLImage &eglImage, int fd)
Create an input DMA-BUF backed texture.
Definition egl.cpp:215
int linkProgram(GLuint &programId, GLuint fragmentshaderId, GLuint vertexshaderId)
Link a shader program.
Definition egl.cpp:562
int initEGLContext()
Initialise the EGL context.
Definition egl.cpp:280
int createOutputDMABufTexture2D(eGLImage &eglImage, int fd)
Create an output DMA-BUF backed texture.
Definition egl.cpp:234
void pushEnv(std::vector< std::string > &shaderEnv, const char *str)
Add a preprocessor definition to shader environment.
Definition egl.cpp:422
void makeCurrent()
Make the EGL context current for the calling thread.
Definition egl.cpp:377
void syncOutput()
Synchronise rendering output.
Definition egl.cpp:95
void useProgram(GLuint programId)
Activate a shader program for rendering.
Definition egl.cpp:393
~eGL()
Destroy the EGL helper.
Definition egl.cpp:80
int compileVertexShader(GLuint &shaderId, const unsigned char *shaderData, unsigned int shaderDataLen, Span< const std::string > shaderEnv)
Compile a vertex shader.
Definition egl.cpp:442
void dumpShaderSource(GLuint shaderId)
Dump shader source code to the log.
Definition egl.cpp:531
void createTexture2D(eGLImage &eglImage, void *data)
Create a 2D texture from a memory buffer.
Definition egl.cpp:251
void deleteProgram(GLuint programId)
Delete a shader program.
Definition egl.cpp:407
#define LOG_DECLARE_CATEGORY(name)
Declare a category of log messages.
Definition log.h:51
Top-level libcamera namespace.
Definition backtrace.h:17
Miscellaneous utility functions.