skia / external / github.com / KhronosGroup / OpenGL-Registry / 0bcb2eaac9355832181702e5efad2962db034fe0 / . / extensions / OES / OES_texture_npot.txt

Name | |

OES_texture_npot | |

Name Strings | |

GL_OES_texture_npot | |

Contact | |

Bruce Merry (bruce.merry at arm.com) | |

Contributors | |

Khronos OpenGL ES working group | |

Contributors to ARB_texture_non_power_of_two | |

Notice | |

Copyright (c) 2005-2013 The Khronos Group Inc. Copyright terms at | |

http://www.khronos.org/registry/speccopyright.html | |

Specification Update Policy | |

Khronos-approved extension specifications are updated in response to | |

issues and bugs prioritized by the Khronos OpenGL ES Working Group. For | |

extensions which have been promoted to a core Specification, fixes will | |

first appear in the latest version of that core Specification, and will | |

eventually be backported to the extension document. This policy is | |

described in more detail at | |

https://www.khronos.org/registry/OpenGL/docs/update_policy.php | |

IP Status | |

None. | |

Status | |

Ratified by the Khronos BOP, July 22, 2005. | |

Version | |

Last Modifed Date: 2011-03-07 | |

Author Revision: 3 | |

Number | |

OpenGL ES Extension #37 | |

Dependencies | |

OpenGL ES 1.0 or OpenGL ES 2.0 is required. This extension is | |

written against OpenGL ES 1.1.12 and OpenGL ES 2.0.25. | |

This extension interacts with OES_framebuffer_object, OES_texture_3D | |

and APPLE_texture_2D_limited_npot. | |

Overview | |

This extension adds support for the REPEAT and MIRRORED_REPEAT | |

texture wrap modes and the minification filters supported for | |

non-power of two 2D textures, cubemaps and for 3D textures, if | |

the OES_texture_3D extension is supported. | |

Section 3.8.2 of the OpenGL ES 2.0 specification describes | |

rules for sampling from an incomplete texture. There were specific | |

rules added for non-power of two textures i.e. if the texture wrap | |

mode is not CLAMP_TO_EDGE or minification filter is not NEAREST or | |

LINEAR and the texture is a non-power-of-two texture, then sampling | |

the texture will return (0, 0, 0, 1). | |

These rules are no longer applied by an implementation that supports | |

this extension. | |

Additions to Chapter 3 of the OpenGL ES 2.0 Full Specification | |

In section 3.7.1 (Texture Image Specification), remove the sentence | |

"If <level> is greater than zero, and either <width> or <height> | |

is not a power of two, the error INVALID_VALUE is generated." | |

In section 3.7.7 (Texture Minification), remove the paragraph | |

"If any dimension of any array in a mipmap is not a power of two | |

(e.g. if rounding down as described above is performed), then | |

the mipmap is described as a non-power-of-two texture. | |

Non-power-of-two textures have restrictions on the allowed | |

texture wrap modes and filters, as described in section 3.8.2." | |

Change the title of 3.7.10 (Texture Completeness and | |

Non-Power-Of-Two Textures) to "Texture Completeness". | |

In section 3.7.11 (Mipmap Generation), remove the sentence | |

"If either the width or height of the level zero array are not a | |

power or two, the error INVALID_OPERATION is generated." | |

In section 3.8.2 (Shader Execution), remove the bullet points | |

" | |

- A two-dimensional sampler is called, the corresponding texture | |

image is a non-power-of-two image (as described in the | |

Mipmapping discussion of section 3.7.7), and either the | |

texture wrap mode is not CLAMP_TO_EDGE, or the minification | |

filter is neither NEAREST nor LINEAR. | |

- A cube map sampler is called, any of the corresponding texture | |

images are non-power-of-two images, and either the texture | |

wrap mode is not CLAMP_TO_EDGE, or the minification filter | |

is neither NEAREST nor LINEAR. | |

" | |

Additions to Chapter 3 of the OpenGL ES 1.1.12 Full Specification | |

In section 3.7.1 (Texture Image Specification): | |

Replace the discussion of valid dimensions with | |

"If w_s and h_s are the specified image width and height, and if w_s | |

or h_s is less than zero, then the error INVALID_VALUE is | |

generated." | |

Replace the discussion of image decoding with: | |

"We shall refer to the decoded image as the texture array. A | |

texture array has width and height w_s and h_s as defined above." | |

Update Figure 3.8's caption: | |

