OLD | NEW |
1 function generateTest(pixelFormat, pixelType, pathToTestRoot, prologue) { | 1 function generateTest(pixelFormat, pixelType, pathToTestRoot, prologue) { |
2 var wtu = WebGLTestUtils; | 2 var wtu = WebGLTestUtils; |
3 var gl = null; | 3 var gl = null; |
4 var textureLoc = null; | 4 var textureLoc = null; |
5 var successfullyParsed = false; | 5 var successfullyParsed = false; |
6 var imgCanvas; | 6 var imgCanvas; |
7 var red = [255, 0, 0]; | 7 var black = [0, 0, 0]; |
8 var green = [0, 255, 0]; | 8 var green = [0, 255, 0]; |
| 9 var image = new Image(); |
| 10 var imageLoaded = false; |
| 11 var poisonImage = new Image(); |
| 12 var poisonImageLoaded = false; |
9 | 13 |
10 var init = function() | 14 var init = function() |
11 { | 15 { |
12 if (window.initNonKhronosFramework) { | 16 if (window.initNonKhronosFramework) { |
13 window.initNonKhronosFramework(true); | 17 window.initNonKhronosFramework(true); |
14 } | 18 } |
15 | 19 |
16 description('Verify texImage2D and texSubImage2D code paths taking SVG imag
e elements'); | 20 description('Verify texImage2D and texSubImage2D code paths taking SVG imag
e elements'); |
17 | 21 |
18 gl = wtu.create3DContext("example"); | 22 gl = wtu.create3DContext("example"); |
19 | 23 |
20 if (!prologue(gl)) { | 24 if (!prologue(gl)) { |
21 finishTest(); | 25 finishTest(); |
22 return; | 26 return; |
23 } | 27 } |
24 | 28 |
25 var program = wtu.setupTexturedQuad(gl); | 29 var program = wtu.setupTexturedQuad(gl); |
26 | 30 |
27 gl.clearColor(0,0,0,1); | 31 gl.clearColor(0,0,0,1); |
28 gl.clearDepth(1); | 32 gl.clearDepth(1); |
29 | 33 |
30 textureLoc = gl.getUniformLocation(program, "tex"); | 34 textureLoc = gl.getUniformLocation(program, "tex"); |
31 | 35 |
32 var image = new Image(); | |
33 image.width = 10; | 36 image.width = 10; |
34 image.height = 10; | 37 image.height = 10; |
35 image.onload = function () { | 38 image.onload = function () { |
36 runTest(image); | 39 imageLoaded = true; |
| 40 runTest(); |
37 } | 41 } |
38 image.src = pathToTestRoot + "/resources/red-green.svg"; | 42 image.src = pathToTestRoot + "/resources/transparent-green.svg"; |
| 43 |
| 44 poisonImage.width = 10; |
| 45 poisonImage.height = 10; |
| 46 poisonImage.onload = function () { |
| 47 poisonImageLoaded = true; |
| 48 runTest(); |
| 49 } |
| 50 poisonImage.src = pathToTestRoot + "/resources/red-green.svg"; |
| 51 |
39 } | 52 } |
40 | 53 |
41 function runOneIteration(image, useTexSubImage2D, flipY, topColor, bottomColor) | 54 function runOneIteration(useTexSubImage2D, flipY, topColor, bottomColor) |
42 { | 55 { |
43 debug('Testing ' + (useTexSubImage2D ? 'texSubImage2D' : 'texImage2D') + | 56 debug('Testing ' + (useTexSubImage2D ? 'texSubImage2D' : 'texImage2D') + |
44 ' with flipY=' + flipY); | 57 ' with flipY=' + flipY); |
45 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); | 58 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); |
46 var texture = gl.createTexture(); | 59 var texture = gl.createTexture(); |
47 // Bind the texture to texture unit 0. | 60 // Bind the texture to texture unit 0. |
48 gl.bindTexture(gl.TEXTURE_2D, texture); | 61 gl.bindTexture(gl.TEXTURE_2D, texture); |
49 // Set up texture parameters. | 62 // Set up texture parameters. |
50 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); | 63 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); |
51 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); | 64 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); |
52 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); | 65 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); |
53 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); | 66 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); |
54 // Set up pixel store parameters. | 67 // Set up pixel store parameters. |
55 gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); | 68 gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY); |
56 gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); | 69 gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false); |
57 gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE); | 70 gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE); |
58 // Upload the image into the texture. | 71 // Upload the image into the texture. |
59 if (useTexSubImage2D) { | 72 if (useTexSubImage2D) { |
60 // Initialize the texture to black first. | 73 // Initialize the texture to black first. |
61 gl.texImage2D(gl.TEXTURE_2D, 0, gl[pixelFormat], image.width, image.hei
ght, 0, | 74 gl.texImage2D(gl.TEXTURE_2D, 0, gl[pixelFormat], image.width, image.hei
ght, 0, |
62 gl[pixelFormat], gl[pixelType], null); | 75 gl[pixelFormat], gl[pixelType], null); |
| 76 gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl[pixelFormat], gl[pixelType]
, poisonImage); |
63 gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl[pixelFormat], gl[pixelType]
, image); | 77 gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl[pixelFormat], gl[pixelType]
, image); |
64 } else | 78 } else { |
| 79 gl.texImage2D(gl.TEXTURE_2D, 0, gl[pixelFormat], gl[pixelFormat], gl[pi
xelType], poisonImage); |
65 gl.texImage2D(gl.TEXTURE_2D, 0, gl[pixelFormat], gl[pixelFormat], gl[pi
xelType], image); | 80 gl.texImage2D(gl.TEXTURE_2D, 0, gl[pixelFormat], gl[pixelFormat], gl[pi
xelType], image); |
| 81 } |
66 | 82 |
67 // Point the uniform sampler to texture unit 0. | 83 // Point the uniform sampler to texture unit 0. |
68 gl.uniform1i(textureLoc, 0); | 84 gl.uniform1i(textureLoc, 0); |
69 // Draw the triangles. | 85 // Draw the triangles. |
70 wtu.drawQuad(gl, [0, 255, 0, 255]); | 86 wtu.drawQuad(gl, [0, 255, 0, 255]); |
71 // Check a few pixels near the top and bottom and make sure they have | 87 // Check a few pixels near the top and bottom and make sure they have |
72 // the right color. | 88 // the right color. |
73 debug("Checking lower left corner"); | 89 debug("Checking lower left corner"); |
74 wtu.checkCanvasRect(gl, 4, 4, 2, 2, bottomColor, | 90 wtu.checkCanvasRect(gl, 4, 4, 2, 2, bottomColor, |
75 "shouldBe " + bottomColor); | 91 "shouldBe " + bottomColor); |
76 debug("Checking upper left corner"); | 92 debug("Checking upper left corner"); |
77 wtu.checkCanvasRect(gl, 4, gl.canvas.height - 8, 2, 2, topColor, | 93 wtu.checkCanvasRect(gl, 4, gl.canvas.height - 8, 2, 2, topColor, |
78 "shouldBe " + topColor); | 94 "shouldBe " + topColor); |
79 } | 95 } |
80 | 96 |
81 function runTest(image) | 97 function runTest() |
82 { | 98 { |
83 runOneIteration(image, false, true, red, green); | 99 if (!imageLoaded || !poisonImageLoaded) |
84 runOneIteration(image, false, false, green, red); | 100 return; |
85 runOneIteration(image, true, true, red, green); | 101 |
86 runOneIteration(image, true, false, green, red); | 102 runOneIteration(false, true, black, green); |
| 103 runOneIteration(false, false, green, black); |
| 104 runOneIteration(true, true, black, green); |
| 105 runOneIteration(true, false, green, black); |
87 finishTest(); | 106 finishTest(); |
88 } | 107 } |
89 | 108 |
90 return init; | 109 return init; |
91 } | 110 } |
OLD | NEW |