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 <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 |