3 <script src="../../js/resources/js-test-pre.js"></script>
4 <script src="resources/webgl-test.js"></script>
7 <div id="description"></div>
8 <div id="console"></div>
16 var depthStencilBuffer;
21 function testAttachment(attachment, buffer, isConflicted)
23 shouldBeNonNull("fbo = gl.createFramebuffer()");
24 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
25 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorBuffer);
26 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, buffer);
27 glErrorShouldBe(gl, gl.NO_ERROR);
29 shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UNSUPPORTED");
30 gl.clear(gl.COLOR_BUFFER_BIT);
31 glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION);
32 gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(width * height * 4));
33 glErrorShouldBe(gl, gl.INVALID_FRAMEBUFFER_OPERATION);
37 function testAttachments(attachment0, buffer0, attachment1, buffer1, isConflicted)
39 shouldBeNonNull("fbo = gl.createFramebuffer()");
40 gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);
41 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, colorBuffer);
42 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment0, gl.RENDERBUFFER, buffer0);
43 glErrorShouldBe(gl, gl.NO_ERROR);
44 gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment1, gl.RENDERBUFFER, buffer1);
45 glErrorShouldBe(gl, gl.NO_ERROR);
47 shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UNSUPPORTED");
50 function testColorRenderbuffer(internalformat)
52 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()");
53 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer);
54 gl.renderbufferStorage(gl.RENDERBUFFER, internalformat, width, height);
55 glErrorShouldBe(gl, gl.NO_ERROR);
56 testAttachment(gl.COLOR_ATTACHMENT0, colorBuffer, false);
59 function testDepthStencilRenderbuffer()
61 shouldBeNonNull("depthStencilBuffer = gl.createRenderbuffer()");
62 gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer);
63 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height);
64 glErrorShouldBe(gl, gl.NO_ERROR);
65 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_WIDTH)", "width");
66 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_HEIGHT)", "height");
67 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_INTERNAL_FORMAT)", "gl.DEPTH_STENCIL");
68 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_RED_SIZE)", "0");
69 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_GREEN_SIZE)", "0");
70 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_BLUE_SIZE)", "0");
71 shouldBe("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_ALPHA_SIZE)", "0");
72 shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_DEPTH_SIZE) > 0");
73 shouldBeTrue("gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_STENCIL_SIZE) > 0");
74 glErrorShouldBe(gl, gl.NO_ERROR);
75 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, false);
78 description("Test framebuffer object attachment behaviors");
80 debug("Create renderbuffers");
81 shouldBeNonNull("gl = create3DContext()");
82 shouldBeNonNull("colorBuffer = gl.createRenderbuffer()");
83 gl.bindRenderbuffer(gl.RENDERBUFFER, colorBuffer);
84 gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, width, height);
85 glErrorShouldBe(gl, gl.NO_ERROR);
86 shouldBeNonNull("depthBuffer = gl.createRenderbuffer()");
87 gl.bindRenderbuffer(gl.RENDERBUFFER, depthBuffer);
88 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, width, height);
89 glErrorShouldBe(gl, gl.NO_ERROR);
90 shouldBeNonNull("stencilBuffer = gl.createRenderbuffer()");
91 gl.bindRenderbuffer(gl.RENDERBUFFER, stencilBuffer);
92 gl.renderbufferStorage(gl.RENDERBUFFER, gl.STENCIL_INDEX8, width, height);
93 glErrorShouldBe(gl, gl.NO_ERROR);
94 shouldBeNonNull("depthStencilBuffer = gl.createRenderbuffer()");
95 gl.bindRenderbuffer(gl.RENDERBUFFER, depthStencilBuffer);
96 gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_STENCIL, width, height);
97 glErrorShouldBe(gl, gl.NO_ERROR);
99 debug("Attach depth using DEPTH_ATTACHMENT");
100 testAttachment(gl.DEPTH_ATTACHMENT, depthBuffer, false);
101 debug("Attach depth using STENCIL_ATTACHMENT");
102 testAttachment(gl.STENCIL_ATTACHMENT, depthBuffer, true);
103 debug("Attach depth using DEPTH_STENCIL_ATTACHMENT");
104 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthBuffer, true);
105 debug("Attach stencil using STENCIL_ATTACHMENT");
106 testAttachment(gl.STENCIL_ATTACHMENT, stencilBuffer, false);
107 debug("Attach stencil using DEPTH_ATTACHMENT");
108 testAttachment(gl.DEPTH_ATTACHMENT, stencilBuffer, true);
109 debug("Attach stencil using DEPTH_STENCIL_ATTACHMENT");
110 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, stencilBuffer, true);
111 debug("Attach depthStencil using DEPTH_STENCIL_ATTACHMENT");
112 testAttachment(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, false);
113 debug("Attach depthStencil using DEPTH_ATTACHMENT");
114 testAttachment(gl.DEPTH_ATTACHMENT, depthStencilBuffer, true);
115 debug("Attach depthStencil using STENCIL_ATTACHMENT");
116 testAttachment(gl.STENCIL_ATTACHMENT, depthStencilBuffer, true);
118 debug("Attach depth, then stencil, causing conflict");
119 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.STENCIL_ATTACHMENT, stencilBuffer, true);
120 debug("Attach stencil, then depth, causing conflict");
121 testAttachments(gl.STENCIL_ATTACHMENT, stencilBuffer, gl.DEPTH_ATTACHMENT, depthBuffer, true);
122 debug("Attach depth, then depthStencil, causing conflict");
123 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, true);
124 debug("Attach depthStencil, then depth, causing conflict");
125 testAttachments(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, gl.DEPTH_ATTACHMENT, depthBuffer, true);
126 debug("Attach stencil, then depthStencil, causing conflict");
127 testAttachments(gl.DEPTH_ATTACHMENT, depthBuffer, gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, true);
128 debug("Attach depthStencil, then stencil, causing conflict");
129 testAttachments(gl.DEPTH_STENCIL_ATTACHMENT, depthStencilBuffer, gl.STENCIL_ATTACHMENT, stencilBuffer, true);
131 debug("Attach color renderbuffer with internalformat == RGBA4");
132 testColorRenderbuffer(gl.RGBA4);
134 debug("Attach color renderbuffer with internalformat == RGB5_A1");
135 testColorRenderbuffer(gl.RGB5_A1);
137 debug("Attach color renderbuffer with internalformat == RGB565");
138 testColorRenderbuffer(gl.RGB565);
140 debug("Create and attach depthStencil renderbuffer");
141 testDepthStencilRenderbuffer();
144 <script src="../../js/resources/js-test-post.js"></script>