Skip to content
  1. Mar 18, 2020
    • Romain Vimont's avatar
      opengl: remove unused source format parameter · fa08a88e
      Romain Vimont authored
      The video_format_t parameter of vout_display_opengl_Display() is not
      used anymore. Remove it.
      fa08a88e
    • Romain Vimont's avatar
      opengl: move paddings computation to _Prepare() · de5f46be
      Romain Vimont authored
      Texture paddings were computed in _Display(), while the picture format
      is known in _Prepare().
      
      This will allow to remove the video_format_t parameter of _Display().
      de5f46be
    • Romain Vimont's avatar
      opengl: move down vlc_gl_renderer_Prepare() · 294b0288
      Romain Vimont authored
      It will be modified to depend on static functions. Move it below them.
      
      This will make the diff more readable.
      294b0288
    • Romain Vimont's avatar
      opengl: merge successive loops · b3087f77
      Romain Vimont authored
      After the previous changes, two successive loops iterating tex_count
      times can now be merged into one.
      b3087f77
    • Romain Vimont's avatar
      opengl: apply stereo transform using a matrix · 1dfec9e0
      Romain Vimont authored
      The multiview mode (stereo) was applied by changing the texture
      paddings to crop only the left eye.
      
      The problem is that these texture paddings are specific to the input
      picture, while the stereo mode is specific to the renderer, which should
      be independent of the input picture.
      
      To separate these concerns, apply the stereo mode using a matrix to
      transform the texture coordinates from the renderer.
      1dfec9e0
    • Romain Vimont's avatar
      opengl: apply orientation in fragment shader · e153e47a
      Romain Vimont authored
      Apply all texture coordinates transformation in the fragment shader.
      
      This is necessary to be able to implement a renderer independent of the
      input picture (i.e. without even knowing the details) by using a single
      GLSL function "vlc_texture(vec2 pic_coords)".
      e153e47a
    • Romain Vimont's avatar
      opengl: setup coords once for all · 57860d39
      Romain Vimont authored
      Now that the coordinates are independant of paddings (which are
      transmitted via a separate transform matrix), there is no need to
      recompute them when the paddings change.
      57860d39
    • Romain Vimont's avatar
      opengl: convert texture coords in fragment shader · b8f0df01
      Romain Vimont authored
      A picture is stored in OpenGL textures (one per plane), possibly with
      padding (the texture may be larger than the actual picture).
      
      The conversion from picture coordinates to texture coordinates (which
      takes the padding into account) was applied on the input coordinates,
      before the vertex shader. As a consequence, the vertex shader received
      one vector of input texture coordinates per plane (the padding is not
      necessarily the same for all the planes):
      
          (before this commit)
      
         picture   texture
         coords    coords        (attributes)      (varyings)
                (1 per plane)
      
                   (x0, y0) --> MultiTexCoord0     TexCoord0     fragment
         (x,y) --> (x1, y1) --> MultiTexCoord1 --> TexCoord1 --> shader
                   (x2, y2) --> MultiTexCoord2     TexCoord2
      
      This poses a problem to separate chroma conversion from rendering: the
      renderer should be able to retrieve a pixel color in picture
      coordinates, regarless of the input format or padding.
      
      To solve this issue, pass the picture coordinates instead of the texture
      coordinates as attribute, and initialize uniform matrices to convert
      from picture to texture coordinates for each plane directly in the
      fragment shader:
      
          (after this commit)
      
         picture
         coords    (attribute)     (varying)
      
         (x,y) --> PicCoordsIn --> PicCoords --> fragment shader
                                                   ^^^
                                                   |||
                                   TexCoordsMap0 --'||
                      (uniforms)   TexCoordsMap1 ---'|
                                   TexCoordsMap2 ----'
      
      Note that this also changes the multiplication order of
      (non-commutative) matrices, from (semantically):
      
          TexCoords = Orientation * TexCoordsMap * PicCoords
      
      to:
      
          TexCoords = TexCoordsMap * Orientation * PicCoords
      
      The latter is the correct one: the orientation defines how the input
      picture is rotated, so it must apply to picture coordinates, regardless
      of the actual coordinates in the texture.
      
      As a side effect, BuildRectangle, BuildSphere and BuildCube are now
      independant of both the number of planes and any texture padding.
      
      For now, TexCoordsMap is computed from the renderer, but the goal is to
      move it to a separate component (a "sampler").
      b8f0df01
    • Romain Vimont's avatar
      opengl: expose npot support in gl_api · c360a6b2
      Romain Vimont authored
      Expose in vlc_gl_api whether it supports non-power of 2 textures.
      c360a6b2
    • Romain Vimont's avatar
      opengl: move fields from interop to gl_api · 57028c32
      Romain Vimont authored
      The fields is_gles and glexts (extensions) are not specific to interop,
      and may be useful without an interop instance.
      57028c32
    • Romain Vimont's avatar
      opengl: pass vlc_gl_api instead of virtual table · 91f7921f
      Romain Vimont authored
      Pass the whole structure (which will have new fields soon) to interop
      and renderers, instead of the virtual table only.
      91f7921f
    • Romain Vimont's avatar
      opengl: move vtable to vlc_gl_api · 3f878f7d
      Romain Vimont authored
      Use a separate component for storing OpenGL API-specific utils (for now,
      only the vtable).
      3f878f7d
    • Romain Vimont's avatar
      opengl: fix unused variable · 1cd6f799
      Romain Vimont authored
      The opengl_vtable_t is used only if USE_OPENGL_ES2 is not defined.
      Declare it inside the ifdef-block.
      1cd6f799
    • Romain Vimont's avatar
      opengl: factorize program creation · b5ea6d79
      Romain Vimont authored
      Expose a single function to create an OpenGL program for a vertex shader
      and a fragment shader.
      
      This simplify the code, and handles the errors in the same way
      everywhere.
      b5ea6d79
  2. Mar 17, 2020
  3. Mar 16, 2020
Loading