Chromium Code Reviews| 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 1104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1115 } | 1115 } |
| 1116 | 1116 |
| 1117 std::string FragmentShaderRGBATexAlphaMask::GetShaderString( | 1117 std::string FragmentShaderRGBATexAlphaMask::GetShaderString( |
| 1118 TexCoordPrecision precision, | 1118 TexCoordPrecision precision, |
| 1119 SamplerType sampler) const { | 1119 SamplerType sampler) const { |
| 1120 // clang-format off | 1120 // clang-format off |
| 1121 return FRAGMENT_SHADER( | 1121 return FRAGMENT_SHADER( |
| 1122 // clang-format on | 1122 // clang-format on |
| 1123 precision mediump float; | 1123 precision mediump float; |
| 1124 varying TexCoordPrecision vec2 v_texCoord; | 1124 varying TexCoordPrecision vec2 v_texCoord; |
| 1125 uniform SamplerType s_texture; | 1125 uniform sampler2D s_texture; |
|
reveman
2014/10/22 12:40:38
Is the mask shader always used with a render surfa
enne (OOO)
2014/10/22 19:20:44
Yeah, that's exactly it. Currently, masks only ap
reveman
2014/10/22 20:36:47
I just wanted to make sure I understood this chang
| |
| 1126 uniform SamplerType s_mask; | 1126 uniform SamplerType s_mask; |
| 1127 uniform TexCoordPrecision vec2 maskTexCoordScale; | 1127 uniform TexCoordPrecision vec2 maskTexCoordScale; |
| 1128 uniform TexCoordPrecision vec2 maskTexCoordOffset; | 1128 uniform TexCoordPrecision vec2 maskTexCoordOffset; |
| 1129 uniform float alpha; | 1129 uniform float alpha; |
| 1130 void main() { | 1130 void main() { |
| 1131 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1131 vec4 texColor = texture2D(s_texture, v_texCoord); |
| 1132 TexCoordPrecision vec2 maskTexCoord = | 1132 TexCoordPrecision vec2 maskTexCoord = |
| 1133 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, | 1133 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
| 1134 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); | 1134 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
| 1135 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); | 1135 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
| 1136 gl_FragColor = texColor * alpha * maskColor.w; | 1136 gl_FragColor = texColor * alpha * maskColor.w; |
| 1137 } | 1137 } |
| 1138 // clang-format off | 1138 // clang-format off |
| 1139 ); // NOLINT(whitespace/parens) | 1139 ); // NOLINT(whitespace/parens) |
| 1140 // clang-format on | 1140 // clang-format on |
| 1141 } | 1141 } |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 1169 mask_tex_coord_offset_location_ = locations[4]; | 1169 mask_tex_coord_offset_location_ = locations[4]; |
| 1170 } | 1170 } |
| 1171 | 1171 |
| 1172 std::string FragmentShaderRGBATexAlphaMaskAA::GetShaderString( | 1172 std::string FragmentShaderRGBATexAlphaMaskAA::GetShaderString( |
| 1173 TexCoordPrecision precision, | 1173 TexCoordPrecision precision, |
| 1174 SamplerType sampler) const { | 1174 SamplerType sampler) const { |
| 1175 // clang-format off | 1175 // clang-format off |
| 1176 return FRAGMENT_SHADER( | 1176 return FRAGMENT_SHADER( |
| 1177 // clang-format on | 1177 // clang-format on |
| 1178 precision mediump float; | 1178 precision mediump float; |
| 1179 uniform SamplerType s_texture; | 1179 uniform sampler2D s_texture; |
| 1180 uniform SamplerType s_mask; | 1180 uniform SamplerType s_mask; |
| 1181 uniform TexCoordPrecision vec2 maskTexCoordScale; | 1181 uniform TexCoordPrecision vec2 maskTexCoordScale; |
| 1182 uniform TexCoordPrecision vec2 maskTexCoordOffset; | 1182 uniform TexCoordPrecision vec2 maskTexCoordOffset; |
| 1183 uniform float alpha; | 1183 uniform float alpha; |
| 1184 varying TexCoordPrecision vec2 v_texCoord; | 1184 varying TexCoordPrecision vec2 v_texCoord; |
| 1185 varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances. | 1185 varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances. |
| 1186 | 1186 |
| 1187 void main() { | 1187 void main() { |
| 1188 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1188 vec4 texColor = texture2D(s_texture, v_texCoord); |
| 1189 TexCoordPrecision vec2 maskTexCoord = | 1189 TexCoordPrecision vec2 maskTexCoord = |
| 1190 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, | 1190 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
| 1191 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); | 1191 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
| 1192 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); | 1192 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
| 1193 vec4 d4 = min(edge_dist[0], edge_dist[1]); | 1193 vec4 d4 = min(edge_dist[0], edge_dist[1]); |
| 1194 vec2 d2 = min(d4.xz, d4.yw); | 1194 vec2 d2 = min(d4.xz, d4.yw); |
| 1195 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); | 1195 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
| 1196 gl_FragColor = texColor * alpha * maskColor.w * aa; | 1196 gl_FragColor = texColor * alpha * maskColor.w * aa; |
| 1197 } | 1197 } |
| 1198 // clang-format off | 1198 // clang-format off |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1240 color_offset_location_ = locations[6]; | 1240 color_offset_location_ = locations[6]; |
| 1241 } | 1241 } |
| 1242 | 1242 |
| 1243 std::string FragmentShaderRGBATexAlphaMaskColorMatrixAA::GetShaderString( | 1243 std::string FragmentShaderRGBATexAlphaMaskColorMatrixAA::GetShaderString( |
| 1244 TexCoordPrecision precision, | 1244 TexCoordPrecision precision, |
| 1245 SamplerType sampler) const { | 1245 SamplerType sampler) const { |
| 1246 // clang-format off | 1246 // clang-format off |
| 1247 return FRAGMENT_SHADER( | 1247 return FRAGMENT_SHADER( |
| 1248 // clang-format on | 1248 // clang-format on |
| 1249 precision mediump float; | 1249 precision mediump float; |
| 1250 uniform SamplerType s_texture; | 1250 uniform sampler2D s_texture; |
| 1251 uniform SamplerType s_mask; | 1251 uniform SamplerType s_mask; |
| 1252 uniform vec2 maskTexCoordScale; | 1252 uniform vec2 maskTexCoordScale; |
| 1253 uniform vec2 maskTexCoordOffset; | 1253 uniform vec2 maskTexCoordOffset; |
| 1254 uniform mat4 colorMatrix; | 1254 uniform mat4 colorMatrix; |
| 1255 uniform vec4 colorOffset; | 1255 uniform vec4 colorOffset; |
| 1256 uniform float alpha; | 1256 uniform float alpha; |
| 1257 varying TexCoordPrecision vec2 v_texCoord; | 1257 varying TexCoordPrecision vec2 v_texCoord; |
| 1258 varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances. | 1258 varying TexCoordPrecision vec4 edge_dist[2]; // 8 edge distances. |
| 1259 | 1259 |
| 1260 void main() { | 1260 void main() { |
| 1261 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1261 vec4 texColor = texture2D(s_texture, v_texCoord); |
| 1262 float nonZeroAlpha = max(texColor.a, 0.00001); | 1262 float nonZeroAlpha = max(texColor.a, 0.00001); |
| 1263 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); | 1263 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); |
| 1264 texColor = colorMatrix * texColor + colorOffset; | 1264 texColor = colorMatrix * texColor + colorOffset; |
| 1265 texColor.rgb *= texColor.a; | 1265 texColor.rgb *= texColor.a; |
| 1266 texColor = clamp(texColor, 0.0, 1.0); | 1266 texColor = clamp(texColor, 0.0, 1.0); |
| 1267 TexCoordPrecision vec2 maskTexCoord = | 1267 TexCoordPrecision vec2 maskTexCoord = |
| 1268 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, | 1268 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
| 1269 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); | 1269 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
| 1270 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); | 1270 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
| 1271 vec4 d4 = min(edge_dist[0], edge_dist[1]); | 1271 vec4 d4 = min(edge_dist[0], edge_dist[1]); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1375 } | 1375 } |
| 1376 | 1376 |
| 1377 std::string FragmentShaderRGBATexAlphaMaskColorMatrix::GetShaderString( | 1377 std::string FragmentShaderRGBATexAlphaMaskColorMatrix::GetShaderString( |
| 1378 TexCoordPrecision precision, | 1378 TexCoordPrecision precision, |
| 1379 SamplerType sampler) const { | 1379 SamplerType sampler) const { |
| 1380 // clang-format off | 1380 // clang-format off |
| 1381 return FRAGMENT_SHADER( | 1381 return FRAGMENT_SHADER( |
| 1382 // clang-format on | 1382 // clang-format on |
| 1383 precision mediump float; | 1383 precision mediump float; |
| 1384 varying TexCoordPrecision vec2 v_texCoord; | 1384 varying TexCoordPrecision vec2 v_texCoord; |
| 1385 uniform SamplerType s_texture; | 1385 uniform sampler2D s_texture; |
| 1386 uniform SamplerType s_mask; | 1386 uniform SamplerType s_mask; |
| 1387 uniform vec2 maskTexCoordScale; | 1387 uniform vec2 maskTexCoordScale; |
| 1388 uniform vec2 maskTexCoordOffset; | 1388 uniform vec2 maskTexCoordOffset; |
| 1389 uniform mat4 colorMatrix; | 1389 uniform mat4 colorMatrix; |
| 1390 uniform vec4 colorOffset; | 1390 uniform vec4 colorOffset; |
| 1391 uniform float alpha; | 1391 uniform float alpha; |
| 1392 void main() { | 1392 void main() { |
| 1393 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1393 vec4 texColor = texture2D(s_texture, v_texCoord); |
| 1394 float nonZeroAlpha = max(texColor.a, 0.00001); | 1394 float nonZeroAlpha = max(texColor.a, 0.00001); |
| 1395 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); | 1395 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); |
| 1396 texColor = colorMatrix * texColor + colorOffset; | 1396 texColor = colorMatrix * texColor + colorOffset; |
| 1397 texColor.rgb *= texColor.a; | 1397 texColor.rgb *= texColor.a; |
| 1398 texColor = clamp(texColor, 0.0, 1.0); | 1398 texColor = clamp(texColor, 0.0, 1.0); |
| 1399 TexCoordPrecision vec2 maskTexCoord = | 1399 TexCoordPrecision vec2 maskTexCoord = |
| 1400 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, | 1400 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
| 1401 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); | 1401 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
| 1402 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); | 1402 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
| 1403 gl_FragColor = texColor * alpha * maskColor.w; | 1403 gl_FragColor = texColor * alpha * maskColor.w; |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1656 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); | 1656 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); |
| 1657 float picker = abs(coord.x - coord.y); // NOLINT | 1657 float picker = abs(coord.x - coord.y); // NOLINT |
| 1658 gl_FragColor = mix(color1, color2, picker) * alpha; | 1658 gl_FragColor = mix(color1, color2, picker) * alpha; |
| 1659 } | 1659 } |
| 1660 // clang-format off | 1660 // clang-format off |
| 1661 ); // NOLINT(whitespace/parens) | 1661 ); // NOLINT(whitespace/parens) |
| 1662 // clang-format on | 1662 // clang-format on |
| 1663 } | 1663 } |
| 1664 | 1664 |
| 1665 } // namespace cc | 1665 } // namespace cc |
| OLD | NEW |