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

Side by Side Diff: cc/output/shader.cc

Issue 668123003: cc: Support texture rect targets for masks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@base_for_texture_rect_changes
Patch Set: Created 6 years, 2 months 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
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698