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

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

Issue 2549623002: Add layout qualifiers to compositor shaders (Closed)
Patch Set: Add require line Created 4 years 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698