diff --git a/cogl/cogl-types.h b/cogl/cogl-types.h index 54d6d5e2b..de8f962a4 100644 --- a/cogl/cogl-types.h +++ b/cogl/cogl-types.h @@ -219,7 +219,10 @@ typedef enum { /*< prefix=COGL_PIXEL_FORMAT >*/ /** * CoglFeatureFlags: * @COGL_FEATURE_TEXTURE_RECTANGLE: ARB_texture_rectangle support - * @COGL_FEATURE_TEXTURE_NPOT: ARB_texture_non_power_of_two support + * @COGL_FEATURE_TEXTURE_NPOT: Non power of two textures are supported + * by the hardware. This is a equivalent to the + * %COGL_FEATURE_TEXTURE_NPOT_BASIC, %COGL_FEATURE_TEXTURE_NPOT_MIPMAP + * and %COGL_FEATURE_TEXTURE_NPOT_REPEAT features combined. * @COGL_FEATURE_TEXTURE_YUV: ycbcr conversion support * @COGL_FEATURE_TEXTURE_READ_PIXELS: glReadPixels() support * @COGL_FEATURE_SHADERS_GLSL: GLSL support @@ -234,6 +237,17 @@ typedef enum { /*< prefix=COGL_PIXEL_FORMAT >*/ * %COGL_INDICES_TYPE_UNSIGNED_INT is supported in * cogl_vertex_buffer_indices_new(). * @COGL_FEATURE_DEPTH_RANGE: cogl_material_set_depth_range() support + * @COGL_FEATURE_TEXTURE_NPOT_BASIC: The hardware supports non power + * of two textures, but you also need to check the + * %COGL_FEATURE_TEXTURE_NPOT_MIPMAP and %COGL_FEATURE_TEXTURE_NPOT_REPEAT + * features to know if the hardware supports npot texture mipmaps + * or repeat modes other than + * %COGL_MATERIAL_WRAP_MODE_CLAMP_TO_EDGE respectively. + * @COGL_FEATURE_TEXTURE_NPOT_MIPMAP: Mipmapping is supported in + * conjuntion with non power of two textures. + * @COGL_FEATURE_TEXTURE_NPOT_REPEAT: Repeat modes other than + * %COGL_MATERIAL_WRAP_MODE_CLAMP_TO_EDGE are supported by the + * hardware. * * Flags for the supported features. * @@ -254,7 +268,10 @@ typedef enum COGL_FEATURE_VBOS = (1 << 11), COGL_FEATURE_PBOS = (1 << 12), COGL_FEATURE_UNSIGNED_INT_INDICES = (1 << 13), - COGL_FEATURE_DEPTH_RANGE = (1 << 14) + COGL_FEATURE_DEPTH_RANGE = (1 << 14), + COGL_FEATURE_TEXTURE_NPOT_BASIC = (1 << 15), + COGL_FEATURE_TEXTURE_NPOT_MIPMAP = (1 << 16), + COGL_FEATURE_TEXTURE_NPOT_REPEAT = (1 << 17) } CoglFeatureFlags; /** diff --git a/cogl/driver/gl/cogl.c b/cogl/driver/gl/cogl.c index fd37f6d02..17b2fb22b 100644 --- a/cogl/driver/gl/cogl.c +++ b/cogl/driver/gl/cogl.c @@ -199,7 +199,10 @@ _cogl_features_init (void) #ifdef HAVE_CLUTTER_OSX if (really_enable_npot ()) #endif - flags |= COGL_FEATURE_TEXTURE_NPOT; + flags |= COGL_FEATURE_TEXTURE_NPOT + | COGL_FEATURE_TEXTURE_NPOT_BASIC + | COGL_FEATURE_TEXTURE_NPOT_MIPMAP + | COGL_FEATURE_TEXTURE_NPOT_REPEAT; } #ifdef GL_YCBCR_MESA diff --git a/cogl/driver/gles/cogl-feature-functions.h b/cogl/driver/gles/cogl-feature-functions.h index 8aba5af34..9bdf8507e 100644 --- a/cogl/driver/gles/cogl-feature-functions.h +++ b/cogl/driver/gles/cogl-feature-functions.h @@ -80,3 +80,13 @@ COGL_FEATURE_BEGIN (element_index_uint, 255, 255, COGL_FEATURE_UNSIGNED_INT_INDICES, 0) COGL_FEATURE_END () + +COGL_FEATURE_BEGIN (texture_npot, 255, 255, + "OES\0", + "texture_npot\0", + COGL_FEATURE_TEXTURE_NPOT | + COGL_FEATURE_TEXTURE_NPOT_BASIC | + COGL_FEATURE_TEXTURE_NPOT_MIPMAP | + COGL_FEATURE_TEXTURE_NPOT_REPEAT, + 0) +COGL_FEATURE_END () diff --git a/cogl/driver/gles/cogl.c b/cogl/driver/gles/cogl.c index f25a5fa6c..bc716c6dc 100644 --- a/cogl/driver/gles/cogl.c +++ b/cogl/driver/gles/cogl.c @@ -100,6 +100,9 @@ _cogl_features_init (void) #ifdef HAVE_COGL_GLES2 flags |= COGL_FEATURE_SHADERS_GLSL | COGL_FEATURE_OFFSCREEN; + /* Note GLES 2 core doesn't support mipmaps for npot textures or + * repeat modes other than CLAMP_TO_EDGE. */ + flags |= COGL_FEATURE_TEXTURE_NPOT_BASIC; #endif flags |= COGL_FEATURE_VBOS;