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 <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <vector> | 10 #include <vector> |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 return shader_string; | 137 return shader_string; |
138 default: | 138 default: |
139 NOTREACHED(); | 139 NOTREACHED(); |
140 break; | 140 break; |
141 } | 141 } |
142 return shader_string; | 142 return shader_string; |
143 } | 143 } |
144 | 144 |
145 } // namespace | 145 } // namespace |
146 | 146 |
147 ShaderLocations::ShaderLocations() { | |
148 } | |
149 | |
150 TexCoordPrecision TexCoordPrecisionRequired(GLES2Interface* context, | 147 TexCoordPrecision TexCoordPrecisionRequired(GLES2Interface* context, |
151 int* highp_threshold_cache, | 148 int* highp_threshold_cache, |
152 int highp_threshold_min, | 149 int highp_threshold_min, |
153 const gfx::Point& max_coordinate) { | 150 const gfx::Point& max_coordinate) { |
154 return TexCoordPrecisionRequired(context, | 151 return TexCoordPrecisionRequired(context, |
155 highp_threshold_cache, | 152 highp_threshold_cache, |
156 highp_threshold_min, | 153 highp_threshold_min, |
157 max_coordinate.x(), | 154 max_coordinate.x(), |
158 max_coordinate.y()); | 155 max_coordinate.y()); |
159 } | 156 } |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 if (has_vertex_opacity_) | 230 if (has_vertex_opacity_) |
234 vertex_opacity_location_ = locations[index++]; | 231 vertex_opacity_location_ = locations[index++]; |
235 if (aa_mode_ == USE_AA) { | 232 if (aa_mode_ == USE_AA) { |
236 viewport_location_ = locations[index++]; | 233 viewport_location_ = locations[index++]; |
237 edge_location_ = locations[index++]; | 234 edge_location_ = locations[index++]; |
238 } | 235 } |
239 if (position_source_ == POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM) | 236 if (position_source_ == POSITION_SOURCE_ATTRIBUTE_INDEXED_UNIFORM) |
240 quad_location_ = locations[index++]; | 237 quad_location_ = locations[index++]; |
241 } | 238 } |
242 | 239 |
243 void VertexShaderBase::FillLocations(ShaderLocations* locations) const { | |
244 locations->quad = quad_location(); | |
245 locations->edge = edge_location(); | |
246 locations->viewport = viewport_location(); | |
247 locations->matrix = matrix_location(); | |
248 locations->vertex_tex_transform = vertex_tex_transform_location(); | |
249 } | |
250 | |
251 std::string VertexShaderBase::GetShaderString() const { | 240 std::string VertexShaderBase::GetShaderString() const { |
252 // We unconditionally use highp in the vertex shader since | 241 // We unconditionally use highp in the vertex shader since |
253 // we are unlikely to be vertex shader bound when drawing large quads. | 242 // we are unlikely to be vertex shader bound when drawing large quads. |
254 // Also, some vertex shaders mutate the texture coordinate in such a | 243 // Also, some vertex shaders mutate the texture coordinate in such a |
255 // way that the effective precision might be lower than expected. | 244 // way that the effective precision might be lower than expected. |
256 std::string header = "#define TexCoordPrecision highp\n"; | 245 std::string header = "#define TexCoordPrecision highp\n"; |
257 std::string source = "void main() {\n"; | 246 std::string source = "void main() {\n"; |
258 | 247 |
259 // Define the size of quads for attribute indexed uniform arrays. | 248 // Define the size of quads for attribute indexed uniform arrays. |
260 if (use_uniform_arrays_) { | 249 if (use_uniform_arrays_) { |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
469 if (has_rgba_fragment_tex_transform_) | 458 if (has_rgba_fragment_tex_transform_) |
470 fragment_tex_transform_location_ = locations[index++]; | 459 fragment_tex_transform_location_ = locations[index++]; |
471 break; | 460 break; |
472 case INPUT_COLOR_SOURCE_UNIFORM: | 461 case INPUT_COLOR_SOURCE_UNIFORM: |
473 color_location_ = locations[index++]; | 462 color_location_ = locations[index++]; |
474 break; | 463 break; |
475 } | 464 } |
476 DCHECK_EQ(index, locations.size()); | 465 DCHECK_EQ(index, locations.size()); |
477 } | 466 } |
478 | 467 |
479 void FragmentShaderBase::FillLocations(ShaderLocations* locations) const { | |
480 if (has_blend_mode()) { | |
481 locations->backdrop = backdrop_location_; | |
482 locations->backdrop_rect = backdrop_rect_location_; | |
483 } | |
484 if (mask_for_background_) | |
485 locations->original_backdrop = original_backdrop_location_; | |
486 if (mask_mode_ != NO_MASK) { | |
487 locations->mask_sampler = mask_sampler_location_; | |
488 locations->mask_tex_coord_scale = mask_tex_coord_scale_location_; | |
489 locations->mask_tex_coord_offset = mask_tex_coord_offset_location_; | |
490 } | |
491 if (has_color_matrix_) { | |
492 locations->color_matrix = color_matrix_location_; | |
493 locations->color_offset = color_offset_location_; | |
494 } | |
495 if (has_uniform_alpha_) | |
496 locations->alpha = alpha_location_; | |
497 switch (input_color_type_) { | |
498 case INPUT_COLOR_SOURCE_RGBA_TEXTURE: | |
499 locations->sampler = sampler_location_; | |
500 break; | |
501 case INPUT_COLOR_SOURCE_UNIFORM: | |
502 break; | |
503 } | |
504 } | |
505 | |
506 std::string FragmentShaderBase::SetBlendModeFunctions( | 468 std::string FragmentShaderBase::SetBlendModeFunctions( |
507 const std::string& shader_string) const { | 469 const std::string& shader_string) const { |
508 if (shader_string.find("ApplyBlendMode") == std::string::npos) | 470 if (shader_string.find("ApplyBlendMode") == std::string::npos) |
509 return shader_string; | 471 return shader_string; |
510 | 472 |
511 if (!has_blend_mode()) { | 473 if (!has_blend_mode()) { |
512 return "#define ApplyBlendMode(X, Y) (X)\n" + shader_string; | 474 return "#define ApplyBlendMode(X, Y) (X)\n" + shader_string; |
513 } | 475 } |
514 | 476 |
515 static const std::string kUniforms = SHADER0([]() { | 477 static const std::string kUniforms = SHADER0([]() { |
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1069 max(uv_clamp_rect.xy, min(uv_clamp_rect.zw, v_uvTexCoord)); | 1031 max(uv_clamp_rect.xy, min(uv_clamp_rect.zw, v_uvTexCoord)); |
1070 vec3 yuv = vec3(y_raw, GetUV(uv_clamped)); | 1032 vec3 yuv = vec3(y_raw, GetUV(uv_clamped)); |
1071 gl_FragColor = vec4(yuv2rgb(yuv), 1.0) * GetAlpha(ya_clamped); | 1033 gl_FragColor = vec4(yuv2rgb(yuv), 1.0) * GetAlpha(ya_clamped); |
1072 } | 1034 } |
1073 }); | 1035 }); |
1074 | 1036 |
1075 return head + functions; | 1037 return head + functions; |
1076 } | 1038 } |
1077 | 1039 |
1078 } // namespace cc | 1040 } // namespace cc |
OLD | NEW |