15bd8deadSopenharmony_ciName 25bd8deadSopenharmony_ci 35bd8deadSopenharmony_ci ARB_texture_storage 45bd8deadSopenharmony_ci 55bd8deadSopenharmony_ciName Strings 65bd8deadSopenharmony_ci 75bd8deadSopenharmony_ci GL_ARB_texture_storage 85bd8deadSopenharmony_ci 95bd8deadSopenharmony_ciContact 105bd8deadSopenharmony_ci 115bd8deadSopenharmony_ci Bruce Merry (bmerry 'at' gmail.com) 125bd8deadSopenharmony_ci Ian Romanick, Intel (ian.d.romanick 'at' intel.com) 135bd8deadSopenharmony_ci 145bd8deadSopenharmony_ciContributors 155bd8deadSopenharmony_ci 165bd8deadSopenharmony_ci Jeremy Sandmel, Apple 175bd8deadSopenharmony_ci Bruce Merry, ARM 185bd8deadSopenharmony_ci Tom Olson, ARM 195bd8deadSopenharmony_ci Benji Bowman, Imagination Technologies 205bd8deadSopenharmony_ci Ian Romanick, Intel 215bd8deadSopenharmony_ci Jeff Bolz, NVIDIA 225bd8deadSopenharmony_ci Pat Brown, NVIDIA 235bd8deadSopenharmony_ci Maurice Ribble, Qualcomm 245bd8deadSopenharmony_ci Lingjun Chen, Qualcomm 255bd8deadSopenharmony_ci Daniel Koch, Transgaming Inc 265bd8deadSopenharmony_ci Mark Kilgard, NVIDIA 275bd8deadSopenharmony_ci 285bd8deadSopenharmony_ciNotice 295bd8deadSopenharmony_ci 305bd8deadSopenharmony_ci Copyright (c) 2011-2013 The Khronos Group Inc. Copyright terms at 315bd8deadSopenharmony_ci http://www.khronos.org/registry/speccopyright.html 325bd8deadSopenharmony_ci 335bd8deadSopenharmony_ciSpecification Update Policy 345bd8deadSopenharmony_ci 355bd8deadSopenharmony_ci Khronos-approved extension specifications are updated in response to 365bd8deadSopenharmony_ci issues and bugs prioritized by the Khronos OpenGL Working Group. For 375bd8deadSopenharmony_ci extensions which have been promoted to a core Specification, fixes will 385bd8deadSopenharmony_ci first appear in the latest version of that core Specification, and will 395bd8deadSopenharmony_ci eventually be backported to the extension document. This policy is 405bd8deadSopenharmony_ci described in more detail at 415bd8deadSopenharmony_ci https://www.khronos.org/registry/OpenGL/docs/update_policy.php 425bd8deadSopenharmony_ci 435bd8deadSopenharmony_ciStatus 445bd8deadSopenharmony_ci 455bd8deadSopenharmony_ci Complete. Approved by the ARB on 2011/06/20. 465bd8deadSopenharmony_ci Approved by the Khronos Promoters on 2011/07/29. 475bd8deadSopenharmony_ci 485bd8deadSopenharmony_ciVersion 495bd8deadSopenharmony_ci 505bd8deadSopenharmony_ci Last Modified Date: August 7, 2013 515bd8deadSopenharmony_ci Author Revision: 26 525bd8deadSopenharmony_ci 535bd8deadSopenharmony_ciNumber 545bd8deadSopenharmony_ci 555bd8deadSopenharmony_ci ARB Extension #117 565bd8deadSopenharmony_ci 575bd8deadSopenharmony_ciDependencies 585bd8deadSopenharmony_ci 595bd8deadSopenharmony_ci OpenGL ES 1.0, OpenGL ES 2.0 or OpenGL 1.2 is required. 605bd8deadSopenharmony_ci 615bd8deadSopenharmony_ci OES_texture_npot, OES_texture_cube_map, OES_texture_3D, 625bd8deadSopenharmony_ci OES_depth_texture, OES_packed_depth_stencil, 635bd8deadSopenharmony_ci OES_compressed_paletted_texture, EXT_texture_type_2_10_10_10_REV, 645bd8deadSopenharmony_ci EXT_texture3D, OES_texture_npot, APPLE_texture_2D_limited_npot, 655bd8deadSopenharmony_ci ARB_texture_cube_map, ARB_texture_cube_map_array, 665bd8deadSopenharmony_ci ARB_texture_rectangle, SGIS_generate_mipmap, 675bd8deadSopenharmony_ci EXT_direct_state_access, OES_EGL_image, WGL_ARB_render_texture, 685bd8deadSopenharmony_ci GLX_EXT_texture_from_pixmap, and core specifications that 695bd8deadSopenharmony_ci incorporate these extensions affect the definition of this 705bd8deadSopenharmony_ci extension. 715bd8deadSopenharmony_ci 725bd8deadSopenharmony_ci This extension is written against the OpenGL 3.2 Core Profile 735bd8deadSopenharmony_ci specification. 745bd8deadSopenharmony_ci 755bd8deadSopenharmony_ciOverview 765bd8deadSopenharmony_ci 775bd8deadSopenharmony_ci The texture image specification commands in OpenGL allow each level 785bd8deadSopenharmony_ci to be separately specified with different sizes, formats, types and 795bd8deadSopenharmony_ci so on, and only imposes consistency checks at draw time. This adds 805bd8deadSopenharmony_ci overhead for implementations. 815bd8deadSopenharmony_ci 825bd8deadSopenharmony_ci This extension provides a mechanism for specifying the entire 835bd8deadSopenharmony_ci structure of a texture in a single call, allowing certain 845bd8deadSopenharmony_ci consistency checks and memory allocations to be done up front. Once 855bd8deadSopenharmony_ci specified, the format and dimensions of the image array become 865bd8deadSopenharmony_ci immutable, to simplify completeness checks in the implementation. 875bd8deadSopenharmony_ci 885bd8deadSopenharmony_ci When using this extension, it is no longer possible to supply texture 895bd8deadSopenharmony_ci data using TexImage*. Instead, data can be uploaded using TexSubImage*, 905bd8deadSopenharmony_ci or produced by other means (such as render-to-texture, mipmap generation, 915bd8deadSopenharmony_ci or rendering to a sibling EGLImage). 925bd8deadSopenharmony_ci 935bd8deadSopenharmony_ci This extension has complicated interactions with other extensions. 945bd8deadSopenharmony_ci The goal of most of these interactions is to ensure that a texture 955bd8deadSopenharmony_ci is always mipmap complete (and cube complete for cubemap textures). 965bd8deadSopenharmony_ci 975bd8deadSopenharmony_ciIP Status 985bd8deadSopenharmony_ci 995bd8deadSopenharmony_ci No known IP claims 1005bd8deadSopenharmony_ci 1015bd8deadSopenharmony_ciNew Procedures and Functions 1025bd8deadSopenharmony_ci 1035bd8deadSopenharmony_ci void TexStorage1D(enum target, sizei levels, 1045bd8deadSopenharmony_ci enum internalformat, 1055bd8deadSopenharmony_ci sizei width); 1065bd8deadSopenharmony_ci 1075bd8deadSopenharmony_ci void TexStorage2D(enum target, sizei levels, 1085bd8deadSopenharmony_ci enum internalformat, 1095bd8deadSopenharmony_ci sizei width, sizei height); 1105bd8deadSopenharmony_ci 1115bd8deadSopenharmony_ci void TexStorage3D(enum target, sizei levels, 1125bd8deadSopenharmony_ci enum internalformat, 1135bd8deadSopenharmony_ci sizei width, sizei height, sizei depth); 1145bd8deadSopenharmony_ci 1155bd8deadSopenharmony_ci When EXT_direct_state_access is present: 1165bd8deadSopenharmony_ci 1175bd8deadSopenharmony_ci void TextureStorage1DEXT(uint texture, enum target, sizei levels, 1185bd8deadSopenharmony_ci enum internalformat, 1195bd8deadSopenharmony_ci sizei width); 1205bd8deadSopenharmony_ci 1215bd8deadSopenharmony_ci void TextureStorage2DEXT(uint texture, enum target, sizei levels, 1225bd8deadSopenharmony_ci enum internalformat, 1235bd8deadSopenharmony_ci sizei width, sizei height); 1245bd8deadSopenharmony_ci 1255bd8deadSopenharmony_ci void TextureStorage3DEXT(uint texture, enum target, sizei levels, 1265bd8deadSopenharmony_ci enum internalformat, 1275bd8deadSopenharmony_ci sizei width, sizei height, sizei depth); 1285bd8deadSopenharmony_ci 1295bd8deadSopenharmony_ciNew Types 1305bd8deadSopenharmony_ci 1315bd8deadSopenharmony_ci None 1325bd8deadSopenharmony_ci 1335bd8deadSopenharmony_ciNew Tokens 1345bd8deadSopenharmony_ci 1355bd8deadSopenharmony_ci Accepted by the <value> parameter of GetTexParameter{if}v: 1365bd8deadSopenharmony_ci 1375bd8deadSopenharmony_ci TEXTURE_IMMUTABLE_FORMAT 0x912F 1385bd8deadSopenharmony_ci 1395bd8deadSopenharmony_ci Accepted by the <internalformat> parameter of TexStorage* when 1405bd8deadSopenharmony_ci implemented on OpenGL ES: 1415bd8deadSopenharmony_ci 1425bd8deadSopenharmony_ci ALPHA8_EXT 0x803C 1435bd8deadSopenharmony_ci LUMINANCE8_EXT 0x8040 1445bd8deadSopenharmony_ci LUMINANCE8_ALPHA8_EXT 0x8045 1455bd8deadSopenharmony_ci 1465bd8deadSopenharmony_ciAdditions to Chapter 2 of the OpenGL 3.2 Core Profile Specification 1475bd8deadSopenharmony_ci(OpenGL Operation) 1485bd8deadSopenharmony_ci 1495bd8deadSopenharmony_ci None 1505bd8deadSopenharmony_ci 1515bd8deadSopenharmony_ciAdditions to Chapter 3 of the OpenGL 3.2 Core Profile Specification 1525bd8deadSopenharmony_ci(Rasterization) 1535bd8deadSopenharmony_ci 1545bd8deadSopenharmony_ci After section 3.8.1 (Texture Image Specification) add a new 1555bd8deadSopenharmony_ci subsection called "Immutable-format texture images": 1565bd8deadSopenharmony_ci 1575bd8deadSopenharmony_ci "An alterative set of commands is provided for specifying the 1585bd8deadSopenharmony_ci properties of all levels of a texture at once. Once a texture is 1595bd8deadSopenharmony_ci specified with such a command, the format and dimensions of all 1605bd8deadSopenharmony_ci levels becomes immutable, unless it is a proxy texture (since 1615bd8deadSopenharmony_ci otherwise it would no longer be possible to use the proxy). The 1625bd8deadSopenharmony_ci contents of the images and the parameters can still be modified. 1635bd8deadSopenharmony_ci Such a texture is referred to as an "immutable-format" texture. The 1645bd8deadSopenharmony_ci immutability status of a texture can be determined by calling 1655bd8deadSopenharmony_ci GetTexParameter with <pname> TEXTURE_IMMUTABLE_FORMAT. 1665bd8deadSopenharmony_ci 1675bd8deadSopenharmony_ci Each of the commands below is described by pseudo-code which 1685bd8deadSopenharmony_ci indicates the effect on the dimensions and format of the texture. 1695bd8deadSopenharmony_ci For all of the commands, the following apply in addition to the 1705bd8deadSopenharmony_ci pseudo-code: 1715bd8deadSopenharmony_ci 1725bd8deadSopenharmony_ci - If the default texture object is bound to <target>, an 1735bd8deadSopenharmony_ci INVALID_OPERATION error is generated. 1745bd8deadSopenharmony_ci - If executing the pseudo-code would lead to an error, the error is 1755bd8deadSopenharmony_ci generated and the command will have no effect. 1765bd8deadSopenharmony_ci - Any existing levels that are not replaced are reset to their 1775bd8deadSopenharmony_ci initial state. 1785bd8deadSopenharmony_ci - If <width>, <height>, <depth> or <levels> is less than 1, the 1795bd8deadSopenharmony_ci error INVALID_VALUE is generated. 1805bd8deadSopenharmony_ci - The pixel unpack buffer should be considered to be zero i.e., 1815bd8deadSopenharmony_ci the image contents are unspecified. 1825bd8deadSopenharmony_ci - Since no pixel data are provided, the <format> and <type> values 1835bd8deadSopenharmony_ci used in the pseudo-code are irrelevant; they can be considered to 1845bd8deadSopenharmony_ci be any values that are legal to use with <internalformat>. 1855bd8deadSopenharmony_ci - If the command is successful, TEXTURE_IMMUTABLE_FORMAT becomes 1865bd8deadSopenharmony_ci TRUE. 1875bd8deadSopenharmony_ci - If <internalformat> is a specific compressed texture format, then 1885bd8deadSopenharmony_ci references to TexImage* should be replaced by CompressedTexImage*, 1895bd8deadSopenharmony_ci with <format>, <type> and <data> replaced by any valid <imageSize> and 1905bd8deadSopenharmony_ci <data>. If there is no <imageSize> for which this command would have 1915bd8deadSopenharmony_ci been valid, an INVALID_OPERATION error is generated [fn: This 1925bd8deadSopenharmony_ci condition is not required for OpenGL, but is necessary for OpenGL 1935bd8deadSopenharmony_ci ES which does not support on-the-fly compression.] 1945bd8deadSopenharmony_ci - If <internalformat> is one of the internal formats listed in table 1955bd8deadSopenharmony_ci 3.11, an INVALID_ENUM error is generated. 1965bd8deadSopenharmony_ci 1975bd8deadSopenharmony_ci The command 1985bd8deadSopenharmony_ci 1995bd8deadSopenharmony_ci void TexStorage1D(enum target, sizei levels, 2005bd8deadSopenharmony_ci enum internalformat, 2015bd8deadSopenharmony_ci sizei width); 2025bd8deadSopenharmony_ci 2035bd8deadSopenharmony_ci specifies all the levels of a one-dimensional texture (or proxy) at 2045bd8deadSopenharmony_ci the same time. It is described by the pseudo-code below: 2055bd8deadSopenharmony_ci 2065bd8deadSopenharmony_ci for (i = 0; i < levels; i++) 2075bd8deadSopenharmony_ci { 2085bd8deadSopenharmony_ci TexImage1D(target, i, internalformat, width, 0, 2095bd8deadSopenharmony_ci format, type, NULL); 2105bd8deadSopenharmony_ci width = max(1, floor(width / 2)); 2115bd8deadSopenharmony_ci } 2125bd8deadSopenharmony_ci 2135bd8deadSopenharmony_ci If <target> is not TEXTURE_1D or PROXY_TEXTURE_1D then INVALID_ENUM 2145bd8deadSopenharmony_ci is generated. If <levels> is greater than floor(log_2(width)) + 1 2155bd8deadSopenharmony_ci then INVALID_OPERATION is generated. 2165bd8deadSopenharmony_ci 2175bd8deadSopenharmony_ci The command 2185bd8deadSopenharmony_ci 2195bd8deadSopenharmony_ci void TexStorage2D(enum target, sizei levels, 2205bd8deadSopenharmony_ci enum internalformat, 2215bd8deadSopenharmony_ci sizei width, sizei height); 2225bd8deadSopenharmony_ci 2235bd8deadSopenharmony_ci specifies all the levels of a two-dimensional, cube-map, 2245bd8deadSopenharmony_ci one-dimension array or rectangle texture (or proxy) at the same 2255bd8deadSopenharmony_ci time. The pseudo-code depends on the <target>: 2265bd8deadSopenharmony_ci 2275bd8deadSopenharmony_ci [PROXY_]TEXTURE_2D, [PROXY_]TEXTURE_RECTANGLE or 2285bd8deadSopenharmony_ci PROXY_TEXTURE_CUBE_MAP: 2295bd8deadSopenharmony_ci 2305bd8deadSopenharmony_ci for (i = 0; i < levels; i++) 2315bd8deadSopenharmony_ci { 2325bd8deadSopenharmony_ci TexImage2D(target, i, internalformat, width, height, 0, 2335bd8deadSopenharmony_ci format, type, NULL); 2345bd8deadSopenharmony_ci width = max(1, floor(width / 2)); 2355bd8deadSopenharmony_ci height = max(1, floor(height / 2)); 2365bd8deadSopenharmony_ci } 2375bd8deadSopenharmony_ci 2385bd8deadSopenharmony_ci TEXTURE_CUBE_MAP: 2395bd8deadSopenharmony_ci 2405bd8deadSopenharmony_ci for (i = 0; i < levels; i++) 2415bd8deadSopenharmony_ci { 2425bd8deadSopenharmony_ci for face in (+X, -X, +Y, -Y, +Z, -Z) 2435bd8deadSopenharmony_ci { 2445bd8deadSopenharmony_ci TexImage2D(face, i, internalformat, width, height, 0, 2455bd8deadSopenharmony_ci format, type, NULL); 2465bd8deadSopenharmony_ci } 2475bd8deadSopenharmony_ci width = max(1, floor(width / 2)); 2485bd8deadSopenharmony_ci height = max(1, floor(height / 2)); 2495bd8deadSopenharmony_ci } 2505bd8deadSopenharmony_ci 2515bd8deadSopenharmony_ci [PROXY_]TEXTURE_1D_ARRAY: 2525bd8deadSopenharmony_ci 2535bd8deadSopenharmony_ci for (i = 0; i < levels; i++) 2545bd8deadSopenharmony_ci { 2555bd8deadSopenharmony_ci TexImage2D(target, i, internalformat, width, height, 0, 2565bd8deadSopenharmony_ci format, type, NULL); 2575bd8deadSopenharmony_ci width = max(1, floor(width / 2)); 2585bd8deadSopenharmony_ci } 2595bd8deadSopenharmony_ci 2605bd8deadSopenharmony_ci If <target> is not one of those listed above, the error INVALID_ENUM 2615bd8deadSopenharmony_ci is generated. 2625bd8deadSopenharmony_ci 2635bd8deadSopenharmony_ci The error INVALID_OPERATION is generated if any of the following 2645bd8deadSopenharmony_ci conditions hold: 2655bd8deadSopenharmony_ci - <target> is [PROXY_]TEXTURE_1D_ARRAY and <levels> is greater than 2665bd8deadSopenharmony_ci floor(log_2(width)) + 1 2675bd8deadSopenharmony_ci - <target> is not [PROXY_]TEXTURE_1D_ARRAY and <levels> is greater 2685bd8deadSopenharmony_ci than floor(log_2(max(width, height))) + 1 2695bd8deadSopenharmony_ci 2705bd8deadSopenharmony_ci The command 2715bd8deadSopenharmony_ci 2725bd8deadSopenharmony_ci void TexStorage3D(enum target, sizei levels, enum internalformat, 2735bd8deadSopenharmony_ci sizei width, sizei height, sizei depth); 2745bd8deadSopenharmony_ci 2755bd8deadSopenharmony_ci specifies all the levels of a three-dimensional, two-dimensional 2765bd8deadSopenharmony_ci array texture, or cube-map array texture (or proxy). The pseudo-code 2775bd8deadSopenharmony_ci depends on <target>: 2785bd8deadSopenharmony_ci 2795bd8deadSopenharmony_ci [PROXY_]TEXTURE_3D: 2805bd8deadSopenharmony_ci 2815bd8deadSopenharmony_ci for (i = 0; i < levels; i++) 2825bd8deadSopenharmony_ci { 2835bd8deadSopenharmony_ci TexImage3D(target, i, internalformat, width, height, depth, 0, 2845bd8deadSopenharmony_ci format, type, NULL); 2855bd8deadSopenharmony_ci width = max(1, floor(width / 2)); 2865bd8deadSopenharmony_ci height = max(1, floor(height / 2)); 2875bd8deadSopenharmony_ci depth = max(1, floor(depth / 2)); 2885bd8deadSopenharmony_ci } 2895bd8deadSopenharmony_ci 2905bd8deadSopenharmony_ci [PROXY_]TEXTURE_2D_ARRAY, [PROXY_]TEXTURE_CUBE_MAP_ARRAY: 2915bd8deadSopenharmony_ci 2925bd8deadSopenharmony_ci for (i = 0; i < levels; i++) 2935bd8deadSopenharmony_ci { 2945bd8deadSopenharmony_ci TexImage3D(target, i, internalformat, width, height, depth, 0, 2955bd8deadSopenharmony_ci format, type, NULL); 2965bd8deadSopenharmony_ci width = max(1, floor(width / 2)); 2975bd8deadSopenharmony_ci height = max(1, floor(height / 2)); 2985bd8deadSopenharmony_ci } 2995bd8deadSopenharmony_ci 3005bd8deadSopenharmony_ci If <target> is not one of those listed above, the error INVALID_ENUM 3015bd8deadSopenharmony_ci is generated. 3025bd8deadSopenharmony_ci 3035bd8deadSopenharmony_ci The error INVALID_OPERATION is generated if any of the following 3045bd8deadSopenharmony_ci conditions hold: 3055bd8deadSopenharmony_ci - <target> is [PROXY_]TEXTURE_3D and <levels> is greater than 3065bd8deadSopenharmony_ci floor(log_2(max(width, height, depth))) + 1 3075bd8deadSopenharmony_ci - <target> is [PROXY_]TEXTURE_2D_ARRAY or 3085bd8deadSopenharmony_ci [PROXY_]TEXTURE_CUBE_MAP_ARRAY and <levels> is greater than 3095bd8deadSopenharmony_ci floor(log_2(max(width, height))) + 1 3105bd8deadSopenharmony_ci 3115bd8deadSopenharmony_ci After a successful call to any TexStorage* command with a non-proxy 3125bd8deadSopenharmony_ci target, the value of TEXTURE_IMMUTABLE_FORMAT for this texture 3135bd8deadSopenharmony_ci object is set to TRUE, and no further changes to the dimensions or 3145bd8deadSopenharmony_ci format of the texture object may be made. Other commands may only 3155bd8deadSopenharmony_ci alter the texel values and texture parameters. Using any of the 3165bd8deadSopenharmony_ci following commands with the same texture will result in the error 3175bd8deadSopenharmony_ci INVALID_OPERATION being generated, even if it does not affect the 3185bd8deadSopenharmony_ci dimensions or format: 3195bd8deadSopenharmony_ci 3205bd8deadSopenharmony_ci - TexImage* 3215bd8deadSopenharmony_ci - CompressedTexImage* 3225bd8deadSopenharmony_ci - CopyTexImage* 3235bd8deadSopenharmony_ci - TexStorage* 3245bd8deadSopenharmony_ci 3255bd8deadSopenharmony_ci The TextureStorage* commands operate identically to the 3265bd8deadSopenharmony_ci corresponding command where "Texture" is substituted for "Tex" 3275bd8deadSopenharmony_ci except, rather than updating the current bound texture for the 3285bd8deadSopenharmony_ci texture unit indicated by the current active texture state and the 3295bd8deadSopenharmony_ci target parameter, these "Texture" commands update the texture object 3305bd8deadSopenharmony_ci named by the initial texture parameter. The error INVALID_VALUE 3315bd8deadSopenharmony_ci is generated if <texture> is zero. 3325bd8deadSopenharmony_ci " 3335bd8deadSopenharmony_ci 3345bd8deadSopenharmony_ci In section 3.8.6 (Texture Parameters), after the sentence 3355bd8deadSopenharmony_ci 3365bd8deadSopenharmony_ci "In the remainder of section 3.8, denote by lod_min, lod_max, 3375bd8deadSopenharmony_ci level_base, and level_max the values of the texture parameters 3385bd8deadSopenharmony_ci TEXTURE_MIN_LOD, TEXTURE_MAX_LOD, TEXTURE_BASE_LEVEL, and 3395bd8deadSopenharmony_ci TEXTURE_MAX_LEVEL respectively." 3405bd8deadSopenharmony_ci 3415bd8deadSopenharmony_ci add 3425bd8deadSopenharmony_ci 3435bd8deadSopenharmony_ci "However, if TEXTURE_IMMUTABLE_FORMAT is 3445bd8deadSopenharmony_ci TRUE, then level_base is clamped to the range [0, <levels> - 1] and 3455bd8deadSopenharmony_ci level_max is then clamped to the range [level_base, <levels> - 1], 3465bd8deadSopenharmony_ci where <levels> is the parameter passed the call to TexStorage* for 3475bd8deadSopenharmony_ci the texture object. 3485bd8deadSopenharmony_ci 3495bd8deadSopenharmony_ci In section 3.8.9 (Rendering feedback loops) replace all references 3505bd8deadSopenharmony_ci to TEXTURE_BASE_LEVEL by level_base. 3515bd8deadSopenharmony_ci 3525bd8deadSopenharmony_ci In section 3.8.9 (Mipmapping), replace the paragraph starting "Each 3535bd8deadSopenharmony_ci array in a mipmap is defined..." by 3545bd8deadSopenharmony_ci 3555bd8deadSopenharmony_ci "Each array in a mipmap is defined using TexImage3D, TexImage2D, 3565bd8deadSopenharmony_ci CopyTexImage2D, TexImage1D, CopyTexImage1D, or by functions that are 3575bd8deadSopenharmony_ci defined in terms of these functions. Level-of-detail numbers proceed 3585bd8deadSopenharmony_ci from level_base for the original texel array through the maximum 3595bd8deadSopenharmony_ci level p, with each unit increase indicating an array of half the 3605bd8deadSopenharmony_ci dimensions of the previous one (rounded down to the next integer if 3615bd8deadSopenharmony_ci fractional) as already described. For immutable-format textures, 3625bd8deadSopenharmony_ci p is one less than the <levels> parameter passed to TexStorage*; 3635bd8deadSopenharmony_ci otherwise p = floor(log_2(maxsize)) + level_base. All arrays from 3645bd8deadSopenharmony_ci level_base through q = min(p, level_max) must be defined, as 3655bd8deadSopenharmony_ci discussed in section 3.8.12." 3665bd8deadSopenharmony_ci 3675bd8deadSopenharmony_ci In section 3.8.12 (Texture Completeness), modify the last sentence 3685bd8deadSopenharmony_ci to avoid refering to level_base and level_max: 3695bd8deadSopenharmony_ci 3705bd8deadSopenharmony_ci "An implementation may allow a texture image array of level 1 or 3715bd8deadSopenharmony_ci greater to be created only if a mipmap complete set of image arrays 3725bd8deadSopenharmony_ci consistent with the requested array can be supported where the 3735bd8deadSopenharmony_ci values of TEXTURE_BASE_LEVEL and TEXTURE_MAX_LEVEL are 0 and 1000 3745bd8deadSopenharmony_ci respectively." 3755bd8deadSopenharmony_ci 3765bd8deadSopenharmony_ci Modify section 3.8.13 (Texture State and Proxy State) to add the new 3775bd8deadSopenharmony_ci state: 3785bd8deadSopenharmony_ci 3795bd8deadSopenharmony_ci "Each set consists of ..., and a boolean flag indicating whether the 3805bd8deadSopenharmony_ci format and dimensions of the texture are immutable." 3815bd8deadSopenharmony_ci 3825bd8deadSopenharmony_ci Add 3835bd8deadSopenharmony_ci "The initial value of TEXTURE_IMMUTABLE_FORMAT is FALSE." 3845bd8deadSopenharmony_ci 3855bd8deadSopenharmony_ciAdditions to Chapter 4 of the OpenGL 3.2 Core Profile Specification 3865bd8deadSopenharmony_ci(Per-Fragment Operations and the Frame Buffer) 3875bd8deadSopenharmony_ci 3885bd8deadSopenharmony_ci None 3895bd8deadSopenharmony_ci 3905bd8deadSopenharmony_ciAdditions to Chapter 5 of the OpenGL 3.2 Compatibility Profile Specification 3915bd8deadSopenharmony_ci(Special Functions) 3925bd8deadSopenharmony_ci 3935bd8deadSopenharmony_ci In section 5.4.1 (Commands Not Usable in Display Lists), add 3945bd8deadSopenharmony_ci TexStorage* to the list of commands that cannot be used. 3955bd8deadSopenharmony_ci 3965bd8deadSopenharmony_ciAdditions to Chapter 6 of the OpenGL 3.2 Core Profile Specification 3975bd8deadSopenharmony_ci(State and State Requests) 3985bd8deadSopenharmony_ci 3995bd8deadSopenharmony_ci Replace the following statement in 6.1.3 (Enumerated Queries): 4005bd8deadSopenharmony_ci 4015bd8deadSopenharmony_ci "<value> must be one of the symbolic values in table 3.10." 4025bd8deadSopenharmony_ci 4035bd8deadSopenharmony_ci with 4045bd8deadSopenharmony_ci 4055bd8deadSopenharmony_ci "<value> must be TEXTURE_IMMUTABLE_FORMAT or one of the symbolic 4065bd8deadSopenharmony_ci values in table 3.22." 4075bd8deadSopenharmony_ci 4085bd8deadSopenharmony_ciAdditions to the AGL/EGL/GLX/WGL Specifications 4095bd8deadSopenharmony_ci 4105bd8deadSopenharmony_ci None 4115bd8deadSopenharmony_ci 4125bd8deadSopenharmony_ciAdditions to OES_compressed_ETC1_RGB8_texture 4135bd8deadSopenharmony_ci 4145bd8deadSopenharmony_ci Add the following to the additions to Chapter 3: 4155bd8deadSopenharmony_ci 4165bd8deadSopenharmony_ci "Since ETC1 images are easily edited along 4x4 texel boundaries, the 4175bd8deadSopenharmony_ci limitations on CompressedTexSubImage2D are relaxed. 4185bd8deadSopenharmony_ci CompressedTexSubImage2D will result in an INVALID_OPERATION error 4195bd8deadSopenharmony_ci only if one of the following conditions occurs: 4205bd8deadSopenharmony_ci 4215bd8deadSopenharmony_ci * <width> is not a multiple of four, and <width> plus <xoffset> is not 4225bd8deadSopenharmony_ci equal to the texture width; 4235bd8deadSopenharmony_ci 4245bd8deadSopenharmony_ci * <height> is not a multiple of four, and <height> plus <yoffset> is 4255bd8deadSopenharmony_ci not equal to the texture height; or 4265bd8deadSopenharmony_ci 4275bd8deadSopenharmony_ci * <xoffset> or <yoffset> is not a multiple of four. 4285bd8deadSopenharmony_ci 4295bd8deadSopenharmony_ci Remove CompressedTexSubImage2D from this error: 4305bd8deadSopenharmony_ci 4315bd8deadSopenharmony_ci "INVALID_OPERATION is generated by CompressedTexSubImage2D, 4325bd8deadSopenharmony_ci TexSubImage2D, or CopyTexSubImage2D if the texture image <level> 4335bd8deadSopenharmony_ci bound to <target> has internal format ETC1_RGB8_OES." 4345bd8deadSopenharmony_ci 4355bd8deadSopenharmony_ci Add the following error: 4365bd8deadSopenharmony_ci 4375bd8deadSopenharmony_ci "INVALID_OPERATION is generated by CompressedTexSubImage2D 4385bd8deadSopenharmony_ci if the region to be modified is not aligned to block boundaries 4395bd8deadSopenharmony_ci (refer to the extension text for details)." 4405bd8deadSopenharmony_ci 4415bd8deadSopenharmony_ciAdditions to AMD_compressed_ATC_texture and AMD_compressed_3DC_texture: 4425bd8deadSopenharmony_ci 4435bd8deadSopenharmony_ci Apply the same changes as for OES_compressed_ETC1_RGB8_texture 4445bd8deadSopenharmony_ci above, substituting the appropriate internal format tokens from 4455bd8deadSopenharmony_ci these extensions. 4465bd8deadSopenharmony_ci 4475bd8deadSopenharmony_ciDependencies on EXT_direct_state_access 4485bd8deadSopenharmony_ci 4495bd8deadSopenharmony_ci If EXT_direct_state_access is not present, references to 4505bd8deadSopenharmony_ci TextureStorage* should be ignored. 4515bd8deadSopenharmony_ci 4525bd8deadSopenharmony_ciDependencies on OpenGL ES 4535bd8deadSopenharmony_ci 4545bd8deadSopenharmony_ci On OpenGL ES without extensions introducing TEXTURE_MAX_LEVEL, 4555bd8deadSopenharmony_ci mipmapped textures specified with TexStorage are required to have a 4565bd8deadSopenharmony_ci full set of mipmaps. If TEXTURE_MAX_LEVEL is not supported, this 4575bd8deadSopenharmony_ci extension is modified as follows: 4585bd8deadSopenharmony_ci 4595bd8deadSopenharmony_ci - Where an upper bound is placed on <levels> in this extension (i.e. 4605bd8deadSopenharmony_ci the maximum number of mipmap levels for a texture of the given 4615bd8deadSopenharmony_ci target and dimensions), an INVALID_OPERATION error is generated if 4625bd8deadSopenharmony_ci <levels> is neither 1 nor this upper bound. 4635bd8deadSopenharmony_ci - q (the effective maximum number of levels) is redefined to clamp 4645bd8deadSopenharmony_ci to the number of levels present in immutable-format textures. 4655bd8deadSopenharmony_ci 4665bd8deadSopenharmony_ci OpenGL ES does not accept sized internal formats (e.g., RGBA8) and 4675bd8deadSopenharmony_ci instead derives an internal format from the <format> and <type> 4685bd8deadSopenharmony_ci parameters of TexImage2D. Since TexStorage* does not specify texel 4695bd8deadSopenharmony_ci data, the API doesn't include <format> and <type> parameters. 4705bd8deadSopenharmony_ci On an OpenGL ES implementation, the values in the <internalformat> 4715bd8deadSopenharmony_ci column in the tables below are accepted as <internalformat> 4725bd8deadSopenharmony_ci parameters, and base internal formats are not accepted. The 4735bd8deadSopenharmony_ci TexImage* calls in the TexStorage* pseudocode are modified so that 4745bd8deadSopenharmony_ci the <internalformat>, <format> and <type> parameters are 4755bd8deadSopenharmony_ci taken from the <format>, <format> and <type> columns (respectively) 4765bd8deadSopenharmony_ci in the tables below, according to the <internalformat> 4775bd8deadSopenharmony_ci specified in the TexStorage* command. 4785bd8deadSopenharmony_ci 4795bd8deadSopenharmony_ci <internalformat> <format> <type> 4805bd8deadSopenharmony_ci ---------------- -------- ------ 4815bd8deadSopenharmony_ci RGB565 RGB UNSIGNED_SHORT_5_6_5 4825bd8deadSopenharmony_ci RGBA4 RGBA UNSIGNED_SHORT_4_4_4_4 4835bd8deadSopenharmony_ci RGB5_A1 RGBA UNSIGNED_SHORT_5_5_5_1 4845bd8deadSopenharmony_ci RGB8_OES RGB UNSIGNED_BYTE 4855bd8deadSopenharmony_ci RGBA8_OES RGBA UNSIGNED_BYTE 4865bd8deadSopenharmony_ci LUMINANCE8_ALPHA8_EXT LUMINANCE_ALPHA UNSIGNED_BYTE 4875bd8deadSopenharmony_ci LUMINANCE8_EXT LUMINANCE UNSIGNED_BYTE 4885bd8deadSopenharmony_ci ALPHA8_EXT ALPHA UNSIGNED_BYTE 4895bd8deadSopenharmony_ci 4905bd8deadSopenharmony_ci If OES_depth_texture is supported: 4915bd8deadSopenharmony_ci 4925bd8deadSopenharmony_ci <internalformat> <format> <type> 4935bd8deadSopenharmony_ci ---------------- -------- ------ 4945bd8deadSopenharmony_ci DEPTH_COMPONENT16_OES DEPTH_COMPONENT UNSIGNED_SHORT 4955bd8deadSopenharmony_ci DEPTH_COMPONENT32_OES DEPTH_COMPONENT UNSIGNED_INT 4965bd8deadSopenharmony_ci 4975bd8deadSopenharmony_ci If OES_packed_depth_stencil is supported: 4985bd8deadSopenharmony_ci 4995bd8deadSopenharmony_ci <internalformat> <format> <type> 5005bd8deadSopenharmony_ci ---------------- -------- ------ 5015bd8deadSopenharmony_ci DEPTH24_STENCIL8_OES DEPTH_STENCIL_OES UNSIGNED_INT 5025bd8deadSopenharmony_ci 5035bd8deadSopenharmony_ci If EXT_texture_type_2_10_10_10_REV is supported: 5045bd8deadSopenharmony_ci 5055bd8deadSopenharmony_ci <internalformat> <format> <type> 5065bd8deadSopenharmony_ci ---------------- -------- ------ 5075bd8deadSopenharmony_ci RGB10_A2_EXT RGBA UNSIGNED_INT_2_10_10_10_REV_EXT 5085bd8deadSopenharmony_ci RGB10_EXT RGB UNSIGNED_INT_2_10_10_10_REV_EXT 5095bd8deadSopenharmony_ci 5105bd8deadSopenharmony_ciDependencies on texture targets 5115bd8deadSopenharmony_ci 5125bd8deadSopenharmony_ci If a particular texture target is not supported by the 5135bd8deadSopenharmony_ci implementation, passing it as a <target> to TexStorage* will 5145bd8deadSopenharmony_ci generate an INVALID_ENUM error. If as a result, any of the commands 5155bd8deadSopenharmony_ci defined in this extension would no longer have any valid <target>, 5165bd8deadSopenharmony_ci all references to the command should be ignored. 5175bd8deadSopenharmony_ci 5185bd8deadSopenharmony_ciDependencies on OES_texture_npot 5195bd8deadSopenharmony_ci 5205bd8deadSopenharmony_ci If OpenGL ES 2.0 or APPLE_texture_2D_limited_npot is present but 5215bd8deadSopenharmony_ci OES_texture_npot is not present, then INVALID_OPERATION is 5225bd8deadSopenharmony_ci generated by TexStorage* and TexStorage3D if <levels> is 5235bd8deadSopenharmony_ci not one and <width>, <height> or <depth> is not a power of 5245bd8deadSopenharmony_ci two. 5255bd8deadSopenharmony_ci 5265bd8deadSopenharmony_ciDependencies on WGL_ARB_render_texture, GLX_EXT_texture_from_pixmap, EGL 5275bd8deadSopenharmony_ci1.4 and GL_OES_EGL_image 5285bd8deadSopenharmony_ci 5295bd8deadSopenharmony_ci The commands eglBindTexImage, wglBindTexImageARB, glXBindTexImageEXT or 5305bd8deadSopenharmony_ci EGLImageTargetTexture2DOES are not permitted on an immutable-format 5315bd8deadSopenharmony_ci texture. 5325bd8deadSopenharmony_ci They will generate the following errors: 5335bd8deadSopenharmony_ci - EGLImageTargetTexture2DOES: INVALID_OPERATION 5345bd8deadSopenharmony_ci - eglBindTexImage: EGL_BAD_MATCH 5355bd8deadSopenharmony_ci - wglBindTexImage: ERROR_INVALID_OPERATION 5365bd8deadSopenharmony_ci - glXBindTexImageEXT: BadMatch 5375bd8deadSopenharmony_ci 5385bd8deadSopenharmony_ciDependencies on OES_compressed_paletted_texture 5395bd8deadSopenharmony_ci 5405bd8deadSopenharmony_ci The compressed texture formats exposed by 5415bd8deadSopenharmony_ci OES_compressed_paletted_texture are not supported by TexStorage*. 5425bd8deadSopenharmony_ci Passing one of these tokens to TexStorage* will generate an 5435bd8deadSopenharmony_ci INVALID_ENUM error. 5445bd8deadSopenharmony_ci 5455bd8deadSopenharmony_ciErrors 5465bd8deadSopenharmony_ci 5475bd8deadSopenharmony_ci Note that dependencies above modify the errors. 5485bd8deadSopenharmony_ci 5495bd8deadSopenharmony_ci If TexStorage* is called with a <width>, <height>, <depth> or 5505bd8deadSopenharmony_ci <levels> parameter that is less than one, then the error 5515bd8deadSopenharmony_ci INVALID_VALUE is generated. 5525bd8deadSopenharmony_ci 5535bd8deadSopenharmony_ci If the <target> parameter to TexStorage1D is not 5545bd8deadSopenharmony_ci [PROXY_]TEXTURE_1D, then the error INVALID_ENUM is generated. 5555bd8deadSopenharmony_ci 5565bd8deadSopenharmony_ci If the <target> parameter to TexStorage2D is not 5575bd8deadSopenharmony_ci [PROXY_]TEXTURE_2D, [PROXY_]TEXTURE_CUBE_MAP, 5585bd8deadSopenharmony_ci [PROXY_]TEXTURE_RECTANGLE or [PROXY_]TEXTURE_1D_ARRAY, then the 5595bd8deadSopenharmony_ci error INVALID_ENUM is generated. 5605bd8deadSopenharmony_ci 5615bd8deadSopenharmony_ci If the <target> parameter to TexStorage3D is not 5625bd8deadSopenharmony_ci [PROXY_]TEXTURE_3D, [PROXY_]TEXTURE_2D_ARRAY or 5635bd8deadSopenharmony_ci [PROXY_]TEXTURE_CUBE_MAP_ARRAY then the error INVALID_ENUM is 5645bd8deadSopenharmony_ci generated. 5655bd8deadSopenharmony_ci 5665bd8deadSopenharmony_ci If the <levels> parameter to TexStorage* is greater than the 5675bd8deadSopenharmony_ci <target>-specific value listed below then the error 5685bd8deadSopenharmony_ci INVALID_OPERATION is generated: 5695bd8deadSopenharmony_ci [PROXY_]TEXTURE_{1D,1D_ARRAY}: 5705bd8deadSopenharmony_ci floor(log_2(width)) + 1 5715bd8deadSopenharmony_ci [PROXY_]TEXTURE_{2D,2D_ARRAY,CUBE_MAP,CUBE_MAP_ARRAY}: 5725bd8deadSopenharmony_ci floor(log_2(max(width, height))) + 1 5735bd8deadSopenharmony_ci [PROXY_]TEXTURE_3D: 5745bd8deadSopenharmony_ci floor(log_2(max(width, height, depth))) + 1 5755bd8deadSopenharmony_ci [PROXY_]TEXTURE_RECTANGLE: 5765bd8deadSopenharmony_ci 1 5775bd8deadSopenharmony_ci 5785bd8deadSopenharmony_ci If the default texture object is bound to the <target> passed to 5795bd8deadSopenharmony_ci TexStorage*, then the error INVALID_OPERATION is generated. 5805bd8deadSopenharmony_ci 5815bd8deadSopenharmony_ci If the <target> parameter to TextureStorage* does not match the 5825bd8deadSopenharmony_ci dimensionality of <texture>, then the error INVALID_OPERATION is 5835bd8deadSopenharmony_ci generated. 5845bd8deadSopenharmony_ci 5855bd8deadSopenharmony_ci If the <texture> parameter to TextureStorage* is zero, then the 5865bd8deadSopenharmony_ci INVALID_VALUE is generated. 5875bd8deadSopenharmony_ci 5885bd8deadSopenharmony_ci If any pseudo-code listed in this extension would generate an error, 5895bd8deadSopenharmony_ci then that error is generated. 5905bd8deadSopenharmony_ci 5915bd8deadSopenharmony_ci Calling any of the following functions on a texture for which 5925bd8deadSopenharmony_ci TEXTURE_IMMUTABLE_FORMAT is TRUE will generate an 5935bd8deadSopenharmony_ci INVALID_OPERATION error: 5945bd8deadSopenharmony_ci - TexImage* 5955bd8deadSopenharmony_ci - CompressedTexImage* 5965bd8deadSopenharmony_ci - CopyTexImage* 5975bd8deadSopenharmony_ci 5985bd8deadSopenharmony_ciNew State 5995bd8deadSopenharmony_ci 6005bd8deadSopenharmony_ci Additions to Table 6.8 Textures (state per texture object) 6015bd8deadSopenharmony_ci 6025bd8deadSopenharmony_ci Initial 6035bd8deadSopenharmony_ci Get Value Type Get Command Value Description Sec. 6045bd8deadSopenharmony_ci --------- ---- ----------- ------- ----------- ---- 6055bd8deadSopenharmony_ci TEXTURE_IMMUTABLE_FORMAT B GetTexParameter FALSE Size and format immutable 2.6 6065bd8deadSopenharmony_ci 6075bd8deadSopenharmony_ciNew Implementation Dependent State 6085bd8deadSopenharmony_ci 6095bd8deadSopenharmony_ci None 6105bd8deadSopenharmony_ci 6115bd8deadSopenharmony_ciIssues 6125bd8deadSopenharmony_ci 6135bd8deadSopenharmony_ci 1. What should this extension be called? 6145bd8deadSopenharmony_ci 6155bd8deadSopenharmony_ci RESOLVED: EXT_texture_storage is chosen for consistency with the 6165bd8deadSopenharmony_ci glRenderbufferStorage entry point. 6175bd8deadSopenharmony_ci 6185bd8deadSopenharmony_ci 2. Should TexStorage* accept a border parameter? 6195bd8deadSopenharmony_ci 6205bd8deadSopenharmony_ci RESOLVED: no. 6215bd8deadSopenharmony_ci 6225bd8deadSopenharmony_ci DISCUSSION: Currently it does not, since borders are a deprecated 6235bd8deadSopenharmony_ci feature which is not supported by all hardware. Users of the 6245bd8deadSopenharmony_ci compatibility profile can continue to use the existing texture 6255bd8deadSopenharmony_ci specification functions, but there is an argument that users of 6265bd8deadSopenharmony_ci compatibility profile may also want to use this extension. 6275bd8deadSopenharmony_ci 6285bd8deadSopenharmony_ci 3. What is the correct error when <levels> specifies a partial 6295bd8deadSopenharmony_ci mipmap pyramid for OpenGL ES? 6305bd8deadSopenharmony_ci 6315bd8deadSopenharmony_ci RESOLVED: INVALID_OPERATION, since it is an interaction between 6325bd8deadSopenharmony_ci parameters rather than a single value being invalid. It also makes 6335bd8deadSopenharmony_ci sense to relax this condition for desktop GL where it makes sense to 6345bd8deadSopenharmony_ci use a truncated pyramid with TEXTURE_MAX_LEVEL. 6355bd8deadSopenharmony_ci 6365bd8deadSopenharmony_ci 4. Should use of these entry-points make the metadata (format and 6375bd8deadSopenharmony_ci dimensions) immutable? 6385bd8deadSopenharmony_ci 6395bd8deadSopenharmony_ci RESOLVED: Yes. 6405bd8deadSopenharmony_ci 6415bd8deadSopenharmony_ci DISCUSSION: The benefits of knowing metadata can't change will 6425bd8deadSopenharmony_ci probably outweigh the extra cost of checking the 6435bd8deadSopenharmony_ci TEXTURE_IMMUTABLE_FORMAT flag on each texture specification 6445bd8deadSopenharmony_ci call. 6455bd8deadSopenharmony_ci 6465bd8deadSopenharmony_ci 5. Should it be legal to completely replace the texture using a new call 6475bd8deadSopenharmony_ci to TexStorage*? 6485bd8deadSopenharmony_ci 6495bd8deadSopenharmony_ci RESOLVED. It will not be allowed. 6505bd8deadSopenharmony_ci 6515bd8deadSopenharmony_ci DISCUSSION: This is useful to invalidate all levels of a texture. 6525bd8deadSopenharmony_ci Allowing the metadata to be changed here seems easier than trying to 6535bd8deadSopenharmony_ci define a portable definition of what it means to change the metadata 6545bd8deadSopenharmony_ci (e.g. what if you used an unsized internal format the first time and 6555bd8deadSopenharmony_ci the corresponding sized internal format the second time, or vice 6565bd8deadSopenharmony_ci versa)? 6575bd8deadSopenharmony_ci 6585bd8deadSopenharmony_ci However, while this is largely similar to deleting the old texture 6595bd8deadSopenharmony_ci object and replacing it with a new one, it does lose some of the 6605bd8deadSopenharmony_ci advantages of immutability. Specifically, because doing so does not 6615bd8deadSopenharmony_ci reset bindings, it doesn't allow a migration path to an API that 6625bd8deadSopenharmony_ci validates the texture format at bind time. 6635bd8deadSopenharmony_ci 6645bd8deadSopenharmony_ci 6. Should it be legal to use TexImage* after TexStorage* if it doesn't 6655bd8deadSopenharmony_ci affect the metadata? 6665bd8deadSopenharmony_ci 6675bd8deadSopenharmony_ci RESOLVED: No. 6685bd8deadSopenharmony_ci 6695bd8deadSopenharmony_ci DISCUSSION: A potential use case is to allow a single level of a 6705bd8deadSopenharmony_ci texture to be invalidated using a NULL pointer. However, as noted 6715bd8deadSopenharmony_ci above it is non-trivial to determine what constitutes a change. 6725bd8deadSopenharmony_ci 6735bd8deadSopenharmony_ci 7. How does this extension interact with APPLE_texture_2D_limited_npot? 6745bd8deadSopenharmony_ci 6755bd8deadSopenharmony_ci RESOLVED. APPLE_texture_2D_limited_npot is equivalent to the NPOT 6765bd8deadSopenharmony_ci support in OpenGL ES 2.0. 6775bd8deadSopenharmony_ci 6785bd8deadSopenharmony_ci 8. Should this extension be written to work with desktop OpenGL? 6795bd8deadSopenharmony_ci 6805bd8deadSopenharmony_ci RESOLVED: Yes. 6815bd8deadSopenharmony_ci 6825bd8deadSopenharmony_ci DISCUSSION: There has been been interest and it will future-proof it 6835bd8deadSopenharmony_ci against further additions to OpenGL ES. 6845bd8deadSopenharmony_ci 6855bd8deadSopenharmony_ci 9. Which texture targets should be supported? 6865bd8deadSopenharmony_ci 6875bd8deadSopenharmony_ci RESOLVED. All targets except multisample and buffer textures are 6885bd8deadSopenharmony_ci supported. 6895bd8deadSopenharmony_ci 6905bd8deadSopenharmony_ci Initially all targets except TEXTURE_BUFFER were supported. It was 6915bd8deadSopenharmony_ci noted that the entrypoints for multisample targets added no useful 6925bd8deadSopenharmony_ci functionality, since multisample textures have no completeness 6935bd8deadSopenharmony_ci checks beyond being non-empty. 6945bd8deadSopenharmony_ci 6955bd8deadSopenharmony_ci Rectangle textures have completeness checks to prevent filtering of 6965bd8deadSopenharmony_ci integer textures. However, since we decided to only force mipmap 6975bd8deadSopenharmony_ci completeness, this becomes less useful. 6985bd8deadSopenharmony_ci 6995bd8deadSopenharmony_ci 10. Should this extension support proxy textures? 7005bd8deadSopenharmony_ci 7015bd8deadSopenharmony_ci RESOLVED: Yes. 7025bd8deadSopenharmony_ci 7035bd8deadSopenharmony_ci DISCUSSION: It should be orthogonal. 7045bd8deadSopenharmony_ci 7055bd8deadSopenharmony_ci 11. Are the <format> and <type> parameters necessary? 7065bd8deadSopenharmony_ci 7075bd8deadSopenharmony_ci RESOLVED. No, they will be removed. 7085bd8deadSopenharmony_ci 7095bd8deadSopenharmony_ci DISCUSSION: For OpenGL ES the type parameter was necessary to 7105bd8deadSopenharmony_ci determine the precision of the texture, but this can be solved by 7115bd8deadSopenharmony_ci having these functions accept sized internal formats (which are 7125bd8deadSopenharmony_ci already accepted by renderbuffers). 7135bd8deadSopenharmony_ci 7145bd8deadSopenharmony_ci 12. Should it be legal to make the default texture (id 0) 7155bd8deadSopenharmony_ci immutable-format? 7165bd8deadSopenharmony_ci 7175bd8deadSopenharmony_ci RESOLVED: No. 7185bd8deadSopenharmony_ci 7195bd8deadSopenharmony_ci DISCUSSION: This would make it impossible to restore the context to 7205bd8deadSopenharmony_ci it's default state, which is deemed undesirable. There is no good 7215bd8deadSopenharmony_ci reason not to use named texture objects. 7225bd8deadSopenharmony_ci 7235bd8deadSopenharmony_ci 13. Should we try to guarantee that textures made through this path 7245bd8deadSopenharmony_ci will always be complete? 7255bd8deadSopenharmony_ci 7265bd8deadSopenharmony_ci RESOLVED: It should be guaranteed that the texture will be mipmap 7275bd8deadSopenharmony_ci complete. 7285bd8deadSopenharmony_ci 7295bd8deadSopenharmony_ci DISCUSSION: Future separation between images and samplers will still 7305bd8deadSopenharmony_ci allow users to create combinations that are invalid, but 7315bd8deadSopenharmony_ci constraining the simple cases will make these APIs easier to use for 7325bd8deadSopenharmony_ci beginners. 7335bd8deadSopenharmony_ci 7345bd8deadSopenharmony_ci 14. Should these functions use a EXT_direct_state_access approach to 7355bd8deadSopenharmony_ci specifying the texture objects? 7365bd8deadSopenharmony_ci 7375bd8deadSopenharmony_ci UNRESOLVED. 7385bd8deadSopenharmony_ci 7395bd8deadSopenharmony_ci DISCUSSION: as a standalone extension, no DSA-like functions will be 7405bd8deadSopenharmony_ci added. However, interactions with EXT_direct_state_access and 7415bd8deadSopenharmony_ci ARB_direct_state_access need to be resolved. 7425bd8deadSopenharmony_ci 7435bd8deadSopenharmony_ci 15. Should these functions accept generic compressed formats? 7445bd8deadSopenharmony_ci 7455bd8deadSopenharmony_ci RESOLVED: Yes. Note that the spec language will need to be modified 7465bd8deadSopenharmony_ci to allow this for ES, since the pseudocode is written in terms of 7475bd8deadSopenharmony_ci TexImage2D, which does not allow compressed texture formats in ES. 7485bd8deadSopenharmony_ci See also issues 23 and 27. 7495bd8deadSopenharmony_ci 7505bd8deadSopenharmony_ci 16. How should completeness be forced when TEXTURE_MAX_LEVEL is not 7515bd8deadSopenharmony_ci present? 7525bd8deadSopenharmony_ci 7535bd8deadSopenharmony_ci RESOLVED. The maximum level q will be redefined to clamp to the 7545bd8deadSopenharmony_ci highest level available. 7555bd8deadSopenharmony_ci 7565bd8deadSopenharmony_ci DISCUSSION: A single-level texture can be made complete either by 7575bd8deadSopenharmony_ci making it mipmap complete (by setting TEXTURE_MAX_LEVEL to 0) or by 7585bd8deadSopenharmony_ci turning off mipmapping (by choose an appropriate minification 7595bd8deadSopenharmony_ci filter). 7605bd8deadSopenharmony_ci 7615bd8deadSopenharmony_ci Some options: 7625bd8deadSopenharmony_ci 7635bd8deadSopenharmony_ci A: Specify that TexStorage* changes the default minification filter 7645bd8deadSopenharmony_ci for OpenGL ES. This makes it awkward to add TEXTURE_MAX_LEVEL 7655bd8deadSopenharmony_ci support to OpenGL ES later, since switching to match GL would break 7665bd8deadSopenharmony_ci compatibility. The two mechanisms also do not give identical 7675bd8deadSopenharmony_ci results, since the magnification threshold depends on the 7685bd8deadSopenharmony_ci minification filter. 7695bd8deadSopenharmony_ci 7705bd8deadSopenharmony_ci B: Specify that the texture behaves as though TEXTURE_MAX_LEVEL were 7715bd8deadSopenharmony_ci zero. To specify this properly probably requires fairly intrusive 7725bd8deadSopenharmony_ci changes to the OpenGL ES full specification to add back all the 7735bd8deadSopenharmony_ci language relating to the max level. It also does not solve the 7745bd8deadSopenharmony_ci similar problem of what to do with NPOT textures; and it may have 7755bd8deadSopenharmony_ci hardware impacts due to the change in the min/mag crossover. 7765bd8deadSopenharmony_ci 7775bd8deadSopenharmony_ci C: Specify that TexStorage* changes the default minification filter 7785bd8deadSopenharmony_ci for all implementations when a single-level texture is specified. 7795bd8deadSopenharmony_ci This may be slightly counter-intuitive to desktop GL users, but will 7805bd8deadSopenharmony_ci give consistent behaviour across variants of GL and avoids changing 7815bd8deadSopenharmony_ci the functional behaviour of this extension based on the presence or 7825bd8deadSopenharmony_ci absence of some other feature. 7835bd8deadSopenharmony_ci 7845bd8deadSopenharmony_ci Currently B is specified. This has potential hardware implications 7855bd8deadSopenharmony_ci for OpenGL ES because of the effect of the minification filter on 7865bd8deadSopenharmony_ci the min/mag crossover. However, C has potential hardware implications 7875bd8deadSopenharmony_ci for OpenGL due to the separation of texture and sampler state. 7885bd8deadSopenharmony_ci 7895bd8deadSopenharmony_ci 17. How should completeness be forced when only ES2-style NPOT is 7905bd8deadSopenharmony_ci available? 7915bd8deadSopenharmony_ci 7925bd8deadSopenharmony_ci RESOLVED. It is not worth trying to do this, in light of issue 13. 7935bd8deadSopenharmony_ci 7945bd8deadSopenharmony_ci Previous revisions of this extension overrode the minification 7955bd8deadSopenharmony_ci filter and wrap modes, but that is no longer the case. Since 7965bd8deadSopenharmony_ci OES_texture_npot removes the caveats on NPOT textures anyway, it 7975bd8deadSopenharmony_ci might not be worth trying to "fix" this. 7985bd8deadSopenharmony_ci 7995bd8deadSopenharmony_ci 18. For OpenGL ES, how do the new sized internal formats interact 8005bd8deadSopenharmony_ci with OES_required_internal_format? 8015bd8deadSopenharmony_ci 8025bd8deadSopenharmony_ci RESOLVED. 8035bd8deadSopenharmony_ci 8045bd8deadSopenharmony_ci If OES_required_internal_format is not present, then the 8055bd8deadSopenharmony_ci <internalformat> parameter is intended merely to indicate what the 8065bd8deadSopenharmony_ci corresponding <format> and <type> would have been, had TexImage* 8075bd8deadSopenharmony_ci been used instead. If OES_required_internal_format is present, then 8085bd8deadSopenharmony_ci it is intended that the <internalformat> will be interpreted as if 8095bd8deadSopenharmony_ci it had been passed directly to TexImage*. 8105bd8deadSopenharmony_ci 8115bd8deadSopenharmony_ci 19. Should there be some hinting mechanism to indicate whether data 8125bd8deadSopenharmony_ci is coming immediately or later? 8135bd8deadSopenharmony_ci 8145bd8deadSopenharmony_ci RESOLVED. No parameter is needed. An extension can be added to provide 8155bd8deadSopenharmony_ci a TexParameter value which is latched at TexStorage time. 8165bd8deadSopenharmony_ci 8175bd8deadSopenharmony_ci DISCUSSION: Some members felt that this would be useful so that they 8185bd8deadSopenharmony_ci could defer allocation when suitable, particularly if higher- 8195bd8deadSopenharmony_ci resolution images will be streamed in later; or to choose a memory 8205bd8deadSopenharmony_ci type or layout appropriate to the usage. However, implementation 8215bd8deadSopenharmony_ci experience with BufferData is that developers frequently provide 8225bd8deadSopenharmony_ci wrong values and implementations have to guess anyway. 8235bd8deadSopenharmony_ci 8245bd8deadSopenharmony_ci One option suggested was the <usage> parameter currently passed to 8255bd8deadSopenharmony_ci BufferData. Another option was to set it with TexParameter. 8265bd8deadSopenharmony_ci 8275bd8deadSopenharmony_ci 20. How should this extension interact with 8285bd8deadSopenharmony_ci EGLImageTargetTexture2DOES, eglBindTexImage, glXBindTexImage and 8295bd8deadSopenharmony_ci wglBindTexImage? 8305bd8deadSopenharmony_ci 8315bd8deadSopenharmony_ci RESOLVED. These functions will not be permitted after glTexStorage*. 8325bd8deadSopenharmony_ci 8335bd8deadSopenharmony_ci Several options are possible: 8345bd8deadSopenharmony_ci 8355bd8deadSopenharmony_ci A) Disallow these functions. 8365bd8deadSopenharmony_ci B) Allow them, but have them reset the TEXTURE_IMMUTABLE_FORMAT 8375bd8deadSopenharmony_ci flag. 8385bd8deadSopenharmony_ci C) Allow them unconditionally. 8395bd8deadSopenharmony_ci 8405bd8deadSopenharmony_ci C would violate the design principle that the dimensions and format 8415bd8deadSopenharmony_ci of the mipmap array are immutable. B does not so much modify the 8425bd8deadSopenharmony_ci dimension and formats as replace them with an entirely different 8435bd8deadSopenharmony_ci set. 8445bd8deadSopenharmony_ci 8455bd8deadSopenharmony_ci 21. Should there be a single function for specifying 1D, 2D and 3D 8465bd8deadSopenharmony_ci targets? 8475bd8deadSopenharmony_ci 8485bd8deadSopenharmony_ci RESOLVED. No, we will stick with existing precedent. 8495bd8deadSopenharmony_ci 8505bd8deadSopenharmony_ci 22. Is it possible to use GenerateMipmap with an incomplete mipmap 8515bd8deadSopenharmony_ci pyramid? 8525bd8deadSopenharmony_ci 8535bd8deadSopenharmony_ci RESOLVED. Yes, because the effective max level is limited to the 8545bd8deadSopenharmony_ci levels that were specified, and so GenerateMipmap does not generate 8555bd8deadSopenharmony_ci any new levels. 8565bd8deadSopenharmony_ci 8575bd8deadSopenharmony_ci However, to make automatic mipmap generation work, it is necessary 8585bd8deadSopenharmony_ci to redefine p rather than q, since automatic mipmap generation 8595bd8deadSopenharmony_ci ignores the max level. 8605bd8deadSopenharmony_ci 8615bd8deadSopenharmony_ci 23. How should this extension interact with 8625bd8deadSopenharmony_ci OES_compressed_paletted_texture? 8635bd8deadSopenharmony_ci 8645bd8deadSopenharmony_ci RESOLVED. Paletted textures will not be permitted, and will 8655bd8deadSopenharmony_ci generate INVALID_ENUM. 8665bd8deadSopenharmony_ci 8675bd8deadSopenharmony_ci DISCUSSION: OES_compressed_paletted_texture supplies all the mipmaps 8685bd8deadSopenharmony_ci in a single function call, with the palette specified once. That's 8695bd8deadSopenharmony_ci incompatible with the upload model in this extension. 8705bd8deadSopenharmony_ci 8715bd8deadSopenharmony_ci 24. How can ETC1 textures be used with this extension? 8725bd8deadSopenharmony_ci 8735bd8deadSopenharmony_ci RESOLVED. Add language in this extension to allow subregion uploads 8745bd8deadSopenharmony_ci for ETC1. 8755bd8deadSopenharmony_ci 8765bd8deadSopenharmony_ci DISCUSSION: GL_OES_compressed_ETC1_RGB8_texture doesn't allow 8775bd8deadSopenharmony_ci CompressedTexSubImage*, so it would be impossible to use this 8785bd8deadSopenharmony_ci extension with ETC1. This is seen as an oversight in the ETC1 8795bd8deadSopenharmony_ci extension. While it cannot be fixed in that extension (since it is 8805bd8deadSopenharmony_ci already shipping), this extension can add that capability. 8815bd8deadSopenharmony_ci 8825bd8deadSopenharmony_ci 25. Should any other compressed formats be similarly modified? 8835bd8deadSopenharmony_ci 8845bd8deadSopenharmony_ci RESOLVED. Yes, AMD_compressed_ATC_texture and 8855bd8deadSopenharmony_ci AMD_compressed_3DC_texture can be modified similarly to ETC1 8865bd8deadSopenharmony_ci (Maurice Ribble indicated that both formats use 4x4 blocks). Desktop 8875bd8deadSopenharmony_ci OpenGL requires that whole-image replacement is supported for any 8885bd8deadSopenharmony_ci compressed texture format, and the OpenGL ES extensions 8895bd8deadSopenharmony_ci EXT_texture_compression_dxt1 and IMG_texture_compression_pvrtc 8905bd8deadSopenharmony_ci already allow whole-image replacement, so it is not necessary to 8915bd8deadSopenharmony_ci modify them to be used with this extension. 8925bd8deadSopenharmony_ci 8935bd8deadSopenharmony_ci 26. Should these commands be permitted in display lists? 8945bd8deadSopenharmony_ci 8955bd8deadSopenharmony_ci RESOLVED. No. 8965bd8deadSopenharmony_ci 8975bd8deadSopenharmony_ci DISCUSSION: Display lists are most useful for repeating commands, 8985bd8deadSopenharmony_ci and TexStorage* commands cannot be repeated because the first call 8995bd8deadSopenharmony_ci makes the format immutable. 9005bd8deadSopenharmony_ci 9015bd8deadSopenharmony_ci 27. Should these commands accept unsized internal formats? 9025bd8deadSopenharmony_ci 9035bd8deadSopenharmony_ci RESOLVED: No, for both OpenGL and OpenGL ES. 9045bd8deadSopenharmony_ci 9055bd8deadSopenharmony_ci DISCUSSION: normally the <type> parameter to TexImage* can serve as 9065bd8deadSopenharmony_ci a hint to select a sized format (and in OpenGL ES, this is the only 9075bd8deadSopenharmony_ci mechanism available); since TexStorage* does not have a <type> 9085bd8deadSopenharmony_ci parameter, the implementation has no information on which to base a 9095bd8deadSopenharmony_ci decision. 9105bd8deadSopenharmony_ci 9115bd8deadSopenharmony_ciRevision History 9125bd8deadSopenharmony_ci 9135bd8deadSopenharmony_ci Revision 26, 2013/08/07 (mjk) 9145bd8deadSopenharmony_ci - Better indicate DSA entrypoints 9155bd8deadSopenharmony_ci 9165bd8deadSopenharmony_ci Revision 25, 2012/01/19 (bmerry) 9175bd8deadSopenharmony_ci - Clarify that the pixel unpack buffer has no effect. 9185bd8deadSopenharmony_ci 9195bd8deadSopenharmony_ci Revision 24, 2011/11/10 (bmerry) 9205bd8deadSopenharmony_ci - Updated my contact details 9215bd8deadSopenharmony_ci 9225bd8deadSopenharmony_ci Revision 23, 2011/07/25 (bmerry) 9235bd8deadSopenharmony_ci - Remove dangling references to MultiTexStorage in Errors section 9245bd8deadSopenharmony_ci 9255bd8deadSopenharmony_ci Revision 22, 2011/07/21 (bmerry) 9265bd8deadSopenharmony_ci - Remove dangling reference to <samples> in Errors section 9275bd8deadSopenharmony_ci 9285bd8deadSopenharmony_ci Revision 21, 2011/06/13 (dgkoch) 9295bd8deadSopenharmony_ci - restore EXT suffixes on TextureStorage commands since they are 9305bd8deadSopenharmony_ci additions to EXT_direct_state_access 9315bd8deadSopenharmony_ci - restore EXT suffixes on Alpha/Luminance tokens 9325bd8deadSopenharmony_ci 9335bd8deadSopenharmony_ci Revision 20, 2011/06/13 (dgkoch) 9345bd8deadSopenharmony_ci - make ARB extension from EXT_texture_storage (rev 19) 9355bd8deadSopenharmony_ci 9365bd8deadSopenharmony_ci Revision 19, 2011/05/02 (Jon Leech) 9375bd8deadSopenharmony_ci - Assign enum value 9385bd8deadSopenharmony_ci 9395bd8deadSopenharmony_ci Revision 18, 2011/01/24 (bmerry) 9405bd8deadSopenharmony_ci - Disallow unsized internal formats (oversight in revision 17). 9415bd8deadSopenharmony_ci 9425bd8deadSopenharmony_ci Revision 17, 2011/01/24 (bmerry) 9435bd8deadSopenharmony_ci - Added and resolved issue 26. 9445bd8deadSopenharmony_ci - Split issue 27 out from issue 15. 9455bd8deadSopenharmony_ci - Disallow TexStorage* in display lists. 9465bd8deadSopenharmony_ci - Use the term "immutable-format" consistently (bug 7281). 9475bd8deadSopenharmony_ci 9485bd8deadSopenharmony_ci Revision 16, 2010/11/23 (bmerry) 9495bd8deadSopenharmony_ci - Disallowed TexStorage on an immutable-format texture 9505bd8deadSopenharmony_ci (resolves issue 5). 9515bd8deadSopenharmony_ci - Deleted MultiTexStorage* commands (other DSA functions still 9525bd8deadSopenharmony_ci unresolved). 9535bd8deadSopenharmony_ci - Some minor wording changes suggested by Pat Brown (bug 7002). 9545bd8deadSopenharmony_ci 9555bd8deadSopenharmony_ci Revision 15, 2010/11/09 (bmerry) 9565bd8deadSopenharmony_ci - Reopened issue 5. 9575bd8deadSopenharmony_ci - Reopened issue 14, pending stabilisation of 9585bd8deadSopenharmony_ci ARB_direct_state_access. 9595bd8deadSopenharmony_ci - Marked issue 9 resolved, pending any objections. 9605bd8deadSopenharmony_ci - Fix references to no object being bound (was meant to refer to 9615bd8deadSopenharmony_ci the default object). 9625bd8deadSopenharmony_ci - Adding missing pseudocode for TEXTURE_1D_ARRAY. 9635bd8deadSopenharmony_ci - Corrected TEXTURE_2D_ARRAY -> TEXTURE_1D_ARRAY in error checks. 9645bd8deadSopenharmony_ci - Changed "levels... are removed" to "levels... are reset to their 9655bd8deadSopenharmony_ci init state", since desktop GL has per-level state apart from the 9665bd8deadSopenharmony_ci texels. 9675bd8deadSopenharmony_ci - Miscellaneous wording fixes. 9685bd8deadSopenharmony_ci 9695bd8deadSopenharmony_ci Revision 14, 2010/09/25 (bmerry) 9705bd8deadSopenharmony_ci - Add issues 24-25 and alterations to 9715bd8deadSopenharmony_ci OES_compressed_ETC1_RGB8_texture, AMD_compressed_ATC_texture and 9725bd8deadSopenharmony_ci AMD_compressed_3DC_texture. 9735bd8deadSopenharmony_ci 9745bd8deadSopenharmony_ci Revision 13, 2010/09/19 (bmerry) 9755bd8deadSopenharmony_ci - Two typo fixes from Daniel Koch 9765bd8deadSopenharmony_ci 9775bd8deadSopenharmony_ci Revision 12, 2010/09/18 (bmerry) 9785bd8deadSopenharmony_ci - Changed resolution to issue 20 9795bd8deadSopenharmony_ci - Added and resolved issue 23 9805bd8deadSopenharmony_ci - Added explanation of how to upload data (in overview) 9815bd8deadSopenharmony_ci - Added spec language to implement resolution to issue 15 9825bd8deadSopenharmony_ci 9835bd8deadSopenharmony_ci Revision 11, 2010/07/21 (bmerry) 9845bd8deadSopenharmony_ci - Resolved issue 16 9855bd8deadSopenharmony_ci - Reopen issue 20 9865bd8deadSopenharmony_ci - Fix some typos 9875bd8deadSopenharmony_ci 9885bd8deadSopenharmony_ci Revision 10, 2010/07/15 (bmerry) 9895bd8deadSopenharmony_ci - Update some issues to match core text 9905bd8deadSopenharmony_ci - Resolved issue 17 9915bd8deadSopenharmony_ci 9925bd8deadSopenharmony_ci Revision 9, 2010/05/24 (bmerry) 9935bd8deadSopenharmony_ci - Marked issue 2 as resolved 9945bd8deadSopenharmony_ci - Resolved issue 19 (as no change) 9955bd8deadSopenharmony_ci - Resolved issue 20 9965bd8deadSopenharmony_ci - Add issues 21-22 9975bd8deadSopenharmony_ci - Add in spec language to forbid use on default textures 9985bd8deadSopenharmony_ci - Redefine level_base, level_max to be clamped forms of 9995bd8deadSopenharmony_ci TEXTURE_BASE_LEVEL/TEXTURE_MAX_LEVEL when using immutable 10005bd8deadSopenharmony_ci textures 10015bd8deadSopenharmony_ci - Redefine p to also be clamped to the provided levels for 10025bd8deadSopenharmony_ci immutable textures, to support automatic mipmap generation 10035bd8deadSopenharmony_ci - Removed multisample functions 10045bd8deadSopenharmony_ci - Removed language stating that texture parameters were reset to 10055bd8deadSopenharmony_ci defaults 10065bd8deadSopenharmony_ci 10075bd8deadSopenharmony_ci Revision 8, 2010/05/18 (bmerry) 10085bd8deadSopenharmony_ci - Added issue about EGLimage 10095bd8deadSopenharmony_ci - Marked issue 14 as resolved 10105bd8deadSopenharmony_ci 10115bd8deadSopenharmony_ci Revision 7, 2010/05/04 (bmerry) 10125bd8deadSopenharmony_ci - Removed some lingering <format>, <type> parameters to the new 10135bd8deadSopenharmony_ci functions that should have been removed in revision 4 10145bd8deadSopenharmony_ci - Trivial typo fixes 10155bd8deadSopenharmony_ci 10165bd8deadSopenharmony_ci Revision 6, 2010/02/18 (bmerry) 10175bd8deadSopenharmony_ci - Resolved issues 5, 6 and 18 10185bd8deadSopenharmony_ci - Added MultiTexStorage* functions for DSA interaction 10195bd8deadSopenharmony_ci - Added error for texture-target mismatch in DSA 10205bd8deadSopenharmony_ci - Allowed TexStorage* to be called again 10215bd8deadSopenharmony_ci 10225bd8deadSopenharmony_ci Revision 5, 2010/01/25 (bmerry) 10235bd8deadSopenharmony_ci - Added to contributors list 10245bd8deadSopenharmony_ci - Require OpenGL 1.2, to simplify interactions with 10255bd8deadSopenharmony_ci TEXTURE_BASE_LEVEL/TEXTURE_MAX_LEVEL and CLAMP_TO_EDGE 10265bd8deadSopenharmony_ci - Change default wrap modes to always be CLAMP_TO_EDGE 10275bd8deadSopenharmony_ci - Change default filters to always be NEAREST 10285bd8deadSopenharmony_ci - Moved language about generating new levels into an interaction, 10295bd8deadSopenharmony_ci since it can only happen on OpenGL ES 10305bd8deadSopenharmony_ci - Added interaction with EXT_direct_state_access 10315bd8deadSopenharmony_ci - Added extra <internalformats> for GL ES when OES_depth_texture, 10325bd8deadSopenharmony_ci OES_packed_depth_stencil and EXT_texture_type_2_10_10_10_REV are 10335bd8deadSopenharmony_ci present. 10345bd8deadSopenharmony_ci - Minor non-functional wording fixes and typos 10355bd8deadSopenharmony_ci - Resolved issue 16 10365bd8deadSopenharmony_ci - Added issues 17-19 10375bd8deadSopenharmony_ci 10385bd8deadSopenharmony_ci Revision 4, 2010/01/13 (bmerry) 10395bd8deadSopenharmony_ci - Changed suffix from ARM to EXT 10405bd8deadSopenharmony_ci - Added list of contributors 10415bd8deadSopenharmony_ci - Added language to force the texture to always be complete 10425bd8deadSopenharmony_ci - Removed <format> and <type> arguments 10435bd8deadSopenharmony_ci - Added issues 14-16 10445bd8deadSopenharmony_ci - Reopened issue 2 10455bd8deadSopenharmony_ci - Reformatted issues to separate resolution and discussion 10465bd8deadSopenharmony_ci - Resolved issues 1, 9 and 11-13 10475bd8deadSopenharmony_ci - Fixed the max number of levels in a cube map array 10485bd8deadSopenharmony_ci 10495bd8deadSopenharmony_ci Revision 3, 2009/12/17 (bmerry) 10505bd8deadSopenharmony_ci - Added missing vendor suffix to TEXTURE_IMMUTABLE_FORMAT_ARM 10515bd8deadSopenharmony_ci - Rewritten to against desktop OpenGL 10525bd8deadSopenharmony_ci - Added prototypes for 1D and multisample storage functions 10535bd8deadSopenharmony_ci - Added issues 8-13 10545bd8deadSopenharmony_ci 10555bd8deadSopenharmony_ci Revision 2, 2009/08/20 (bmerry) 10565bd8deadSopenharmony_ci - Resolved issue 2 (no border parameter) 10575bd8deadSopenharmony_ci - Resolved issue 4 (metadata becomes immutable) 10585bd8deadSopenharmony_ci - Added interaction with OES_texture_cube_map 10595bd8deadSopenharmony_ci - Added error if width != height in a cube map 10605bd8deadSopenharmony_ci - Added issues 5-7 10615bd8deadSopenharmony_ci 10625bd8deadSopenharmony_ci Revision 1, 2009/05/06 (bmerry) 10635bd8deadSopenharmony_ci - First draft 1064