1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/content/canvas/test/webgl-conformance/conformance/renderbuffers/framebuffer-test.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,173 @@ 1.4 +<!-- 1.5 +Copyright (c) 2011 The Chromium Authors. All rights reserved. 1.6 +Use of this source code is governed by a BSD-style license that can be 1.7 +found in the LICENSE file. 1.8 + --> 1.9 +<!DOCTYPE html> 1.10 +<html> 1.11 +<head> 1.12 +<meta charset="utf-8"> 1.13 +<title>WebGL Framebuffer Test</title> 1.14 +<link rel="stylesheet" href="../../resources/js-test-style.css"/> 1.15 +<script src="../../resources/js-test-pre.js"></script> 1.16 +<script src="../resources/webgl-test.js"></script> 1.17 +<script src="../../resources/desktop-gl-constants.js"></script> 1.18 +</head> 1.19 +<body> 1.20 +<div id="description"></div> 1.21 +<div id="console"></div> 1.22 +<canvas id="canvas" width="2" height="2"> </canvas> 1.23 +<script> 1.24 +description("This tests framebuffer/renderbuffer-related functions"); 1.25 + 1.26 +debug(""); 1.27 +debug("Canvas.getContext"); 1.28 + 1.29 +var canvas = document.getElementById("canvas"); 1.30 +var gl = create3DContext(canvas); 1.31 +if (!gl) { 1.32 + testFailed("context does not exist"); 1.33 +} else { 1.34 + testPassed("context exists"); 1.35 + 1.36 + debug(""); 1.37 + debug("Checking framebuffer/renderbuffer stuff."); 1.38 + 1.39 + var value = gl.getFramebufferAttachmentParameter( 1.40 + gl.FRAMEBUFFER, 1.41 + gl.COLOR_ATTACHMENT0, 1.42 + gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE); 1.43 + glErrorShouldBe(gl, gl.INVALID_OPERATION, 1.44 + "calling getFramebufferAttachmentParameter on the default framebuffer should generate INVALID_OPERATION."); 1.45 + 1.46 + assertMsg(gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE, 1.47 + "calling checkFramebufferStatus on the default framebuffer should generate FRAMEBUFFER_COMPLETE."); 1.48 + 1.49 + var tex = gl.createTexture(); 1.50 + gl.bindTexture(gl.TEXTURE_2D, tex); 1.51 + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); 1.52 + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); 1.53 + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); 1.54 + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); 1.55 + gl.texImage2D(gl.TEXTURE_2D, 1.56 + 0, // level 1.57 + gl.RGBA, // internalFormat 1.58 + canvas.width, // width 1.59 + canvas.height, // height 1.60 + 0, // border 1.61 + gl.RGBA, // format 1.62 + gl.UNSIGNED_BYTE, // type 1.63 + null); // data 1.64 + gl.framebufferTexture2D( 1.65 + gl.FRAMEBUFFER, 1.66 + gl.COLOR_ATTACHMENT0, 1.67 + gl.TEXTURE_2D, 1.68 + tex, 1.69 + 0); 1.70 + glErrorShouldBe(gl, gl.INVALID_OPERATION, 1.71 + "trying to attach a texture to default framebuffer should generate INVALID_OPERATION."); 1.72 + 1.73 + gl.framebufferRenderbuffer( 1.74 + gl.FRAMEBUFFER, 1.75 + gl.COLOR_ATTACHMENT0, 1.76 + gl.RENDERBUFFER, 1.77 + null); 1.78 + glErrorShouldBe(gl, gl.INVALID_OPERATION, 1.79 + "trying to detach default renderbuffer from default framebuffer should generate INVALID_OPERATION."); 1.80 + 1.81 + var rb = gl.createRenderbuffer(); 1.82 + gl.bindRenderbuffer(gl.RENDERBUFFER, rb); 1.83 + gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA4, canvas.width, canvas.height); 1.84 + glErrorShouldBe(gl, gl.NO_ERROR, 1.85 + "allocating renderbuffer storage of a newly created renderbuffer should succeed."); 1.86 + 1.87 + gl.framebufferRenderbuffer( 1.88 + gl.FRAMEBUFFER, 1.89 + gl.COLOR_ATTACHMENT0, 1.90 + gl.RENDERBUFFER, 1.91 + rb); 1.92 + glErrorShouldBe(gl, gl.INVALID_OPERATION, 1.93 + "trying to attach a renderbuffer to the default framebuffer should generate INVALID_OPERATION."); 1.94 + 1.95 + var fbtex = gl.createTexture(); 1.96 + gl.bindTexture(gl.TEXTURE_2D, fbtex); 1.97 + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, canvas.width, canvas.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); 1.98 + var fb = gl.createFramebuffer(); 1.99 + 1.100 + gl.bindFramebuffer(gl.FRAMEBUFFER, fb); 1.101 + glErrorShouldBe(gl, gl.NO_ERROR, 1.102 + "binding a newly created framebuffer should succeed."); 1.103 + 1.104 + var target = desktopGL.READ_FRAMEBUFFER 1.105 + gl.getFramebufferAttachmentParameter( 1.106 + target, 1.107 + gl.COLOR_ATTACHMENT0, 1.108 + gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE); 1.109 + glErrorShouldBe(gl, gl.INVALID_ENUM, 1.110 + "calling getFramebufferAttachmentParameter with target = READ_FRAMEBUFFER should generate INVALID_ENUM."); 1.111 + assertMsg(gl.checkFramebufferStatus(target) == 0, 1.112 + "calling checkFramebufferStatus with target = READ_FRAMEBUFFER should return 0."); 1.113 + glErrorShouldBe(gl, gl.INVALID_ENUM, 1.114 + "calling checkFramebufferStatus with target = READ_FRAMEBUFFER should generate INVALID_ENUM."); 1.115 + gl.bindFramebuffer(target, gl.createFramebuffer()); 1.116 + glErrorShouldBe(gl, gl.INVALID_ENUM, 1.117 + "calling bindFramebuffer with target = READ_FRAMEBUFFER should generate INVALID_ENUM."); 1.118 + assertMsg(fb == gl.getParameter(gl.FRAMEBUFFER_BINDING), 1.119 + "calling bindFramebuffer with target = READ_FRAMEBUFFER should not change FRAMEBUFFER_BINDING."); 1.120 + gl.getFramebufferAttachmentParameter(target, gl.COLOR_ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE); 1.121 + glErrorShouldBe(gl, gl.INVALID_ENUM, 1.122 + "calling getFramebufferAttachmentParameter with target = READ_FRAMEBUFFER should generate INVALID_ENUM."); 1.123 + gl.framebufferTexture2D(target, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, fbtex, 0); 1.124 + glErrorShouldBe(gl, gl.INVALID_ENUM, 1.125 + "calling framebufferTexImage2D with target = READ_FRAMEBUFFER should generate INVALID_ENUM."); 1.126 + gl.framebufferRenderbuffer(target, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, rb); 1.127 + glErrorShouldBe(gl, gl.INVALID_ENUM, 1.128 + "calling framebufferRenderbuffer with target = READ_FRAMEBUFFER should generate INVALID_ENUM."); 1.129 + 1.130 + var attachment = desktopGL.COLOR_ATTACHMENT1 1.131 + gl.framebufferTexture2D(gl.FRAMEBUFFER, attachment, gl.TEXTURE_2D, fbtex, 0); 1.132 + glErrorShouldBe(gl, gl.INVALID_ENUM, 1.133 + "calling framebufferTexImage2D with attachment = COLOR_ATTACHMENT1 should generate INVALID_ENUM."); 1.134 + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, attachment, gl.RENDERBUFFER, rb); 1.135 + glErrorShouldBe(gl, gl.INVALID_ENUM, 1.136 + "calling framebufferRenderbuffer with attachment = COLOR_ATTACHMENT1 should generate INVALID_ENUM."); 1.137 + 1.138 + gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, 1.139 + gl.COLOR_ATTACHMENT0, 1.140 + desktopGL.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING); 1.141 + glErrorShouldBe(gl, gl.INVALID_ENUM, 1.142 + "calling getFramebufferAttachmentParameter with pname = GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING should generate INVALID_ENUM."); 1.143 + 1.144 + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, fbtex, 0); 1.145 + glErrorShouldBe(gl, gl.NO_ERROR, 1.146 + "attaching a texture to a framebuffer should succeed."); 1.147 + 1.148 + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, null, 0); 1.149 + glErrorShouldBe(gl, gl.NO_ERROR, 1.150 + "detaching a texture from a framebuffer should succeed."); 1.151 + 1.152 + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, fbtex, 1); 1.153 + glErrorShouldBe(gl, gl.INVALID_VALUE, 1.154 + "calling framebufferTexture2D with non-zero mipmap level should generate INVALID_VALUE."); 1.155 + 1.156 + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, rb); 1.157 + glErrorShouldBe(gl, gl.NO_ERROR, 1.158 + "attaching a renderbuffer to a framebuffer should succeed."); 1.159 + 1.160 + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, null); 1.161 + glErrorShouldBe(gl, gl.NO_ERROR, 1.162 + "detaching a renderbuffer from a framebuffer should succeed."); 1.163 + 1.164 + gl.bindFramebuffer(gl.FRAMEBUFFER, null); 1.165 + glErrorShouldBe(gl, gl.NO_ERROR, 1.166 + "binding default (null) framebuffer should succeed."); 1.167 +} 1.168 + 1.169 +debug(""); 1.170 +successfullyParsed = true; 1.171 + 1.172 +</script> 1.173 +<script>finishTest();</script> 1.174 + 1.175 +</body> 1.176 +</html>