|
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 |