## Name

glFramebufferTexture — attach a level of a texture object as a logical buffer of a framebuffer object

## C Specification

`void glFramebufferTexture(` | GLenum target,
| GLenum attachment,
| GLuint texture,
| GLint level`)`;

`void glFramebufferTexture1D(` | GLenum target,
| GLenum attachment,
| GLenum textarget,
| GLuint texture,
| GLint level`)`;

`void glFramebufferTexture2D(` | GLenum target,
| GLenum attachment,
| GLenum textarget,
| GLuint texture,
| GLint level`)`;

`void glFramebufferTexture3D(` | GLenum target,
| GLenum attachment,
| GLenum textarget,
| GLuint texture,
| GLint level,
| GLint layer`)`;

`void glNamedFramebufferTexture(` | GLuint framebuffer,
| GLenum attachment,
| GLuint texture,
| GLint level`)`;

## Parameters

`target`

  Specifies the target to which the framebuffer is bound for all commands except `glNamedFramebufferTexture`.

`framebuffer`

  Specifies the name of the framebuffer object for `glNamedFramebufferTexture`.

`attachment`

  Specifies the attachment point of the framebuffer.

`textarget`

  For `glFramebufferTexture1D`, `glFramebufferTexture2D` and `glFramebufferTexture3D`, specifies what type of texture is expected in the `texture` parameter, or for cube map textures, which face is to be attached.

`texture`

  Specifies the name of an existing texture object to attach.

`level`

  Specifies the mipmap level of the texture object to attach.

## Description

These commands attach a selected mipmap level or image of a texture object as one of the logical buffers of the specified framebuffer object. Textures cannot be attached to the default draw and read framebuffer, so they are not valid targets of these commands.

For all commands except `glNamedFramebufferTexture`, the framebuffer object is that bound to `target`, which must be `GL_DRAW_FRAMEBUFFER`, `GL_READ_FRAMEBUFFER`, or `GL_FRAMEBUFFER`. `GL_FRAMEBUFFER` is equivalent to `GL_DRAW_FRAMEBUFFER`.

For `glNamedFramebufferTexture`, `framebuffer` is the name of the framebuffer object.

`attachment` specifies the logical attachment of the framebuffer and must be `GL_COLOR_ATTACHMENT` i, `GL_DEPTH_ATTACHMENT`, `GL_STENCIL_ATTACHMENT` or `GL_DEPTH_STENCIL_ATTACHMENT`. i in `GL_COLOR_ATTACHMENT` i may range from zero to the value of `GL_MAX_COLOR_ATTACHMENTS` minus one. Attaching a level of a texture to `GL_DEPTH_STENCIL_ATTACHMENT` is equivalent to attaching that level to both the `GL_DEPTH_ATTACHMENT` and the `GL_STENCIL_ATTACHMENT` attachment points simultaneously.

For `glFramebufferTexture1D`, `glFramebufferTexture2D` and `glFramebufferTexture3D`, `textarget` specifies what type of texture is named by `texture`, and for cube map textures, specifies the face that is to be attached. If `texture` is not zero, it must be the name of an existing texture object with effective target `textarget` unless it is a cube map texture, in which case `textarget` must be `GL_TEXTURE_CUBE_MAP_POSITIVE_X` `GL_TEXTURE_CUBE_MAP_NEGATIVE_X`, `GL_TEXTURE_CUBE_MAP_POSITIVE_Y`, `GL_TEXTURE_CUBE_MAP_NEGATIVE_Y`, `GL_TEXTURE_CUBE_MAP_POSITIVE_Z`, or `GL_TEXTURE_CUBE_MAP_NEGATIVE_Z`.

If `texture` is non-zero, the specified `level` of the texture object named `texture` is attached to the framebfufer attachment point named by `attachment`. For `glFramebufferTexture1D`, `glFramebufferTexture2D`, and `glFramebufferTexture3D`, `texture` must be zero or the name of an existing texture with an effective target of `textarget`, or `texture` must be the name of an existing cube-map texture and `textarget` must be one of `GL_TEXTURE_CUBE_MAP_POSITIVE_X`, `GL_TEXTURE_CUBE_MAP_POSITIVE_Y`, `GL_TEXTURE_CUBE_MAP_POSITIVE_Z`, `GL_TEXTURE_CUBE_MAP_NEGATIVE_X`, `GL_TEXTURE_CUBE_MAP_NEGATIVE_Y`, or `GL_TEXTURE_CUBE_MAP_NEGATIVE_Z`.

