File: extension.xml

package info (click to toggle)
rust-khronos-api 3.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 6,704 kB
  • sloc: xml: 114,180; makefile: 4
file content (185 lines) | stat: -rw-r--r-- 9,791 bytes parent folder | download | duplicates (46)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<?xml version="1.0"?>

<ratified href="WEBGL_draw_buffers/">
  <name>WEBGL_draw_buffers</name>
  <contact>
    <a href="https://www.khronos.org/webgl/public-mailing-list/">WebGL working group</a> (public_webgl 'at' khronos.org)
  </contact>
  <contributors>
    <contributor>Members of the WebGL working group</contributor>
  </contributors>
  <number>18</number>
  <depends>
    <api version="1.0"/>
    <core version="2.0">
      <glsl version="300 es"/>
    </core>
  </depends>
  <overview>
    <mirrors href="https://www.khronos.org/registry/gles/extensions/EXT/EXT_draw_buffers.txt" name="EXT_draw_buffers">
      <addendum>
        The implementation must support a minimum of 4 color attachments.
      </addendum>
      <addendum>
        The value of the <code>MAX_COLOR_ATTACHMENTS_WEBGL</code> parameter must be greater than or
        equal to that of the <code>MAX_DRAW_BUFFERS_WEBGL</code> parameter.
      </addendum>
      <addendum>
        If:
        <ul>
          <li> A framebuffer's color attachments are all textures allocated with format <code>RGBA</code>
               and type <code>UNSIGNED_BYTE</code>, and </li>
          <li> The framebuffer has either:
            <ul>
              <li> No depth or stencil attachment </li>
              <li> A valid <code>DEPTH</code> or <code>DEPTH_STENCIL</code> attachment </li>
            </ul></li>
        </ul>
        Then a call to <code>checkFramebufferStatus</code> against this framebuffer must not return
        <code>FRAMEBUFFER_UNSUPPORTED</code>. (In other words, the implementation must support the
        use of <code>RGBA/UNSIGNED_BYTE</code> textures as color attachments, plus either a
        <code>DEPTH</code> or <code>DEPTH_STENCIL</code> attachment.)
      </addendum>
      <addendum>
        Attaching <code>n</code> consecutive color attachments starting at COLOR_ATTACHMENT0_WEBGL,
        where <code>n</code> is between 1 and <code>MAX_DRAW_BUFFERS_WEBGL</code>, must not return
        <code>FRAMEBUFFER_UNSUPPORTED</code> from a call to <code>checkFramebufferStatus</code>. In
        other words, if <code>MAX_DRAW_BUFFERS_WEBGL</code> is 4, then the implementation is
        required to support the following combinations of color attachments:

        <ul>
          <li> <code>COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE</code></li>
          <li> <code>COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
               <code>COLOR_ATTACHMENT1_WEBGL = RGBA/UNSIGNED_BYTE</code><br/></li>
          <li> <code>COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
               <code>COLOR_ATTACHMENT1_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
               <code>COLOR_ATTACHMENT2_WEBGL = RGBA/UNSIGNED_BYTE</code><br/></li>
          <li> <code>COLOR_ATTACHMENT0_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
               <code>COLOR_ATTACHMENT1_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
               <code>COLOR_ATTACHMENT2_WEBGL = RGBA/UNSIGNED_BYTE</code><br/>
               <code>COLOR_ATTACHMENT3_WEBGL = RGBA/UNSIGNED_BYTE</code><br/></li>
        </ul>
      </addendum>
      <addendum>
        Although the extension name is prefixed with WEBGL the extension must be enabled with the 
        <code>#extension GL_EXT_draw_buffers</code> directive, as shown in the sample code, to use
        the extension in a shader.

        Likewise the shading language preprocessor <code>#define GL_EXT_draw_buffers</code>, will be defined to 1 if the extension is supported.
      </addendum>
      <addendum>
        The value of <code>gl_MaxDrawBuffers</code> must match <code>MAX_DRAW_BUFFERS_WEBGL</code> from the API if the extension is enabled in a WebGL context; otherwise, the value must be 1. Whether or not the extension is enabled with the <code>#extension GL_EXT_draw_buffers</code> directive in a shader does not affect the value of <code>gl_MaxDrawBuffers</code>. The value of <code>gl_MaxDrawBuffers</code> is a constant in the shader, and is guaranteed to be frozen at program link time. It is implementation-dependent whether it is frozen at shader compile time. (A consequence is that if a program is linked, and later the WEBGL_draw_buffers extension is enabled, the value of <code>gl_MaxDrawBuffers</code> seen by that program will still be 1.)
      </addendum>
      <addendum>
        If the WEBGL_draw_buffers extension is enabled, but the fragment shader does not contain the <code>#extension GL_EXT_draw_buffers</code> directive to enable it, then writes to <code>gl_FragColor</code> are only written to <code>COLOR_ATTACHMENT0_WEBGL</code>, and not broadcast to all color attachments. In this scenario, other color attachments are guaranteed to remain untouched.
      </addendum>
      <addendum>
        If a fragment shader writes to neither <code>gl_FragColor</code> nor <code>gl_FragData</code>, the values of
        the fragment colors following shader execution are untouched.

        If a fragment shader contains the <code>#extension GL_EXT_draw_buffers</code> directive, all
        <code>gl_FragData</code> variables (from <code>gl_FragData[0]</code> to <code>gl_FragData[MAX_DRAW_BUFFERS_WEBGL - 1]</code>)
        default to zero if no values are written to them during a shader execution.
      </addendum>
      <addendum>
        If an image is attached to more than one color attachment point in a framebuffer, <code>checkFramebufferStatus</code>
        returns <code>FRAMEBUFFER_UNSUPPORTED</code>. An image can be an individual mip level, or a face of cube map.
      </addendum>
    </mirrors>
    <features>
      <feature>
      Adds support for multiple color buffers and color outputs from fragment shaders.
      </feature>
    </features>
  </overview>
  <idl xml:space="preserve">
