[gtk: 49/72] gl renderer: Use op builder to render flipped texture




commit 5f9fa13c65af6e6fd3e333004b6b305a77ead247
Author: Timm Bäder <mail baedert org>
Date:   Sat Oct 10 19:03:02 2020 +0200

    gl renderer: Use op builder to render flipped texture
    
    Otherwise, we don't know about the uniform state

 gsk/gl/gskglrenderer.c | 72 +++++++++++++++-----------------------------------
 1 file changed, 22 insertions(+), 50 deletions(-)
---
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index 9adb02dd53..ae64a0f76b 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -4358,14 +4358,14 @@ gsk_gl_renderer_render_texture (GskRenderer           *renderer,
 
   glDeleteFramebuffers (1, &fbo_id);
 
+
   /* Render the now drawn framebuffer y-flipped so it's as GdkGLTexture expects it to be */
   {
     guint final_texture_id, final_fbo_id;
-    GskQuadVertex vertex_data[6];
-    GLuint buffer_id, vao_id;
-    float fs[16];
     graphene_matrix_t m;
 
+    ops_reset (&self->op_builder);
+
     glGenFramebuffers (1, &final_fbo_id);
     glBindFramebuffer (GL_FRAMEBUFFER, final_fbo_id);
     glGenTextures (1, &final_texture_id);
@@ -4384,60 +4384,32 @@ gsk_gl_renderer_render_texture (GskRenderer           *renderer,
     glFramebufferTexture (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, final_texture_id, 0);
     g_assert_cmphex (glCheckFramebufferStatus (GL_FRAMEBUFFER), ==, GL_FRAMEBUFFER_COMPLETE);
 
-    glGenVertexArrays (1, &vao_id);
-    glBindVertexArray (vao_id);
-
-    glGenBuffers (1, &buffer_id);
-    glBindBuffer (GL_ARRAY_BUFFER, buffer_id);
-
-    fill_vertex_data (vertex_data, 0, 0, width, height);
-
-    glBufferData (GL_ARRAY_BUFFER, sizeof (vertex_data), vertex_data, GL_STATIC_DRAW);
-
-    /* 0 = position location */
-    glEnableVertexAttribArray (0);
-    glVertexAttribPointer (0, 2, GL_FLOAT, GL_FALSE,
-                           sizeof (GskQuadVertex),
-                           (void *) G_STRUCT_OFFSET (GskQuadVertex, position));
-    /* 1 = texture coord location */
-    glEnableVertexAttribArray (1);
-    glVertexAttribPointer (1, 2, GL_FLOAT, GL_FALSE,
-                           sizeof (GskQuadVertex),
-                           (void *) G_STRUCT_OFFSET (GskQuadVertex, uv));
-
-    glUseProgram (self->programs->blit_program.id);
-
-    glClearColor (0, 0, 0, 0);
-    glClear (GL_COLOR_BUFFER_BIT);
-
-    glActiveTexture (GL_TEXTURE0);
-    glBindTexture (GL_TEXTURE_2D, texture_id);
-    glUniform1i (self->programs->blit_program.source_location, 0);
-
-    graphene_matrix_init_identity (&m);
-    graphene_matrix_to_float (&m, fs);
-    glUniformMatrix4fv (self->programs->blit_program.modelview_location, 1, GL_FALSE, fs);
+    ops_set_render_target (&self->op_builder, final_fbo_id);
+    ops_push_clip (&self->op_builder, &GSK_ROUNDED_RECT_INIT (0, 0, width, height));
+    ops_set_program (&self->op_builder, &self->programs->blit_program);
 
+    ops_begin (&self->op_builder, OP_CLEAR);
+    ops_set_texture (&self->op_builder, texture_id);
+    ops_set_modelview (&self->op_builder, NULL);
+    ops_set_viewport (&self->op_builder, &GRAPHENE_RECT_INIT (0, 0, width, height));
     init_projection_matrix (&m, &GRAPHENE_RECT_INIT (0, 0, width, height));
     graphene_matrix_scale (&m, 1, -1, 1); /* Undo the scale init_projection_matrix() does again */
-    graphene_matrix_to_float (&m, fs);
-    glUniformMatrix4fv (self->programs->blit_program.projection_location, 1, GL_FALSE, fs);
-
-    glUniform4f (self->programs->blit_program.viewport_location, 0, 0, width, height);
-    glViewport (0, 0, width, height);
-
-    glUniform4fv (self->programs->blit_program.clip_rect_location, 3,
-                  (float *)&GSK_ROUNDED_RECT_INIT (0, 0, width, height));
-    glUniform1f (self->programs->blit_program.alpha_location, 1.0f);
+    ops_set_projection (&self->op_builder, &m);
 
-    glDrawArrays (GL_TRIANGLES, 0, 6);
+    ops_draw (&self->op_builder, (GskQuadVertex[GL_N_VERTICES]) {
+      { { 0,     0      }, { 0, 1 }, },
+      { { 0,     height }, { 0, 0 }, },
+      { { width, 0      }, { 1, 1 }, },
 
-    glDeleteFramebuffers (1, &final_fbo_id);
-    glDeleteVertexArrays (1, &vao_id);
-    glDeleteBuffers (1, &buffer_id);
+      { { width, height }, { 1, 0 }, },
+      { { 0,     height }, { 0, 0 }, },
+      { { width, 0      }, { 1, 1 }, },
+    });
 
-    glDeleteTextures (1, &texture_id);
+    ops_pop_clip (&self->op_builder);
+    gsk_gl_renderer_render_ops (self);
 
+    ops_finish (&self->op_builder);
     texture_id = final_texture_id;
   }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]