From 9611f33dd648fe21a9f59dc7ee910bc5ee27d3d1 Mon Sep 17 00:00:00 2001 From: Robert Bragg Date: Mon, 16 Mar 2009 14:58:00 +0000 Subject: [PATCH] [cogl] Don't endlessly print the same warning regarding layer fallbacks There are various constraints for when we can support multi-texturing and when they can't be met we try and print a clear warning explaining why the operation isn't supported, but we shouldn't endlessly repeat the warning for every primitive of every frame. This patch fixes that. --- gl/cogl-texture.c | 94 +++++++++++++++++++++++++++------------------ gles/cogl-texture.c | 90 +++++++++++++++++++++++++------------------ 2 files changed, 109 insertions(+), 75 deletions(-) diff --git a/gl/cogl-texture.c b/gl/cogl-texture.c index 51d3ebf61..044badb2d 100644 --- a/gl/cogl-texture.c +++ b/gl/cogl-texture.c @@ -2490,24 +2490,30 @@ _cogl_multitexture_unsliced_quad (float x_1, { if (n_layers > 1) { - g_warning ("Skipping layers 1..n of your material since the " - "first layer has waste and you supplied texture " - "coordinates outside the range [0,1]. We don't " - "currently support any multi-texturing using " - "textures with waste when repeating is " - "necissary so we are falling back to sliced " - "textures assuming layer 0 is the most " - "important one keep"); + static gboolean warning_seen = FALSE; + if (!warning_seen) + g_warning ("Skipping layers 1..n of your material since " + "the first layer has waste and you supplied " + "texture coordinates outside the range [0,1]. " + "We don't currently support any " + "multi-texturing using textures with waste " + "when repeating is necissary so we are " + "falling back to sliced textures assuming " + "layer 0 is the most important one keep"); + warning_seen = TRUE; } return FALSE; } else { - g_warning ("Skipping layer %d of your material " - "consisting of a texture with waste since " - "you have supplied texture coords outside " - "the range [0,1] (unsupported when " - "multi-texturing)", i); + static gboolean warning_seen = FALSE; + if (!warning_seen) + g_warning ("Skipping layer %d of your material " + "consisting of a texture with waste since " + "you have supplied texture coords outside " + "the range [0,1] (unsupported when " + "multi-texturing)", i); + warning_seen = TRUE; /* NB: marking for fallback will replace the layer with * a default transparent texture */ @@ -2652,19 +2658,25 @@ _cogl_rectangles_with_multitexture_coords ( all_use_sliced_quad_fallback = TRUE; if (tmp->next) { - g_warning ("Skipping layers 1..n of your material since the " - "first layer is sliced. We don't currently " - "support any multi-texturing with sliced " - "textures but assume layer 0 is the most " - "important to keep"); + static gboolean warning_seen = FALSE; + if (!warning_seen) + g_warning ("Skipping layers 1..n of your material since " + "the first layer is sliced. We don't currently " + "support any multi-texturing with sliced " + "textures but assume layer 0 is the most " + "important to keep"); + warning_seen = TRUE; } break; } else { - g_warning ("Skipping layer %d of your material consisting of a " - "sliced texture (unsuported for multi texturing)", - i); + static gboolean warning_seen = FALSE; + if (!warning_seen) + g_warning ("Skipping layer %d of your material consisting of " + "a sliced texture (unsuported for multi texturing)", + i); + warning_seen = TRUE; /* NB: marking for fallback will replace the layer with * a default transparent texture */ @@ -2680,10 +2692,13 @@ _cogl_rectangles_with_multitexture_coords ( if (flags & COGL_MATERIAL_LAYER_FLAG_HAS_USER_MATRIX && _cogl_texture_span_has_waste (texture, 0, 0)) { - g_warning ("Skipping layer %d of your material consisting of a " - "texture with waste since you have supplied a custom " - "texture matrix and the result may try to sample from " - "the waste area of your texture.", i); + static gboolean warning_seen = FALSE; + if (!warning_seen) + g_warning ("Skipping layer %d of your material consisting of a " + "texture with waste since you have supplied a custom " + "texture matrix and the result may try to sample from " + "the waste area of your texture.", i); + warning_seen = TRUE; /* NB: marking for fallback will replace the layer with * a default transparent texture */ @@ -3029,23 +3044,23 @@ cogl_polygon (CoglTextureVertex *vertices, { #if defined (HAVE_COGL_GLES) || defined (HAVE_COGL_GLES2) { - static gboolean shown_gles_slicing_warning = FALSE; - if (!shown_gles_slicing_warning) + static gboolean warning_seen = FALSE; + if (!warning_seen) g_warning ("cogl_polygon does not work for sliced textures " "on GL ES"); - shown_gles_slicing_warning = TRUE; + warning_seen = TRUE; return; } #endif if (n_layers > 1) { - static gboolean shown_slicing_warning = FALSE; - if (!shown_slicing_warning) + static gboolean warning_seen = FALSE; + if (!warning_seen) { g_warning ("Disabling layers 1..n since multi-texturing with " "cogl_polygon isn't supported when using sliced " "textures\n"); - shown_slicing_warning = TRUE; + warning_seen = TRUE; } } use_sliced_polygon_fallback = TRUE; @@ -3053,13 +3068,13 @@ cogl_polygon (CoglTextureVertex *vertices, if (tex->min_filter != GL_NEAREST || tex->mag_filter != GL_NEAREST) { - static gboolean shown_filter_warning = FALSE; - if (!shown_filter_warning) + static gboolean warning_seen = FALSE; + if (!warning_seen) { g_warning ("cogl_texture_polygon does not work for sliced textures " "when the minification and magnification filters are not " "CGL_NEAREST"); - shown_filter_warning = TRUE; + warning_seen = TRUE; } return; } @@ -3076,10 +3091,13 @@ cogl_polygon (CoglTextureVertex *vertices, if (cogl_texture_is_sliced (tex_handle)) { - g_warning ("Disabling layer %d of the current source material, " - "because texturing with the vertex buffer API is not " - "currently supported using sliced textures, or textures " - "with waste\n", i); + static gboolean warning_seen = FALSE; + if (!warning_seen) + g_warning ("Disabling layer %d of the current source material, " + "because texturing with the vertex buffer API is not " + "currently supported using sliced textures, or " + "textures with waste\n", i); + warning_seen = TRUE; fallback_mask |= (1 << i); continue; diff --git a/gles/cogl-texture.c b/gles/cogl-texture.c index 945a101b8..719975c2c 100644 --- a/gles/cogl-texture.c +++ b/gles/cogl-texture.c @@ -2594,24 +2594,30 @@ _cogl_multitexture_unsliced_quad (float x_1, { if (n_layers > 1) { - g_warning ("Skipping layers 1..n of your material since the " - "first layer has waste and you supplied texture " - "coordinates outside the range [0,1]. We don't " - "currently support any multi-texturing using " - "textures with waste when repeating is " - "necissary so we are falling back to sliced " - "textures assuming layer 0 is the most " - "important one keep"); + static gboolean warning_seen = FALSE; + if (!warning_seen) + g_warning ("Skipping layers 1..n of your material since " + "the first layer has waste and you supplied " + "texture coordinates outside the range [0,1]. " + "We don't currently support any " + "multi-texturing using textures with waste " + "when repeating is necissary so we are " + "falling back to sliced textures assuming " + "layer 0 is the most important one keep"); + warning_seen = TRUE; } return FALSE; } else { - g_warning ("Skipping layer %d of your material " - "consisting of a texture with waste since " - "you have supplied texture coords outside " - "the range [0,1] (unsupported when " - "multi-texturing)", i); + static gboolean warning_seen = FALSE; + if (!warning_seen) + g_warning ("Skipping layer %d of your material " + "consisting of a texture with waste since " + "you have supplied texture coords outside " + "the range [0,1] (unsupported when " + "multi-texturing)", i); + warning_seen = TRUE; /* NB: marking for fallback will replace the layer with * a default transparent texture */ @@ -2747,19 +2753,25 @@ _cogl_rectangles_with_multitexture_coords ( all_use_sliced_quad_fallback = TRUE; if (tmp->next) { - g_warning ("Skipping layers 1..n of your material since the " - "first layer is sliced. We don't currently " - "support any multi-texturing with sliced " - "textures but assume layer 0 is the most " - "important to keep"); + static gboolean warning_seen = FALSE; + if (!warning_seen) + g_warning ("Skipping layers 1..n of your material since " + "the first layer is sliced. We don't currently " + "support any multi-texturing with sliced " + "textures but assume layer 0 is the most " + "important to keep"); + warning_seen = TRUE; } break; } else { - g_warning ("Skipping layer %d of your material consisting of a " - "sliced texture (unsuported for multi texturing)", - i); + static gboolean warning_seen = FALSE; + if (!warning_seen) + g_warning ("Skipping layer %d of your material consisting of " + "a sliced texture (unsuported for multi texturing)", + i); + warning_seen = TRUE; /* NB: marking for fallback will replace the layer with * a default transparent texture */ @@ -2775,13 +2787,14 @@ _cogl_rectangles_with_multitexture_coords ( if (flags & COGL_MATERIAL_LAYER_FLAG_HAS_USER_MATRIX && _cogl_texture_span_has_waste (texture, 0, 0)) { - static gboolean shown_warning = FALSE; - if (!shown_warning) + static gboolean warning_seen = FALSE; + if (!warning_seen) g_warning ("Skipping layer %d of your material consisting of a " "texture with waste since you have supplied a custom " "texture matrix and the result may try to sample from " "the waste area of your texture.", i); - shown_warning = TRUE; + warning_seen = TRUE; + /* NB: marking for fallback will replace the layer with * a default transparent texture */ fallback_mask |= (1 << i); @@ -3112,23 +3125,23 @@ cogl_polygon (CoglTextureVertex *vertices, { #if defined (HAVE_COGL_GLES) || defined (HAVE_COGL_GLES2) { - static gboolean shown_gles_slicing_warning = FALSE; - if (!shown_gles_slicing_warning) + static gboolean warning_seen = FALSE; + if (!warning_seen) g_warning ("cogl_polygon does not work for sliced textures " "on GL ES"); - shown_gles_slicing_warning = TRUE; + warning_seen = TRUE; return; } #endif if (n_layers > 1) { - static gboolean shown_slicing_warning = FALSE; - if (!shown_slicing_warning) + static gboolean warning_seen = FALSE; + if (!warning_seen) { g_warning ("Disabling layers 1..n since multi-texturing with " "cogl_polygon isn't supported when using sliced " "textures\n"); - shown_slicing_warning = TRUE; + warning_seen = TRUE; } } use_sliced_polygon_fallback = TRUE; @@ -3136,13 +3149,13 @@ cogl_polygon (CoglTextureVertex *vertices, if (tex->min_filter != GL_NEAREST || tex->mag_filter != GL_NEAREST) { - static gboolean shown_filter_warning = FALSE; - if (!shown_filter_warning) + static gboolean warning_seen = FALSE; + if (!warning_seen) { g_warning ("cogl_texture_polygon does not work for sliced textures " "when the minification and magnification filters are not " "CGL_NEAREST"); - shown_filter_warning = TRUE; + warning_seen = TRUE; } return; } @@ -3159,10 +3172,13 @@ cogl_polygon (CoglTextureVertex *vertices, if (cogl_texture_is_sliced (tex_handle)) { - g_warning ("Disabling layer %d of the current source material, " - "because texturing with the vertex buffer API is not " - "currently supported using sliced textures, or textures " - "with waste\n", i); + static gboolean warning_seen = FALSE; + if (!warning_seen) + g_warning ("Disabling layer %d of the current source material, " + "because texturing with the vertex buffer API is not " + "currently supported using sliced textures, or " + "textures with waste\n", i); + warning_seen = TRUE; fallback_mask |= (1 << i); continue;