| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/output/shader.h" | 5 #include "cc/output/shader.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 2235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2246 return SHADER0([]() { | 2246 return SHADER0([]() { |
| 2247 void main() { | 2247 void main() { |
| 2248 vec4 d4 = min(edge_dist[0], edge_dist[1]); | 2248 vec4 d4 = min(edge_dist[0], edge_dist[1]); |
| 2249 vec2 d2 = min(d4.xz, d4.yw); | 2249 vec2 d2 = min(d4.xz, d4.yw); |
| 2250 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); | 2250 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
| 2251 gl_FragColor = color * aa; | 2251 gl_FragColor = color * aa; |
| 2252 } | 2252 } |
| 2253 }); | 2253 }); |
| 2254 } | 2254 } |
| 2255 | 2255 |
| 2256 FragmentShaderCheckerboard::FragmentShaderCheckerboard() | |
| 2257 : alpha_location_(-1), | |
| 2258 tex_transform_location_(-1), | |
| 2259 frequency_location_(-1) { | |
| 2260 } | |
| 2261 | |
| 2262 void FragmentShaderCheckerboard::Init(GLES2Interface* context, | |
| 2263 unsigned program, | |
| 2264 int* base_uniform_index) { | |
| 2265 static const char* uniforms[] = { | |
| 2266 "alpha", "texTransform", "frequency", "color", | |
| 2267 }; | |
| 2268 int locations[arraysize(uniforms)]; | |
| 2269 | |
| 2270 GetProgramUniformLocations(context, | |
| 2271 program, | |
| 2272 arraysize(uniforms), | |
| 2273 uniforms, | |
| 2274 locations, | |
| 2275 base_uniform_index); | |
| 2276 alpha_location_ = locations[0]; | |
| 2277 tex_transform_location_ = locations[1]; | |
| 2278 frequency_location_ = locations[2]; | |
| 2279 color_location_ = locations[3]; | |
| 2280 } | |
| 2281 | |
| 2282 std::string FragmentShaderCheckerboard::GetShaderString( | |
| 2283 TexCoordPrecision precision, | |
| 2284 SamplerType sampler) const { | |
| 2285 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); | |
| 2286 } | |
| 2287 | |
| 2288 std::string FragmentShaderCheckerboard::GetShaderHead() { | |
| 2289 return SHADER0([]() { | |
| 2290 precision mediump float; | |
| 2291 precision mediump int; | |
| 2292 varying vec2 v_texCoord; | |
| 2293 uniform float alpha; | |
| 2294 uniform float frequency; | |
| 2295 uniform vec4 texTransform; | |
| 2296 uniform vec4 color; | |
| 2297 }); | |
| 2298 } | |
| 2299 | |
| 2300 std::string FragmentShaderCheckerboard::GetShaderBody() { | |
| 2301 // Shader based on Example 13-17 of "OpenGL ES 2.0 Programming Guide" | |
| 2302 // by Munshi, Ginsburg, Shreiner. | |
| 2303 return SHADER0([]() { | |
| 2304 void main() { | |
| 2305 vec4 color1 = vec4(1.0, 1.0, 1.0, 1.0); | |
| 2306 vec4 color2 = color; | |
| 2307 vec2 texCoord = | |
| 2308 clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texTransform.xy; | |
| 2309 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); | |
| 2310 float picker = abs(coord.x - coord.y); // NOLINT | |
| 2311 gl_FragColor = mix(color1, color2, picker) * alpha; | |
| 2312 } | |
| 2313 }); | |
| 2314 } | |
| 2315 | |
| 2316 } // namespace cc | 2256 } // namespace cc |
| OLD | NEW |