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 | 10 |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
13 #include "cc/output/static_geometry_binding.h" | 13 #include "cc/output/static_geometry_binding.h" |
14 #include "gpu/command_buffer/client/gles2_interface.h" | 14 #include "gpu/command_buffer/client/gles2_interface.h" |
15 #include "ui/gfx/geometry/point.h" | 15 #include "ui/gfx/geometry/point.h" |
16 #include "ui/gfx/geometry/size.h" | 16 #include "ui/gfx/geometry/size.h" |
17 | 17 |
18 static const char* blend_mode_to_layout_qualifier[cc::LAST_BLEND_MODE + 1] = { | |
19 // These first two should get skipped by conditionals and never | |
20 // appear in a shader. | |
21 "error_blend_none_shouldnt_use_this", | |
22 "error_blend_normal_shouldnt_use_this", | |
23 "blend_support_screen", | |
24 "blend_support_overlay", | |
25 "blend_support_darken", | |
26 "blend_support_lighten", | |
27 "blend_support_colordodge", | |
28 "blend_support_colorburn", | |
29 "blend_support_hardlight", | |
30 "blend_support_softlight", | |
31 "blend_support_difference", | |
32 "blend_support_exclusion", | |
33 "blend_support_multiply", | |
34 "blend_support_hsl_hue", | |
35 "blend_support_hsl_saturation", | |
36 "blend_support_hsl_color", | |
37 "blend_support_hsl_luminosity", | |
38 }; | |
39 | |
18 template <size_t size> | 40 template <size_t size> |
19 std::string StripLambda(const char(&shader)[size]) { | 41 std::string StripLambda(const char(&shader)[size]) { |
20 // Must contain at least "[]() {}" and trailing null (included in size). | 42 // Must contain at least "[]() {}" and trailing null (included in size). |
21 static_assert(size >= 8, | 43 static_assert(size >= 8, |
22 "String passed to StripLambda must be at least 8 characters"); | 44 "String passed to StripLambda must be at least 8 characters"); |
23 DCHECK_EQ(strncmp("[]() {", shader, 6), 0); | 45 DCHECK_EQ(strncmp("[]() {", shader, 6), 0); |
24 DCHECK_EQ(shader[size - 2], '}'); | 46 DCHECK_EQ(shader[size - 2], '}'); |
25 return std::string(shader + 6, shader + size - 2); | 47 return std::string(shader + 6, shader + size - 2); |
26 } | 48 } |
27 | 49 |
(...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
772 FragmentTexBlendMode::FragmentTexBlendMode() | 794 FragmentTexBlendMode::FragmentTexBlendMode() |
773 : backdrop_location_(-1), | 795 : backdrop_location_(-1), |
774 original_backdrop_location_(-1), | 796 original_backdrop_location_(-1), |
775 backdrop_rect_location_(-1), | 797 backdrop_rect_location_(-1), |
776 blend_mode_(BLEND_MODE_NONE), | 798 blend_mode_(BLEND_MODE_NONE), |
777 mask_for_background_(false) { | 799 mask_for_background_(false) { |
778 } | 800 } |
779 | 801 |
780 std::string FragmentTexBlendMode::SetBlendModeFunctions( | 802 std::string FragmentTexBlendMode::SetBlendModeFunctions( |
781 const std::string& shader_string) const { | 803 const std::string& shader_string) const { |
782 if (shader_string.find("ApplyBlendMode") == std::string::npos) | 804 if (shader_string.find("ApplyBlendMode") == std::string::npos) { |
783 return shader_string; | 805 return "out vec4 outFragColor;\n" + shader_string; |
806 } | |
784 | 807 |
785 if (!has_blend_mode()) { | 808 if (!has_blend_mode()) { |
786 return "#define ApplyBlendMode(X, Y) (X)\n" + shader_string; | 809 return "#define ApplyBlendMode(X, Y) (X)\nout vec4 outFragColor;\n" + |
810 shader_string; | |
787 } | 811 } |
788 | 812 |
789 static const std::string kUniforms = SHADER0([]() { | 813 static const std::string kUniforms = SHADER0([]() { |
790 uniform sampler2D s_backdropTexture; | 814 uniform sampler2D s_backdropTexture; |
791 uniform sampler2D s_originalBackdropTexture; | 815 uniform sampler2D s_originalBackdropTexture; |
792 uniform TexCoordPrecision vec4 backdropRect; | 816 uniform TexCoordPrecision vec4 backdropRect; |
793 }); | 817 }); |
794 | 818 |
819 std::string outColor; | |
820 if (blend_mode() == BLEND_MODE_NORMAL) { | |
821 outColor = "out vec4 outFragColor;"; | |
822 } else { | |
823 outColor = base::StringPrintf( | |
824 "#extension GL_KHR_blend_equation_advanced : require\n" | |
Ken Russell (switch to Gerrit)
2016/12/05 05:44:33
I'm pretty sure this extension directive has to co
| |
825 "layout(%s) out vec4 outFragColor;\n", | |
826 blend_mode_to_layout_qualifier[blend_mode()]); | |
827 } | |
828 | |
795 std::string mixFunction; | 829 std::string mixFunction; |
796 if (mask_for_background()) { | 830 if (mask_for_background()) { |
797 mixFunction = SHADER0([]() { | 831 mixFunction = SHADER0([]() { |
798 vec4 MixBackdrop(TexCoordPrecision vec2 bgTexCoord, float mask) { | 832 vec4 MixBackdrop(TexCoordPrecision vec2 bgTexCoord, float mask) { |
799 vec4 backdrop = texture2D(s_backdropTexture, bgTexCoord); | 833 vec4 backdrop = texture2D(s_backdropTexture, bgTexCoord); |
800 vec4 original_backdrop = | 834 vec4 original_backdrop = |
801 texture2D(s_originalBackdropTexture, bgTexCoord); | 835 texture2D(s_originalBackdropTexture, bgTexCoord); |
802 return mix(original_backdrop, backdrop, mask); | 836 return mix(original_backdrop, backdrop, mask); |
803 } | 837 } |
804 }); | 838 }); |
(...skipping 14 matching lines...) Expand all Loading... | |
819 } | 853 } |
820 | 854 |
821 vec4 ApplyBlendMode(vec4 src, float mask) { | 855 vec4 ApplyBlendMode(vec4 src, float mask) { |
822 vec4 dst = GetBackdropColor(mask); | 856 vec4 dst = GetBackdropColor(mask); |
823 return Blend(src, dst); | 857 return Blend(src, dst); |
824 } | 858 } |
825 }); | 859 }); |
826 | 860 |
827 return "precision mediump float;" + GetHelperFunctions() + | 861 return "precision mediump float;" + GetHelperFunctions() + |
828 GetBlendFunction() + kUniforms + mixFunction + | 862 GetBlendFunction() + kUniforms + mixFunction + |
829 kFunctionApplyBlendMode + shader_string; | 863 kFunctionApplyBlendMode + outColor + shader_string; |
830 } | 864 } |
831 | 865 |
832 std::string FragmentTexBlendMode::GetHelperFunctions() const { | 866 std::string FragmentTexBlendMode::GetHelperFunctions() const { |
833 static const std::string kFunctionHardLight = SHADER0([]() { | 867 static const std::string kFunctionHardLight = SHADER0([]() { |
834 vec3 hardLight(vec4 src, vec4 dst) { | 868 vec3 hardLight(vec4 src, vec4 dst) { |
835 vec3 result; | 869 vec3 result; |
836 result.r = | 870 result.r = |
837 (2.0 * src.r <= src.a) | 871 (2.0 * src.r <= src.a) |
838 ? (2.0 * src.r * dst.r) | 872 ? (2.0 * src.r * dst.r) |
839 : (src.a * dst.a - 2.0 * (dst.a - dst.r) * (src.a - src.r)); | 873 : (src.a * dst.a - 2.0 * (dst.a - dst.r) * (src.a - src.r)); |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1155 varying TexCoordPrecision vec2 v_texCoord; | 1189 varying TexCoordPrecision vec2 v_texCoord; |
1156 uniform SamplerType s_texture; | 1190 uniform SamplerType s_texture; |
1157 uniform float alpha; | 1191 uniform float alpha; |
1158 }); | 1192 }); |
1159 } | 1193 } |
1160 | 1194 |
1161 std::string FragmentShaderRGBATexAlpha::GetShaderBody() { | 1195 std::string FragmentShaderRGBATexAlpha::GetShaderBody() { |
1162 return SHADER0([]() { | 1196 return SHADER0([]() { |
1163 void main() { | 1197 void main() { |
1164 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1198 vec4 texColor = TextureLookup(s_texture, v_texCoord); |
1165 gl_FragColor = ApplyBlendMode(texColor * alpha, 0.0); | 1199 outFragColor = ApplyBlendMode(texColor * alpha, 0.0); |
1166 } | 1200 } |
1167 }); | 1201 }); |
1168 } | 1202 } |
1169 | 1203 |
1170 void FragmentShaderRGBATexAlpha::FillLocations( | 1204 void FragmentShaderRGBATexAlpha::FillLocations( |
1171 ShaderLocations* locations) const { | 1205 ShaderLocations* locations) const { |
1172 locations->sampler = sampler_location(); | 1206 locations->sampler = sampler_location(); |
1173 locations->alpha = alpha_location(); | 1207 locations->alpha = alpha_location(); |
1174 locations->backdrop = backdrop_location(); | 1208 locations->backdrop = backdrop_location(); |
1175 locations->backdrop_rect = backdrop_rect_location(); | 1209 locations->backdrop_rect = backdrop_rect_location(); |
(...skipping 18 matching lines...) Expand all Loading... | |
1194 | 1228 |
1195 std::string FragmentShaderRGBATexColorMatrixAlpha::GetShaderBody() { | 1229 std::string FragmentShaderRGBATexColorMatrixAlpha::GetShaderBody() { |
1196 return SHADER0([]() { | 1230 return SHADER0([]() { |
1197 void main() { | 1231 void main() { |
1198 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1232 vec4 texColor = TextureLookup(s_texture, v_texCoord); |
1199 float nonZeroAlpha = max(texColor.a, 0.00001); | 1233 float nonZeroAlpha = max(texColor.a, 0.00001); |
1200 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); | 1234 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); |
1201 texColor = colorMatrix * texColor + colorOffset; | 1235 texColor = colorMatrix * texColor + colorOffset; |
1202 texColor.rgb *= texColor.a; | 1236 texColor.rgb *= texColor.a; |
1203 texColor = clamp(texColor, 0.0, 1.0); | 1237 texColor = clamp(texColor, 0.0, 1.0); |
1204 gl_FragColor = ApplyBlendMode(texColor * alpha, 0.0); | 1238 outFragColor = ApplyBlendMode(texColor * alpha, 0.0); |
1205 } | 1239 } |
1206 }); | 1240 }); |
1207 } | 1241 } |
1208 | 1242 |
1209 void FragmentShaderRGBATexColorMatrixAlpha::FillLocations( | 1243 void FragmentShaderRGBATexColorMatrixAlpha::FillLocations( |
1210 ShaderLocations* locations) const { | 1244 ShaderLocations* locations) const { |
1211 locations->sampler = sampler_location(); | 1245 locations->sampler = sampler_location(); |
1212 locations->alpha = alpha_location(); | 1246 locations->alpha = alpha_location(); |
1213 locations->color_matrix = color_matrix_location(); | 1247 locations->color_matrix = color_matrix_location(); |
1214 locations->color_offset = color_offset_location(); | 1248 locations->color_offset = color_offset_location(); |
(...skipping 13 matching lines...) Expand all Loading... | |
1228 varying TexCoordPrecision vec2 v_texCoord; | 1262 varying TexCoordPrecision vec2 v_texCoord; |
1229 varying float v_alpha; | 1263 varying float v_alpha; |
1230 uniform SamplerType s_texture; | 1264 uniform SamplerType s_texture; |
1231 }); | 1265 }); |
1232 } | 1266 } |
1233 | 1267 |
1234 std::string FragmentShaderRGBATexVaryingAlpha::GetShaderBody() { | 1268 std::string FragmentShaderRGBATexVaryingAlpha::GetShaderBody() { |
1235 return SHADER0([]() { | 1269 return SHADER0([]() { |
1236 void main() { | 1270 void main() { |
1237 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1271 vec4 texColor = TextureLookup(s_texture, v_texCoord); |
1238 gl_FragColor = texColor * v_alpha; | 1272 outFragColor = texColor * v_alpha; |
1239 } | 1273 } |
1240 }); | 1274 }); |
1241 } | 1275 } |
1242 | 1276 |
1243 std::string FragmentShaderRGBATexPremultiplyAlpha::GetShaderString( | 1277 std::string FragmentShaderRGBATexPremultiplyAlpha::GetShaderString( |
1244 TexCoordPrecision precision, | 1278 TexCoordPrecision precision, |
1245 SamplerType sampler) const { | 1279 SamplerType sampler) const { |
1246 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); | 1280 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); |
1247 } | 1281 } |
1248 | 1282 |
1249 std::string FragmentShaderRGBATexPremultiplyAlpha::GetShaderHead() { | 1283 std::string FragmentShaderRGBATexPremultiplyAlpha::GetShaderHead() { |
1250 return SHADER0([]() { | 1284 return SHADER0([]() { |
1251 precision mediump float; | 1285 precision mediump float; |
1252 varying TexCoordPrecision vec2 v_texCoord; | 1286 varying TexCoordPrecision vec2 v_texCoord; |
1253 varying float v_alpha; | 1287 varying float v_alpha; |
1254 uniform SamplerType s_texture; | 1288 uniform SamplerType s_texture; |
1255 }); | 1289 }); |
1256 } | 1290 } |
1257 | 1291 |
1258 std::string FragmentShaderRGBATexPremultiplyAlpha::GetShaderBody() { | 1292 std::string FragmentShaderRGBATexPremultiplyAlpha::GetShaderBody() { |
1259 return SHADER0([]() { | 1293 return SHADER0([]() { |
1260 void main() { | 1294 void main() { |
1261 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1295 vec4 texColor = TextureLookup(s_texture, v_texCoord); |
1262 texColor.rgb *= texColor.a; | 1296 texColor.rgb *= texColor.a; |
1263 gl_FragColor = texColor * v_alpha; | 1297 outFragColor = texColor * v_alpha; |
1264 } | 1298 } |
1265 }); | 1299 }); |
1266 } | 1300 } |
1267 | 1301 |
1268 FragmentTexBackgroundBinding::FragmentTexBackgroundBinding() | 1302 FragmentTexBackgroundBinding::FragmentTexBackgroundBinding() |
1269 : background_color_location_(-1), sampler_location_(-1) { | 1303 : background_color_location_(-1), sampler_location_(-1) { |
1270 } | 1304 } |
1271 | 1305 |
1272 void FragmentTexBackgroundBinding::Init(GLES2Interface* context, | 1306 void FragmentTexBackgroundBinding::Init(GLES2Interface* context, |
1273 unsigned program, | 1307 unsigned program, |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1305 uniform vec4 background_color; | 1339 uniform vec4 background_color; |
1306 uniform SamplerType s_texture; | 1340 uniform SamplerType s_texture; |
1307 }); | 1341 }); |
1308 } | 1342 } |
1309 | 1343 |
1310 std::string FragmentShaderTexBackgroundVaryingAlpha::GetShaderBody() { | 1344 std::string FragmentShaderTexBackgroundVaryingAlpha::GetShaderBody() { |
1311 return SHADER0([]() { | 1345 return SHADER0([]() { |
1312 void main() { | 1346 void main() { |
1313 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1347 vec4 texColor = TextureLookup(s_texture, v_texCoord); |
1314 texColor += background_color * (1.0 - texColor.a); | 1348 texColor += background_color * (1.0 - texColor.a); |
1315 gl_FragColor = texColor * v_alpha; | 1349 outFragColor = texColor * v_alpha; |
1316 } | 1350 } |
1317 }); | 1351 }); |
1318 } | 1352 } |
1319 | 1353 |
1320 std::string FragmentShaderTexBackgroundPremultiplyAlpha::GetShaderString( | 1354 std::string FragmentShaderTexBackgroundPremultiplyAlpha::GetShaderString( |
1321 TexCoordPrecision precision, | 1355 TexCoordPrecision precision, |
1322 SamplerType sampler) const { | 1356 SamplerType sampler) const { |
1323 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); | 1357 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); |
1324 } | 1358 } |
1325 | 1359 |
1326 std::string FragmentShaderTexBackgroundPremultiplyAlpha::GetShaderHead() { | 1360 std::string FragmentShaderTexBackgroundPremultiplyAlpha::GetShaderHead() { |
1327 return SHADER0([]() { | 1361 return SHADER0([]() { |
1328 precision mediump float; | 1362 precision mediump float; |
1329 varying TexCoordPrecision vec2 v_texCoord; | 1363 varying TexCoordPrecision vec2 v_texCoord; |
1330 varying float v_alpha; | 1364 varying float v_alpha; |
1331 uniform vec4 background_color; | 1365 uniform vec4 background_color; |
1332 uniform SamplerType s_texture; | 1366 uniform SamplerType s_texture; |
1333 }); | 1367 }); |
1334 } | 1368 } |
1335 | 1369 |
1336 std::string FragmentShaderTexBackgroundPremultiplyAlpha::GetShaderBody() { | 1370 std::string FragmentShaderTexBackgroundPremultiplyAlpha::GetShaderBody() { |
1337 return SHADER0([]() { | 1371 return SHADER0([]() { |
1338 void main() { | 1372 void main() { |
1339 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1373 vec4 texColor = TextureLookup(s_texture, v_texCoord); |
1340 texColor.rgb *= texColor.a; | 1374 texColor.rgb *= texColor.a; |
1341 texColor += background_color * (1.0 - texColor.a); | 1375 texColor += background_color * (1.0 - texColor.a); |
1342 gl_FragColor = texColor * v_alpha; | 1376 outFragColor = texColor * v_alpha; |
1343 } | 1377 } |
1344 }); | 1378 }); |
1345 } | 1379 } |
1346 | 1380 |
1347 std::string FragmentShaderRGBATexOpaque::GetShaderString( | 1381 std::string FragmentShaderRGBATexOpaque::GetShaderString( |
1348 TexCoordPrecision precision, | 1382 TexCoordPrecision precision, |
1349 SamplerType sampler) const { | 1383 SamplerType sampler) const { |
1350 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); | 1384 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); |
1351 } | 1385 } |
1352 | 1386 |
1353 std::string FragmentShaderRGBATexOpaque::GetShaderHead() { | 1387 std::string FragmentShaderRGBATexOpaque::GetShaderHead() { |
1354 return SHADER0([]() { | 1388 return SHADER0([]() { |
1355 precision mediump float; | 1389 precision mediump float; |
1356 varying TexCoordPrecision vec2 v_texCoord; | 1390 varying TexCoordPrecision vec2 v_texCoord; |
1357 uniform SamplerType s_texture; | 1391 uniform SamplerType s_texture; |
1358 }); | 1392 }); |
1359 } | 1393 } |
1360 | 1394 |
1361 std::string FragmentShaderRGBATexOpaque::GetShaderBody() { | 1395 std::string FragmentShaderRGBATexOpaque::GetShaderBody() { |
1362 return SHADER0([]() { | 1396 return SHADER0([]() { |
1363 void main() { | 1397 void main() { |
1364 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1398 vec4 texColor = TextureLookup(s_texture, v_texCoord); |
1365 gl_FragColor = vec4(texColor.rgb, 1.0); | 1399 outFragColor = vec4(texColor.rgb, 1.0); |
1366 } | 1400 } |
1367 }); | 1401 }); |
1368 } | 1402 } |
1369 | 1403 |
1370 std::string FragmentShaderRGBATex::GetShaderString(TexCoordPrecision precision, | 1404 std::string FragmentShaderRGBATex::GetShaderString(TexCoordPrecision precision, |
1371 SamplerType sampler) const { | 1405 SamplerType sampler) const { |
1372 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); | 1406 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); |
1373 } | 1407 } |
1374 | 1408 |
1375 std::string FragmentShaderRGBATex::GetShaderHead() { | 1409 std::string FragmentShaderRGBATex::GetShaderHead() { |
1376 return SHADER0([]() { | 1410 return SHADER0([]() { |
1377 precision mediump float; | 1411 precision mediump float; |
1378 varying TexCoordPrecision vec2 v_texCoord; | 1412 varying TexCoordPrecision vec2 v_texCoord; |
1379 uniform SamplerType s_texture; | 1413 uniform SamplerType s_texture; |
1380 }); | 1414 }); |
1381 } | 1415 } |
1382 | 1416 |
1383 std::string FragmentShaderRGBATex::GetShaderBody() { | 1417 std::string FragmentShaderRGBATex::GetShaderBody() { |
1384 return SHADER0([]() { | 1418 return SHADER0([]() { |
1385 void main() { gl_FragColor = TextureLookup(s_texture, v_texCoord); } | 1419 void main() { outFragColor = TextureLookup(s_texture, v_texCoord); } |
1386 }); | 1420 }); |
1387 } | 1421 } |
1388 | 1422 |
1389 std::string FragmentShaderRGBATexSwizzleAlpha::GetShaderString( | 1423 std::string FragmentShaderRGBATexSwizzleAlpha::GetShaderString( |
1390 TexCoordPrecision precision, | 1424 TexCoordPrecision precision, |
1391 SamplerType sampler) const { | 1425 SamplerType sampler) const { |
1392 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); | 1426 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); |
1393 } | 1427 } |
1394 | 1428 |
1395 std::string FragmentShaderRGBATexSwizzleAlpha::GetShaderHead() { | 1429 std::string FragmentShaderRGBATexSwizzleAlpha::GetShaderHead() { |
1396 return SHADER0([]() { | 1430 return SHADER0([]() { |
1397 precision mediump float; | 1431 precision mediump float; |
1398 varying TexCoordPrecision vec2 v_texCoord; | 1432 varying TexCoordPrecision vec2 v_texCoord; |
1399 uniform SamplerType s_texture; | 1433 uniform SamplerType s_texture; |
1400 uniform float alpha; | 1434 uniform float alpha; |
1401 }); | 1435 }); |
1402 } | 1436 } |
1403 | 1437 |
1404 std::string FragmentShaderRGBATexSwizzleAlpha::GetShaderBody() { | 1438 std::string FragmentShaderRGBATexSwizzleAlpha::GetShaderBody() { |
1405 return SHADER0([]() { | 1439 return SHADER0([]() { |
1406 void main() { | 1440 void main() { |
1407 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1441 vec4 texColor = TextureLookup(s_texture, v_texCoord); |
1408 gl_FragColor = | 1442 outFragColor = |
1409 vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha; | 1443 vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha; |
1410 } | 1444 } |
1411 }); | 1445 }); |
1412 } | 1446 } |
1413 | 1447 |
1414 std::string FragmentShaderRGBATexSwizzleOpaque::GetShaderString( | 1448 std::string FragmentShaderRGBATexSwizzleOpaque::GetShaderString( |
1415 TexCoordPrecision precision, | 1449 TexCoordPrecision precision, |
1416 SamplerType sampler) const { | 1450 SamplerType sampler) const { |
1417 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); | 1451 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); |
1418 } | 1452 } |
1419 | 1453 |
1420 std::string FragmentShaderRGBATexSwizzleOpaque::GetShaderHead() { | 1454 std::string FragmentShaderRGBATexSwizzleOpaque::GetShaderHead() { |
1421 return SHADER0([]() { | 1455 return SHADER0([]() { |
1422 precision mediump float; | 1456 precision mediump float; |
1423 varying TexCoordPrecision vec2 v_texCoord; | 1457 varying TexCoordPrecision vec2 v_texCoord; |
1424 uniform SamplerType s_texture; | 1458 uniform SamplerType s_texture; |
1425 }); | 1459 }); |
1426 } | 1460 } |
1427 | 1461 |
1428 std::string FragmentShaderRGBATexSwizzleOpaque::GetShaderBody() { | 1462 std::string FragmentShaderRGBATexSwizzleOpaque::GetShaderBody() { |
1429 return SHADER0([]() { | 1463 return SHADER0([]() { |
1430 void main() { | 1464 void main() { |
1431 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1465 vec4 texColor = TextureLookup(s_texture, v_texCoord); |
1432 gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, 1.0); | 1466 outFragColor = vec4(texColor.z, texColor.y, texColor.x, 1.0); |
1433 } | 1467 } |
1434 }); | 1468 }); |
1435 } | 1469 } |
1436 | 1470 |
1437 FragmentShaderRGBATexAlphaAA::FragmentShaderRGBATexAlphaAA() | 1471 FragmentShaderRGBATexAlphaAA::FragmentShaderRGBATexAlphaAA() |
1438 : sampler_location_(-1), alpha_location_(-1) { | 1472 : sampler_location_(-1), alpha_location_(-1) { |
1439 } | 1473 } |
1440 | 1474 |
1441 void FragmentShaderRGBATexAlphaAA::Init(GLES2Interface* context, | 1475 void FragmentShaderRGBATexAlphaAA::Init(GLES2Interface* context, |
1442 unsigned program, | 1476 unsigned program, |
(...skipping 30 matching lines...) Expand all Loading... | |
1473 }); | 1507 }); |
1474 } | 1508 } |
1475 | 1509 |
1476 std::string FragmentShaderRGBATexAlphaAA::GetShaderBody() { | 1510 std::string FragmentShaderRGBATexAlphaAA::GetShaderBody() { |
1477 return SHADER0([]() { | 1511 return SHADER0([]() { |
1478 void main() { | 1512 void main() { |
1479 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1513 vec4 texColor = TextureLookup(s_texture, v_texCoord); |
1480 vec4 d4 = min(edge_dist[0], edge_dist[1]); | 1514 vec4 d4 = min(edge_dist[0], edge_dist[1]); |
1481 vec2 d2 = min(d4.xz, d4.yw); | 1515 vec2 d2 = min(d4.xz, d4.yw); |
1482 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); | 1516 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
1483 gl_FragColor = ApplyBlendMode(texColor * alpha * aa, 0.0); | 1517 outFragColor = ApplyBlendMode(texColor * alpha * aa, 0.0); |
1484 } | 1518 } |
1485 }); | 1519 }); |
1486 } | 1520 } |
1487 | 1521 |
1488 void FragmentShaderRGBATexAlphaAA::FillLocations( | 1522 void FragmentShaderRGBATexAlphaAA::FillLocations( |
1489 ShaderLocations* locations) const { | 1523 ShaderLocations* locations) const { |
1490 locations->sampler = sampler_location(); | 1524 locations->sampler = sampler_location(); |
1491 locations->alpha = alpha_location(); | 1525 locations->alpha = alpha_location(); |
1492 locations->backdrop = backdrop_location(); | 1526 locations->backdrop = backdrop_location(); |
1493 locations->backdrop_rect = backdrop_rect_location(); | 1527 locations->backdrop_rect = backdrop_rect_location(); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1538 std::string FragmentShaderRGBATexClampAlphaAA::GetShaderBody() { | 1572 std::string FragmentShaderRGBATexClampAlphaAA::GetShaderBody() { |
1539 return SHADER0([]() { | 1573 return SHADER0([]() { |
1540 void main() { | 1574 void main() { |
1541 TexCoordPrecision vec2 texCoord = | 1575 TexCoordPrecision vec2 texCoord = |
1542 clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + | 1576 clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + |
1543 fragmentTexTransform.xy; | 1577 fragmentTexTransform.xy; |
1544 vec4 texColor = TextureLookup(s_texture, texCoord); | 1578 vec4 texColor = TextureLookup(s_texture, texCoord); |
1545 vec4 d4 = min(edge_dist[0], edge_dist[1]); | 1579 vec4 d4 = min(edge_dist[0], edge_dist[1]); |
1546 vec2 d2 = min(d4.xz, d4.yw); | 1580 vec2 d2 = min(d4.xz, d4.yw); |
1547 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); | 1581 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
1548 gl_FragColor = texColor * alpha * aa; | 1582 outFragColor = texColor * alpha * aa; |
1549 } | 1583 } |
1550 }); | 1584 }); |
1551 } | 1585 } |
1552 | 1586 |
1553 std::string FragmentShaderRGBATexClampSwizzleAlphaAA::GetShaderString( | 1587 std::string FragmentShaderRGBATexClampSwizzleAlphaAA::GetShaderString( |
1554 TexCoordPrecision precision, | 1588 TexCoordPrecision precision, |
1555 SamplerType sampler) const { | 1589 SamplerType sampler) const { |
1556 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); | 1590 return FRAGMENT_SHADER(GetShaderHead(), GetShaderBody()); |
1557 } | 1591 } |
1558 | 1592 |
(...skipping 11 matching lines...) Expand all Loading... | |
1570 std::string FragmentShaderRGBATexClampSwizzleAlphaAA::GetShaderBody() { | 1604 std::string FragmentShaderRGBATexClampSwizzleAlphaAA::GetShaderBody() { |
1571 return SHADER0([]() { | 1605 return SHADER0([]() { |
1572 void main() { | 1606 void main() { |
1573 TexCoordPrecision vec2 texCoord = | 1607 TexCoordPrecision vec2 texCoord = |
1574 clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + | 1608 clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + |
1575 fragmentTexTransform.xy; | 1609 fragmentTexTransform.xy; |
1576 vec4 texColor = TextureLookup(s_texture, texCoord); | 1610 vec4 texColor = TextureLookup(s_texture, texCoord); |
1577 vec4 d4 = min(edge_dist[0], edge_dist[1]); | 1611 vec4 d4 = min(edge_dist[0], edge_dist[1]); |
1578 vec2 d2 = min(d4.xz, d4.yw); | 1612 vec2 d2 = min(d4.xz, d4.yw); |
1579 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); | 1613 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
1580 gl_FragColor = | 1614 outFragColor = |
1581 vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha * aa; | 1615 vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha * aa; |
1582 } | 1616 } |
1583 }); | 1617 }); |
1584 } | 1618 } |
1585 | 1619 |
1586 FragmentShaderRGBATexAlphaMask::FragmentShaderRGBATexAlphaMask() | 1620 FragmentShaderRGBATexAlphaMask::FragmentShaderRGBATexAlphaMask() |
1587 : sampler_location_(-1), | 1621 : sampler_location_(-1), |
1588 mask_sampler_location_(-1), | 1622 mask_sampler_location_(-1), |
1589 alpha_location_(-1), | 1623 alpha_location_(-1), |
1590 mask_tex_coord_scale_location_(-1) { | 1624 mask_tex_coord_scale_location_(-1) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1636 } | 1670 } |
1637 | 1671 |
1638 std::string FragmentShaderRGBATexAlphaMask::GetShaderBody() { | 1672 std::string FragmentShaderRGBATexAlphaMask::GetShaderBody() { |
1639 return SHADER0([]() { | 1673 return SHADER0([]() { |
1640 void main() { | 1674 void main() { |
1641 vec4 texColor = texture2D(s_texture, v_texCoord); | 1675 vec4 texColor = texture2D(s_texture, v_texCoord); |
1642 TexCoordPrecision vec2 maskTexCoord = | 1676 TexCoordPrecision vec2 maskTexCoord = |
1643 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, | 1677 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
1644 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); | 1678 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
1645 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); | 1679 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
1646 gl_FragColor = ApplyBlendMode( | 1680 outFragColor = |
1647 texColor * alpha * maskColor.w, maskColor.w); | 1681 ApplyBlendMode(texColor * alpha * maskColor.w, maskColor.w); |
1648 } | 1682 } |
1649 }); | 1683 }); |
1650 } | 1684 } |
1651 | 1685 |
1652 void FragmentShaderRGBATexAlphaMask::FillLocations( | 1686 void FragmentShaderRGBATexAlphaMask::FillLocations( |
1653 ShaderLocations* locations) const { | 1687 ShaderLocations* locations) const { |
1654 locations->sampler = sampler_location(); | 1688 locations->sampler = sampler_location(); |
1655 locations->mask_sampler = mask_sampler_location(); | 1689 locations->mask_sampler = mask_sampler_location(); |
1656 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); | 1690 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); |
1657 locations->mask_tex_coord_offset = mask_tex_coord_offset_location(); | 1691 locations->mask_tex_coord_offset = mask_tex_coord_offset_location(); |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1720 return SHADER0([]() { | 1754 return SHADER0([]() { |
1721 void main() { | 1755 void main() { |
1722 vec4 texColor = texture2D(s_texture, v_texCoord); | 1756 vec4 texColor = texture2D(s_texture, v_texCoord); |
1723 TexCoordPrecision vec2 maskTexCoord = | 1757 TexCoordPrecision vec2 maskTexCoord = |
1724 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, | 1758 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
1725 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); | 1759 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
1726 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); | 1760 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
1727 vec4 d4 = min(edge_dist[0], edge_dist[1]); | 1761 vec4 d4 = min(edge_dist[0], edge_dist[1]); |
1728 vec2 d2 = min(d4.xz, d4.yw); | 1762 vec2 d2 = min(d4.xz, d4.yw); |
1729 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); | 1763 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
1730 gl_FragColor = ApplyBlendMode( | 1764 outFragColor = |
1731 texColor * alpha * maskColor.w * aa, maskColor.w); | 1765 ApplyBlendMode(texColor * alpha * maskColor.w * aa, maskColor.w); |
1732 } | 1766 } |
1733 }); | 1767 }); |
1734 } | 1768 } |
1735 | 1769 |
1736 void FragmentShaderRGBATexAlphaMaskAA::FillLocations( | 1770 void FragmentShaderRGBATexAlphaMaskAA::FillLocations( |
1737 ShaderLocations* locations) const { | 1771 ShaderLocations* locations) const { |
1738 locations->sampler = sampler_location(); | 1772 locations->sampler = sampler_location(); |
1739 locations->mask_sampler = mask_sampler_location(); | 1773 locations->mask_sampler = mask_sampler_location(); |
1740 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); | 1774 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); |
1741 locations->mask_tex_coord_offset = mask_tex_coord_offset_location(); | 1775 locations->mask_tex_coord_offset = mask_tex_coord_offset_location(); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1818 texColor = colorMatrix * texColor + colorOffset; | 1852 texColor = colorMatrix * texColor + colorOffset; |
1819 texColor.rgb *= texColor.a; | 1853 texColor.rgb *= texColor.a; |
1820 texColor = clamp(texColor, 0.0, 1.0); | 1854 texColor = clamp(texColor, 0.0, 1.0); |
1821 TexCoordPrecision vec2 maskTexCoord = | 1855 TexCoordPrecision vec2 maskTexCoord = |
1822 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, | 1856 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
1823 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); | 1857 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
1824 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); | 1858 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
1825 vec4 d4 = min(edge_dist[0], edge_dist[1]); | 1859 vec4 d4 = min(edge_dist[0], edge_dist[1]); |
1826 vec2 d2 = min(d4.xz, d4.yw); | 1860 vec2 d2 = min(d4.xz, d4.yw); |
1827 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); | 1861 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
1828 gl_FragColor = ApplyBlendMode( | 1862 outFragColor = |
1829 texColor * alpha * maskColor.w * aa, maskColor.w); | 1863 ApplyBlendMode(texColor * alpha * maskColor.w * aa, maskColor.w); |
1830 } | 1864 } |
1831 }); | 1865 }); |
1832 } | 1866 } |
1833 | 1867 |
1834 void FragmentShaderRGBATexAlphaMaskColorMatrixAA::FillLocations( | 1868 void FragmentShaderRGBATexAlphaMaskColorMatrixAA::FillLocations( |
1835 ShaderLocations* locations) const { | 1869 ShaderLocations* locations) const { |
1836 locations->sampler = sampler_location(); | 1870 locations->sampler = sampler_location(); |
1837 locations->alpha = alpha_location(); | 1871 locations->alpha = alpha_location(); |
1838 locations->mask_sampler = mask_sampler_location(); | 1872 locations->mask_sampler = mask_sampler_location(); |
1839 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); | 1873 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1898 void main() { | 1932 void main() { |
1899 vec4 texColor = TextureLookup(s_texture, v_texCoord); | 1933 vec4 texColor = TextureLookup(s_texture, v_texCoord); |
1900 float nonZeroAlpha = max(texColor.a, 0.00001); | 1934 float nonZeroAlpha = max(texColor.a, 0.00001); |
1901 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); | 1935 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); |
1902 texColor = colorMatrix * texColor + colorOffset; | 1936 texColor = colorMatrix * texColor + colorOffset; |
1903 texColor.rgb *= texColor.a; | 1937 texColor.rgb *= texColor.a; |
1904 texColor = clamp(texColor, 0.0, 1.0); | 1938 texColor = clamp(texColor, 0.0, 1.0); |
1905 vec4 d4 = min(edge_dist[0], edge_dist[1]); | 1939 vec4 d4 = min(edge_dist[0], edge_dist[1]); |
1906 vec2 d2 = min(d4.xz, d4.yw); | 1940 vec2 d2 = min(d4.xz, d4.yw); |
1907 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); | 1941 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
1908 gl_FragColor = ApplyBlendMode(texColor * alpha * aa, 0.0); | 1942 outFragColor = ApplyBlendMode(texColor * alpha * aa, 0.0); |
1909 } | 1943 } |
1910 }); | 1944 }); |
1911 } | 1945 } |
1912 | 1946 |
1913 void FragmentShaderRGBATexAlphaColorMatrixAA::FillLocations( | 1947 void FragmentShaderRGBATexAlphaColorMatrixAA::FillLocations( |
1914 ShaderLocations* locations) const { | 1948 ShaderLocations* locations) const { |
1915 locations->sampler = sampler_location(); | 1949 locations->sampler = sampler_location(); |
1916 locations->alpha = alpha_location(); | 1950 locations->alpha = alpha_location(); |
1917 locations->color_matrix = color_matrix_location(); | 1951 locations->color_matrix = color_matrix_location(); |
1918 locations->color_offset = color_offset_location(); | 1952 locations->color_offset = color_offset_location(); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1985 vec4 texColor = texture2D(s_texture, v_texCoord); | 2019 vec4 texColor = texture2D(s_texture, v_texCoord); |
1986 float nonZeroAlpha = max(texColor.a, 0.00001); | 2020 float nonZeroAlpha = max(texColor.a, 0.00001); |
1987 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); | 2021 texColor = vec4(texColor.rgb / nonZeroAlpha, nonZeroAlpha); |
1988 texColor = colorMatrix * texColor + colorOffset; | 2022 texColor = colorMatrix * texColor + colorOffset; |
1989 texColor.rgb *= texColor.a; | 2023 texColor.rgb *= texColor.a; |
1990 texColor = clamp(texColor, 0.0, 1.0); | 2024 texColor = clamp(texColor, 0.0, 1.0); |
1991 TexCoordPrecision vec2 maskTexCoord = | 2025 TexCoordPrecision vec2 maskTexCoord = |
1992 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, | 2026 vec2(maskTexCoordOffset.x + v_texCoord.x * maskTexCoordScale.x, |
1993 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); | 2027 maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); |
1994 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); | 2028 vec4 maskColor = TextureLookup(s_mask, maskTexCoord); |
1995 gl_FragColor = ApplyBlendMode( | 2029 outFragColor = |
1996 texColor * alpha * maskColor.w, maskColor.w); | 2030 ApplyBlendMode(texColor * alpha * maskColor.w, maskColor.w); |
1997 } | 2031 } |
1998 }); | 2032 }); |
1999 } | 2033 } |
2000 | 2034 |
2001 void FragmentShaderRGBATexAlphaMaskColorMatrix::FillLocations( | 2035 void FragmentShaderRGBATexAlphaMaskColorMatrix::FillLocations( |
2002 ShaderLocations* locations) const { | 2036 ShaderLocations* locations) const { |
2003 locations->sampler = sampler_location(); | 2037 locations->sampler = sampler_location(); |
2004 locations->mask_sampler = mask_sampler_location(); | 2038 locations->mask_sampler = mask_sampler_location(); |
2005 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); | 2039 locations->mask_tex_coord_scale = mask_tex_coord_scale_location(); |
2006 locations->mask_tex_coord_offset = mask_tex_coord_offset_location(); | 2040 locations->mask_tex_coord_offset = mask_tex_coord_offset_location(); |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2162 } | 2196 } |
2163 | 2197 |
2164 functions += SHADER0([]() { | 2198 functions += SHADER0([]() { |
2165 void main() { | 2199 void main() { |
2166 vec2 ya_clamped = | 2200 vec2 ya_clamped = |
2167 max(ya_clamp_rect.xy, min(ya_clamp_rect.zw, v_yaTexCoord)); | 2201 max(ya_clamp_rect.xy, min(ya_clamp_rect.zw, v_yaTexCoord)); |
2168 float y_raw = TextureLookup(y_texture, ya_clamped).x; | 2202 float y_raw = TextureLookup(y_texture, ya_clamped).x; |
2169 vec2 uv_clamped = | 2203 vec2 uv_clamped = |
2170 max(uv_clamp_rect.xy, min(uv_clamp_rect.zw, v_uvTexCoord)); | 2204 max(uv_clamp_rect.xy, min(uv_clamp_rect.zw, v_uvTexCoord)); |
2171 vec3 yuv = vec3(y_raw, GetUV(uv_clamped)); | 2205 vec3 yuv = vec3(y_raw, GetUV(uv_clamped)); |
2172 gl_FragColor = vec4(yuv2rgb(yuv), 1.0) * GetAlpha(ya_clamped); | 2206 outFragColor = vec4(yuv2rgb(yuv), 1.0) * GetAlpha(ya_clamped); |
2173 } | 2207 } |
2174 }); | 2208 }); |
2175 | 2209 |
2176 return FRAGMENT_SHADER(head, functions); | 2210 return FRAGMENT_SHADER(head, functions); |
2177 } | 2211 } |
2178 | 2212 |
2179 FragmentShaderColor::FragmentShaderColor() : color_location_(-1) { | 2213 FragmentShaderColor::FragmentShaderColor() : color_location_(-1) { |
2180 } | 2214 } |
2181 | 2215 |
2182 void FragmentShaderColor::Init(GLES2Interface* context, | 2216 void FragmentShaderColor::Init(GLES2Interface* context, |
(...skipping 20 matching lines...) Expand all Loading... | |
2203 | 2237 |
2204 std::string FragmentShaderColor::GetShaderHead() { | 2238 std::string FragmentShaderColor::GetShaderHead() { |
2205 return SHADER0([]() { | 2239 return SHADER0([]() { |
2206 precision mediump float; | 2240 precision mediump float; |
2207 uniform vec4 color; | 2241 uniform vec4 color; |
2208 }); | 2242 }); |
2209 } | 2243 } |
2210 | 2244 |
2211 std::string FragmentShaderColor::GetShaderBody() { | 2245 std::string FragmentShaderColor::GetShaderBody() { |
2212 return SHADER0([]() { | 2246 return SHADER0([]() { |
2213 void main() { gl_FragColor = color; } | 2247 void main() { outFragColor = color; } |
2214 }); | 2248 }); |
2215 } | 2249 } |
2216 | 2250 |
2217 FragmentShaderColorAA::FragmentShaderColorAA() : color_location_(-1) { | 2251 FragmentShaderColorAA::FragmentShaderColorAA() : color_location_(-1) { |
2218 } | 2252 } |
2219 | 2253 |
2220 void FragmentShaderColorAA::Init(GLES2Interface* context, | 2254 void FragmentShaderColorAA::Init(GLES2Interface* context, |
2221 unsigned program, | 2255 unsigned program, |
2222 int* base_uniform_index) { | 2256 int* base_uniform_index) { |
2223 static const char* uniforms[] = { | 2257 static const char* uniforms[] = { |
(...skipping 22 matching lines...) Expand all Loading... | |
2246 varying vec4 edge_dist[2]; // 8 edge distances. | 2280 varying vec4 edge_dist[2]; // 8 edge distances. |
2247 }); | 2281 }); |
2248 } | 2282 } |
2249 | 2283 |
2250 std::string FragmentShaderColorAA::GetShaderBody() { | 2284 std::string FragmentShaderColorAA::GetShaderBody() { |
2251 return SHADER0([]() { | 2285 return SHADER0([]() { |
2252 void main() { | 2286 void main() { |
2253 vec4 d4 = min(edge_dist[0], edge_dist[1]); | 2287 vec4 d4 = min(edge_dist[0], edge_dist[1]); |
2254 vec2 d2 = min(d4.xz, d4.yw); | 2288 vec2 d2 = min(d4.xz, d4.yw); |
2255 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); | 2289 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); |
2256 gl_FragColor = color * aa; | 2290 outFragColor = color * aa; |
2257 } | 2291 } |
2258 }); | 2292 }); |
2259 } | 2293 } |
2260 | 2294 |
2261 } // namespace cc | 2295 } // namespace cc |
OLD | NEW |