[NoInterfaceObject]
interface WEBGL_draw_buffers {
    const GLenum COLOR_ATTACHMENT0_WEBGL     = 0x8CE0;
    const GLenum COLOR_ATTACHMENT1_WEBGL     = 0x8CE1;
    const GLenum COLOR_ATTACHMENT2_WEBGL     = 0x8CE2;
    const GLenum COLOR_ATTACHMENT3_WEBGL     = 0x8CE3;
    const GLenum COLOR_ATTACHMENT4_WEBGL     = 0x8CE4;
    const GLenum COLOR_ATTACHMENT5_WEBGL     = 0x8CE5;
    const GLenum COLOR_ATTACHMENT6_WEBGL     = 0x8CE6;
    const GLenum COLOR_ATTACHMENT7_WEBGL     = 0x8CE7;
    const GLenum COLOR_ATTACHMENT8_WEBGL     = 0x8CE8;
    const GLenum COLOR_ATTACHMENT9_WEBGL     = 0x8CE9;
    const GLenum COLOR_ATTACHMENT10_WEBGL    = 0x8CEA;
    const GLenum COLOR_ATTACHMENT11_WEBGL    = 0x8CEB;
    const GLenum COLOR_ATTACHMENT12_WEBGL    = 0x8CEC;
    const GLenum COLOR_ATTACHMENT13_WEBGL    = 0x8CED;
    const GLenum COLOR_ATTACHMENT14_WEBGL    = 0x8CEE;
    const GLenum COLOR_ATTACHMENT15_WEBGL    = 0x8CEF;

    const GLenum DRAW_BUFFER0_WEBGL          = 0x8825;
    const GLenum DRAW_BUFFER1_WEBGL          = 0x8826;
    const GLenum DRAW_BUFFER2_WEBGL          = 0x8827;
    const GLenum DRAW_BUFFER3_WEBGL          = 0x8828;
    const GLenum DRAW_BUFFER4_WEBGL          = 0x8829;
    const GLenum DRAW_BUFFER5_WEBGL          = 0x882A;
    const GLenum DRAW_BUFFER6_WEBGL          = 0x882B;
    const GLenum DRAW_BUFFER7_WEBGL          = 0x882C;
    const GLenum DRAW_BUFFER8_WEBGL          = 0x882D;
    const GLenum DRAW_BUFFER9_WEBGL          = 0x882E;
    const GLenum DRAW_BUFFER10_WEBGL         = 0x882F;
    const GLenum DRAW_BUFFER11_WEBGL         = 0x8830;
    const GLenum DRAW_BUFFER12_WEBGL         = 0x8831;
    const GLenum DRAW_BUFFER13_WEBGL         = 0x8832;
    const GLenum DRAW_BUFFER14_WEBGL         = 0x8833;
    const GLenum DRAW_BUFFER15_WEBGL         = 0x8834;

    const GLenum MAX_COLOR_ATTACHMENTS_WEBGL = 0x8CDF;
    const GLenum MAX_DRAW_BUFFERS_WEBGL      = 0x8824;

    void drawBuffersWEBGL(sequence&lt;GLenum&gt; buffers);
};
  </idl>
  <samplecode xml:space="preserve">
    <pre>
    #extension GL_EXT_draw_buffers : require
    precision mediump float;
    void main() {
        gl_FragData[0] = vec4(1.0, 0.0, 0.0, 1.0);
        gl_FragData[1] = vec4(0.0, 1.0, 0.0, 1.0);
        gl_FragData[2] = vec4(0.0, 0.0, 1.0, 1.0);
        gl_FragData[3] = vec4(1.0, 1.0, 1.0, 1.0);
    }
    </pre>
  </samplecode>
  <history>
    <revision date="2012/10/16">
      <change>Initial revision.</change>
    </revision>
    <revision date="2012/11/05">
      <change>Corrected typo in drawBuffersWEBGL. Changed referenced spec version to 1.0 to fix broken link.</change>
    </revision>
    <revision date="2013/02/02">
      <change>Renamed to EXT_draw_buffers per plan of OpenGL ES working group. Moved to draft status. Assigned number.</change>
    </revision>
    <revision date="2013/03/05">
      <change>Renamed to WEBGL_draw_buffers per discussion on public_webgl list. Added guarantees to make it easier for developers to use the extension.</change>
    </revision>
    <revision date="2013/06/07">
      <change>Clarified naming of shader directives.</change>
    </revision>
    <revision date="2014/07/15">
      <change>Added NoInterfaceObject extended attribute.</change>
    </revision>
    <revision date="2014/08/08">
      <change>Ratified by Khronos Board of Promoters.</change>
    </revision>
    <revision date="2016/06/28">
      <change>Revised behavior of gl_MaxDrawBuffers and gl_FragColor broadcasting, to avoid significant performance impact for WebGL 1.0 implementations running on top of the desktop OpenGL API.</change>
    </revision>
    <revision date="2016/07/08">
      <change>Removed undefined behaviors.</change>
    </revision>
    <revision date="2016/07/11">
      <change>Revised user-defined variable behavior to default to zero.</change>
    </revision>
    <revision date="2016/07/23">
      <change>Revised behavior of the same image is attached to more than one color attachment point.</change>
    </revision>
  </history>
</ratified>