Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: conformance/ogles/GL/atan/atan_vec3_frag_xvaryyvary_ref.frag

Issue 41993002: Add ToT WebGL conformance tests : part 9 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/webgl/sdk/tests/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1
2 /*
3 ** Copyright (c) 2012 The Khronos Group Inc.
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a
6 ** copy of this software and/or associated documentation files (the
7 ** "Materials"), to deal in the Materials without restriction, including
8 ** without limitation the rights to use, copy, modify, merge, publish,
9 ** distribute, sublicense, and/or sell copies of the Materials, and to
10 ** permit persons to whom the Materials are furnished to do so, subject to
11 ** the following conditions:
12 **
13 ** The above copyright notice and this permission notice shall be included
14 ** in all copies or substantial portions of the Materials.
15 **
16 ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20 ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
23 */
24
25
26 #ifdef GL_ES
27 precision mediump float;
28 #endif
29 varying vec4 color;
30
31 void main (void)
32 {
33 const float M_PI = 3.14159265358979323846;
34 vec3 x = 2.0 * (color.ggg - 0.5);
35 vec3 y = 2.0 * (color.bbb - 0.5);
36 vec3 c;
37 vec3 atan_c = vec3(0.0);
38 vec3 scale = vec3(1.0);
39 vec3 sign = vec3(1.0);
40 vec4 result = vec4(0.0, 0.0, 0.0, 1.0);
41 const float epsilon = 1.0e-4;
42
43 // Avoid evaluating atan(0, x) for x < epsilon because it's implementati on-dependent
44 if(x[0] > epsilon || abs(y[0]) > epsilon)
45 {
46 if(x[0] < 0.0 ^^ y[0] < 0.0)
47 {
48 sign[0] = -1.0;
49 }
50
51 if(abs(y[0]) <= abs(x[0]))
52 {
53 c[0] = abs(y[0] / x[0]);
54 // Taylors series expansion for atan
55 atan_c[0] += scale[0] * pow(c[0], float(1)) / float(1);
56 scale[0] *= -1.0;
57 atan_c[0] += scale[0] * pow(c[0], float(3)) / float(3);
58 scale[0] *= -1.0;
59 atan_c[0] += scale[0] * pow(c[0], float(5)) / float(5);
60 scale[0] *= -1.0;
61 atan_c[0] += scale[0] * pow(c[0], float(7)) / float(7);
62 scale[0] *= -1.0;
63 atan_c[0] += scale[0] * pow(c[0], float(9)) / float(9);
64 scale[0] *= -1.0;
65 atan_c[0] += scale[0] * pow(c[0], float(11)) / float(11) ;
66 scale[0] *= -1.0;
67
68 result[0] = sign[0] * atan_c[0] / (2.0 * M_PI) + 0.5;
69 }
70 else
71 {
72 c[0] = abs(x[0] / y[0]);
73
74 // Taylors series expansion for atan
75 atan_c[0] += scale[0] * pow(c[0], float(1)) / float(1);
76 scale[0] *= -1.0;
77 atan_c[0] += scale[0] * pow(c[0], float(3)) / float(3);
78 scale[0] *= -1.0;
79 atan_c[0] += scale[0] * pow(c[0], float(5)) / float(5);
80 scale[0] *= -1.0;
81 atan_c[0] += scale[0] * pow(c[0], float(7)) / float(7);
82 scale[0] *= -1.0;
83 atan_c[0] += scale[0] * pow(c[0], float(9)) / float(9);
84 scale[0] *= -1.0;
85 atan_c[0] += scale[0] * pow(c[0], float(11)) / float(11) ;
86 scale[0] *= -1.0;
87
88 result[0] = sign[0] * (M_PI / 2.0 - atan_c[0]) / (2.0 * M_PI) + 0.5;
89 }
90
91 if(x[0] < 0.0)
92 if(y[0] < 0.0) result[0] -= 0.5;
93 else if(y[0] > 0.0) result[0] += 0.5;
94 }
95
96 if(x[1] > epsilon || abs(y[1]) > epsilon)
97 {
98
99 if(x[1] < 0.0 ^^ y[1] < 0.0)
100 {
101 sign[1] = -1.0;
102 }
103
104 if(abs(y[1]) <= abs(x[1]))
105 {
106 c[1] = abs(y[1] / x[1]);
107 // Taylors series expansion for atan
108 atan_c[1] += scale[1] * pow(c[1], float(1)) / float(1);
109 scale[1] *= -1.0;
110 atan_c[1] += scale[1] * pow(c[1], float(3)) / float(3);
111 scale[1] *= -1.0;
112 atan_c[1] += scale[1] * pow(c[1], float(5)) / float(5);
113 scale[1] *= -1.0;
114 atan_c[1] += scale[1] * pow(c[1], float(7)) / float(7);
115 scale[1] *= -1.0;
116 atan_c[1] += scale[1] * pow(c[1], float(9)) / float(9);
117 scale[1] *= -1.0;
118 atan_c[1] += scale[1] * pow(c[1], float(11)) / float(11) ;
119 scale[1] *= -1.0;
120
121 result[1] = sign[1] * atan_c[1] / (2.0 * M_PI) + 0.5;
122 }
123 else
124 {
125 c[1] = abs(x[1] / y[1]);
126
127 // Taylors series expansion for atan
128 atan_c[1] += scale[1] * pow(c[1], float(1)) / float(1);
129 scale[1] *= -1.0;
130 atan_c[1] += scale[1] * pow(c[1], float(3)) / float(3);
131 scale[1] *= -1.0;
132 atan_c[1] += scale[1] * pow(c[1], float(5)) / float(5);
133 scale[1] *= -1.0;
134 atan_c[1] += scale[1] * pow(c[1], float(7)) / float(7);
135 scale[1] *= -1.0;
136 atan_c[1] += scale[1] * pow(c[1], float(9)) / float(9);
137 scale[1] *= -1.0;
138 atan_c[1] += scale[1] * pow(c[1], float(11)) / float(11) ;
139 scale[1] *= -1.0;
140
141 result[1] = sign[1] * (M_PI / 2.0 - atan_c[1]) / (2.0 * M_PI) + 0.5;
142 }
143
144 if(x[1] < 0.0)
145 if(y[1] < 0.0) result[1] -= 0.5;
146 else if(y[1] > 0.0) result[1] += 0.5;
147 }
148
149 if(x[2] > epsilon || abs(y[2]) > epsilon)
150 {
151
152 if(x[2] < 0.0 ^^ y[2] < 0.0)
153 {
154 sign[2] = -1.0;
155 }
156
157 if(abs(y[2]) <= abs(x[2]))
158 {
159 c[2] = abs(y[2] / x[2]);
160 // Taylors series expansion for atan
161 atan_c[2] += scale[2] * pow(c[2], float(1)) / float(1);
162 scale[2] *= -1.0;
163 atan_c[2] += scale[2] * pow(c[2], float(3)) / float(3);
164 scale[2] *= -1.0;
165 atan_c[2] += scale[2] * pow(c[2], float(5)) / float(5);
166 scale[2] *= -1.0;
167 atan_c[2] += scale[2] * pow(c[2], float(7)) / float(7);
168 scale[2] *= -1.0;
169 atan_c[2] += scale[2] * pow(c[2], float(9)) / float(9);
170 scale[2] *= -1.0;
171 atan_c[2] += scale[2] * pow(c[2], float(11)) / float(11) ;
172 scale[2] *= -1.0;
173
174 result[2] = sign[2] * atan_c[2] / (2.0 * M_PI) + 0.5;
175 }
176 else
177 {
178 c[2] = abs(x[2] / y[2]);
179
180 // Taylors series expansion for atan
181 atan_c[2] += scale[2] * pow(c[2], float(1)) / float(1);
182 scale[2] *= -1.0;
183 atan_c[2] += scale[2] * pow(c[2], float(3)) / float(3);
184 scale[2] *= -1.0;
185 atan_c[2] += scale[2] * pow(c[2], float(5)) / float(5);
186 scale[2] *= -1.0;
187 atan_c[2] += scale[2] * pow(c[2], float(7)) / float(7);
188 scale[2] *= -1.0;
189 atan_c[2] += scale[2] * pow(c[2], float(9)) / float(9);
190 scale[2] *= -1.0;
191 atan_c[2] += scale[2] * pow(c[2], float(11)) / float(11) ;
192 scale[2] *= -1.0;
193
194 result[2] = sign[2] * (M_PI / 2.0 - atan_c[2]) / (2.0 * M_PI) + 0.5;
195 }
196
197 if(x[2] < 0.0)
198 if(y[2] < 0.0) result[2] -= 0.5;
199 else if(y[2] > 0.0) result[2] += 0.5;
200 }
201
202 gl_FragColor = result;
203 }
OLDNEW
« no previous file with comments | « conformance/ogles/GL/atan/atan_vec3_frag_xvaryyvary.frag ('k') | conformance/ogles/GL/atan/atan_vec3_vert_xvary.vert » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698