## Rectangle textures (non-normalized coordinates)

Rectangle textures (non-normalized coordinates) — Functions for creating and manipulating rectangle textures for use with non-normalized coordinates.

## Functions

CoglTextureRectangle * | cogl_texture_rectangle_new_with_size ()
CoglTextureRectangle * | cogl_texture_rectangle_new_from_bitmap ()
CoglBool | cogl_is_texture_rectangle ()

## Types and Values

| CoglTextureRectangle

## Description

These functions allow low-level "rectangle" textures to be allocated. These textures are never constrained to power-of-two sizes but they also don't support having a mipmap and can only be wrapped with `COGL_PIPELINE_WRAP_MODE_CLAMP_TO_EDGE`.

The most notable difference between rectangle textures and 2D textures is that rectangle textures are sampled using un-normalized texture coordinates, so instead of using coordinates (0,0) and (1,1) to map to the top-left and bottom right corners of the texture you would instead use (0,0) and (width,height).

The use of non-normalized coordinates can be particularly convenient when writing glsl shaders that use a texture as a lookup table since you don't need to upload separate uniforms to map normalized coordinates to texels.

If you want to sample from a rectangle texture from GLSL you should use the sampler2DRect sampler type.

Applications wanting to use CoglTextureRectangle should first check for the `COGL_FEATURE_ID_TEXTURE_RECTANGLE` feature using `cogl_has_feature()`.

## Functions

### cogl_texture_rectangle_new_with_size ()

    CoglTextureRectangle *
    cogl_texture_rectangle_new_with_size (CoglContext *ctx,
                                          int width,
                                          int height);

Creates a new CoglTextureRectangle texture with a given `width` , and `height` . This texture is a low-level texture that the GPU can sample from directly unlike high-level textures such as CoglTexture2DSliced and CoglAtlasTexture.

Unlike for CoglTexture2D textures, coordinates for CoglTextureRectangle textures should not be normalized. So instead of using the coordinate (1, 1) to sample the bottom right corner of a rectangle texture you would use (`width`, `height`) where `width` and `height` are the width and height of the texture.
If you want to sample from a rectangle texture from GLSL you should use the sampler2DRect sampler type.
Applications wanting to use CoglTextureRectangle should first check for the `COGL_FEATURE_ID_TEXTURE_RECTANGLE` feature using `cogl_has_feature()`.

The storage for the texture is not allocated before this function returns. You can call `cogl_texture_allocate()` to explicitly allocate the underlying storage or preferably let Cogl automatically allocate storage lazily when it may know more about how the texture is going to be used and can optimize how it is allocated.

Returns value: (transfer full): A pointer to a new CoglTextureRectangle object with no storage allocated yet.

#### Parameters

ctx | A CoglContext pointer |
width | The texture width to allocate |
height | The texture height to allocate |

Since: 1.10

Stability Level: Unstable

### cogl_texture_rectangle_new_from_bitmap ()

    CoglTextureRectangle *
    cogl_texture_rectangle_new_from_bitmap
                                   (CoglBitmap *bitmap);

Allocates a new CoglTextureRectangle texture which will be initialized with the pixel data from `bitmap` . This texture is a low-level texture that the GPU can sample from directly unlike high-level textures such as CoglTexture2DSliced and CoglAtlasTexture.

Unlike for CoglTexture2D textures, coordinates for CoglTextureRectangle textures should not be normalized. So instead of using the coordinate (1, 1) to sample the bottom right corner of a rectangle texture you would use (`width`, `height`) where `width` and `height` are the width and height of the texture.
If you want to sample from a rectangle texture from GLSL you should use the sampler2DRect sampler type.
Applications wanting to use CoglTextureRectangle should first check for the `COGL_FEATURE_ID_TEXTURE_RECTANGLE` feature using `cogl_has_feature()`.

The storage for the texture is not allocated before this function returns. You can call `cogl_texture_allocate()` to explicitly allocate the underlying storage or preferably let Cogl automatically allocate storage lazily when it may know more about how the texture is going to be used and can optimize how it is allocated.

#### Parameters

bitmap | A CoglBitmap |

#### Returns

A pointer to a new CoglTextureRectangle texture.

[transfer full]

Since: 2.0

Stability Level: Unstable

### cogl_is_texture_rectangle ()

    CoglBool
    cogl_is_texture_rectangle (void *object);

Gets whether the given object references an existing CoglTextureRectangle object.

#### Parameters

object | A CoglObject |

#### Returns

`TRUE` if the object references a CoglTextureRectangle, `FALSE` otherwise.

## Types and Values

### CoglTextureRectangle

    typedef struct _CoglTextureRectangle CoglTextureRectangle;