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 |