If `textarget` is `GL_TEXTURE_RECTANGLE`, `GL_TEXTURE_2D_MULTISAMPLE`, or `GL_TEXTURE_2D_MULTISAMPLE_ARRAY`, then `level` must be zero.

If `textarget` is `GL_TEXTURE_3D`, then `level` must be greater than or equal to zero and less than or equal to $log_2$ of the value of `GL_MAX_3D_TEXTURE_SIZE`.

If `textarget` is one of `GL_TEXTURE_CUBE_MAP_POSITIVE_X`, `GL_TEXTURE_CUBE_MAP_POSITIVE_Y`, `GL_TEXTURE_CUBE_MAP_POSITIVE_Z`, `GL_TEXTURE_CUBE_MAP_NEGATIVE_X`, `GL_TEXTURE_CUBE_MAP_NEGATIVE_Y`, or `GL_TEXTURE_CUBE_MAP_NEGATIVE_Z`, then `level` must be greater than or equal to zero and less than or equal to $log_2$ of the value of `GL_MAX_CUBE_MAP_TEXTURE_SIZE`.

For all other values of `textarget`, `level` must be greater than or equal to zero and less than or equal to $log_2$ of the value of `GL_MAX_TEXTURE_SIZE`.

`layer` specifies the layer of a 2-dimensional image within a 3-dimensional texture.

For `glFramebufferTexture1D`, if `texture` is not zero, then `textarget` must be `GL_TEXTURE_1D`. For `glFramebufferTexture2D`, if `texture` is not zero, `textarget` must be one of `GL_TEXTURE_2D`, `GL_TEXTURE_RECTANGLE`, `GL_TEXTURE_CUBE_MAP_POSITIVE_X`, `GL_TEXTURE_CUBE_MAP_POSITIVE_Y`, `GL_TEXTURE_CUBE_MAP_POSITIVE_Z`, `GL_TEXTURE_CUBE_MAP_NEGATIVE_X`, `GL_TEXTURE_CUBE_MAP_NEGATIVE_Y`, `GL_TEXTURE_CUBE_MAP_NEGATIVE_Z`, or `GL_TEXTURE_2D_MULTISAMPLE`. For `glFramebufferTexture3D`, if `texture` is not zero, then `textarget` must be `GL_TEXTURE_3D`.

For `glFramebufferTexture` and `glNamedFramebufferTexture`, if `texture` is the name of a three-dimensional, cube map array, cube map, one- or two-dimensional array, or two-dimensional multisample array texture, the specified texture level is an array of images, and the framebuffer attachment is considered to be layered.

## Errors

`GL_INVALID_ENUM` is generated by all commands accepting a `target` parameter if it is not one of the accepted framebuffer targets.

`GL_INVALID_OPERATION` is generated by all commands accepting a `target` parameter if zero is bound to that target.

`GL_INVALID_OPERATION` is generated by `glNamedFramebufferTexture` if `framebuffer` is not the name of an existing framebuffer object.

`GL_INVALID_ENUM` is generated if `attachment` is not one of the accepted attachment points.

`GL_INVALID_VALUE` is generated if `texture` is not zero or the name of an existing texture object.

`GL_INVALID_VALUE` is generated if `texture` is not zero and `level` is not a supported texture level for `texture`.

`GL_INVALID_VALUE` is generated by `glFramebufferTexture3D` if `texture` is not zero and `layer` is larger than the value of `GL_MAX_3D_TEXTURE_SIZE` minus one.

`GL_INVALID_OPERATION` is generated by all commands accepting a `textarget` parameter if `texture` is not zero, and `textarget` and the effective target of `texture` are not compatible.

`GL_INVALID_OPERATION` is generated by if `texture` is a buffer texture.

## Version Support

| OpenGL Version
--- | ---
Function / Feature Name | 2.0 | 2.1 | 3.0 | 3.1 | 3.2 | 3.3 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5
`glFramebufferTexture` | - | - | - | - | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔
`glFramebufferTexture1D` | - | - | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔
`glFramebufferTexture2D` | - | - | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔
`glFramebufferTexture3D` | - | - | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔
`glNamedFramebufferTexture` | - | - | - | - | - | - | - | - | - | - | - | ✔

## See Also

glGenFramebuffers, glBindFramebuffer, glGenRenderbuffers, glFramebufferTexture, glFramebufferTexture1D, glFramebufferTexture2D, glFramebufferTexture3D

## Copyright

Copyright © 2010-2014 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.