tizen beta release
[profile/ivi/webkit-efl.git] / LayoutTests / fast / canvas / webgl / framebuffer-object-attachment.html
1 <html>
2 <head>
3 <script src="../../js/resources/js-test-pre.js"></script>
4 <script src="resources/webgl-test.js"></script>
5 </head>
6 <body>
7 <div id="description"></div>
8 <div id="console"></div>
9
10 <script>
11
12 var gl;
13 var fbo;
14 var depthBuffer;
15 var stencilBuffer;
16 var depthStencilBuffer;
17 var colorBuffer;
18 var width = 2;
19 var height = 2;
20
21 function testAttachment(attachment, buffer, isConflicted)
22 {
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);
28     if (isConflicted) {
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);
34     }
35 }
36
37 function testAttachments(attachment0, buffer0, attachment1, buffer1, isConflicted)
38 {
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);
46     if (isConflicted)
47         shouldBe("gl.checkFramebufferStatus(gl.FRAMEBUFFER)", "gl.FRAMEBUFFER_UNSUPPORTED");
48 }
49
50 function testColorRenderbuffer(internalformat)
51 {
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);
57 }
58
59 function testDepthStencilRenderbuffer()
60 {
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);
76 }
77
78 description("Test framebuffer object attachment behaviors");
79
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);
98
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);
117
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);
130
131 debug("Attach color renderbuffer with internalformat == RGBA4");
132 testColorRenderbuffer(gl.RGBA4);
133
134 debug("Attach color renderbuffer with internalformat == RGB5_A1");
135 testColorRenderbuffer(gl.RGB5_A1);
136
137 debug("Attach color renderbuffer with internalformat == RGB565");
138 testColorRenderbuffer(gl.RGB565);
139
140 debug("Create and attach depthStencil renderbuffer");
141 testDepthStencilRenderbuffer();
142 </script>
143
144 <script src="../../js/resources/js-test-post.js"></script>
145 </body>
146 </html>