[vlc-devel] [PATCH] opengl: simplify shader templates
Romain Vimont
rom1v at videolabs.io
Tue Mar 31 16:24:02 CEST 2020
On 3/31/20 11:49 AM, Marvin Scholz wrote:
> Sure, no hurry with that if you anyway plan to change it!
Thanks ;)
>
> On 31 Mar 2020, at 11:45, Romain Vimont wrote:
>
>> Hi,
>>
>> I agree with the change.
>>
>> However, I currently have a local branch with OpenGL refactors and
>> filters. On this branch I have this commit which does almost the same:
>> https://code.videolan.org/rom1v/vlc/-/commit/6213689bcf19c120cfd93f952437017109f33983
>>
>>
>> I try to submit patchsets step by step on the ML (this commit is
>> currently at position 42). Would you agree to wait for it to avoid
>> unnecessary conflicts?
>>
>> Thank you :)
>>
>> On 3/31/20 11:29 AM, Marvin Scholz wrote:
>>> Instead of globally storing the glsl version and prevision header,
>>> just conditionally insert them directly in the templates, which
>>> makes the shaders easier to understand as one has not to jump around
>>> in the code to find the different variable that are replaced into
>>> the shader for the different cases.
>>>
>>> This is the same way that it is already done for the sub_renderer
>>> shaders.
>>> ---
>>> modules/video_output/opengl/renderer.c | 29 +++++++++++++-------------
>>> modules/video_output/opengl/renderer.h | 6 ------
>>> 2 files changed, 15 insertions(+), 20 deletions(-)
>>>
>>> diff --git a/modules/video_output/opengl/renderer.c
>>> b/modules/video_output/opengl/renderer.c
>>> index ae4179be4a..f796485004 100644
>>> --- a/modules/video_output/opengl/renderer.c
>>> +++ b/modules/video_output/opengl/renderer.c
>>> @@ -249,7 +249,11 @@ BuildVertexShader(const struct vlc_gl_renderer
>>> *renderer)
>>> {
>>> /* Basic vertex shader */
>>> static const char *template =
>>> - "#version %u\n"
>>> +#if defined(USE_OPENGL_ES2)
>>> + "#version 100\n"
>>> +#else
>>> + "#version 120\n"
>>> +#endif
>>> "attribute vec2 PicCoordsIn;\n"
>>> "varying vec2 PicCoords;\n"
>>> "attribute vec3 VertexPosition;\n"
>>> @@ -263,8 +267,8 @@ BuildVertexShader(const struct vlc_gl_renderer
>>> *renderer)
>>> " * vec4(VertexPosition, 1.0);\n"
>>> "}";
>>> - char *code;
>>> - if (asprintf(&code, template, renderer->glsl_version) < 0)
>>> + char *code = strdup(template);
>>> + if (code == NULL)
>>> return NULL;
>>> if (renderer->b_dump_shaders)
>>> @@ -285,9 +289,14 @@ BuildFragmentShader(struct vlc_gl_renderer
>>> *renderer)
>>> return NULL;
>>> static const char *template =
>>> - "#version %u\n"
>>> +#if defined(USE_OPENGL_ES2)
>>> + "#version 100\n"
>>> "%s" /* extensions */
>>> - "%s" /* precision header */
>>> + "precision highp float;\n"
>>> +#else
>>> + "#version 120\n"
>>> + "%s" /* extensions */
>>> +#endif
>>> "%s" /* vlc_texture definition */
>>> "varying vec2 PicCoords;\n"
>>> "void main() {\n"
>>> @@ -300,8 +309,7 @@ BuildFragmentShader(struct vlc_gl_renderer
>>> *renderer)
>>> : "";
>>> char *code;
>>> - int ret = asprintf(&code, template, renderer->glsl_version,
>>> extensions,
>>> - renderer->glsl_precision_header, vlc_texture);
>>> + int ret = asprintf(&code, template, extensions, vlc_texture);
>>> free(vlc_texture);
>>> if (ret < 0)
>>> return NULL;
>>> @@ -451,13 +459,6 @@ vlc_gl_renderer_New(vlc_gl_t *gl, const struct
>>> vlc_gl_api *api,
>>> renderer->api = api;
>>> renderer->vt = vt;
>>> renderer->b_dump_shaders = b_dump_shaders;
>>> -#if defined(USE_OPENGL_ES2)
>>> - renderer->glsl_version = 100;
>>> - renderer->glsl_precision_header = "precision highp float;\n";
>>> -#else
>>> - renderer->glsl_version = 120;
>>> - renderer->glsl_precision_header = "";
>>> -#endif
>>> #ifdef HAVE_LIBPLACEBO
>>> // Create the main libplacebo context
>>> diff --git a/modules/video_output/opengl/renderer.h
>>> b/modules/video_output/opengl/renderer.h
>>> index 8151045eb4..a4144e61f9 100644
>>> --- a/modules/video_output/opengl/renderer.h
>>> +++ b/modules/video_output/opengl/renderer.h
>>> @@ -52,12 +52,6 @@ struct vlc_gl_renderer
>>> /* True to dump shaders, set by the caller */
>>> bool b_dump_shaders;
>>> - /* GLSL version, set by the caller. 100 for GLSL ES, 120 for
>>> desktop GLSL */
>>> - unsigned glsl_version;
>>> - /* Precision header, set by the caller. In OpenGLES, the
>>> fragment language
>>> - * has no default precision qualifier for floating point types. */
>>> - const char *glsl_precision_header;
>>> -
>>> GLuint program_id;
>>> struct {
>>>
>> _______________________________________________
>> vlc-devel mailing list
>> To unsubscribe or modify your subscription options:
>> https://mailman.videolan.org/listinfo/vlc-devel
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list