[Cogl] [PATCH] Allow npot Texture2D creation with only basic npot support
Neil Roberts
neil at linux.intel.com
Tue Apr 24 10:39:49 PDT 2012
Robert Bragg <robert at sixbynine.org> writes:
> @@ -402,7 +411,9 @@ cogl_texture_new_from_bitmap (CoglBitmap *bitmap,
> return COGL_TEXTURE (atlas_tex);
>
> /* If that doesn't work try a fast path 2D texture */
> - if ((tex_2d = cogl_texture_2d_new_from_bitmap (bitmap,
> + if (cogl_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_NPOT_BASIC) &&
> + cogl_has_feature (ctx, COGL_FEATURE_ID_TEXTURE_NPOT_MIPMAP) &&
> + (tex_2d = cogl_texture_2d_new_from_bitmap (bitmap,
> internal_format,
> NULL)))
Should this have a check for whether the size of the texture is already
a power of two like cogl_texture_new_from_size has?
I think to make it fallback to software repeating we also need to modify
the _cogl_texture_2d_transform_quad_coords_to_gl function. Maybe you
could squash something like this in?
diff --git a/cogl/cogl-texture-2d.c b/cogl/cogl-texture-2d.c
index e7df732..9fcb38f 100644
--- a/cogl/cogl-texture-2d.c
+++ b/cogl/cogl-texture-2d.c
@@ -659,15 +659,17 @@ _cogl_texture_2d_transform_quad_coords_to_gl (CoglTexture *tex,
/* The texture coordinates map directly so we don't need to do
anything other than check for repeats */
- CoglBool need_repeat = FALSE;
int i;
for (i = 0; i < 4; i++)
if (coords[i] < 0.0f || coords[i] > 1.0f)
- need_repeat = TRUE;
+ /* Repeat is needed */
+ return (_cogl_texture_2d_can_hardware_repeat (tex) ?
+ COGL_TRANSFORM_HARDWARE_REPEAT :
+ COGL_TRANSFORM_SOFTWARE_REPEAT);
- return (need_repeat ? COGL_TRANSFORM_HARDWARE_REPEAT
- : COGL_TRANSFORM_NO_REPEAT);
+ /* No repeat is needed */
+ return COGL_TRANSFORM_NO_REPEAT;
}
static CoglBool
Otherwise looks good to me.
Reviewed-by: Neil Roberts <neil at linux.intel.com>
Regards,
- Neil
More information about the Cogl
mailing list