[vlc-devel] [PATCH v2 09/13] opengl: expose texture sizes in sampler
Romain Vimont
rom1v at videolabs.io
Tue Mar 30 11:14:07 UTC 2021
The number of input planes and their sizes might be useful to filters
implementation.
It could be retrieved by vlc_fourcc_GetChromaDescription(), but for
convenience, expose them in sampler.
---
modules/video_output/opengl/sampler.c | 17 ++++++++++-------
modules/video_output/opengl/sampler.h | 7 +++++++
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/modules/video_output/opengl/sampler.c b/modules/video_output/opengl/sampler.c
index b30eab6d03..39b37c2ca2 100644
--- a/modules/video_output/opengl/sampler.c
+++ b/modules/video_output/opengl/sampler.c
@@ -78,7 +78,6 @@ struct vlc_gl_sampler_priv {
GLuint textures[PICTURE_PLANE_MAX];
- unsigned tex_count;
GLenum tex_target;
struct {
@@ -289,8 +288,8 @@ sampler_base_fetch_locations(struct vlc_gl_sampler *sampler, GLuint program)
vt->GetUniformLocation(program, "OrientationMatrix");
assert(priv->uloc.OrientationMatrix != -1);
- assert(priv->tex_count < 10); /* to guarantee variable names length */
- for (unsigned int i = 0; i < priv->tex_count; ++i)
+ assert(sampler->tex_count < 10); /* to guarantee variable names length */
+ for (unsigned int i = 0; i < sampler->tex_count; ++i)
{
char name[sizeof("TexCoordsMaps[X]")];
@@ -341,7 +340,7 @@ sampler_base_load(const struct vlc_gl_sampler *sampler)
vt->UniformMatrix4fv(priv->uloc.ConvMatrix, 1, GL_FALSE,
priv->conv_matrix);
- for (unsigned i = 0; i < priv->tex_count; ++i)
+ for (unsigned i = 0; i < sampler->tex_count; ++i)
{
vt->Uniform1i(priv->uloc.Textures[i], i);
@@ -362,7 +361,7 @@ sampler_base_load(const struct vlc_gl_sampler *sampler)
if (priv->tex_target == GL_TEXTURE_RECTANGLE)
{
- for (unsigned i = 0; i < priv->tex_count; ++i)
+ for (unsigned i = 0; i < sampler->tex_count; ++i)
vt->Uniform2f(priv->uloc.TexSizes[i], priv->tex_widths[i],
priv->tex_heights[i]);
}
@@ -774,7 +773,7 @@ opengl_fragment_shader_init(struct vlc_gl_sampler *sampler, GLenum tex_target,
return VLC_EGENERIC;
unsigned tex_count = desc->plane_count;
- priv->tex_count = tex_count;
+ sampler->tex_count = tex_count;
InitOrientationMatrix(priv->var.OrientationMatrix, orientation);
@@ -1002,6 +1001,10 @@ CreateSampler(struct vlc_gl_interop *interop, struct vlc_gl_t *gl,
sampler->shader.extensions = NULL;
sampler->shader.body = NULL;
+ /* Expose the texture sizes publicly */
+ sampler->tex_widths = priv->tex_widths;
+ sampler->tex_heights = priv->tex_heights;
+
#ifdef HAVE_LIBPLACEBO
// Create the main libplacebo context
priv->pl_ctx = vlc_placebo_Create(VLC_OBJECT(gl));
@@ -1032,7 +1035,7 @@ CreateSampler(struct vlc_gl_interop *interop, struct vlc_gl_t *gl,
return NULL;
}
- unsigned tex_count = priv->tex_count;
+ unsigned tex_count = sampler->tex_count;
assert(!interop || interop->tex_count == tex_count);
for (unsigned i = 0; i < tex_count; ++i)
diff --git a/modules/video_output/opengl/sampler.h b/modules/video_output/opengl/sampler.h
index c3ddfd7204..95947c72da 100644
--- a/modules/video_output/opengl/sampler.h
+++ b/modules/video_output/opengl/sampler.h
@@ -53,6 +53,13 @@ struct vlc_gl_sampler {
/* Input format */
video_format_t fmt;
+ /* Number of input planes */
+ unsigned tex_count;
+
+ /* Texture sizes (arrays of tex_count values) */
+ const GLsizei *tex_widths;
+ const GLsizei *tex_heights;
+
struct {
/**
* Piece of fragment shader code declaration OpenGL extensions.
--
2.31.0
More information about the vlc-devel
mailing list