"... This is a texture with w_t = 8 and h_t = 4. ..." | |

In section 3.7.7 (Texture Minification): | |

In the subsection "Scale Factor and Level of Detail"... | |

Replace the sentence defining the u and v functions with: | |

"Let u(x,y) = w_s * s(x,y) and v(x,y) = h_s * t(x,y), where w_s and | |

h_s are equal to the width and height of the image array whose level | |

is zero." | |

Replace 2^n and 2^m with w_s and h_s in Equations 3.16 and 3.17. | |

{ floor(u), s < 1 | |

i = { (3.16) | |

{ w_s - 1, s = 1 | |

{ floor(v), t < 1 | |

j = { (3.17) | |

{ h_s - 1, t = 1 | |

Replace 2^n and 2^m with w_s and h_s in the equations for computing i_0, | |

j_0, i_1, and j_1 used for LINEAR filtering. | |

{ floor(u - 1/2) mod w_s, TEXTURE_WRAP_S is REPEAT | |

i_0 = { | |

{ floor(u - 1/2), otherwise | |

{ floor(v - 1/2) mod h_s, TEXTURE_WRAP_T is REPEAT | |

j_0 = { | |

{ floor(v - 1/2), otherwise | |

{ (i_0 + 1) mod w_s, TEXTURE_WRAP_S is REPEAT | |

i_1 = { | |

{ i_0 + 1, otherwise | |

{ (j_0 + 1) mod h_s, TEXTURE_WRAP_T is REPEAT | |

j_1 = { | |

{ j_0 + 1, otherwise | |

In the subsection "Mipmapping", replace the description of the | |

number of sizes of image arrays with | |

"If the image array of level zero has dimensions w_t x h_t, then | |

there are floor(log2(max(w_t, h_t))) + 1 image arrays in the mipmap. | |

Each array subsequent to the level zero array has dimensions | |

max(1, floor(w_t/2^i)) x max(1, floor(h_t/2^i)) | |

until the last array is reached with dimension 1 x 1. | |

Interactions with OES_framebuffer_object | |

If OES_framebuffer_object is supported, then GenerateMipmapOES does | |

not generate an error if the base level is a non-power-of-two image. | |

Interactions with OES_texture_3D | |

If OES_texture_3D is supported, references to width and height | |

should be extended to refer to depth as appropriate, and mipmap | |

generation is permitted for non-power-of-two 3D textures. | |

Interactions with APPLE_texture_2D_limited_npot | |

This extension is a superset of the function in | |

APPLE_texture_2D_limited_npot. Implementations may choose to | |

advertise both extensions, but APPLE_texture_2D_limited_npot is not | |

required to implement this extension on OpenGL ES 1.x. | |

Issues | |

1) How does this extension interact with manual mipmap generation | |

(GenerateMipmap and GenerateMipmapOES)? | |

RESOLVED: These are supported for NPOT textures. | |

The initial version of this extension did not remove the error when | |

issuing these commands on an non-power-of-two texture, but multiple | |

vendors implemented support for it anyway. | |

2) How does this extension interact with automatic mipmap generation | |

in GL ES 1.1 (GENERATE_MIPMAP)? | |

RESOLVED: These are supported for NPOT textures. | |

3) How should this extension interact with | |

APPLE_texture_2D_limited_npot? | |

RESOLVED: it will be a superset, but will not require it. | |

4) How should this extension interact with OES_texture_3D? | |

RESOLVED: mipmap generation of NPOT 3D textures is supported. | |

OES_texture_3D already specifies that OES_texture_npot enables | |

support for mipmapped 3D textures, but it is unclear whether this | |

should also allow mipmap generation for NPOT 3D textures. | |

5) How should this extension interact with | |

OES_compressed_paletted_texture? | |

UNRESOLVED | |

Specifically, it's now possible for a row of texels to not be a | |

multiple of the unit size (bytes for PALETTE4_xxx, 32-bit words for | |

PALETTE8_xxx). Options seem to be | |

A) Pad each row to a multiple of the unit size. | |

B) Pad each image to a multiple of the unit size. | |

C) No padding - images can start in the middle of a unit. | |

New Tokens | |

None. | |

New Procedures and Functions | |

None. | |

Errors | |

None. | |

New State | |

None. | |

Revision History | |

3 2011-03-07 Bruce Merry Added issue 5 | |

2 2011-03-01 Bruce Merry Filled in body and issues | |

1 2005-07-06 Aaftab Munshi Created the extension |