OLD | NEW |
| (Empty) |
1 <!-- | |
2 Copyright (c) 2010 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 <html> | |
7 <head> | |
8 <link rel="stylesheet" href="../resources/js-test-style.css"/> | |
9 <script src="../resources/js-test-pre.js"></script> | |
10 <script src="resources/webgl-test.js"></script> | |
11 </head> | |
12 <body> | |
13 <div id="description"></div> | |
14 <div id="console"></div> | |
15 | |
16 <script> | |
17 | |
18 var gl; | |
19 var fbo; | |
20 var depthBuffer; | |
21 var stencilBuffer; | |
22 var depthStencilBuffer; | |
23 var colorBuffer; | |
24 var width = 2; | |
25 var height = 2; | |
26 | |
27 function testAttachment(attachment, buffer, isConflicted) | |
28 { | |
29 shouldBeNonNull("fbo = gl.createFramebuffer()"); | |
30 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); | |
31 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBU
FFER, colorBuffer); | |
32 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, buff
er); | |
33 glErrorShouldBe(gl, gl.NO_ERROR); | |
34 if (isConflicted) { | |
35 shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UN
SUPPORTED"); | |
36 gl.clear(gl.COLOR_BUFFER_BIT); | |
37 glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION); | |
38 gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8A
rray(width * height * 4)); | |
39 glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION); | |
40 } | |
41 } | |
42 | |
43 function testAttachments(attachment0, buffer0, attachment1, buffer1, isConflicte
d) | |
44 { | |
45 shouldBeNonNull("fbo = gl.createFramebuffer()"); | |
46 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo); | |
47 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBU
FFER, colorBuffer); | |
48 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment0, gl.RENDERBUFFER, buf
fer0); | |
49 glErrorShouldBe(gl, gl.NO_ERROR); | |
50 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment1, gl.RENDERBUFFER, buf
fer1); | |
51 glErrorShouldBe(gl, gl.NO_ERROR); | |
52 if (isConflicted) | |
53 shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UN
SUPPORTED"); | |
54 } | |
55 | |
56 function testColorRenderbuffer(internalformat) | |
57 { | |
58 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); | |
59 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); | |
60 gl.renderbufferStorage(gl.RENDERBUFFER, internalformat, width, height); | |
61 glErrorShouldBe(gl, gl.NO_ERROR); | |
62 testAttachment(gl.COLOR_ATTACHMENT0, colorBuffer, false); | |
63 } | |
64 | |
65 function testDepthStencilRenderbuffer() | |
66 { | |
67 shouldBeNonNull("depthStencilBuffer = gl.createRenderbuffer()"); | |
68 gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer); | |
69 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height); | |
70 glErrorShouldBe(gl, gl.NO_ERROR); | |
71 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH
)", "width"); | |
72 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_HEIGH
T)", "height"); | |
73 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_INTER
NAL_FORMAT)", "gl.DEPTH_STENCIL"); | |
74 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_RED_S
IZE)", "0"); | |
75 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_GREEN
_SIZE)", "0"); | |
76 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_BLUE_
SIZE)", "0"); | |
77 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_ALPHA
_SIZE)", "0"); | |
78 shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_D
EPTH_SIZE) > 0"); | |
79 shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_S
TENCIL_SIZE) > 0"); | |
80 glErrorShouldBe(gl, gl.NO_ERROR); | |
81 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, false); | |
82 } | |
83 | |
84 description("Test framebuffer object attachment behaviors"); | |
85 | |
86 debug("Create renderbuffers"); | |
87 shouldBeNonNull("gl = create3DContext()"); | |
88 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()"); | |
89 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer); | |
90 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, width, height); | |
91 glErrorShouldBe(gl, gl.NO_ERROR); | |
92 shouldBeNonNull("depthBuffer = gl.createRenderbuffer()"); | |
93 gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer); | |
94 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, width, height); | |
95 glErrorShouldBe(gl, gl.NO_ERROR); | |
96 shouldBeNonNull("stencilBuffer = gl.createRenderbuffer()"); | |
97 gl.bindRenderbuffer(gl.RENDERBUFFER, stencilBuffer); | |
98 gl.renderbufferStorage(gl.RENDERBUFFER, gl.STENCIL_INDEX8, width, height); | |
99 glErrorShouldBe(gl, gl.NO_ERROR); | |
100 shouldBeNonNull("depthStencilBuffer = gl.createRenderbuffer()"); | |
101 gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer); | |
102 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height); | |
103 glErrorShouldBe(gl, gl.NO_ERROR); | |
104 | |
105 debug("Attach depth using DEPTH_ATTACHMENT"); | |
106 testAttachment(gl.DEPTH_ATTACHMENT, depthBuffer, false); | |
107 debug("Attach depth using STENCIL_ATTACHMENT"); | |
108 testAttachment(gl.STENCIL_ATTACHMENT, depthBuffer, true); | |
109 debug("Attach depth using DEPTH_STENCIL_ATTACHMENT"); | |
110 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthBuffer, true); | |
111 debug("Attach stencil using STENCIL_ATTACHMENT"); | |
112 testAttachment(gl.STENCIL_ATTACHMENT, stencilBuffer, false); | |
113 debug("Attach stencil using DEPTH_ATTACHMENT"); | |
114 testAttachment(gl.DEPTH_ATTACHMENT, stencilBuffer, true); | |
115 debug("Attach stencil using DEPTH_STENCIL_ATTACHMENT"); | |
116 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, stencilBuffer, true); | |
117 debug("Attach depthStencil using DEPTH_STENCIL_ATTACHMENT"); | |
118 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, false); | |
119 debug("Attach depthStencil using DEPTH_ATTACHMENT"); | |
120 testAttachment(gl.DEPTH_ATTACHMENT, depthStencilBuffer, true); | |
121 debug("Attach depthStencil using STENCIL_ATTACHMENT"); | |
122 testAttachment(gl.STENCIL_ATTACHMENT, depthStencilBuffer, true); | |
123 | |
124 debug("Attach depth, then stencil, causing conflict"); | |
125 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.STENCIL_ATTACHMENT, stencil
Buffer, true); | |
126 debug("Attach stencil, then depth, causing conflict"); | |
127 testAttachments(gl.STENCIL_ATTACHMENT, stencilBuffer, gl.DEPTH_ATTACHMENT, depth
Buffer, true); | |
128 debug("Attach depth, then depthStencil, causing conflict"); | |
129 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.DEPTH_STENCIL_ATTACHMENT, d
epthStencilBuffer, true); | |
130 debug("Attach depthStencil, then depth, causing conflict"); | |
131 testAttachments(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, gl.DEPTH_ATTACH
MENT, depthBuffer, true); | |
132 debug("Attach stencil, then depthStencil, causing conflict"); | |
133 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.DEPTH_STENCIL_ATTACHMENT, d
epthStencilBuffer, true); | |
134 debug("Attach depthStencil, then stencil, causing conflict"); | |
135 testAttachments(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, gl.STENCIL_ATTA
CHMENT, stencilBuffer, true); | |
136 | |
137 debug("Attach color renderbuffer with internalformat == RGBA4"); | |
138 testColorRenderbuffer(gl.RGBA4); | |
139 | |
140 debug("Attach color renderbuffer with internalformat == RGB5_A1"); | |
141 testColorRenderbuffer(gl.RGB5_A1); | |
142 | |
143 debug("Attach color renderbuffer with internalformat == RGB565"); | |
144 testColorRenderbuffer(gl.RGB565); | |
145 | |
146 debug("Create and attach depthStencil renderbuffer"); | |
147 testDepthStencilRenderbuffer(); | |
148 | |
149 successfullyParsed = true; | |
150 </script> | |
151 | |
152 <script src="../resources/js-test-post.js"></script> | |
153 </body> | |
154 </html> | |
OLD | NEW |