1 Name 2 3 ANGLE_texture_usage 4 5 Name Strings 6 7 GL_ANGLE_texture_usage 8 9 Contributors 10 11 Nicolas Capens, TransGaming 12 Daniel Koch, TransGaming 13 14 Contact 15 16 Daniel Koch, TransGaming (daniel 'at' transgaming.com) 17 18 Status 19 20 Complete 21 22 Version 23 24 Last Modified Date: November 10, 2011 25 Version: 2 26 27 Number 28 29 OpenGL ES Extension #112 30 31 Dependencies 32 33 This extension is written against the OpenGL ES 2.0 Specification. 34 35 Overview 36 37 In some implementations it is advantageous to know the expected 38 usage of a texture before the backing storage for it is allocated. 39 This can help to inform the implementation's choice of format 40 and type of memory used for the allocation. If the usage is not 41 known in advance, the implementation essentially has to make a 42 guess as to how it will be used. If it is later proven wrong, 43 it may need to perform costly re-allocations and/or reformatting 44 of the texture data, resulting in reduced performance. 45 46 This extension adds a texture usage flag that is specified via 47 the TEXTURE_USAGE_ANGLE TexParameter. This can be used to 48 indicate that the application knows that this texture will be 49 used for rendering. 50 51 IP Status 52 53 No known IP claims. 54 55 New Procedures and Functions 56 57 None 58 59 New Tokens 60 61 Accepted as a value for <pname> for the TexParameter{if} and 62 TexParameter{if}v commands and for the <value> parameter of 63 GetTexParameter{if}v: 64 65 TEXTURE_USAGE_ANGLE 0x93A2 66 67 Accepted as a value to <param> for the TexParameter{if} and 68 to <params> for the TexParameter{if}v commands with a <pname> of 69 TEXTURE_USAGE_ANGLE; returned as possible values for <data> when 70 GetTexParameter{if}v is queried with a <value> of TEXTURE_USAGE_ANGLE: 71 72 NONE 0x0000 73 FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 74 75 Additions to Chapter 2 of the OpenGL ES 2.0 Specification (OpenGL ES Operation) 76 77 None 78 79 Additions to Chapter 3 of the OpenGL ES 2.0 Specification (Rasterization) 80 81 Add a new row to Table 3.10 (Texture parameters and their values): 82 83 Name | Type | Legal Values 84 ------------------------------------------------------------ 85 TEXTURE_USAGE_ANGLE | enum | NONE, FRAMEBUFFER_ATTACHMENT_ANGLE 86 87 Add a new section 3.7.x (Texture Usage) before section 3.7.12 and 88 renumber the subsequent sections: 89 90 "3.7.x Texture Usage 91 92 Texture usage can be specified via the TEXTURE_USAGE_ANGLE value 93 for the <pname> argument to TexParameter{if}[v]. In order to take effect, 94 the texture usage must be specified before the texture contents are 95 defined either via TexImage2D or TexStorage2DEXT. 96 97 The usage values can impact the layout and type of memory used for the 98 texture data. Specifying incorrect usage values may result in reduced 99 functionality and/or significantly degraded performance. 100 101 Possible values for <params> when <pname> is TEXTURE_USAGE_ANGLE are: 102 103 NONE - the default. No particular usage has been specified and it is 104 up to the implementation to determine the usage of the texture. 105 Leaving the usage unspecified means that the implementation may 106 have to reallocate the texture data as the texture is used in 107 various ways. 108 109 FRAMEBUFFER_ATTACHMENT_ANGLE - this texture will be attached to a 110 framebuffer object and used as a desination for rendering or blits." 111 112 Modify section 3.7.12 (Texture State) and place the last 3 sentences 113 with the following: 114 115 "Next, there are the three sets of texture properties; each consists of 116 the selected minification and magnification filters, the wrap modes for 117 <s> and <t>, and the usage flags. In the initial state, the value assigned 118 to TEXTURE_MIN_FILTER is NEAREST_MIPMAP_LINEAR, and the value for 119 TEXTURE_MAG_FILTER is LINEAR. <s> and <t> wrap modes are both set to 120 REPEAT. The initial value for TEXTURE_USAGE_ANGLE is NONE." 121 122 123 Additions to Chapter 4 of the OpenGL ES 2.0 Specification (Per-Fragment 124 Operations and the Framebuffer) 125 126 None 127 128 Additions to Chapter 5 of the OpenGL ES 2.0 Specification (Special 129 Functions): 130 131 None 132 133 Additions to Chapter 6 of the OpenGL ES 2.0 Specification (State and 134 State Requests) 135 136 None 137 138 Dependencies on EXT_texture_storage 139 140 If EXT_texture_storage is not supported, omit any references to 141 TexStorage2DEXT. 142 143 Errors 144 145 If TexParameter{if} or TexParamter{if}v is called with a <pname> 146 of TEXTURE_USAGE_ANGLE and the value of <param> or <params> is not 147 NONE or FRAMEBUFFER_ATTACHMENT_ANGLE the error INVALID_VALUE is 148 generated. 149 150 Usage Example 151 152 /* create and bind texture */ 153 glGenTextures(1, &texture); 154 glActiveTexture(GL_TEXTURE0); 155 glBindTexture(GL_TEXTURE_2D, texture); 156 157 /* specify texture parameters */ 158 glTexParameteri(GL_TEXTURE_2D, GL_*, ...); /* as before */ 159 160 /* specify that we'll be rendering to the texture */ 161 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_USAGE_ANGLE, GL_FRAMEBUFFER_ATTACHMENT_ANGLE); 162 163 glTexStorage2DEXT(GL_TEXTURE_2D, levels, ...); // Allocation 164 for(int level = 0; level < levels; ++level) 165 glTexSubImage2D(GL_TEXTURE_2D, level, ...); // Initialisation 166 167 Issues 168 169 1. Should there be a dynamic usage value? 170 171 DISCUSSION: We could accept a dynamic flag to indicate that a texture will 172 be updated frequently. We could map this to D3D9 dynamic textures. This would 173 allow us to avoid creating temporary surfaces when updating the texture. 174 However renderable textures cannot be dynamic in D3D9, which eliminates the 175 primary use case for this. Furthermore, the memory usage of dynamic textures 176 typically increases threefold when you lock it. 177 178 2. Should the texture usage be an enum or a bitfield? 179 180 UNRESOLVED. Using a bitfield would allow combination of values to be specified. 181 On the other hand, if combinations are really required, additional <pnames> 182 could be added as necessary. Querying a bitfield via the GetTexParameter command 183 feels a bit odd. 184 185 3. What should happen if TEXTURE_USAGE_ANGLE is set/changed after the texture 186 contents have been specified? 187 188 RESOLVED: It will have no effect. However, if the texture is redefined (for 189 example by TexImage2D) the new allocation will use the updated usage. 190 GetTexParameter is used to query the value of the TEXTURE_USAGE_ANGLE 191 state that was last set by TexParameter for the currently bound texture, or 192 the default value if it has never been set. There is no way to determine the 193 usage that was in effect at the time the texture was defined. 194 195 Revision History 196 197 Rev. Date Author Changes 198 ---- ----------- --------- ---------------------------------------- 199 1 10 Nov 2011 dgkoch Initial revision 200 2 10 Nov 2011 dgkoch Add overview 201 202 203