mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 06:00:22 +00:00
Merge branch 'texture-scale-test' into 'main'
gsk: Add a test for scaled textures See merge request GNOME/gtk!5686
This commit is contained in:
commit
57ec758d81
@ -1412,9 +1412,41 @@ gsk_gl_command_queue_create_framebuffer (GskGLCommandQueue *self)
|
||||
return fbo_id;
|
||||
}
|
||||
|
||||
static GdkMemoryFormat
|
||||
memory_format_gl_format (GdkMemoryFormat data_format,
|
||||
gboolean use_es,
|
||||
guint *gl_internalformat,
|
||||
guint *gl_format,
|
||||
guint *gl_type)
|
||||
{
|
||||
if (!gdk_memory_format_gl_format (data_format,
|
||||
use_es,
|
||||
gl_internalformat,
|
||||
gl_format,
|
||||
gl_type))
|
||||
{
|
||||
if (gdk_memory_format_prefers_high_depth (data_format))
|
||||
data_format = GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED;
|
||||
else
|
||||
data_format = GDK_MEMORY_R8G8B8A8_PREMULTIPLIED;
|
||||
if (!gdk_memory_format_gl_format (data_format,
|
||||
use_es,
|
||||
gl_internalformat,
|
||||
gl_format,
|
||||
gl_type))
|
||||
{
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
}
|
||||
|
||||
return data_format;
|
||||
}
|
||||
|
||||
static void
|
||||
gsk_gl_command_queue_do_upload_texture (GskGLCommandQueue *self,
|
||||
GdkTexture *texture)
|
||||
gsk_gl_command_queue_do_upload_texture_chunk (GskGLCommandQueue *self,
|
||||
GdkTexture *texture,
|
||||
int x,
|
||||
int y)
|
||||
{
|
||||
GdkGLContext *context;
|
||||
const guchar *data;
|
||||
@ -1435,25 +1467,11 @@ gsk_gl_command_queue_do_upload_texture (GskGLCommandQueue *self,
|
||||
width = gdk_texture_get_width (texture);
|
||||
height = gdk_texture_get_height (texture);
|
||||
|
||||
if (!gdk_memory_format_gl_format (data_format,
|
||||
use_es,
|
||||
&gl_internalformat,
|
||||
&gl_format,
|
||||
&gl_type))
|
||||
{
|
||||
if (gdk_memory_format_prefers_high_depth (data_format))
|
||||
data_format = GDK_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED;
|
||||
else
|
||||
data_format = GDK_MEMORY_R8G8B8A8_PREMULTIPLIED;
|
||||
if (!gdk_memory_format_gl_format (data_format,
|
||||
use_es,
|
||||
&gl_internalformat,
|
||||
&gl_format,
|
||||
&gl_type))
|
||||
{
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
}
|
||||
data_format = memory_format_gl_format (data_format,
|
||||
use_es,
|
||||
&gl_internalformat,
|
||||
&gl_format,
|
||||
&gl_type);
|
||||
|
||||
gdk_texture_downloader_init (&downloader, texture);
|
||||
gdk_texture_downloader_set_format (&downloader, data_format);
|
||||
@ -1469,43 +1487,53 @@ gsk_gl_command_queue_do_upload_texture (GskGLCommandQueue *self,
|
||||
*/
|
||||
if (stride == width * bpp)
|
||||
{
|
||||
glTexImage2D (GL_TEXTURE_2D, 0, gl_internalformat, width, height, 0, gl_format, gl_type, data);
|
||||
glTexSubImage2D (GL_TEXTURE_2D, 0, x, y, width, height, gl_format, gl_type, data);
|
||||
}
|
||||
else if (stride % bpp == 0 &&
|
||||
(gdk_gl_context_check_version (context, 0, 0, 3, 0) || gdk_gl_context_has_unpack_subimage (context)))
|
||||
{
|
||||
glPixelStorei (GL_UNPACK_ROW_LENGTH, stride / bpp);
|
||||
|
||||
glTexImage2D (GL_TEXTURE_2D, 0, gl_internalformat, width, height, 0, gl_format, gl_type, data);
|
||||
glTexSubImage2D (GL_TEXTURE_2D, 0, x, y, width, height, gl_format, gl_type, data);
|
||||
|
||||
glPixelStorei (GL_UNPACK_ROW_LENGTH, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
int i;
|
||||
glTexImage2D (GL_TEXTURE_2D, 0, gl_internalformat, width, height, 0, gl_format, gl_type, NULL);
|
||||
for (i = 0; i < height; i++)
|
||||
glTexSubImage2D (GL_TEXTURE_2D, 0, 0, i, width, 1, gl_format, gl_type, data + (i * stride));
|
||||
for (int i = 0; i < height; i++)
|
||||
glTexSubImage2D (GL_TEXTURE_2D, 0, x, y + i, width, 1, gl_format, gl_type, data + (i * stride));
|
||||
}
|
||||
|
||||
glPixelStorei (GL_UNPACK_ALIGNMENT, 4);
|
||||
|
||||
g_bytes_unref (bytes);
|
||||
}
|
||||
|
||||
int
|
||||
gsk_gl_command_queue_upload_texture (GskGLCommandQueue *self,
|
||||
GdkTexture *texture)
|
||||
gsk_gl_command_queue_upload_texture_chunks (GskGLCommandQueue *self,
|
||||
unsigned int n_chunks,
|
||||
GskGLTextureChunk *chunks)
|
||||
{
|
||||
G_GNUC_UNUSED gint64 start_time = GDK_PROFILER_CURRENT_TIME;
|
||||
cairo_surface_t *surface = NULL;
|
||||
int width, height;
|
||||
GdkMemoryFormat data_format;
|
||||
GLenum gl_internalformat;
|
||||
GLenum gl_format;
|
||||
GLenum gl_type;
|
||||
gboolean use_es;
|
||||
int texture_id;
|
||||
|
||||
g_assert (GSK_IS_GL_COMMAND_QUEUE (self));
|
||||
g_assert (!GDK_IS_GL_TEXTURE (texture));
|
||||
|
||||
width = gdk_texture_get_width (texture);
|
||||
height = gdk_texture_get_height (texture);
|
||||
width = height = 0;
|
||||
for (unsigned int i = 0; i < n_chunks; i++)
|
||||
{
|
||||
GskGLTextureChunk *c = &chunks[i];
|
||||
|
||||
width = MAX (width, c->x + gdk_texture_get_width (c->texture));
|
||||
height = MAX (height, c->y + gdk_texture_get_height (c->texture));
|
||||
}
|
||||
|
||||
if (width > self->max_texture_size || height > self->max_texture_size)
|
||||
{
|
||||
g_warning ("Attempt to create texture of size %ux%u but max size is %d. "
|
||||
@ -1514,6 +1542,7 @@ gsk_gl_command_queue_upload_texture (GskGLCommandQueue *self,
|
||||
width = MIN (width, self->max_texture_size);
|
||||
height = MIN (height, self->max_texture_size);
|
||||
}
|
||||
|
||||
texture_id = gsk_gl_command_queue_create_texture (self, width, height, GL_RGBA8);
|
||||
if (texture_id == -1)
|
||||
return texture_id;
|
||||
@ -1524,15 +1553,28 @@ gsk_gl_command_queue_upload_texture (GskGLCommandQueue *self,
|
||||
glActiveTexture (GL_TEXTURE0);
|
||||
glBindTexture (GL_TEXTURE_2D, texture_id);
|
||||
|
||||
gsk_gl_command_queue_do_upload_texture (self, texture);
|
||||
/* Initialize the texture */
|
||||
use_es = gdk_gl_context_get_use_es (gdk_gl_context_get_current ());
|
||||
data_format = gdk_texture_get_format (chunks[0].texture);
|
||||
memory_format_gl_format (data_format,
|
||||
use_es,
|
||||
&gl_internalformat,
|
||||
&gl_format,
|
||||
&gl_type);
|
||||
|
||||
glTexImage2D (GL_TEXTURE_2D, 0, gl_internalformat, width, height, 0, gl_format, gl_type, NULL);
|
||||
|
||||
for (unsigned int i = 0; i < n_chunks; i++)
|
||||
{
|
||||
GskGLTextureChunk *c = &chunks[i];
|
||||
gsk_gl_command_queue_do_upload_texture_chunk (self, c->texture, c->x, c->y);
|
||||
}
|
||||
|
||||
/* Restore previous texture state if any */
|
||||
if (self->attachments->textures[0].id > 0)
|
||||
glBindTexture (self->attachments->textures[0].target,
|
||||
self->attachments->textures[0].id);
|
||||
|
||||
g_clear_pointer (&surface, cairo_surface_destroy);
|
||||
|
||||
if (gdk_profiler_is_running ())
|
||||
gdk_profiler_add_markf (start_time, GDK_PROFILER_CURRENT_TIME-start_time,
|
||||
"Upload Texture",
|
||||
@ -1541,6 +1583,13 @@ gsk_gl_command_queue_upload_texture (GskGLCommandQueue *self,
|
||||
return texture_id;
|
||||
}
|
||||
|
||||
int
|
||||
gsk_gl_command_queue_upload_texture (GskGLCommandQueue *self,
|
||||
GdkTexture *texture)
|
||||
{
|
||||
return gsk_gl_command_queue_upload_texture_chunks (self, 1, &(GskGLTextureChunk){ texture, 0, 0});
|
||||
}
|
||||
|
||||
void
|
||||
gsk_gl_command_queue_set_profiler (GskGLCommandQueue *self,
|
||||
GskProfiler *profiler)
|
||||
|
@ -298,6 +298,18 @@ int gsk_gl_command_queue_create_texture (GskGLCommandQueue
|
||||
int width,
|
||||
int height,
|
||||
int format);
|
||||
|
||||
|
||||
typedef struct {
|
||||
GdkTexture *texture;
|
||||
int x;
|
||||
int y;
|
||||
} GskGLTextureChunk;
|
||||
|
||||
int gsk_gl_command_queue_upload_texture_chunks(GskGLCommandQueue *self,
|
||||
unsigned int n_chunks,
|
||||
GskGLTextureChunk *chunks);
|
||||
|
||||
guint gsk_gl_command_queue_create_framebuffer (GskGLCommandQueue *self);
|
||||
gboolean gsk_gl_command_queue_create_render_target (GskGLCommandQueue *self,
|
||||
int width,
|
||||
|
@ -43,6 +43,8 @@
|
||||
#include <gdk/gdkprofilerprivate.h>
|
||||
#include <gdk/gdktextureprivate.h>
|
||||
|
||||
#include <gdk/gdkmemoryformatprivate.h>
|
||||
|
||||
G_DEFINE_TYPE (GskGLDriver, gsk_gl_driver, G_TYPE_OBJECT)
|
||||
|
||||
static guint
|
||||
@ -732,7 +734,7 @@ gsk_gl_driver_load_texture (GskGLDriver *self,
|
||||
t = gdk_texture_get_render_data (texture, self);
|
||||
if (t && t->texture_id)
|
||||
{
|
||||
if (ensure_mipmap & !t->has_mipmap)
|
||||
if (ensure_mipmap && !t->has_mipmap)
|
||||
{
|
||||
glBindTexture (GL_TEXTURE_2D, t->texture_id);
|
||||
glGenerateMipmap (GL_TEXTURE_2D);
|
||||
@ -1181,12 +1183,10 @@ void
|
||||
gsk_gl_driver_add_texture_slices (GskGLDriver *self,
|
||||
GdkTexture *texture,
|
||||
gboolean ensure_mipmap,
|
||||
guint min_cols,
|
||||
guint min_rows,
|
||||
GskGLTextureSlice **out_slices,
|
||||
guint *out_n_slices)
|
||||
{
|
||||
int max_texture_size;
|
||||
int max_slice_size;
|
||||
GskGLTextureSlice *slices;
|
||||
GskGLTexture *t;
|
||||
guint n_slices;
|
||||
@ -1196,19 +1196,23 @@ gsk_gl_driver_add_texture_slices (GskGLDriver *self,
|
||||
int tex_height;
|
||||
int x = 0, y = 0;
|
||||
GdkMemoryTexture *memtex;
|
||||
int extra_pixels;
|
||||
GdkMemoryTexture *memtex1 = NULL;
|
||||
GdkMemoryTexture *memtex2 = NULL;
|
||||
GdkMemoryTexture *memtex3 = NULL;
|
||||
GdkMemoryTexture *memtex4 = NULL;
|
||||
|
||||
g_assert (GSK_IS_GL_DRIVER (self));
|
||||
g_assert (GDK_IS_TEXTURE (texture));
|
||||
g_assert (out_slices != NULL);
|
||||
g_assert (out_n_slices != NULL);
|
||||
|
||||
/* XXX: Too much? */
|
||||
max_texture_size = self->command_queue->max_texture_size / 4;
|
||||
max_slice_size = self->command_queue->max_texture_size / 2;
|
||||
tex_width = texture->width;
|
||||
tex_height = texture->height;
|
||||
|
||||
cols = MAX ((texture->width / max_texture_size) + 1, min_cols);
|
||||
rows = MAX ((texture->height / max_texture_size) + 1, min_rows);
|
||||
cols = (texture->width / max_slice_size) + 1;
|
||||
rows = (texture->height / max_slice_size) + 1;
|
||||
|
||||
n_slices = cols * rows;
|
||||
|
||||
@ -1231,26 +1235,253 @@ gsk_gl_driver_add_texture_slices (GskGLDriver *self,
|
||||
memtex = gdk_memory_texture_from_texture (texture,
|
||||
gdk_texture_get_format (texture));
|
||||
|
||||
if (ensure_mipmap)
|
||||
{
|
||||
guchar *data1, *data2, *data3, *data4;
|
||||
guchar *top_row, *bot_row, *left_row, *right_row;
|
||||
GdkTexture *tmp;
|
||||
int w;
|
||||
GBytes *bytes;
|
||||
|
||||
/* We need some extra pixels around our tiles, in order for
|
||||
* GL to properly determine the right level of detail to use.
|
||||
* This number should probably depend on the scale, but for
|
||||
* now we just hardcode it.
|
||||
*
|
||||
* We create some auxiliary textures to hold the extra pixels:
|
||||
*
|
||||
* +---------------------+
|
||||
* | memtex1 |
|
||||
* *---+-------------+---+
|
||||
* | | | |
|
||||
* memtex2| memtex |memtex3
|
||||
* | | | |
|
||||
* *---+-------------+---+
|
||||
* | memtex4 | |
|
||||
* +---------------------+
|
||||
*/
|
||||
|
||||
extra_pixels = 15;
|
||||
|
||||
top_row = g_malloc (4 * tex_width);
|
||||
tmp = gdk_memory_texture_new_subtexture (memtex, 0, 0, tex_width, 1);
|
||||
gdk_texture_download (tmp, top_row, 4 * tex_width);
|
||||
g_object_unref (tmp);
|
||||
|
||||
bot_row = g_malloc (4 * tex_width);
|
||||
tmp = gdk_memory_texture_new_subtexture (memtex, 0, tex_height - 1, tex_width, 1);
|
||||
gdk_texture_download (tmp, bot_row, 4 * tex_width);
|
||||
g_object_unref (tmp);
|
||||
|
||||
left_row = g_malloc (4 * tex_height);
|
||||
tmp = gdk_memory_texture_new_subtexture (memtex, 0, 0, 1, tex_height);
|
||||
gdk_texture_download (tmp, left_row, 4);
|
||||
g_object_unref (tmp);
|
||||
|
||||
right_row = g_malloc (4 * tex_height);
|
||||
tmp = gdk_memory_texture_new_subtexture (memtex, tex_width - 1, 0, 1, tex_height);
|
||||
gdk_texture_download (tmp, right_row, 4);
|
||||
g_object_unref (tmp);
|
||||
|
||||
w = tex_width + 2 * extra_pixels;
|
||||
|
||||
data1 = g_malloc (4 * w * extra_pixels);
|
||||
data2 = g_malloc (4 * extra_pixels * tex_height);
|
||||
data3 = g_malloc (4 * extra_pixels * tex_height);
|
||||
data4 = g_malloc (4 * w * extra_pixels);
|
||||
|
||||
for (int i = 0; i < w; i++)
|
||||
{
|
||||
int ii = CLAMP (i, extra_pixels, (tex_width - 1) + extra_pixels) - extra_pixels;
|
||||
|
||||
for (int j = 0; j < extra_pixels; j++)
|
||||
{
|
||||
data1[(j * w + i) * 4] = top_row[ii * 4];
|
||||
data1[(j * w + i) * 4 + 1] = top_row[ii * 4 + 1];
|
||||
data1[(j * w + i) * 4 + 2] = top_row[ii * 4 + 2];
|
||||
data1[(j * w + i) * 4 + 3] = top_row[ii * 4 + 3];
|
||||
|
||||
data4[(j * w + i) * 4] = bot_row[ii * 4];
|
||||
data4[(j * w + i) * 4 + 1] = bot_row[ii * 4 + 1];
|
||||
data4[(j * w + i) * 4 + 2] = bot_row[ii * 4 + 2];
|
||||
data4[(j * w + i) * 4 + 3] = bot_row[ii * 4 + 3];
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < extra_pixels; i++)
|
||||
{
|
||||
for (int j = 0; j < tex_height; j++)
|
||||
{
|
||||
data2[(j * extra_pixels + i) * 4] = left_row[j * 4];
|
||||
data2[(j * extra_pixels + i) * 4 + 1] = left_row[j * 4 + 1];
|
||||
data2[(j * extra_pixels + i) * 4 + 2] = left_row[j * 4 + 2];
|
||||
data2[(j * extra_pixels + i) * 4 + 3] = left_row[j * 4 + 3];
|
||||
|
||||
data3[(j * extra_pixels + i) * 4] = right_row[j * 4];
|
||||
data3[(j * extra_pixels + i) * 4 + 1] = right_row[j * 4 + 1];
|
||||
data3[(j * extra_pixels + i) * 4 + 2] = right_row[j * 4 + 2];
|
||||
data3[(j * extra_pixels + i) * 4 + 3] = right_row[j * 4 + 3];
|
||||
}
|
||||
}
|
||||
|
||||
g_free (top_row);
|
||||
g_free (bot_row);
|
||||
g_free (left_row);
|
||||
g_free (right_row);
|
||||
|
||||
bytes = g_bytes_new_take (data1, 4 * w * extra_pixels);
|
||||
memtex1 = GDK_MEMORY_TEXTURE (gdk_memory_texture_new (w, extra_pixels, GDK_MEMORY_DEFAULT, bytes, 4 * w));
|
||||
g_bytes_unref (bytes);
|
||||
|
||||
bytes = g_bytes_new_take (data2, 4 * extra_pixels * tex_height);
|
||||
memtex2 = GDK_MEMORY_TEXTURE (gdk_memory_texture_new (extra_pixels, tex_height, GDK_MEMORY_DEFAULT, bytes, 4 * extra_pixels));
|
||||
g_bytes_unref (bytes);
|
||||
|
||||
bytes = g_bytes_new_take (data3, 4 * extra_pixels * tex_height);
|
||||
memtex3 = GDK_MEMORY_TEXTURE (gdk_memory_texture_new (extra_pixels, tex_height, GDK_MEMORY_DEFAULT, bytes, 4 * extra_pixels));
|
||||
g_bytes_unref (bytes);
|
||||
|
||||
bytes = g_bytes_new_take (data4, 4 * w * extra_pixels);
|
||||
memtex4 = GDK_MEMORY_TEXTURE (gdk_memory_texture_new (w, extra_pixels, GDK_MEMORY_DEFAULT, bytes, 4 * w));
|
||||
g_bytes_unref (bytes);
|
||||
}
|
||||
else
|
||||
extra_pixels = 0;
|
||||
|
||||
x = 0;
|
||||
for (guint col = 0; col < cols; col++)
|
||||
{
|
||||
int slice_width = col + 1 < cols ? tex_width / cols : tex_width - x;
|
||||
|
||||
y = 0;
|
||||
for (guint row = 0; row < rows; row++)
|
||||
{
|
||||
int slice_height = row + 1 < rows ? tex_height / rows : tex_height - y;
|
||||
int slice_index = (col * rows) + row;
|
||||
GdkTexture *subtex;
|
||||
guint texture_id;
|
||||
|
||||
subtex = gdk_memory_texture_new_subtexture (memtex,
|
||||
x, y,
|
||||
slice_width, slice_height);
|
||||
texture_id = gsk_gl_command_queue_upload_texture (self->command_queue, subtex);
|
||||
g_object_unref (subtex);
|
||||
if (ensure_mipmap)
|
||||
{
|
||||
GskGLTextureChunk chunks[5];
|
||||
unsigned int n_chunks = 0;
|
||||
|
||||
if (row == 0)
|
||||
{
|
||||
chunks[n_chunks].texture = gdk_memory_texture_new_subtexture (memtex1,
|
||||
x, 0,
|
||||
slice_width + 2 * extra_pixels, extra_pixels);
|
||||
chunks[n_chunks].x = 0;
|
||||
chunks[n_chunks].y = 0;
|
||||
n_chunks++;
|
||||
}
|
||||
|
||||
if (row == rows - 1)
|
||||
{
|
||||
chunks[n_chunks].texture = gdk_memory_texture_new_subtexture (memtex4,
|
||||
x, 0,
|
||||
slice_width + 2 * extra_pixels, extra_pixels);
|
||||
chunks[n_chunks].x = 0;
|
||||
chunks[n_chunks].y = slice_height + extra_pixels;
|
||||
n_chunks++;
|
||||
}
|
||||
|
||||
if (col == 0)
|
||||
{
|
||||
int yy = y - extra_pixels;
|
||||
int hh = slice_height + 2 * extra_pixels;
|
||||
int y0 = 0;
|
||||
|
||||
if (row == 0)
|
||||
{
|
||||
yy = 0;
|
||||
y0 = extra_pixels;
|
||||
hh -= extra_pixels;
|
||||
}
|
||||
if (row == rows - 1)
|
||||
{
|
||||
hh -= extra_pixels;
|
||||
}
|
||||
|
||||
chunks[n_chunks].texture = gdk_memory_texture_new_subtexture (memtex2,
|
||||
0, yy, extra_pixels, hh);
|
||||
chunks[n_chunks].x = 0;
|
||||
chunks[n_chunks].y = y0;
|
||||
n_chunks++;
|
||||
}
|
||||
|
||||
if (col == cols - 1)
|
||||
{
|
||||
int yy = y - extra_pixels;
|
||||
int hh = slice_height + 2 * extra_pixels;
|
||||
int y0 = 0;
|
||||
|
||||
if (row == 0)
|
||||
{
|
||||
yy = 0;
|
||||
y0 = extra_pixels;
|
||||
hh -= extra_pixels;
|
||||
}
|
||||
if (row == rows - 1)
|
||||
{
|
||||
hh -= extra_pixels;
|
||||
}
|
||||
|
||||
chunks[n_chunks].texture = gdk_memory_texture_new_subtexture (memtex3,
|
||||
0, yy, extra_pixels, hh);
|
||||
chunks[n_chunks].x = slice_width + extra_pixels;
|
||||
chunks[n_chunks].y = y0;
|
||||
n_chunks++;
|
||||
}
|
||||
|
||||
{
|
||||
int xx = x - extra_pixels;
|
||||
int yy = y - extra_pixels;
|
||||
int ww = slice_width + 2 * extra_pixels;
|
||||
int hh = slice_height + 2 * extra_pixels;
|
||||
int x0 = 0;
|
||||
int y0 = 0;
|
||||
if (col == 0)
|
||||
{
|
||||
xx = 0;
|
||||
ww -= extra_pixels;
|
||||
x0 = extra_pixels;
|
||||
}
|
||||
if (col == cols - 1)
|
||||
{
|
||||
ww -= extra_pixels;
|
||||
}
|
||||
if (row == 0)
|
||||
{
|
||||
yy = 0;
|
||||
hh -= extra_pixels;
|
||||
y0 = extra_pixels;
|
||||
}
|
||||
if (row == rows - 1)
|
||||
{
|
||||
hh -= extra_pixels;
|
||||
}
|
||||
|
||||
chunks[n_chunks].texture = gdk_memory_texture_new_subtexture (memtex, xx, yy, ww, hh);
|
||||
chunks[n_chunks].x = x0;
|
||||
chunks[n_chunks].y = y0;
|
||||
n_chunks++;
|
||||
}
|
||||
|
||||
texture_id = gsk_gl_command_queue_upload_texture_chunks (self->command_queue, n_chunks, chunks);
|
||||
|
||||
glBindTexture (GL_TEXTURE_2D, texture_id);
|
||||
glGenerateMipmap (GL_TEXTURE_2D);
|
||||
|
||||
for (unsigned int i = 0; i < n_chunks; i++)
|
||||
g_object_unref (chunks[i].texture);
|
||||
}
|
||||
else
|
||||
{
|
||||
GdkTexture *subtex;
|
||||
|
||||
subtex = gdk_memory_texture_new_subtexture (memtex, x, y, slice_width, slice_height);
|
||||
texture_id = gsk_gl_command_queue_upload_texture (self->command_queue, subtex);
|
||||
g_object_unref (subtex);
|
||||
}
|
||||
|
||||
slices[slice_index].rect.x = x;
|
||||
@ -1258,15 +1489,22 @@ gsk_gl_driver_add_texture_slices (GskGLDriver *self,
|
||||
slices[slice_index].rect.width = slice_width;
|
||||
slices[slice_index].rect.height = slice_height;
|
||||
slices[slice_index].texture_id = texture_id;
|
||||
slices[slice_index].area.x = extra_pixels / (float) (slice_width + 2 * extra_pixels);
|
||||
slices[slice_index].area.y = extra_pixels / (float) (slice_height + 2 * extra_pixels);
|
||||
slices[slice_index].area.x2 = (extra_pixels + slice_width) / (float) (slice_width + 2 * extra_pixels);
|
||||
slices[slice_index].area.y2 = (extra_pixels + slice_height) / (float) (slice_height + 2 * extra_pixels);
|
||||
|
||||
y += slice_height;
|
||||
}
|
||||
|
||||
y = 0;
|
||||
x += slice_width;
|
||||
}
|
||||
|
||||
g_object_unref (memtex);
|
||||
g_clear_object (&memtex1);
|
||||
g_clear_object (&memtex2);
|
||||
g_clear_object (&memtex3);
|
||||
g_clear_object (&memtex4);
|
||||
|
||||
/* Allocate one Texture for the entire thing. */
|
||||
t = gsk_gl_texture_new (0,
|
||||
|
@ -170,8 +170,6 @@ GskGLTexture * gsk_gl_driver_mark_texture_permanent (GskGLDriver *s
|
||||
void gsk_gl_driver_add_texture_slices (GskGLDriver *self,
|
||||
GdkTexture *texture,
|
||||
gboolean ensure_mipmap,
|
||||
guint min_cols,
|
||||
guint min_rows,
|
||||
GskGLTextureSlice **out_slices,
|
||||
guint *out_n_slices);
|
||||
GskGLProgram * gsk_gl_driver_lookup_shader (GskGLDriver *self,
|
||||
@ -224,8 +222,6 @@ static inline void
|
||||
gsk_gl_driver_slice_texture (GskGLDriver *self,
|
||||
GdkTexture *texture,
|
||||
gboolean ensure_mipmap,
|
||||
guint min_cols,
|
||||
guint min_rows,
|
||||
GskGLTextureSlice **out_slices,
|
||||
guint *out_n_slices)
|
||||
{
|
||||
@ -234,15 +230,14 @@ gsk_gl_driver_slice_texture (GskGLDriver *self,
|
||||
t = gdk_texture_get_render_data (texture, self);
|
||||
|
||||
if (t && t->slices &&
|
||||
(t->has_mipmap || !ensure_mipmap) &&
|
||||
min_cols == 0 && min_rows == 0)
|
||||
(t->has_mipmap || !ensure_mipmap))
|
||||
{
|
||||
*out_slices = t->slices;
|
||||
*out_n_slices = t->n_slices;
|
||||
return;
|
||||
}
|
||||
|
||||
gsk_gl_driver_add_texture_slices (self, texture, ensure_mipmap, min_cols, min_rows, out_slices, out_n_slices);
|
||||
gsk_gl_driver_add_texture_slices (self, texture, ensure_mipmap, out_slices, out_n_slices);
|
||||
}
|
||||
|
||||
G_END_DECLS
|
||||
|
@ -3538,9 +3538,12 @@ gsk_gl_render_job_visit_texture (GskGLRenderJob *job,
|
||||
const graphene_rect_t *bounds)
|
||||
{
|
||||
int max_texture_size = job->command_queue->max_texture_size;
|
||||
float scale_x = bounds->size.width / texture->width;
|
||||
float scale_y = bounds->size.height / texture->height;
|
||||
gboolean use_mipmaps;
|
||||
|
||||
use_mipmaps = job->scale_x < 0.5 || job->scale_y < 0.5;
|
||||
use_mipmaps = (scale_x * job->scale_x) < 0.5 ||
|
||||
(scale_y * job->scale_y) < 0.5;
|
||||
|
||||
if G_LIKELY (texture->width <= max_texture_size &&
|
||||
texture->height <= max_texture_size)
|
||||
@ -3567,21 +3570,17 @@ gsk_gl_render_job_visit_texture (GskGLRenderJob *job,
|
||||
{
|
||||
float min_x = job->offset_x + bounds->origin.x;
|
||||
float min_y = job->offset_y + bounds->origin.y;
|
||||
float max_x = min_x + bounds->size.width;
|
||||
float max_y = min_y + bounds->size.height;
|
||||
float scale_x = (max_x - min_x) / texture->width;
|
||||
float scale_y = (max_y - min_y) / texture->height;
|
||||
GskGLTextureSlice *slices = NULL;
|
||||
guint n_slices = 0;
|
||||
|
||||
gsk_gl_driver_slice_texture (job->driver, texture, use_mipmaps, 0, 0, &slices, &n_slices);
|
||||
gsk_gl_driver_slice_texture (job->driver, texture, use_mipmaps, &slices, &n_slices);
|
||||
|
||||
g_assert (slices != NULL);
|
||||
g_assert (n_slices > 0);
|
||||
|
||||
gsk_gl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, blit));
|
||||
|
||||
for (guint i = 0; i < n_slices; i ++)
|
||||
for (unsigned int i = 0; i < n_slices; i++)
|
||||
{
|
||||
const GskGLTextureSlice *slice = &slices[i];
|
||||
float x1, x2, y1, y2;
|
||||
@ -3603,7 +3602,8 @@ gsk_gl_render_job_visit_texture (GskGLRenderJob *job,
|
||||
|
||||
gsk_gl_render_job_draw_coords (job,
|
||||
x1, y1, x2, y2,
|
||||
0, 0, 1, 1,
|
||||
slice->area.x, slice->area.y,
|
||||
slice->area.x2, slice->area.y2,
|
||||
(guint16[]) { FP16_ZERO, FP16_ZERO, FP16_ZERO, FP16_ZERO });
|
||||
}
|
||||
|
||||
@ -3720,7 +3720,7 @@ gsk_gl_render_job_visit_texture_scale_node (GskGLRenderJob *job,
|
||||
GskGLTextureSlice *slices = NULL;
|
||||
guint n_slices = 0;
|
||||
|
||||
gsk_gl_driver_slice_texture (job->driver, texture, filter == GSK_SCALING_FILTER_TRILINEAR, 0, 0, &slices, &n_slices);
|
||||
gsk_gl_driver_slice_texture (job->driver, texture, filter == GSK_SCALING_FILTER_TRILINEAR, &slices, &n_slices);
|
||||
|
||||
gsk_gl_render_job_begin_draw (job, CHOOSE_PROGRAM (job, blit));
|
||||
|
||||
@ -3752,7 +3752,8 @@ gsk_gl_render_job_visit_texture_scale_node (GskGLRenderJob *job,
|
||||
slice_bounds.origin.y,
|
||||
slice_bounds.origin.x + slice_bounds.size.width,
|
||||
slice_bounds.origin.y + slice_bounds.size.height,
|
||||
0, 0, 1, 1,
|
||||
slice->area.x, slice->area.y,
|
||||
slice->area.x2, slice->area.y2,
|
||||
(guint16[]){ FP16_ZERO, FP16_ZERO, FP16_ZERO, FP16_ZERO } );
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,12 @@ G_BEGIN_DECLS
|
||||
struct _GskGLTextureSlice
|
||||
{
|
||||
cairo_rectangle_int_t rect;
|
||||
struct {
|
||||
float x;
|
||||
float y;
|
||||
float x2;
|
||||
float y2;
|
||||
} area;
|
||||
guint texture_id;
|
||||
};
|
||||
|
||||
|
335
testsuite/gsk/compare/big-checkerboard-scaled-down2.node
Normal file
335
testsuite/gsk/compare/big-checkerboard-scaled-down2.node
Normal file
@ -0,0 +1,335 @@
|
||||
/* Clip away problematic corners */
|
||||
clip {
|
||||
clip: 3 3 57 57;
|
||||
child: transform {
|
||||
transform: scale(0.042);
|
||||
child: texture {
|
||||
bounds: 0 0 1500 1500;
|
||||
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABdwAAAXcCAIAAAC3V9szAAAgAElEQVR4nOzbwQ0EMQgEweXyz3nu\
|
||||
MTkYS67+UDEgmO/7vu9L8n3fzDAzMzMzMzMz8wH/PkmSJEmSJJ0vSdczzMzMzMzMzMx8zC5lJEmS\
|
||||
JEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0ua\
|
||||
G/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZm\
|
||||
ZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEk\
|
||||
SZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1\
|
||||
DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzM\
|
||||
zMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmS\
|
||||
JElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu\
|
||||
+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZ\
|
||||
mZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIk\
|
||||
SZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdcz\
|
||||
zMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMz\
|
||||
H7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmS\
|
||||
JGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnh\
|
||||
n4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZm\
|
||||
Zn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIk\
|
||||
SZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8w\
|
||||
MzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8\
|
||||
zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmS\
|
||||
pIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/\
|
||||
KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ\
|
||||
+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIk\
|
||||
SZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPM\
|
||||
zMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mx\
|
||||
u5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmS\
|
||||
FpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6p\
|
||||
mJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbm\
|
||||
F+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIk\
|
||||
SdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMz\
|
||||
MzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfs\
|
||||
UkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJEla\
|
||||
aDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+Kdi\
|
||||
ZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlf\
|
||||
sEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIk\
|
||||
aaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzM\
|
||||
zMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NL\
|
||||
GUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh\
|
||||
6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZ\
|
||||
mZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7B\
|
||||
LmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKk\
|
||||
jZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMz\
|
||||
MzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5l\
|
||||
JEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWm\
|
||||
o0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZm\
|
||||
ZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7\
|
||||
lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2\
|
||||
StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzM\
|
||||
zMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SR\
|
||||
JEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqO\
|
||||
Lmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZ\
|
||||
mZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xS\
|
||||
RpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdoo\
|
||||
SdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMz\
|
||||
MzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaS\
|
||||
JEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6\
|
||||
pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZm\
|
||||
ZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZ\
|
||||
SZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMk\
|
||||
Xc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzM\
|
||||
zMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmS\
|
||||
JEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS\
|
||||
5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZ\
|
||||
mZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUk\
|
||||
SZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0\
|
||||
PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMz\
|
||||
M/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmS\
|
||||
JEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0ua\
|
||||
G/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZm\
|
||||
ZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEk\
|
||||
SZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1\
|
||||
DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzM\
|
||||
zMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmS\
|
||||
JElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu\
|
||||
+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZ\
|
||||
mZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIk\
|
||||
SZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdcz\
|
||||
zMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMz\
|
||||
H7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmS\
|
||||
JGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnh\
|
||||
n4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZm\
|
||||
Zn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIk\
|
||||
SZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8w\
|
||||
MzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8\
|
||||
zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmS\
|
||||
pIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/\
|
||||
KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ\
|
||||
+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIk\
|
||||
SZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPM\
|
||||
zMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mx\
|
||||
u5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmS\
|
||||
FpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6p\
|
||||
mJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbm\
|
||||
F+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIk\
|
||||
SdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMz\
|
||||
MzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfs\
|
||||
UkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJEla\
|
||||
aDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+Kdi\
|
||||
ZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlf\
|
||||
sEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIk\
|
||||
aaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzM\
|
||||
zMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NL\
|
||||
GUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh\
|
||||
6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZ\
|
||||
mZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7B\
|
||||
LmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKk\
|
||||
jZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMz\
|
||||
MzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5l\
|
||||
JEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWm\
|
||||
o0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZm\
|
||||
ZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7\
|
||||
lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2\
|
||||
StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzM\
|
||||
zMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SR\
|
||||
JEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqO\
|
||||
Lmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZ\
|
||||
mZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xS\
|
||||
RpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdoo\
|
||||
SdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMz\
|
||||
MzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaS\
|
||||
JEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6\
|
||||
pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZm\
|
||||
ZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZ\
|
||||
SZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMk\
|
||||
Xc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzM\
|
||||
zMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmS\
|
||||
JEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS\
|
||||
5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZ\
|
||||
mZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUk\
|
||||
SZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0\
|
||||
PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMz\
|
||||
M/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmS\
|
||||
JEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0ua\
|
||||
G/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZm\
|
||||
ZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEk\
|
||||
SZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1\
|
||||
DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzM\
|
||||
zMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmS\
|
||||
JElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu\
|
||||
+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZ\
|
||||
mZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIk\
|
||||
SZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdcz\
|
||||
zMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMz\
|
||||
H7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmS\
|
||||
JGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSSlK2m0AACAASURBVJIkaaMkXc8wMzMzMzMzM/Mxu5SR\
|
||||
JEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqO\
|
||||
Lmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZ\
|
||||
mZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xS\
|
||||
RpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdoo\
|
||||
SdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMz\
|
||||
MzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaS\
|
||||
JEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6\
|
||||
pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZm\
|
||||
ZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZ\
|
||||
SZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMk\
|
||||
Xc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzM\
|
||||
zMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmS\
|
||||
JEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS\
|
||||
5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZ\
|
||||
mZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUk\
|
||||
SZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0\
|
||||
PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMz\
|
||||
M/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmS\
|
||||
JEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0ua\
|
||||
G/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZm\
|
||||
ZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEk\
|
||||
SZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1\
|
||||
DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzM\
|
||||
zMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmS\
|
||||
JElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu\
|
||||
+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZ\
|
||||
mZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIk\
|
||||
SZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnhn4qZmZmZmZmZ+QW7lJEkSZIkSdooSdcz\
|
||||
zMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZmZn7BLmUkSZIkSZI2StL1DDMzMzMzMzMz\
|
||||
H7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIkSZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmS\
|
||||
JGmh6eiS5oZ/KmZmZmZmZmbmF+xSRpIkSZIkaaMkXc8wMzMzMzMzM/Mxu5SRJEmSJElaaDq6pLnh\
|
||||
n4qZmZmZmZmZ+QW7lJEkSZIkSdooSdczzMzMzMzMzMx8zC5lJEmSJEmSFpqOLmlu+KdiZmZmZmZm\
|
||||
Zn7BLmUkSZIkSZI2StL1DDMzMzMzMzMzH7NLGUmSJEmSpIWmo0uaG/6pmJmZmZmZmZlfsEsZSZIk\
|
||||
SZKkjZJ0PcPMzMzMzMzMzMfsUkaSJEmSJGmh6eiS5oZ/KmZmZmZm/rdvBzcAgDAMxMT+Q4dHdqBI\
|
||||
9X3wDFVgZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5\
|
||||
gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmS\
|
||||
pImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMz\
|
||||
MzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyW\
|
||||
MpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJA\
|
||||
p0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mY\
|
||||
mZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYN\
|
||||
tpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmS\
|
||||
JkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzM\
|
||||
zMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vK\
|
||||
SJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOd\
|
||||
Pj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2Jm\
|
||||
ZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfY\
|
||||
UkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEma\
|
||||
KEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMz\
|
||||
MzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkj\
|
||||
SZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT6\
|
||||
9Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZ\
|
||||
mZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBL\
|
||||
GUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmi\
|
||||
JD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzM\
|
||||
zMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwk\
|
||||
SZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnT\
|
||||
I80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZm\
|
||||
ZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1l\
|
||||
JEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS\
|
||||
9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMz\
|
||||
MzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIk\
|
||||
SZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+P\
|
||||
ND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZ\
|
||||
mZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSR\
|
||||
JEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS\
|
||||
8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzM\
|
||||
zMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIk\
|
||||
SZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S\
|
||||
/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZm\
|
||||
ZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaS\
|
||||
JEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnP\
|
||||
M8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMz\
|
||||
Mz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIk\
|
||||
SZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejz\
|
||||
w38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZ\
|
||||
mZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmS\
|
||||
JEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3P\
|
||||
MDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM\
|
||||
/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIk\
|
||||
SdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P\
|
||||
/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZm\
|
||||
ZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmS\
|
||||
JEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzD\
|
||||
zMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPz\
|
||||
M1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIk\
|
||||
SQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8\
|
||||
p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZ\
|
||||
mTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmS\
|
||||
JEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwz\
|
||||
MzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzP\
|
||||
bCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIk\
|
||||
DXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCf\
|
||||
ipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm\
|
||||
3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmS\
|
||||
JGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zM\
|
||||
zMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+z\
|
||||
pYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI0\
|
||||
0OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38q\
|
||||
ZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5\
|
||||
gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmS\
|
||||
pImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMz\
|
||||
MzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyW\
|
||||
MpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJA\
|
||||
p0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mY\
|
||||
mZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYN\
|
||||
tpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmS\
|
||||
JkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzM\
|
||||
zMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vK\
|
||||
SJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOd\
|
||||
Pj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2Jm\
|
||||
ZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfY\
|
||||
UkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEma\
|
||||
KEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMz\
|
||||
MzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkj\
|
||||
SZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT6\
|
||||
9Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZ\
|
||||
mZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBL\
|
||||
GUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmi\
|
||||
JD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzM\
|
||||
zMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwk\
|
||||
SZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnT\
|
||||
I80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZm\
|
||||
ZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1l\
|
||||
JEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS\
|
||||
9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMz\
|
||||
MzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIk\
|
||||
SZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+P\
|
||||
ND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZ\
|
||||
mZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSR\
|
||||
JEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS\
|
||||
8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzM\
|
||||
zMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIk\
|
||||
SZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S\
|
||||
/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZm\
|
||||
ZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaS\
|
||||
JEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnP\
|
||||
M8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMz\
|
||||
Mz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIk\
|
||||
SZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejz\
|
||||
w38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZ\
|
||||
mZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmS\
|
||||
JEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3P\
|
||||
MDMzMzMzMzPzM1vKSJIkSZIkDXT6/2TLPAAAB6JJREFU9Ejzw38qZmZmZmZmZuYNtpSRJEmSJEma\
|
||||
KEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMz\
|
||||
MzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkj\
|
||||
SZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT6\
|
||||
9Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZ\
|
||||
mZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBL\
|
||||
GUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmi\
|
||||
JD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzM\
|
||||
zMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwk\
|
||||
SZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnT\
|
||||
I80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZm\
|
||||
ZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1l\
|
||||
JEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS\
|
||||
9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMz\
|
||||
MzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIk\
|
||||
SZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+P\
|
||||
ND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZ\
|
||||
mZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSR\
|
||||
JEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS\
|
||||
8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzM\
|
||||
zMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIk\
|
||||
SZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S\
|
||||
/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZm\
|
||||
ZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaS\
|
||||
JEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnP\
|
||||
M8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMz\
|
||||
Mz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIk\
|
||||
SZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejz\
|
||||
w38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZ\
|
||||
mZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIkSdJAp0+PND/8p2JmZmZmZmZm3mBLGUmS\
|
||||
JEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3P\
|
||||
MDMzMzMzMzPzM1vKSJIkSZIkDXT69Ejzw38qZmZmZmZmZuYNtpSRJEmSJEmaKEnPM8zMzMzMzMzM\
|
||||
/MyWMpIkSZIkSQOdPj3S/PCfipmZmZmZmZl5gy1lJEmSJEmSJkrS8wwzMzMzMzMzMz+zpYwkSZIk\
|
||||
SdJAp0+PND/8p2JmZmZmZmZm3mBLGUmSJEmSpImS9DzDzMzMzMzMzMzPbCkjSZIkSZI00OnTI80P\
|
||||
/6mYmZmZmZmZmTfYUkaSJEmSJGmiJD3PMDMzMzMzMzPzM1vKSJIkSZIkDXQBAv0dBQosl+kAAAAA\
|
||||
SUVORK5CYII=\
|
||||
");
|
||||
}
|
||||
}
|
||||
}
|
BIN
testsuite/gsk/compare/big-checkerboard-scaled-down2.png
Normal file
BIN
testsuite/gsk/compare/big-checkerboard-scaled-down2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 152 B |
@ -13,6 +13,7 @@ compare_render_tests = [
|
||||
'big-checkerboard',
|
||||
'big-checkerboard-scaled-down',
|
||||
'big-checkerboard-scaled-down-nearest',
|
||||
'big-checkerboard-scaled-down2',
|
||||
'blend-difference',
|
||||
'blend-invisible-child',
|
||||
'blend-normal',
|
||||
|
Loading…
Reference in New Issue
Block a user