Fix places that ignore the COGL_TEXTURE_NO_AUTO_MIPMAP flag

Two of the meta texture constructors which take a flags parameter were
ignoring the COGL_TEXTURE_NO_AUTO_MIPMAP flag when creating an
underlying CoglTexture2D. These have now been fixed to call
cogl_primitive_texture_set_auto_mipmap after constructing the texture.

Reviewed-by: Robert Bragg <robert@linux.intel.com>
This commit is contained in:
Neil Roberts 2012-04-04 16:25:25 +01:00
parent 6197e3abf3
commit 4229d61d3b
2 changed files with 22 additions and 2 deletions

View File

@ -44,6 +44,7 @@
#include "cogl-spans.h" #include "cogl-spans.h"
#include "cogl-journal-private.h" #include "cogl-journal-private.h"
#include "cogl-pipeline-opengl-private.h" #include "cogl-pipeline-opengl-private.h"
#include "cogl-primitive-texture.h"
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
@ -881,6 +882,7 @@ _cogl_texture_2d_sliced_new_from_bitmap (CoglBitmap *bmp,
GLenum gl_type; GLenum gl_type;
int width, height; int width, height;
CoglContext *ctx; CoglContext *ctx;
int i;
_COGL_RETURN_VAL_IF_FAIL (cogl_is_bitmap (bmp), NULL); _COGL_RETURN_VAL_IF_FAIL (cogl_is_bitmap (bmp), NULL);
@ -921,6 +923,18 @@ _cogl_texture_2d_sliced_new_from_bitmap (CoglBitmap *bmp,
cogl_object_unref (dst_bmp); cogl_object_unref (dst_bmp);
if ((flags & COGL_TEXTURE_NO_AUTO_MIPMAP))
for (i = 0; i < tex_2ds->slice_textures->len; i++)
{
CoglPrimitiveTexture *slice_tex;
slice_tex = g_array_index (tex_2ds->slice_textures,
CoglPrimitiveTexture *,
i);
cogl_primitive_texture_set_auto_mipmap (slice_tex, FALSE);
}
return _cogl_texture_2d_sliced_handle_new (tex_2ds); return _cogl_texture_2d_sliced_handle_new (tex_2ds);
error: error:

View File

@ -315,9 +315,15 @@ cogl_texture_new_with_size (unsigned int width,
internal_format, internal_format,
NULL)); NULL));
/* If it fails resort to sliced textures */ if (tex)
if (tex == NULL)
{ {
gboolean auto_mipmap = !(flags & COGL_TEXTURE_NO_AUTO_MIPMAP);
cogl_primitive_texture_set_auto_mipmap (COGL_PRIMITIVE_TEXTURE (tex),
auto_mipmap);
}
else
{
/* If it fails resort to sliced textures */
int max_waste = flags & COGL_TEXTURE_NO_SLICING ? -1 : COGL_TEXTURE_MAX_WASTE; int max_waste = flags & COGL_TEXTURE_NO_SLICING ? -1 : COGL_TEXTURE_MAX_WASTE;
tex = COGL_TEXTURE (cogl_texture_2d_sliced_new_with_size (ctx, tex = COGL_TEXTURE (cogl_texture_2d_sliced_new_with_size (ctx,
width, width,