[gtk/wip/chergert/glproto: 323/526] check initial flag and count in setters




commit c7b1bf8fd0b9ebe64802114cedc98263fe71fe1b
Author: Christian Hergert <chergert redhat com>
Date:   Wed Jan 27 12:48:47 2021 -0800

    check initial flag and count in setters
    
    this helps to ensure we send initial values to the driver which could be
    important if something changes state outside of our frame driver.

 gsk/next/gskgluniformstate.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)
---
diff --git a/gsk/next/gskgluniformstate.c b/gsk/next/gskgluniformstate.c
index d0f558e10f..02de791d20 100644
--- a/gsk/next/gskgluniformstate.c
+++ b/gsk/next/gskgluniformstate.c
@@ -632,7 +632,7 @@ gsk_gl_uniform_state_set_color (GskGLUniformState *state,
       if (color == NULL)
         color = &transparent;
 
-      if (!gdk_rgba_equal (u, color))
+      if (info->initial || !gdk_rgba_equal (u, color))
         {
           REPLACE_UNIFORM (info, u, GSK_GL_UNIFORM_FORMAT_COLOR, 1);
           memcpy (u, color, sizeof *color);
@@ -653,10 +653,11 @@ gsk_gl_uniform_state_set1fv (GskGLUniformState *state,
 
   g_assert (state != NULL);
   g_assert (program > 0);
+  g_assert (count > 0);
 
   if ((u = get_uniform (state, program, GSK_GL_UNIFORM_FORMAT_1FV, count, location, &info)))
     {
-      gboolean changed = memcmp (u, value, sizeof (Uniform1f) * count) != 0;
+      gboolean changed = info->initial || memcmp (u, value, sizeof *u  * count) != 0;
 
       if (changed)
         {
@@ -679,10 +680,11 @@ gsk_gl_uniform_state_set2fv (GskGLUniformState *state,
 
   g_assert (state != NULL);
   g_assert (program > 0);
+  g_assert (count > 0);
 
   if ((u = get_uniform (state, program, GSK_GL_UNIFORM_FORMAT_2FV, count, location, &info)))
     {
-      gboolean changed = memcmp (u, value, sizeof (Uniform2f) * count) != 0;
+      gboolean changed = info->initial || memcmp (u, value, sizeof *u * count) != 0;
 
       if (changed)
         {
@@ -705,10 +707,11 @@ gsk_gl_uniform_state_set3fv (GskGLUniformState *state,
 
   g_assert (state != NULL);
   g_assert (program > 0);
+  g_assert (count > 0);
 
   if ((u = get_uniform (state, program, GSK_GL_UNIFORM_FORMAT_3FV, count, location, &info)))
     {
-      gboolean changed = memcmp (u, value, sizeof (Uniform3f) * count) != 0;
+      gboolean changed = info->initial || memcmp (u, value, sizeof *u * count) != 0;
 
       if (changed)
         {
@@ -731,10 +734,11 @@ gsk_gl_uniform_state_set4fv (GskGLUniformState *state,
 
   g_assert (state != NULL);
   g_assert (program > 0);
+  g_assert (count > 0);
 
   if ((u = get_uniform (state, program, GSK_GL_UNIFORM_FORMAT_4FV, count, location, &info)))
     {
-      gboolean changed = memcmp (u, value, sizeof (Uniform4f) * count) != 0;
+      gboolean changed = info->initial || memcmp (u, value, sizeof *u * count) != 0;
 
       if (changed)
         {


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