[vlc-commits] Reorder a bit vout_display_opengl_Display (opengl)

Laurent Aimar git at videolan.org
Thu Dec 20 22:49:55 CET 2012


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Thu Dec 20 21:32:25 2012 +0100| [dadf72fe264d2f3c16c82c206c57eec3b710a7ef] | committer: Laurent Aimar

Reorder a bit vout_display_opengl_Display (opengl)

No functionnal changes */

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=dadf72fe264d2f3c16c82c206c57eec3b710a7ef
---

 modules/video_output/opengl.c |   42 +++++++++++++++++++++++------------------
 1 file changed, 24 insertions(+), 18 deletions(-)

diff --git a/modules/video_output/opengl.c b/modules/video_output/opengl.c
index 6e67bb5..0be0bf1 100644
--- a/modules/video_output/opengl.c
+++ b/modules/video_output/opengl.c
@@ -821,6 +821,12 @@ static void DrawWithoutShaders(vout_display_opengl_t *vgl,
 static void DrawWithShaders(vout_display_opengl_t *vgl,
                             float *left, float *top, float *right, float *bottom)
 {
+    vgl->UseProgram(vgl->program[0]);
+    vgl->Uniform4fv(vgl->GetUniformLocation(vgl->program[0], "Coefficient"), 4, vgl->local_value);
+    vgl->Uniform1i(vgl->GetUniformLocation(vgl->program[0], "Texture[0]"), 0);
+    vgl->Uniform1i(vgl->GetUniformLocation(vgl->program[0], "Texture[1]"), 1);
+    vgl->Uniform1i(vgl->GetUniformLocation(vgl->program[0], "Texture[2]"), 2);
+
     static const GLfloat vertexCoord[] = {
         -1.0,  1.0,
         -1.0, -1.0,
@@ -859,14 +865,21 @@ int vout_display_opengl_Display(vout_display_opengl_t *vgl,
     if (vlc_gl_Lock(vgl->gl))
         return VLC_EGENERIC;
 
-    /* glTexCoord works differently with GL_TEXTURE_2D and
-       GL_TEXTURE_RECTANGLE_EXT */
+    /* Why drawing here and not in Render()? Because this way, the
+       OpenGL providers can call vout_display_opengl_Display to force redraw.i
+       Currently, the OS X provider uses it to get a smooth window resizing */
+    glClear(GL_COLOR_BUFFER_BIT);
+
+    /* Draw the picture */
     float left[PICTURE_PLANE_MAX];
     float top[PICTURE_PLANE_MAX];
     float right[PICTURE_PLANE_MAX];
     float bottom[PICTURE_PLANE_MAX];
     for (unsigned j = 0; j < vgl->chroma->plane_count; j++) {
+        /* glTexCoord works differently with GL_TEXTURE_2D and
+           GL_TEXTURE_RECTANGLE_EXT */
         float scale_w, scale_h;
+
         if (vgl->tex_target == GL_TEXTURE_2D) {
             scale_w = (float)vgl->chroma->p[j].w.num / vgl->chroma->p[j].w.den / vgl->tex_width[j];
             scale_h = (float)vgl->chroma->p[j].h.num / vgl->chroma->p[j].h.den / vgl->tex_height[j];
@@ -881,24 +894,16 @@ int vout_display_opengl_Display(vout_display_opengl_t *vgl,
         bottom[j] = (source->i_y_offset + source->i_visible_height) * scale_h;
     }
 
-    /* Why drawing here and not in Render()? Because this way, the
-       OpenGL providers can call vout_display_opengl_Display to force redraw.i
-       Currently, the OS X provider uses it to get a smooth window resizing */
-
-    glClear(GL_COLOR_BUFFER_BIT);
-
-    if (vgl->program[0]) {
-        vgl->UseProgram(vgl->program[0]);
-        vgl->Uniform4fv(vgl->GetUniformLocation(vgl->program[0], "Coefficient"), 4, vgl->local_value);
-        vgl->Uniform1i(vgl->GetUniformLocation(vgl->program[0], "Texture[0]"), 0);
-        vgl->Uniform1i(vgl->GetUniformLocation(vgl->program[0], "Texture[1]"), 1);
-        vgl->Uniform1i(vgl->GetUniformLocation(vgl->program[0], "Texture[2]"), 2);
+    if (vgl->program[0])
         DrawWithShaders(vgl, left, top ,right, bottom);
+    else
+        DrawWithoutShaders(vgl, left, top, right, bottom);
+
+    /* Draw the subpictures */
+    if (vgl->program[1]) {
         // Change the program for overlays
         vgl->UseProgram(vgl->program[1]);
         vgl->Uniform1i(vgl->GetUniformLocation(vgl->program[1], "Texture"), 0);
-    } else {
-        DrawWithoutShaders(vgl, left, top, right, bottom);
     }
 
     glEnable(GL_TEXTURE_2D);
@@ -923,7 +928,7 @@ int vout_display_opengl_Display(vout_display_opengl_t *vgl,
         };
 
         glBindTexture(GL_TEXTURE_2D, glr->texture);
-        if (vgl->program[0]) {
+        if (vgl->program[1]) {
             vgl->Uniform4f(vgl->GetUniformLocation(vgl->program[1], "FillColor"), 1.0f, 1.0f, 1.0f, glr->alpha);
             vgl->EnableVertexAttribArray(vgl->GetAttribLocation(vgl->program[1], "MultiTexCoord0"));
             vgl->VertexAttribPointer(vgl->GetAttribLocation(vgl->program[1], "MultiTexCoord0"), 2, GL_FLOAT, 0, 0, textureCoord);
@@ -939,7 +944,7 @@ int vout_display_opengl_Display(vout_display_opengl_t *vgl,
 
         glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
 
-        if (!vgl->program[0]) {
+        if (!vgl->program[1]) {
             glDisableClientState(GL_TEXTURE_COORD_ARRAY);
             glDisableClientState(GL_VERTEX_ARRAY);
         }
@@ -947,6 +952,7 @@ int vout_display_opengl_Display(vout_display_opengl_t *vgl,
     glDisable(GL_BLEND);
     glDisable(GL_TEXTURE_2D);
 
+    /* Display */
     vlc_gl_Swap(vgl->gl);
 
     vlc_gl_Unlock(vgl->gl);



More information about the vlc-commits mailing list