[gtk/matthiasc/for-master] ngl: Be consistent about padding



commit d1949e48e9a0f87c6cd598fea4c217fd02740239
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat May 15 08:58:50 2021 -0400

    ngl: Be consistent about padding
    
    Make gsk_ngl_texture_library_pack always return
    the position of the payload (ie add the padding
    to the x/y that are returned), and compute
    texture coordinates accurately in all cases
    (we were fudging the padding for standalone
    textures.

 gsk/ngl/gskngltexturelibrary.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)
---
diff --git a/gsk/ngl/gskngltexturelibrary.c b/gsk/ngl/gskngltexturelibrary.c
index 1e87fc6a6a..f34e3b170f 100644
--- a/gsk/ngl/gskngltexturelibrary.c
+++ b/gsk/ngl/gskngltexturelibrary.c
@@ -377,13 +377,13 @@ gsk_ngl_texture_library_pack (GskNglTextureLibrary *self,
 
       entry->atlas = atlas;
       entry->is_atlased = TRUE;
-      entry->area.x = (float)(packed_x + padding) / atlas->width;
-      entry->area.y = (float)(packed_y + padding) / atlas->height;
-      entry->area.x2 = entry->area.x + (float)width / atlas->width;
-      entry->area.y2 = entry->area.y + (float)height / atlas->height;
+      entry->area.x = (packed_x + padding) / (float)atlas->width;
+      entry->area.y = (packed_y + padding) / (float)atlas->height;
+      entry->area.x2 = (packed_x + padding + width) / (float)atlas->width;
+      entry->area.y2 = (packed_y + padding + height) / (float)atlas->height;
 
-      *out_packed_x = packed_x;
-      *out_packed_y = packed_y;
+      *out_packed_x = packed_x + padding;
+      *out_packed_y = packed_y + padding;
     }
   else
     {
@@ -394,10 +394,10 @@ gsk_ngl_texture_library_pack (GskNglTextureLibrary *self,
       entry->texture = texture;
       entry->is_atlased = FALSE;
       entry->accessed = TRUE;
-      entry->area.x = 0.0f;
-      entry->area.y = 0.0f;
-      entry->area.x2 = 1.0f;
-      entry->area.y2 = 1.0f;
+      entry->area.x = padding / (float) (padding + width + padding);
+      entry->area.y = padding / (float) (padding + height + padding);
+      entry->area.x2 = (padding + width) / (float) (padding + width + padding);
+      entry->area.y2 = (padding + height) / (float) (padding + height + padding);
 
       *out_packed_x = padding;
       *out_packed_y = padding;


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