OLD | NEW |
1 Name | 1 Name |
2 | 2 |
3 CHROMIUM_texture_mailbox | 3 CHROMIUM_texture_mailbox |
4 | 4 |
5 Name Strings | 5 Name Strings |
6 | 6 |
7 GL_CHROMIUM_texture_mailbox | 7 GL_CHROMIUM_texture_mailbox |
8 | 8 |
9 Version | 9 Version |
10 | 10 |
11 Last Modifed Date: April 25, 2012 | 11 Last Modifed Date: April 25, 2012 |
12 | 12 |
13 Dependencies | 13 Dependencies |
14 | 14 |
15 OpenGL ES 2.0 is required. | 15 OpenGL ES 2.0 is required. |
16 | 16 |
17 Overview | 17 Overview |
18 | 18 |
19 This extension defines a way of sharing texture image data between texture | 19 This extension defines a way of sharing texture image data between texture |
20 objects in different contexts where the contexts would not normally share | 20 objects in different contexts where the contexts would not normally share |
21 texture resources. Three new functions are exported. glGenMailboxCHROMIUM | 21 texture resources. Three new functions are exported. glGenMailboxCHROMIUM |
22 generates a name that can be used to identify texture image data outside | 22 generates a name that can be used to identify texture image data outside |
23 the scope of a context group. glProduceMailboxCHROMIUM moves texture image | 23 the scope of a context group. glProduceMailboxCHROMIUM associates a texture |
24 data out of a texture object and into a mailbox. glConsumeMailboxCHROMIUM | 24 object with a global mailbox name. glConsumeMailboxCHROMIUM associates the |
25 moves texture image data out of a mailbox and into a texture object. | 25 texture object referenced by a mailbox name to a texture name. |
26 | 26 |
27 New Procedures and Functions | 27 New Procedures and Functions |
28 | 28 |
29 void glGenMailboxCHROMIUM (GLbyte *mailbox) | 29 void glGenMailboxCHROMIUM (GLbyte *mailbox) |
30 | 30 |
31 Generates a unique name identifying a mailbox. The name is generated using | 31 Generates a unique name identifying a mailbox. The name is generated using |
32 a cryptographic random number generator and is intended to be difficult to | 32 a cryptographic random number generator and is intended to be difficult to |
33 guess. The scope of the name is implementation specific, for example it | 33 guess. The scope of the name is implementation specific, for example it |
34 might not span multiple displays. | 34 might not span multiple displays. |
35 | 35 |
36 <mailbox> returns a GL_MAILBOX_SIZE_CHROMIUM byte sized name | 36 <mailbox> returns a GL_MAILBOX_SIZE_CHROMIUM byte sized name |
37 | 37 |
38 | 38 |
39 void glProduceTextureCHROMIUM (GLenum target, const GLbyte *mailbox) | 39 void glProduceTextureCHROMIUM (GLenum target, const GLbyte *mailbox) |
40 | 40 |
41 Moves the image data and parameters of the currently bound texture object | 41 Associates the currently bound texture object with the mailbox name. A |
42 into the mailbox. The texture object is redefined as though all its levels | 42 given texture object can be associated with several mailbox names. If a |
43 had been resized to zero by zero and the texture object is therefore | 43 mailbox name was previously associated with a texture object, that |
44 incomplete. The texture object parameters are undefined. The texture | 44 previous association is broken. The currently bound texture object is not |
45 object is no longer immutable. If the mailbox previously contained image | 45 modified by the operation. |
46 data, the old image data is deleted. | |
47 | 46 |
48 If glProduceTextureCHROMIUM generates an error, the associated image data | 47 If glProduceTextureCHROMIUM generates an error, the mailbox name keeps its |
49 and state is preserved in the texture object. | 48 current association, if any. |
50 | 49 |
51 The mailbox is emptied and the texture image data deleted if the context | 50 The mailbox does not keep a reference to the texture object. When the |
52 is destroyed before being consumed. See glConsumeTextureCHROMIUM. | 51 texture object is destroyed (deleted from all context groups, and unbound |
| 52 from all texture units and framebuffer attachments), the mailbox is |
| 53 disassociated from the texture object. |
53 | 54 |
54 <target> uses the same parameters as TexImage2D. | 55 <target> uses the same parameters as TexImage2D. |
55 | 56 |
56 <mailbox> identifies a GL_MAILBOX_SIZE_CHROMIUM byte sized name returned by | 57 <mailbox> identifies a GL_MAILBOX_SIZE_CHROMIUM byte sized name returned by |
57 glGenMailboxCHROMIUM. | 58 glGenMailboxCHROMIUM. |
58 | 59 |
59 INVALID_OPERATION is generated if <target> is not a valid target. | 60 INVALID_OPERATION is generated if <target> is not a valid target. |
60 | 61 |
61 INVALID_OPERATION is generated if the texture is attached to a framebuffer. | |
62 | |
63 INVALID_OPERATION is generated if the texture is immutable. | |
64 | |
65 INVALID_OPERATION is generated if <mailbox> is invalid. | 62 INVALID_OPERATION is generated if <mailbox> is invalid. |
66 | 63 |
67 | 64 |
68 void glConsumeTextureCHROMIUM (GLenum target, const GLbyte *mailbox) | 65 void glConsumeTextureCHROMIUM (GLenum target, const GLbyte *mailbox) |
69 | 66 |
70 <target> uses the same parameters as TexImage2D. | 67 <target> uses the same parameters as TexImage2D. |
71 | 68 |
72 <mailbox> identifies a GL_MAILBOX_SIZE_CHROMIUM byte sized name returned by | 69 <mailbox> identifies a GL_MAILBOX_SIZE_CHROMIUM byte sized name returned by |
73 glGenMailboxCHROMIUM. | 70 glGenMailboxCHROMIUM. |
| 71 |
| 72 Deletes the currently bound texture object, and redefines its texture name |
| 73 to point to the texture object associated with the mailbox name. All the |
| 74 contexts that have consumed the texture object, as well as produced it share |
| 75 the texture object, as if the contexts were part of the share group. The |
| 76 texture object is deleted once all contexts have deleted the texture name |
| 77 associated with the texture object, and detached it from all framebuffer |
| 78 objects as well as texture unit bindings. See Appendix C of the OpenGL ES |
| 79 2.0 specification for details relative to visibility in one context of |
| 80 changes to the shared texture object in another context. |
74 | 81 |
75 Redefines the image data and parameters of the currently bound texture | 82 If glConsumeTextureCHROMIUM generates an error, the currently bound texture |
76 object with the image data and parameters in the mailbox and empties the | 83 object is preserved. |
77 mailbox. All levels are redefined, and the immutable state is set according | |
78 to the contents of the mailbox. | |
79 | |
80 If glConsumeTextureCHROMIUM generates an error, the associated image data | |
81 is preserved in the texture object. | |
82 | 84 |
83 INVALID_OPERATION is generated if <target> is not a valid target. | 85 INVALID_OPERATION is generated if <target> is not a valid target. |
84 | 86 |
85 INVALID_OPERATION is generated if <mailbox> is empty. | |
86 | |
87 INVALID_OPERATION is generated if <mailbox> is not in the scope of the | |
88 context. | |
89 | |
90 INVALID_OPERATION is generated if <mailbox> is invalid. | 87 INVALID_OPERATION is generated if <mailbox> is invalid. |
91 | 88 |
92 INVALID_OPERATION is generated if the texture is attached to a framebuffer. | 89 INVALID_OPERATION is generated if <mailbox> is not associated with a texture |
| 90 object. |
93 | 91 |
94 INVALID_OPERATION is generated if the texture is immutable. | 92 INVALID_OPERATION is generated if the texture object associated with |
| 93 <mailbox> has a different target than <target>. |
95 | 94 |
96 INVALID_OPERATION is generated if the image data is invalid in the current | 95 INVALID_OPERATION is generated if the currently bound texture was previously |
97 context. | 96 deleted (for example in another context), hence doesn't have a name. |
98 | 97 |
99 New Tokens | 98 New Tokens |
100 | 99 |
101 The size of a mailbox name in bytes. | 100 The size of a mailbox name in bytes. |
102 | 101 |
103 GL_MAILBOX_SIZE_CHROMIUM 64 | 102 GL_MAILBOX_SIZE_CHROMIUM 64 |
104 | 103 |
105 Errors | 104 Errors |
106 | 105 |
107 None. | 106 None. |
108 | 107 |
109 New Tokens | 108 New Tokens |
110 | 109 |
111 None. | 110 None. |
112 | 111 |
113 New State | 112 New State |
114 | 113 |
115 None. | 114 None. |
116 | 115 |
117 Revision History | 116 Revision History |
118 | 117 |
119 4/25/2011 Documented the extension | 118 4/25/2011 Documented the extension |
| 119 5/23/2013 Major revision in Produce/Consume semantics, introducing |
| 120 sharing. |
OLD | NEW |