Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(447)

Side by Side Diff: conformance/renderbuffers/framebuffer-object-attachment.html

Issue 8342021: Add webgl conformance tests r15841. (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/webgl/sdk/tests/
Patch Set: Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 <!--
2 Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 Use of this source code is governed by a BSD-style license that can be
4 found in the LICENSE file.
5 -->
6 <!DOCTYPE html>
7 <html>
8 <head>
9 <meta charset="utf-8">
10 <link rel="stylesheet" href="../../resources/js-test-style.css"/>
11 <script src="../../resources/js-test-pre.js"></script>
12 <script src="../resources/webgl-test.js"></script>
13 </head>
14 <body>
15 <div id="description"></div>
16 <div id="console"></div>
17
18 <script>
19
20 var gl;
21 var fbo;
22 var depthBuffer;
23 var stencilBuffer;
24 var depthStencilBuffer;
25 var colorBuffer;
26 var width;
27 var height;
28
29 function testAttachment(attachment, buffer, isConflicted)
30 {
31 shouldBeNonNull("fbo = gl.createFramebuffer()");
32 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
33 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBU FFER, colorBuffer);
34 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, buff er);
35 glErrorShouldBe(gl, gl.NO_ERROR);
36 // If the framebuffer is in an error state for multiple reasons,
37 // we can't guarantee which one will be reported.
38 if ((width == 0 || height == 0) && !isConflicted) {
39 // Zero-sized renderbuffers are supposed to result in an incomplete atta chment.
40 // However, certain combination may violate implementation specific rest rictions.
41 shouldBeTrue("gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFE R_INCOMPLETE_ATTACHMENT || gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAME BUFFER_UNSUPPORTED");
42 } else if (isConflicted) {
43 shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UN SUPPORTED");
44 gl.clear(gl.COLOR_BUFFER_BIT);
45 glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION);
46 gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8A rray(width * height * 4));
47 glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION);
48 }
49 }
50
51 function testAttachments(attachment0, buffer0, attachment1, buffer1, isConflicte d)
52 {
53 shouldBeNonNull("fbo = gl.createFramebuffer()");
54 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
55 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBU FFER, colorBuffer);
56 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment0, gl.RENDERBUFFER, buf fer0);
57 glErrorShouldBe(gl, gl.NO_ERROR);
58 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment1, gl.RENDERBUFFER, buf fer1);
59 glErrorShouldBe(gl, gl.NO_ERROR);
60 // If the framebuffer is in an error state for multiple reasons,
61 // we can't guarantee which one will be reported.
62 if ((width == 0 || height == 0) && !isConflicted) {
63 // Zero-sized renderbuffers are supposed to result in an incomplete atta chment.
64 // However, certain combination may violate implementation specific rest rictions.
65 shouldBeTrue("gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFE R_INCOMPLETE_ATTACHMENT || gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAME BUFFER_UNSUPPORTED");
66 } else if (isConflicted) {
67 shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UN SUPPORTED");
68 }
69 }
70
71 function testColorRenderbuffer(internalformat)
72 {
73 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()");
74 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer);
75 gl.renderbufferStorage(gl.RENDERBUFFER, internalformat, width, height);
76 glErrorShouldBe(gl, gl.NO_ERROR);
77 testAttachment(gl.COLOR_ATTACHMENT0, colorBuffer, false);
78 }
79
80 function testDepthStencilRenderbuffer()
81 {
82 shouldBeNonNull("depthStencilBuffer = gl.createRenderbuffer()");
83 gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer);
84 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height);
85 glErrorShouldBe(gl, gl.NO_ERROR);
86
87 // OpenGL itself doesn't seem to guarantee that e.g. a 2 x 0
88 // renderbuffer will report 2 for its width when queried.
89 if (!(height == 0 && width > 0))
90 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_W IDTH)", "width");
91 if (!(width == 0 && height > 0))
92 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_H EIGHT)", "height");
93 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_INTER NAL_FORMAT)", "gl.DEPTH_STENCIL");
94 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_RED_S IZE)", "0");
95 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_GREEN _SIZE)", "0");
96 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_BLUE_ SIZE)", "0");
97 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_ALPHA _SIZE)", "0");
98 // Avoid verifying these for zero-sized renderbuffers for the time
99 // being since it appears that even OpenGL doesn't guarantee them.
100 if (width > 0 && height > 0) {
101 shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFF ER_DEPTH_SIZE) > 0");
102 shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFF ER_STENCIL_SIZE) > 0");
103 }
104 glErrorShouldBe(gl, gl.NO_ERROR);
105 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, false);
106 }
107
108 description("Test framebuffer object attachment behaviors");
109
110 for (width = 0; width <= 2; width += 2)
111 {
112 for (height = 0; height <= 2; height += 2)
113 {
114 debug("Dimensions " + width + " x " + height);
115
116 debug("Create renderbuffers");
117 shouldBeNonNull("gl = create3DContext()");
118 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()");
119 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer);
120 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, width, height);
121 glErrorShouldBe(gl, gl.NO_ERROR);
122 shouldBeNonNull("depthBuffer = gl.createRenderbuffer()");
123 gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer);
124 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, width, hei ght);
125 glErrorShouldBe(gl, gl.NO_ERROR);
126 shouldBeNonNull("stencilBuffer = gl.createRenderbuffer()");
127 gl.bindRenderbuffer(gl.RENDERBUFFER, stencilBuffer);
128 gl.renderbufferStorage(gl.RENDERBUFFER, gl.STENCIL_INDEX8, width, height );
129 glErrorShouldBe(gl, gl.NO_ERROR);
130 shouldBeNonNull("depthStencilBuffer = gl.createRenderbuffer()");
131 gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer);
132 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height) ;
133 glErrorShouldBe(gl, gl.NO_ERROR);
134
135 debug("Attach depth using DEPTH_ATTACHMENT");
136 testAttachment(gl.DEPTH_ATTACHMENT, depthBuffer, false);
137 debug("Attach depth using STENCIL_ATTACHMENT");
138 testAttachment(gl.STENCIL_ATTACHMENT, depthBuffer, true);
139 debug("Attach depth using DEPTH_STENCIL_ATTACHMENT");
140 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthBuffer, true);
141 debug("Attach stencil using STENCIL_ATTACHMENT");
142 testAttachment(gl.STENCIL_ATTACHMENT, stencilBuffer, false);
143 debug("Attach stencil using DEPTH_ATTACHMENT");
144 testAttachment(gl.DEPTH_ATTACHMENT, stencilBuffer, true);
145 debug("Attach stencil using DEPTH_STENCIL_ATTACHMENT");
146 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, stencilBuffer, true);
147 debug("Attach depthStencil using DEPTH_STENCIL_ATTACHMENT");
148 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, false);
149 debug("Attach depthStencil using DEPTH_ATTACHMENT");
150 testAttachment(gl.DEPTH_ATTACHMENT, depthStencilBuffer, true);
151 debug("Attach depthStencil using STENCIL_ATTACHMENT");
152 testAttachment(gl.STENCIL_ATTACHMENT, depthStencilBuffer, true);
153
154 debug("Attach depth, then stencil, causing conflict");
155 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.STENCIL_ATTACHMENT, stencilBuffer, true);
156 debug("Attach stencil, then depth, causing conflict");
157 testAttachments(gl.STENCIL_ATTACHMENT, stencilBuffer, gl.DEPTH_ATTACHMEN T, depthBuffer, true);
158 debug("Attach depth, then depthStencil, causing conflict");
159 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.DEPTH_STENCIL_ATTAC HMENT, depthStencilBuffer, true);
160 debug("Attach depthStencil, then depth, causing conflict");
161 testAttachments(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, gl.DEPT H_ATTACHMENT, depthBuffer, true);
162 debug("Attach stencil, then depthStencil, causing conflict");
163 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.DEPTH_STENCIL_ATTAC HMENT, depthStencilBuffer, true);
164 debug("Attach depthStencil, then stencil, causing conflict");
165 testAttachments(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, gl.STEN CIL_ATTACHMENT, stencilBuffer, true);
166
167 debug("Attach color renderbuffer with internalformat == RGBA4");
168 testColorRenderbuffer(gl.RGBA4);
169
170 debug("Attach color renderbuffer with internalformat == RGB5_A1");
171 testColorRenderbuffer(gl.RGB5_A1);
172
173 debug("Attach color renderbuffer with internalformat == RGB565");
174 testColorRenderbuffer(gl.RGB565);
175
176 debug("Create and attach depthStencil renderbuffer");
177 testDepthStencilRenderbuffer();
178 }
179 }
180
181 successfullyParsed = true;
182 </script>
183
184 <script src="../../resources/js-test-post.js"></script>
185 </body>
186 </html>
OLDNEW
« no previous file with comments | « conformance/renderbuffers/00_test_list.txt ('k') | conformance/renderbuffers/framebuffer-test.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698