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

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

Issue 51653008: Remove WGC3D::isContextLost references from cc (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix android build Created 7 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « cc/output/shader.h ('k') | cc/test/fake_web_graphics_context_3d.h » ('j') | 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 <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "cc/output/gl_renderer.h" // For the GLC() macro. 11 #include "cc/output/gl_renderer.h" // For the GLC() macro.
12 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" 12 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h"
13 #include "third_party/khronos/GLES2/gl2.h" 13 #include "third_party/khronos/GLES2/gl2.h"
14 14
15 #define SHADER0(Src) #Src 15 #define SHADER0(Src) #Src
16 #define VERTEX_SHADER(Src) SetVertexTexCoordPrecision(SHADER0(Src)) 16 #define VERTEX_SHADER(Src) SetVertexTexCoordPrecision(SHADER0(Src))
17 #define FRAGMENT_SHADER(Src) SetFragTexCoordPrecision(precision, SHADER0(Src)) 17 #define FRAGMENT_SHADER(Src) SetFragTexCoordPrecision(precision, SHADER0(Src))
18 18
19 using WebKit::WebGraphicsContext3D; 19 using WebKit::WebGraphicsContext3D;
20 20
21 namespace cc { 21 namespace cc {
22 22
23 namespace { 23 namespace {
24 24
25 static void GetProgramUniformLocations(WebGraphicsContext3D* context, 25 static void GetProgramUniformLocations(WebGraphicsContext3D* context,
26 unsigned program, 26 unsigned program,
27 size_t count, 27 size_t count,
28 const char** uniforms, 28 const char** uniforms,
29 int* locations, 29 int* locations,
30 bool using_bind_uniform,
31 int* base_uniform_index) { 30 int* base_uniform_index) {
32 for (size_t i = 0; i < count; i++) { 31 for (size_t i = 0; i < count; i++) {
33 if (using_bind_uniform) { 32 locations[i] = (*base_uniform_index)++;
34 locations[i] = (*base_uniform_index)++; 33 context->bindUniformLocationCHROMIUM(program, locations[i], uniforms[i]);
35 context->bindUniformLocationCHROMIUM(program, locations[i], uniforms[i]);
36 } else {
37 locations[i] = context->getUniformLocation(program, uniforms[i]);
38 DCHECK_NE(locations[i], -1);
39 }
40 } 34 }
41 } 35 }
42 36
43 static std::string SetFragTexCoordPrecision( 37 static std::string SetFragTexCoordPrecision(
44 TexCoordPrecision requested_precision, std::string shader_string) { 38 TexCoordPrecision requested_precision, std::string shader_string) {
45 switch (requested_precision) { 39 switch (requested_precision) {
46 case TexCoordPrecisionHigh: 40 case TexCoordPrecisionHigh:
47 DCHECK_NE(shader_string.find("TexCoordPrecision"), std::string::npos); 41 DCHECK_NE(shader_string.find("TexCoordPrecision"), std::string::npos);
48 return 42 return
49 "#ifdef GL_FRAGMENT_PRECISION_HIGH\n" 43 "#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 return TexCoordPrecisionRequired(context, 108 return TexCoordPrecisionRequired(context,
115 highp_threshold_cache, highp_threshold_min, 109 highp_threshold_cache, highp_threshold_min,
116 max_size.width(), max_size.height()); 110 max_size.width(), max_size.height());
117 } 111 }
118 112
119 VertexShaderPosTex::VertexShaderPosTex() 113 VertexShaderPosTex::VertexShaderPosTex()
120 : matrix_location_(-1) {} 114 : matrix_location_(-1) {}
121 115
122 void VertexShaderPosTex::Init(WebGraphicsContext3D* context, 116 void VertexShaderPosTex::Init(WebGraphicsContext3D* context,
123 unsigned program, 117 unsigned program,
124 bool using_bind_uniform,
125 int* base_uniform_index) { 118 int* base_uniform_index) {
126 static const char* uniforms[] = { 119 static const char* uniforms[] = {
127 "matrix", 120 "matrix",
128 }; 121 };
129 int locations[arraysize(uniforms)]; 122 int locations[arraysize(uniforms)];
130 123
131 GetProgramUniformLocations(context, 124 GetProgramUniformLocations(context,
132 program, 125 program,
133 arraysize(uniforms), 126 arraysize(uniforms),
134 uniforms, 127 uniforms,
135 locations, 128 locations,
136 using_bind_uniform,
137 base_uniform_index); 129 base_uniform_index);
138 matrix_location_ = locations[0]; 130 matrix_location_ = locations[0];
139 } 131 }
140 132
141 std::string VertexShaderPosTex::GetShaderString() const { 133 std::string VertexShaderPosTex::GetShaderString() const {
142 return VERTEX_SHADER( 134 return VERTEX_SHADER(
143 attribute vec4 a_position; 135 attribute vec4 a_position;
144 attribute TexCoordPrecision vec2 a_texCoord; 136 attribute TexCoordPrecision vec2 a_texCoord;
145 uniform mat4 matrix; 137 uniform mat4 matrix;
146 varying TexCoordPrecision vec2 v_texCoord; 138 varying TexCoordPrecision vec2 v_texCoord;
147 void main() { 139 void main() {
148 gl_Position = matrix * a_position; 140 gl_Position = matrix * a_position;
149 v_texCoord = a_texCoord; 141 v_texCoord = a_texCoord;
150 } 142 }
151 ); // NOLINT(whitespace/parens) 143 ); // NOLINT(whitespace/parens)
152 } 144 }
153 145
154 VertexShaderPosTexYUVStretch::VertexShaderPosTexYUVStretch() 146 VertexShaderPosTexYUVStretch::VertexShaderPosTexYUVStretch()
155 : matrix_location_(-1), 147 : matrix_location_(-1),
156 tex_scale_location_(-1) {} 148 tex_scale_location_(-1) {}
157 149
158 void VertexShaderPosTexYUVStretch::Init(WebGraphicsContext3D* context, 150 void VertexShaderPosTexYUVStretch::Init(WebGraphicsContext3D* context,
159 unsigned program, 151 unsigned program,
160 bool using_bind_uniform,
161 int* base_uniform_index) { 152 int* base_uniform_index) {
162 static const char* uniforms[] = { 153 static const char* uniforms[] = {
163 "matrix", 154 "matrix",
164 "texScale", 155 "texScale",
165 }; 156 };
166 int locations[arraysize(uniforms)]; 157 int locations[arraysize(uniforms)];
167 158
168 GetProgramUniformLocations(context, 159 GetProgramUniformLocations(context,
169 program, 160 program,
170 arraysize(uniforms), 161 arraysize(uniforms),
171 uniforms, 162 uniforms,
172 locations, 163 locations,
173 using_bind_uniform,
174 base_uniform_index); 164 base_uniform_index);
175 matrix_location_ = locations[0]; 165 matrix_location_ = locations[0];
176 tex_scale_location_ = locations[1]; 166 tex_scale_location_ = locations[1];
177 } 167 }
178 168
179 std::string VertexShaderPosTexYUVStretch::GetShaderString() const { 169 std::string VertexShaderPosTexYUVStretch::GetShaderString() const {
180 return VERTEX_SHADER( 170 return VERTEX_SHADER(
181 precision mediump float; 171 precision mediump float;
182 attribute vec4 a_position; 172 attribute vec4 a_position;
183 attribute TexCoordPrecision vec2 a_texCoord; 173 attribute TexCoordPrecision vec2 a_texCoord;
184 uniform mat4 matrix; 174 uniform mat4 matrix;
185 varying TexCoordPrecision vec2 v_texCoord; 175 varying TexCoordPrecision vec2 v_texCoord;
186 uniform TexCoordPrecision vec2 texScale; 176 uniform TexCoordPrecision vec2 texScale;
187 void main() { 177 void main() {
188 gl_Position = matrix * a_position; 178 gl_Position = matrix * a_position;
189 v_texCoord = a_texCoord * texScale; 179 v_texCoord = a_texCoord * texScale;
190 } 180 }
191 ); // NOLINT(whitespace/parens) 181 ); // NOLINT(whitespace/parens)
192 } 182 }
193 183
194 VertexShaderPos::VertexShaderPos() 184 VertexShaderPos::VertexShaderPos()
195 : matrix_location_(-1) {} 185 : matrix_location_(-1) {}
196 186
197 void VertexShaderPos::Init(WebGraphicsContext3D* context, 187 void VertexShaderPos::Init(WebGraphicsContext3D* context,
198 unsigned program, 188 unsigned program,
199 bool using_bind_uniform,
200 int* base_uniform_index) { 189 int* base_uniform_index) {
201 static const char* uniforms[] = { 190 static const char* uniforms[] = {
202 "matrix", 191 "matrix",
203 }; 192 };
204 int locations[arraysize(uniforms)]; 193 int locations[arraysize(uniforms)];
205 194
206 GetProgramUniformLocations(context, 195 GetProgramUniformLocations(context,
207 program, 196 program,
208 arraysize(uniforms), 197 arraysize(uniforms),
209 uniforms, 198 uniforms,
210 locations, 199 locations,
211 using_bind_uniform,
212 base_uniform_index); 200 base_uniform_index);
213 matrix_location_ = locations[0]; 201 matrix_location_ = locations[0];
214 } 202 }
215 203
216 std::string VertexShaderPos::GetShaderString() const { 204 std::string VertexShaderPos::GetShaderString() const {
217 return VERTEX_SHADER( 205 return VERTEX_SHADER(
218 attribute vec4 a_position; 206 attribute vec4 a_position;
219 uniform mat4 matrix; 207 uniform mat4 matrix;
220 void main() { 208 void main() {
221 gl_Position = matrix * a_position; 209 gl_Position = matrix * a_position;
222 } 210 }
223 ); // NOLINT(whitespace/parens) 211 ); // NOLINT(whitespace/parens)
224 } 212 }
225 213
226 VertexShaderPosTexTransform::VertexShaderPosTexTransform() 214 VertexShaderPosTexTransform::VertexShaderPosTexTransform()
227 : matrix_location_(-1), 215 : matrix_location_(-1),
228 tex_transform_location_(-1), 216 tex_transform_location_(-1),
229 vertex_opacity_location_(-1) {} 217 vertex_opacity_location_(-1) {}
230 218
231 void VertexShaderPosTexTransform::Init(WebGraphicsContext3D* context, 219 void VertexShaderPosTexTransform::Init(WebGraphicsContext3D* context,
232 unsigned program, 220 unsigned program,
233 bool using_bind_uniform,
234 int* base_uniform_index) { 221 int* base_uniform_index) {
235 static const char* uniforms[] = { 222 static const char* uniforms[] = {
236 "matrix", 223 "matrix",
237 "texTransform", 224 "texTransform",
238 "opacity", 225 "opacity",
239 }; 226 };
240 int locations[arraysize(uniforms)]; 227 int locations[arraysize(uniforms)];
241 228
242 GetProgramUniformLocations(context, 229 GetProgramUniformLocations(context,
243 program, 230 program,
244 arraysize(uniforms), 231 arraysize(uniforms),
245 uniforms, 232 uniforms,
246 locations, 233 locations,
247 using_bind_uniform,
248 base_uniform_index); 234 base_uniform_index);
249 matrix_location_ = locations[0]; 235 matrix_location_ = locations[0];
250 tex_transform_location_ = locations[1]; 236 tex_transform_location_ = locations[1];
251 vertex_opacity_location_ = locations[2]; 237 vertex_opacity_location_ = locations[2];
252 } 238 }
253 239
254 std::string VertexShaderPosTexTransform::GetShaderString() const { 240 std::string VertexShaderPosTexTransform::GetShaderString() const {
255 return VERTEX_SHADER( 241 return VERTEX_SHADER(
256 attribute vec4 a_position; 242 attribute vec4 a_position;
257 attribute TexCoordPrecision vec2 a_texCoord; 243 attribute TexCoordPrecision vec2 a_texCoord;
(...skipping 23 matching lines...) Expand all
281 } 267 }
282 ); // NOLINT(whitespace/parens) 268 ); // NOLINT(whitespace/parens)
283 } 269 }
284 270
285 VertexShaderQuad::VertexShaderQuad() 271 VertexShaderQuad::VertexShaderQuad()
286 : matrix_location_(-1), 272 : matrix_location_(-1),
287 quad_location_(-1) {} 273 quad_location_(-1) {}
288 274
289 void VertexShaderQuad::Init(WebGraphicsContext3D* context, 275 void VertexShaderQuad::Init(WebGraphicsContext3D* context,
290 unsigned program, 276 unsigned program,
291 bool using_bind_uniform,
292 int* base_uniform_index) { 277 int* base_uniform_index) {
293 static const char* uniforms[] = { 278 static const char* uniforms[] = {
294 "matrix", 279 "matrix",
295 "quad", 280 "quad",
296 }; 281 };
297 int locations[arraysize(uniforms)]; 282 int locations[arraysize(uniforms)];
298 283
299 GetProgramUniformLocations(context, 284 GetProgramUniformLocations(context,
300 program, 285 program,
301 arraysize(uniforms), 286 arraysize(uniforms),
302 uniforms, 287 uniforms,
303 locations, 288 locations,
304 using_bind_uniform,
305 base_uniform_index); 289 base_uniform_index);
306 matrix_location_ = locations[0]; 290 matrix_location_ = locations[0];
307 quad_location_ = locations[1]; 291 quad_location_ = locations[1];
308 } 292 }
309 293
310 std::string VertexShaderQuad::GetShaderString() const { 294 std::string VertexShaderQuad::GetShaderString() const {
311 #if defined(OS_ANDROID) 295 #if defined(OS_ANDROID)
312 // TODO(epenner): Find the cause of this 'quad' uniform 296 // TODO(epenner): Find the cause of this 'quad' uniform
313 // being missing if we don't add dummy variables. 297 // being missing if we don't add dummy variables.
314 // http://crbug.com/240602 298 // http://crbug.com/240602
(...skipping 25 matching lines...) Expand all
340 } 324 }
341 325
342 VertexShaderQuadAA::VertexShaderQuadAA() 326 VertexShaderQuadAA::VertexShaderQuadAA()
343 : matrix_location_(-1), 327 : matrix_location_(-1),
344 viewport_location_(-1), 328 viewport_location_(-1),
345 quad_location_(-1), 329 quad_location_(-1),
346 edge_location_(-1) {} 330 edge_location_(-1) {}
347 331
348 void VertexShaderQuadAA::Init(WebGraphicsContext3D* context, 332 void VertexShaderQuadAA::Init(WebGraphicsContext3D* context,
349 unsigned program, 333 unsigned program,
350 bool using_bind_uniform,
351 int* base_uniform_index) { 334 int* base_uniform_index) {
352 static const char* uniforms[] = { 335 static const char* uniforms[] = {
353 "matrix", 336 "matrix",
354 "viewport", 337 "viewport",
355 "quad", 338 "quad",
356 "edge", 339 "edge",
357 }; 340 };
358 int locations[arraysize(uniforms)]; 341 int locations[arraysize(uniforms)];
359 342
360 GetProgramUniformLocations(context, 343 GetProgramUniformLocations(context,
361 program, 344 program,
362 arraysize(uniforms), 345 arraysize(uniforms),
363 uniforms, 346 uniforms,
364 locations, 347 locations,
365 using_bind_uniform,
366 base_uniform_index); 348 base_uniform_index);
367 matrix_location_ = locations[0]; 349 matrix_location_ = locations[0];
368 viewport_location_ = locations[1]; 350 viewport_location_ = locations[1];
369 quad_location_ = locations[2]; 351 quad_location_ = locations[2];
370 edge_location_ = locations[3]; 352 edge_location_ = locations[3];
371 } 353 }
372 354
373 std::string VertexShaderQuadAA::GetShaderString() const { 355 std::string VertexShaderQuadAA::GetShaderString() const {
374 return VERTEX_SHADER( 356 return VERTEX_SHADER(
375 attribute TexCoordPrecision vec4 a_position; 357 attribute TexCoordPrecision vec4 a_position;
(...skipping 23 matching lines...) Expand all
399 381
400 VertexShaderQuadTexTransformAA::VertexShaderQuadTexTransformAA() 382 VertexShaderQuadTexTransformAA::VertexShaderQuadTexTransformAA()
401 : matrix_location_(-1), 383 : matrix_location_(-1),
402 viewport_location_(-1), 384 viewport_location_(-1),
403 quad_location_(-1), 385 quad_location_(-1),
404 edge_location_(-1), 386 edge_location_(-1),
405 tex_transform_location_(-1) {} 387 tex_transform_location_(-1) {}
406 388
407 void VertexShaderQuadTexTransformAA::Init(WebGraphicsContext3D* context, 389 void VertexShaderQuadTexTransformAA::Init(WebGraphicsContext3D* context,
408 unsigned program, 390 unsigned program,
409 bool using_bind_uniform,
410 int* base_uniform_index) { 391 int* base_uniform_index) {
411 static const char* uniforms[] = { 392 static const char* uniforms[] = {
412 "matrix", 393 "matrix",
413 "viewport", 394 "viewport",
414 "quad", 395 "quad",
415 "edge", 396 "edge",
416 "texTrans", 397 "texTrans",
417 }; 398 };
418 int locations[arraysize(uniforms)]; 399 int locations[arraysize(uniforms)];
419 400
420 GetProgramUniformLocations(context, 401 GetProgramUniformLocations(context,
421 program, 402 program,
422 arraysize(uniforms), 403 arraysize(uniforms),
423 uniforms, 404 uniforms,
424 locations, 405 locations,
425 using_bind_uniform,
426 base_uniform_index); 406 base_uniform_index);
427 matrix_location_ = locations[0]; 407 matrix_location_ = locations[0];
428 viewport_location_ = locations[1]; 408 viewport_location_ = locations[1];
429 quad_location_ = locations[2]; 409 quad_location_ = locations[2];
430 edge_location_ = locations[3]; 410 edge_location_ = locations[3];
431 tex_transform_location_ = locations[4]; 411 tex_transform_location_ = locations[4];
432 } 412 }
433 413
434 std::string VertexShaderQuadTexTransformAA::GetShaderString() const { 414 std::string VertexShaderQuadTexTransformAA::GetShaderString() const {
435 return VERTEX_SHADER( 415 return VERTEX_SHADER(
(...skipping 25 matching lines...) Expand all
461 ); // NOLINT(whitespace/parens) 441 ); // NOLINT(whitespace/parens)
462 } 442 }
463 443
464 VertexShaderTile::VertexShaderTile() 444 VertexShaderTile::VertexShaderTile()
465 : matrix_location_(-1), 445 : matrix_location_(-1),
466 quad_location_(-1), 446 quad_location_(-1),
467 vertex_tex_transform_location_(-1) {} 447 vertex_tex_transform_location_(-1) {}
468 448
469 void VertexShaderTile::Init(WebGraphicsContext3D* context, 449 void VertexShaderTile::Init(WebGraphicsContext3D* context,
470 unsigned program, 450 unsigned program,
471 bool using_bind_uniform,
472 int* base_uniform_index) { 451 int* base_uniform_index) {
473 static const char* uniforms[] = { 452 static const char* uniforms[] = {
474 "matrix", 453 "matrix",
475 "quad", 454 "quad",
476 "vertexTexTransform", 455 "vertexTexTransform",
477 }; 456 };
478 int locations[arraysize(uniforms)]; 457 int locations[arraysize(uniforms)];
479 458
480 GetProgramUniformLocations(context, 459 GetProgramUniformLocations(context,
481 program, 460 program,
482 arraysize(uniforms), 461 arraysize(uniforms),
483 uniforms, 462 uniforms,
484 locations, 463 locations,
485 using_bind_uniform,
486 base_uniform_index); 464 base_uniform_index);
487 matrix_location_ = locations[0]; 465 matrix_location_ = locations[0];
488 quad_location_ = locations[1]; 466 quad_location_ = locations[1];
489 vertex_tex_transform_location_ = locations[2]; 467 vertex_tex_transform_location_ = locations[2];
490 } 468 }
491 469
492 std::string VertexShaderTile::GetShaderString() const { 470 std::string VertexShaderTile::GetShaderString() const {
493 return VERTEX_SHADER( 471 return VERTEX_SHADER(
494 attribute TexCoordPrecision vec4 a_position; 472 attribute TexCoordPrecision vec4 a_position;
495 attribute float a_index; 473 attribute float a_index;
(...skipping 11 matching lines...) Expand all
507 485
508 VertexShaderTileAA::VertexShaderTileAA() 486 VertexShaderTileAA::VertexShaderTileAA()
509 : matrix_location_(-1), 487 : matrix_location_(-1),
510 viewport_location_(-1), 488 viewport_location_(-1),
511 quad_location_(-1), 489 quad_location_(-1),
512 edge_location_(-1), 490 edge_location_(-1),
513 vertex_tex_transform_location_(-1) {} 491 vertex_tex_transform_location_(-1) {}
514 492
515 void VertexShaderTileAA::Init(WebGraphicsContext3D* context, 493 void VertexShaderTileAA::Init(WebGraphicsContext3D* context,
516 unsigned program, 494 unsigned program,
517 bool using_bind_uniform,
518 int* base_uniform_index) { 495 int* base_uniform_index) {
519 static const char* uniforms[] = { 496 static const char* uniforms[] = {
520 "matrix", 497 "matrix",
521 "viewport", 498 "viewport",
522 "quad", 499 "quad",
523 "edge", 500 "edge",
524 "vertexTexTransform", 501 "vertexTexTransform",
525 }; 502 };
526 int locations[arraysize(uniforms)]; 503 int locations[arraysize(uniforms)];
527 504
528 GetProgramUniformLocations(context, 505 GetProgramUniformLocations(context,
529 program, 506 program,
530 arraysize(uniforms), 507 arraysize(uniforms),
531 uniforms, 508 uniforms,
532 locations, 509 locations,
533 using_bind_uniform,
534 base_uniform_index); 510 base_uniform_index);
535 matrix_location_ = locations[0]; 511 matrix_location_ = locations[0];
536 viewport_location_ = locations[1]; 512 viewport_location_ = locations[1];
537 quad_location_ = locations[2]; 513 quad_location_ = locations[2];
538 edge_location_ = locations[3]; 514 edge_location_ = locations[3];
539 vertex_tex_transform_location_ = locations[4]; 515 vertex_tex_transform_location_ = locations[4];
540 } 516 }
541 517
542 std::string VertexShaderTileAA::GetShaderString() const { 518 std::string VertexShaderTileAA::GetShaderString() const {
543 return VERTEX_SHADER( 519 return VERTEX_SHADER(
(...skipping 24 matching lines...) Expand all
568 } 544 }
569 ); // NOLINT(whitespace/parens) 545 ); // NOLINT(whitespace/parens)
570 } 546 }
571 547
572 VertexShaderVideoTransform::VertexShaderVideoTransform() 548 VertexShaderVideoTransform::VertexShaderVideoTransform()
573 : matrix_location_(-1), 549 : matrix_location_(-1),
574 tex_matrix_location_(-1) {} 550 tex_matrix_location_(-1) {}
575 551
576 void VertexShaderVideoTransform::Init(WebGraphicsContext3D* context, 552 void VertexShaderVideoTransform::Init(WebGraphicsContext3D* context,
577 unsigned program, 553 unsigned program,
578 bool using_bind_uniform,
579 int* base_uniform_index) { 554 int* base_uniform_index) {
580 static const char* uniforms[] = { 555 static const char* uniforms[] = {
581 "matrix", 556 "matrix",
582 "texMatrix", 557 "texMatrix",
583 }; 558 };
584 int locations[arraysize(uniforms)]; 559 int locations[arraysize(uniforms)];
585 560
586 GetProgramUniformLocations(context, 561 GetProgramUniformLocations(context,
587 program, 562 program,
588 arraysize(uniforms), 563 arraysize(uniforms),
589 uniforms, 564 uniforms,
590 locations, 565 locations,
591 using_bind_uniform,
592 base_uniform_index); 566 base_uniform_index);
593 matrix_location_ = locations[0]; 567 matrix_location_ = locations[0];
594 tex_matrix_location_ = locations[1]; 568 tex_matrix_location_ = locations[1];
595 } 569 }
596 570
597 std::string VertexShaderVideoTransform::GetShaderString() const { 571 std::string VertexShaderVideoTransform::GetShaderString() const {
598 return VERTEX_SHADER( 572 return VERTEX_SHADER(
599 attribute vec4 a_position; 573 attribute vec4 a_position;
600 attribute TexCoordPrecision vec2 a_texCoord; 574 attribute TexCoordPrecision vec2 a_texCoord;
601 uniform mat4 matrix; 575 uniform mat4 matrix;
602 uniform TexCoordPrecision mat4 texMatrix; 576 uniform TexCoordPrecision mat4 texMatrix;
603 varying TexCoordPrecision vec2 v_texCoord; 577 varying TexCoordPrecision vec2 v_texCoord;
604 void main() { 578 void main() {
605 gl_Position = matrix * a_position; 579 gl_Position = matrix * a_position;
606 v_texCoord = 580 v_texCoord =
607 vec2(texMatrix * vec4(a_texCoord.x, 1.0 - a_texCoord.y, 0.0, 1.0)); 581 vec2(texMatrix * vec4(a_texCoord.x, 1.0 - a_texCoord.y, 0.0, 1.0));
608 } 582 }
609 ); // NOLINT(whitespace/parens) 583 ); // NOLINT(whitespace/parens)
610 } 584 }
611 585
612 FragmentTexAlphaBinding::FragmentTexAlphaBinding() 586 FragmentTexAlphaBinding::FragmentTexAlphaBinding()
613 : sampler_location_(-1), 587 : sampler_location_(-1),
614 alpha_location_(-1) {} 588 alpha_location_(-1) {}
615 589
616 void FragmentTexAlphaBinding::Init(WebGraphicsContext3D* context, 590 void FragmentTexAlphaBinding::Init(WebGraphicsContext3D* context,
617 unsigned program, 591 unsigned program,
618 bool using_bind_uniform,
619 int* base_uniform_index) { 592 int* base_uniform_index) {
620 static const char* uniforms[] = { 593 static const char* uniforms[] = {
621 "s_texture", 594 "s_texture",
622 "alpha", 595 "alpha",
623 }; 596 };
624 int locations[arraysize(uniforms)]; 597 int locations[arraysize(uniforms)];
625 598
626 GetProgramUniformLocations(context, 599 GetProgramUniformLocations(context,
627 program, 600 program,
628 arraysize(uniforms), 601 arraysize(uniforms),
629 uniforms, 602 uniforms,
630 locations, 603 locations,
631 using_bind_uniform,
632 base_uniform_index); 604 base_uniform_index);
633 sampler_location_ = locations[0]; 605 sampler_location_ = locations[0];
634 alpha_location_ = locations[1]; 606 alpha_location_ = locations[1];
635 } 607 }
636 608
637 FragmentTexColorMatrixAlphaBinding::FragmentTexColorMatrixAlphaBinding() 609 FragmentTexColorMatrixAlphaBinding::FragmentTexColorMatrixAlphaBinding()
638 : sampler_location_(-1), 610 : sampler_location_(-1),
639 alpha_location_(-1), 611 alpha_location_(-1),
640 color_matrix_location_(-1), 612 color_matrix_location_(-1),
641 color_offset_location_(-1) {} 613 color_offset_location_(-1) {}
642 614
643 void FragmentTexColorMatrixAlphaBinding::Init(WebGraphicsContext3D* context, 615 void FragmentTexColorMatrixAlphaBinding::Init(WebGraphicsContext3D* context,
644 unsigned program, 616 unsigned program,
645 bool using_bind_uniform,
646 int* base_uniform_index) { 617 int* base_uniform_index) {
647 static const char* uniforms[] = { 618 static const char* uniforms[] = {
648 "s_texture", 619 "s_texture",
649 "alpha", 620 "alpha",
650 "colorMatrix", 621 "colorMatrix",
651 "colorOffset", 622 "colorOffset",
652 }; 623 };
653 int locations[arraysize(uniforms)]; 624 int locations[arraysize(uniforms)];
654 625
655 GetProgramUniformLocations(context, 626 GetProgramUniformLocations(context,
656 program, 627 program,
657 arraysize(uniforms), 628 arraysize(uniforms),
658 uniforms, 629 uniforms,
659 locations, 630 locations,
660 using_bind_uniform,
661 base_uniform_index); 631 base_uniform_index);
662 sampler_location_ = locations[0]; 632 sampler_location_ = locations[0];
663 alpha_location_ = locations[1]; 633 alpha_location_ = locations[1];
664 color_matrix_location_ = locations[2]; 634 color_matrix_location_ = locations[2];
665 color_offset_location_ = locations[3]; 635 color_offset_location_ = locations[3];
666 } 636 }
667 637
668 FragmentTexOpaqueBinding::FragmentTexOpaqueBinding() 638 FragmentTexOpaqueBinding::FragmentTexOpaqueBinding()
669 : sampler_location_(-1) {} 639 : sampler_location_(-1) {}
670 640
671 void FragmentTexOpaqueBinding::Init(WebGraphicsContext3D* context, 641 void FragmentTexOpaqueBinding::Init(WebGraphicsContext3D* context,
672 unsigned program, 642 unsigned program,
673 bool using_bind_uniform,
674 int* base_uniform_index) { 643 int* base_uniform_index) {
675 static const char* uniforms[] = { 644 static const char* uniforms[] = {
676 "s_texture", 645 "s_texture",
677 }; 646 };
678 int locations[arraysize(uniforms)]; 647 int locations[arraysize(uniforms)];
679 648
680 GetProgramUniformLocations(context, 649 GetProgramUniformLocations(context,
681 program, 650 program,
682 arraysize(uniforms), 651 arraysize(uniforms),
683 uniforms, 652 uniforms,
684 locations, 653 locations,
685 using_bind_uniform,
686 base_uniform_index); 654 base_uniform_index);
687 sampler_location_ = locations[0]; 655 sampler_location_ = locations[0];
688 } 656 }
689 657
690 FragmentShaderOESImageExternal::FragmentShaderOESImageExternal() 658 FragmentShaderOESImageExternal::FragmentShaderOESImageExternal()
691 : sampler_location_(-1) {} 659 : sampler_location_(-1) {}
692 660
693 void FragmentShaderOESImageExternal::Init(WebGraphicsContext3D* context, 661 void FragmentShaderOESImageExternal::Init(WebGraphicsContext3D* context,
694 unsigned program, 662 unsigned program,
695 bool using_bind_uniform,
696 int* base_uniform_index) { 663 int* base_uniform_index) {
697 static const char* uniforms[] = { 664 static const char* uniforms[] = {
698 "s_texture", 665 "s_texture",
699 }; 666 };
700 int locations[arraysize(uniforms)]; 667 int locations[arraysize(uniforms)];
701 668
702 GetProgramUniformLocations(context, 669 GetProgramUniformLocations(context,
703 program, 670 program,
704 arraysize(uniforms), 671 arraysize(uniforms),
705 uniforms, 672 uniforms,
706 locations, 673 locations,
707 using_bind_uniform,
708 base_uniform_index); 674 base_uniform_index);
709 sampler_location_ = locations[0]; 675 sampler_location_ = locations[0];
710 } 676 }
711 677
712 std::string FragmentShaderOESImageExternal::GetShaderString( 678 std::string FragmentShaderOESImageExternal::GetShaderString(
713 TexCoordPrecision precision) const { 679 TexCoordPrecision precision) const {
714 // Cannot use the SHADER() macro because of the '#' char 680 // Cannot use the SHADER() macro because of the '#' char
715 return "#extension GL_OES_EGL_image_external : require\n" + 681 return "#extension GL_OES_EGL_image_external : require\n" +
716 FRAGMENT_SHADER( 682 FRAGMENT_SHADER(
717 precision mediump float; 683 precision mediump float;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 ); // NOLINT(whitespace/parens) 754 ); // NOLINT(whitespace/parens)
789 } 755 }
790 756
791 FragmentTexBackgroundBinding::FragmentTexBackgroundBinding() 757 FragmentTexBackgroundBinding::FragmentTexBackgroundBinding()
792 : background_color_location_(-1), 758 : background_color_location_(-1),
793 sampler_location_(-1) { 759 sampler_location_(-1) {
794 } 760 }
795 761
796 void FragmentTexBackgroundBinding::Init(WebGraphicsContext3D* context, 762 void FragmentTexBackgroundBinding::Init(WebGraphicsContext3D* context,
797 unsigned program, 763 unsigned program,
798 bool using_bind_uniform,
799 int* base_uniform_index) { 764 int* base_uniform_index) {
800 static const char* uniforms[] = { 765 static const char* uniforms[] = {
801 "s_texture", 766 "s_texture",
802 "background_color", 767 "background_color",
803 }; 768 };
804 int locations[arraysize(uniforms)]; 769 int locations[arraysize(uniforms)];
805 770
806 GetProgramUniformLocations(context, 771 GetProgramUniformLocations(context,
807 program, 772 program,
808 arraysize(uniforms), 773 arraysize(uniforms),
809 uniforms, 774 uniforms,
810 locations, 775 locations,
811 using_bind_uniform,
812 base_uniform_index); 776 base_uniform_index);
813 777
814 sampler_location_ = locations[0]; 778 sampler_location_ = locations[0];
815 DCHECK_NE(sampler_location_, -1); 779 DCHECK_NE(sampler_location_, -1);
816 780
817 background_color_location_ = locations[1]; 781 background_color_location_ = locations[1];
818 DCHECK_NE(background_color_location_, -1); 782 DCHECK_NE(background_color_location_, -1);
819 } 783 }
820 784
821 std::string FragmentShaderTexBackgroundVaryingAlpha::GetShaderString( 785 std::string FragmentShaderTexBackgroundVaryingAlpha::GetShaderString(
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 } 882 }
919 ); // NOLINT(whitespace/parens) 883 ); // NOLINT(whitespace/parens)
920 } 884 }
921 885
922 FragmentShaderRGBATexAlphaAA::FragmentShaderRGBATexAlphaAA() 886 FragmentShaderRGBATexAlphaAA::FragmentShaderRGBATexAlphaAA()
923 : sampler_location_(-1), 887 : sampler_location_(-1),
924 alpha_location_(-1) {} 888 alpha_location_(-1) {}
925 889
926 void FragmentShaderRGBATexAlphaAA::Init(WebGraphicsContext3D* context, 890 void FragmentShaderRGBATexAlphaAA::Init(WebGraphicsContext3D* context,
927 unsigned program, 891 unsigned program,
928 bool using_bind_uniform,
929 int* base_uniform_index) { 892 int* base_uniform_index) {
930 static const char* uniforms[] = { 893 static const char* uniforms[] = {
931 "s_texture", 894 "s_texture",
932 "alpha", 895 "alpha",
933 }; 896 };
934 int locations[arraysize(uniforms)]; 897 int locations[arraysize(uniforms)];
935 898
936 GetProgramUniformLocations(context, 899 GetProgramUniformLocations(context,
937 program, 900 program,
938 arraysize(uniforms), 901 arraysize(uniforms),
939 uniforms, 902 uniforms,
940 locations, 903 locations,
941 using_bind_uniform,
942 base_uniform_index); 904 base_uniform_index);
943 sampler_location_ = locations[0]; 905 sampler_location_ = locations[0];
944 alpha_location_ = locations[1]; 906 alpha_location_ = locations[1];
945 } 907 }
946 908
947 std::string FragmentShaderRGBATexAlphaAA::GetShaderString( 909 std::string FragmentShaderRGBATexAlphaAA::GetShaderString(
948 TexCoordPrecision precision) const { 910 TexCoordPrecision precision) const {
949 return FRAGMENT_SHADER( 911 return FRAGMENT_SHADER(
950 precision mediump float; 912 precision mediump float;
951 uniform sampler2D s_texture; 913 uniform sampler2D s_texture;
(...skipping 11 matching lines...) Expand all
963 ); // NOLINT(whitespace/parens) 925 ); // NOLINT(whitespace/parens)
964 } 926 }
965 927
966 FragmentTexClampAlphaAABinding::FragmentTexClampAlphaAABinding() 928 FragmentTexClampAlphaAABinding::FragmentTexClampAlphaAABinding()
967 : sampler_location_(-1), 929 : sampler_location_(-1),
968 alpha_location_(-1), 930 alpha_location_(-1),
969 fragment_tex_transform_location_(-1) {} 931 fragment_tex_transform_location_(-1) {}
970 932
971 void FragmentTexClampAlphaAABinding::Init(WebGraphicsContext3D* context, 933 void FragmentTexClampAlphaAABinding::Init(WebGraphicsContext3D* context,
972 unsigned program, 934 unsigned program,
973 bool using_bind_uniform,
974 int* base_uniform_index) { 935 int* base_uniform_index) {
975 static const char* uniforms[] = { 936 static const char* uniforms[] = {
976 "s_texture", 937 "s_texture",
977 "alpha", 938 "alpha",
978 "fragmentTexTransform", 939 "fragmentTexTransform",
979 }; 940 };
980 int locations[arraysize(uniforms)]; 941 int locations[arraysize(uniforms)];
981 942
982 GetProgramUniformLocations(context, 943 GetProgramUniformLocations(context,
983 program, 944 program,
984 arraysize(uniforms), 945 arraysize(uniforms),
985 uniforms, 946 uniforms,
986 locations, 947 locations,
987 using_bind_uniform,
988 base_uniform_index); 948 base_uniform_index);
989 sampler_location_ = locations[0]; 949 sampler_location_ = locations[0];
990 alpha_location_ = locations[1]; 950 alpha_location_ = locations[1];
991 fragment_tex_transform_location_ = locations[2]; 951 fragment_tex_transform_location_ = locations[2];
992 } 952 }
993 953
994 std::string FragmentShaderRGBATexClampAlphaAA::GetShaderString( 954 std::string FragmentShaderRGBATexClampAlphaAA::GetShaderString(
995 TexCoordPrecision precision) const { 955 TexCoordPrecision precision) const {
996 return FRAGMENT_SHADER( 956 return FRAGMENT_SHADER(
997 precision mediump float; 957 precision mediump float;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1039 } 999 }
1040 1000
1041 FragmentShaderRGBATexAlphaMask::FragmentShaderRGBATexAlphaMask() 1001 FragmentShaderRGBATexAlphaMask::FragmentShaderRGBATexAlphaMask()
1042 : sampler_location_(-1), 1002 : sampler_location_(-1),
1043 mask_sampler_location_(-1), 1003 mask_sampler_location_(-1),
1044 alpha_location_(-1), 1004 alpha_location_(-1),
1045 mask_tex_coord_scale_location_(-1) {} 1005 mask_tex_coord_scale_location_(-1) {}
1046 1006
1047 void FragmentShaderRGBATexAlphaMask::Init(WebGraphicsContext3D* context, 1007 void FragmentShaderRGBATexAlphaMask::Init(WebGraphicsContext3D* context,
1048 unsigned program, 1008 unsigned program,
1049 bool using_bind_uniform,
1050 int* base_uniform_index) { 1009 int* base_uniform_index) {
1051 static const char* uniforms[] = { 1010 static const char* uniforms[] = {
1052 "s_texture", 1011 "s_texture",
1053 "s_mask", 1012 "s_mask",
1054 "alpha", 1013 "alpha",
1055 "maskTexCoordScale", 1014 "maskTexCoordScale",
1056 "maskTexCoordOffset", 1015 "maskTexCoordOffset",
1057 }; 1016 };
1058 int locations[arraysize(uniforms)]; 1017 int locations[arraysize(uniforms)];
1059 1018
1060 GetProgramUniformLocations(context, 1019 GetProgramUniformLocations(context,
1061 program, 1020 program,
1062 arraysize(uniforms), 1021 arraysize(uniforms),
1063 uniforms, 1022 uniforms,
1064 locations, 1023 locations,
1065 using_bind_uniform,
1066 base_uniform_index); 1024 base_uniform_index);
1067 sampler_location_ = locations[0]; 1025 sampler_location_ = locations[0];
1068 mask_sampler_location_ = locations[1]; 1026 mask_sampler_location_ = locations[1];
1069 alpha_location_ = locations[2]; 1027 alpha_location_ = locations[2];
1070 mask_tex_coord_scale_location_ = locations[3]; 1028 mask_tex_coord_scale_location_ = locations[3];
1071 mask_tex_coord_offset_location_ = locations[4]; 1029 mask_tex_coord_offset_location_ = locations[4];
1072 } 1030 }
1073 1031
1074 std::string FragmentShaderRGBATexAlphaMask::GetShaderString( 1032 std::string FragmentShaderRGBATexAlphaMask::GetShaderString(
1075 TexCoordPrecision precision) const { 1033 TexCoordPrecision precision) const {
(...skipping 18 matching lines...) Expand all
1094 1052
1095 FragmentShaderRGBATexAlphaMaskAA::FragmentShaderRGBATexAlphaMaskAA() 1053 FragmentShaderRGBATexAlphaMaskAA::FragmentShaderRGBATexAlphaMaskAA()
1096 : sampler_location_(-1), 1054 : sampler_location_(-1),
1097 mask_sampler_location_(-1), 1055 mask_sampler_location_(-1),
1098 alpha_location_(-1), 1056 alpha_location_(-1),
1099 mask_tex_coord_scale_location_(-1), 1057 mask_tex_coord_scale_location_(-1),
1100 mask_tex_coord_offset_location_(-1) {} 1058 mask_tex_coord_offset_location_(-1) {}
1101 1059
1102 void FragmentShaderRGBATexAlphaMaskAA::Init(WebGraphicsContext3D* context, 1060 void FragmentShaderRGBATexAlphaMaskAA::Init(WebGraphicsContext3D* context,
1103 unsigned program, 1061 unsigned program,
1104 bool using_bind_uniform,
1105 int* base_uniform_index) { 1062 int* base_uniform_index) {
1106 static const char* uniforms[] = { 1063 static const char* uniforms[] = {
1107 "s_texture", 1064 "s_texture",
1108 "s_mask", 1065 "s_mask",
1109 "alpha", 1066 "alpha",
1110 "maskTexCoordScale", 1067 "maskTexCoordScale",
1111 "maskTexCoordOffset", 1068 "maskTexCoordOffset",
1112 }; 1069 };
1113 int locations[arraysize(uniforms)]; 1070 int locations[arraysize(uniforms)];
1114 1071
1115 GetProgramUniformLocations(context, 1072 GetProgramUniformLocations(context,
1116 program, 1073 program,
1117 arraysize(uniforms), 1074 arraysize(uniforms),
1118 uniforms, 1075 uniforms,
1119 locations, 1076 locations,
1120 using_bind_uniform,
1121 base_uniform_index); 1077 base_uniform_index);
1122 sampler_location_ = locations[0]; 1078 sampler_location_ = locations[0];
1123 mask_sampler_location_ = locations[1]; 1079 mask_sampler_location_ = locations[1];
1124 alpha_location_ = locations[2]; 1080 alpha_location_ = locations[2];
1125 mask_tex_coord_scale_location_ = locations[3]; 1081 mask_tex_coord_scale_location_ = locations[3];
1126 mask_tex_coord_offset_location_ = locations[4]; 1082 mask_tex_coord_offset_location_ = locations[4];
1127 } 1083 }
1128 1084
1129 std::string FragmentShaderRGBATexAlphaMaskAA::GetShaderString( 1085 std::string FragmentShaderRGBATexAlphaMaskAA::GetShaderString(
1130 TexCoordPrecision precision) const { 1086 TexCoordPrecision precision) const {
(...skipping 26 matching lines...) Expand all
1157 : sampler_location_(-1), 1113 : sampler_location_(-1),
1158 mask_sampler_location_(-1), 1114 mask_sampler_location_(-1),
1159 alpha_location_(-1), 1115 alpha_location_(-1),
1160 mask_tex_coord_scale_location_(-1), 1116 mask_tex_coord_scale_location_(-1),
1161 color_matrix_location_(-1), 1117 color_matrix_location_(-1),
1162 color_offset_location_(-1) {} 1118 color_offset_location_(-1) {}
1163 1119
1164 void FragmentShaderRGBATexAlphaMaskColorMatrixAA::Init( 1120 void FragmentShaderRGBATexAlphaMaskColorMatrixAA::Init(
1165 WebGraphicsContext3D* context, 1121 WebGraphicsContext3D* context,
1166 unsigned program, 1122 unsigned program,
1167 bool using_bind_uniform,
1168 int* base_uniform_index) { 1123 int* base_uniform_index) {
1169 static const char* uniforms[] = { 1124 static const char* uniforms[] = {
1170 "s_texture", 1125 "s_texture",
1171 "s_mask", 1126 "s_mask",
1172 "alpha", 1127 "alpha",
1173 "maskTexCoordScale", 1128 "maskTexCoordScale",
1174 "maskTexCoordOffset", 1129 "maskTexCoordOffset",
1175 "colorMatrix", 1130 "colorMatrix",
1176 "colorOffset", 1131 "colorOffset",
1177 }; 1132 };
1178 int locations[arraysize(uniforms)]; 1133 int locations[arraysize(uniforms)];
1179 1134
1180 GetProgramUniformLocations(context, 1135 GetProgramUniformLocations(context,
1181 program, 1136 program,
1182 arraysize(uniforms), 1137 arraysize(uniforms),
1183 uniforms, 1138 uniforms,
1184 locations, 1139 locations,
1185 using_bind_uniform,
1186 base_uniform_index); 1140 base_uniform_index);
1187 sampler_location_ = locations[0]; 1141 sampler_location_ = locations[0];
1188 mask_sampler_location_ = locations[1]; 1142 mask_sampler_location_ = locations[1];
1189 alpha_location_ = locations[2]; 1143 alpha_location_ = locations[2];
1190 mask_tex_coord_scale_location_ = locations[3]; 1144 mask_tex_coord_scale_location_ = locations[3];
1191 mask_tex_coord_offset_location_ = locations[4]; 1145 mask_tex_coord_offset_location_ = locations[4];
1192 color_matrix_location_ = locations[5]; 1146 color_matrix_location_ = locations[5];
1193 color_offset_location_ = locations[6]; 1147 color_offset_location_ = locations[6];
1194 } 1148 }
1195 1149
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1229 FragmentShaderRGBATexAlphaColorMatrixAA:: 1183 FragmentShaderRGBATexAlphaColorMatrixAA::
1230 FragmentShaderRGBATexAlphaColorMatrixAA() 1184 FragmentShaderRGBATexAlphaColorMatrixAA()
1231 : sampler_location_(-1), 1185 : sampler_location_(-1),
1232 alpha_location_(-1), 1186 alpha_location_(-1),
1233 color_matrix_location_(-1), 1187 color_matrix_location_(-1),
1234 color_offset_location_(-1) {} 1188 color_offset_location_(-1) {}
1235 1189
1236 void FragmentShaderRGBATexAlphaColorMatrixAA::Init( 1190 void FragmentShaderRGBATexAlphaColorMatrixAA::Init(
1237 WebGraphicsContext3D* context, 1191 WebGraphicsContext3D* context,
1238 unsigned program, 1192 unsigned program,
1239 bool using_bind_uniform,
1240 int* base_uniform_index) { 1193 int* base_uniform_index) {
1241 static const char* uniforms[] = { 1194 static const char* uniforms[] = {
1242 "s_texture", 1195 "s_texture",
1243 "alpha", 1196 "alpha",
1244 "colorMatrix", 1197 "colorMatrix",
1245 "colorOffset", 1198 "colorOffset",
1246 }; 1199 };
1247 int locations[arraysize(uniforms)]; 1200 int locations[arraysize(uniforms)];
1248 1201
1249 GetProgramUniformLocations(context, 1202 GetProgramUniformLocations(context,
1250 program, 1203 program,
1251 arraysize(uniforms), 1204 arraysize(uniforms),
1252 uniforms, 1205 uniforms,
1253 locations, 1206 locations,
1254 using_bind_uniform,
1255 base_uniform_index); 1207 base_uniform_index);
1256 sampler_location_ = locations[0]; 1208 sampler_location_ = locations[0];
1257 alpha_location_ = locations[1]; 1209 alpha_location_ = locations[1];
1258 color_matrix_location_ = locations[2]; 1210 color_matrix_location_ = locations[2];
1259 color_offset_location_ = locations[3]; 1211 color_offset_location_ = locations[3];
1260 } 1212 }
1261 1213
1262 std::string FragmentShaderRGBATexAlphaColorMatrixAA::GetShaderString( 1214 std::string FragmentShaderRGBATexAlphaColorMatrixAA::GetShaderString(
1263 TexCoordPrecision precision) const { 1215 TexCoordPrecision precision) const {
1264 return FRAGMENT_SHADER( 1216 return FRAGMENT_SHADER(
(...skipping 23 matching lines...) Expand all
1288 FragmentShaderRGBATexAlphaMaskColorMatrix:: 1240 FragmentShaderRGBATexAlphaMaskColorMatrix::
1289 FragmentShaderRGBATexAlphaMaskColorMatrix() 1241 FragmentShaderRGBATexAlphaMaskColorMatrix()
1290 : sampler_location_(-1), 1242 : sampler_location_(-1),
1291 mask_sampler_location_(-1), 1243 mask_sampler_location_(-1),
1292 alpha_location_(-1), 1244 alpha_location_(-1),
1293 mask_tex_coord_scale_location_(-1) {} 1245 mask_tex_coord_scale_location_(-1) {}
1294 1246
1295 void FragmentShaderRGBATexAlphaMaskColorMatrix::Init( 1247 void FragmentShaderRGBATexAlphaMaskColorMatrix::Init(
1296 WebGraphicsContext3D* context, 1248 WebGraphicsContext3D* context,
1297 unsigned program, 1249 unsigned program,
1298 bool using_bind_uniform,
1299 int* base_uniform_index) { 1250 int* base_uniform_index) {
1300 static const char* uniforms[] = { 1251 static const char* uniforms[] = {
1301 "s_texture", 1252 "s_texture",
1302 "s_mask", 1253 "s_mask",
1303 "alpha", 1254 "alpha",
1304 "maskTexCoordScale", 1255 "maskTexCoordScale",
1305 "maskTexCoordOffset", 1256 "maskTexCoordOffset",
1306 "colorMatrix", 1257 "colorMatrix",
1307 "colorOffset", 1258 "colorOffset",
1308 }; 1259 };
1309 int locations[arraysize(uniforms)]; 1260 int locations[arraysize(uniforms)];
1310 1261
1311 GetProgramUniformLocations(context, 1262 GetProgramUniformLocations(context,
1312 program, 1263 program,
1313 arraysize(uniforms), 1264 arraysize(uniforms),
1314 uniforms, 1265 uniforms,
1315 locations, 1266 locations,
1316 using_bind_uniform,
1317 base_uniform_index); 1267 base_uniform_index);
1318 sampler_location_ = locations[0]; 1268 sampler_location_ = locations[0];
1319 mask_sampler_location_ = locations[1]; 1269 mask_sampler_location_ = locations[1];
1320 alpha_location_ = locations[2]; 1270 alpha_location_ = locations[2];
1321 mask_tex_coord_scale_location_ = locations[3]; 1271 mask_tex_coord_scale_location_ = locations[3];
1322 mask_tex_coord_offset_location_ = locations[4]; 1272 mask_tex_coord_offset_location_ = locations[4];
1323 color_matrix_location_ = locations[5]; 1273 color_matrix_location_ = locations[5];
1324 color_offset_location_ = locations[6]; 1274 color_offset_location_ = locations[6];
1325 } 1275 }
1326 1276
(...skipping 28 matching lines...) Expand all
1355 FragmentShaderYUVVideo::FragmentShaderYUVVideo() 1305 FragmentShaderYUVVideo::FragmentShaderYUVVideo()
1356 : y_texture_location_(-1), 1306 : y_texture_location_(-1),
1357 u_texture_location_(-1), 1307 u_texture_location_(-1),
1358 v_texture_location_(-1), 1308 v_texture_location_(-1),
1359 alpha_location_(-1), 1309 alpha_location_(-1),
1360 yuv_matrix_location_(-1), 1310 yuv_matrix_location_(-1),
1361 yuv_adj_location_(-1) {} 1311 yuv_adj_location_(-1) {}
1362 1312
1363 void FragmentShaderYUVVideo::Init(WebGraphicsContext3D* context, 1313 void FragmentShaderYUVVideo::Init(WebGraphicsContext3D* context,
1364 unsigned program, 1314 unsigned program,
1365 bool using_bind_uniform,
1366 int* base_uniform_index) { 1315 int* base_uniform_index) {
1367 static const char* uniforms[] = { 1316 static const char* uniforms[] = {
1368 "y_texture", 1317 "y_texture",
1369 "u_texture", 1318 "u_texture",
1370 "v_texture", 1319 "v_texture",
1371 "alpha", 1320 "alpha",
1372 "yuv_matrix", 1321 "yuv_matrix",
1373 "yuv_adj", 1322 "yuv_adj",
1374 }; 1323 };
1375 int locations[arraysize(uniforms)]; 1324 int locations[arraysize(uniforms)];
1376 1325
1377 GetProgramUniformLocations(context, 1326 GetProgramUniformLocations(context,
1378 program, 1327 program,
1379 arraysize(uniforms), 1328 arraysize(uniforms),
1380 uniforms, 1329 uniforms,
1381 locations, 1330 locations,
1382 using_bind_uniform,
1383 base_uniform_index); 1331 base_uniform_index);
1384 y_texture_location_ = locations[0]; 1332 y_texture_location_ = locations[0];
1385 u_texture_location_ = locations[1]; 1333 u_texture_location_ = locations[1];
1386 v_texture_location_ = locations[2]; 1334 v_texture_location_ = locations[2];
1387 alpha_location_ = locations[3]; 1335 alpha_location_ = locations[3];
1388 yuv_matrix_location_ = locations[4]; 1336 yuv_matrix_location_ = locations[4];
1389 yuv_adj_location_ = locations[5]; 1337 yuv_adj_location_ = locations[5];
1390 } 1338 }
1391 1339
1392 std::string FragmentShaderYUVVideo::GetShaderString( 1340 std::string FragmentShaderYUVVideo::GetShaderString(
(...skipping 24 matching lines...) Expand all
1417 u_texture_location_(-1), 1365 u_texture_location_(-1),
1418 v_texture_location_(-1), 1366 v_texture_location_(-1),
1419 a_texture_location_(-1), 1367 a_texture_location_(-1),
1420 alpha_location_(-1), 1368 alpha_location_(-1),
1421 yuv_matrix_location_(-1), 1369 yuv_matrix_location_(-1),
1422 yuv_adj_location_(-1) { 1370 yuv_adj_location_(-1) {
1423 } 1371 }
1424 1372
1425 void FragmentShaderYUVAVideo::Init(WebGraphicsContext3D* context, 1373 void FragmentShaderYUVAVideo::Init(WebGraphicsContext3D* context,
1426 unsigned program, 1374 unsigned program,
1427 bool using_bind_uniform,
1428 int* base_uniform_index) { 1375 int* base_uniform_index) {
1429 static const char* uniforms[] = { 1376 static const char* uniforms[] = {
1430 "y_texture", 1377 "y_texture",
1431 "u_texture", 1378 "u_texture",
1432 "v_texture", 1379 "v_texture",
1433 "a_texture", 1380 "a_texture",
1434 "alpha", 1381 "alpha",
1435 "cc_matrix", 1382 "cc_matrix",
1436 "yuv_adj", 1383 "yuv_adj",
1437 }; 1384 };
1438 int locations[arraysize(uniforms)]; 1385 int locations[arraysize(uniforms)];
1439 1386
1440 GetProgramUniformLocations(context, 1387 GetProgramUniformLocations(context,
1441 program, 1388 program,
1442 arraysize(uniforms), 1389 arraysize(uniforms),
1443 uniforms, 1390 uniforms,
1444 locations, 1391 locations,
1445 using_bind_uniform,
1446 base_uniform_index); 1392 base_uniform_index);
1447 y_texture_location_ = locations[0]; 1393 y_texture_location_ = locations[0];
1448 u_texture_location_ = locations[1]; 1394 u_texture_location_ = locations[1];
1449 v_texture_location_ = locations[2]; 1395 v_texture_location_ = locations[2];
1450 a_texture_location_ = locations[3]; 1396 a_texture_location_ = locations[3];
1451 alpha_location_ = locations[4]; 1397 alpha_location_ = locations[4];
1452 yuv_matrix_location_ = locations[5]; 1398 yuv_matrix_location_ = locations[5];
1453 yuv_adj_location_ = locations[6]; 1399 yuv_adj_location_ = locations[6];
1454 } 1400 }
1455 1401
(...skipping 20 matching lines...) Expand all
1476 gl_FragColor = vec4(rgb, 1.0) * (alpha * a_raw); 1422 gl_FragColor = vec4(rgb, 1.0) * (alpha * a_raw);
1477 } 1423 }
1478 ); // NOLINT(whitespace/parens) 1424 ); // NOLINT(whitespace/parens)
1479 } 1425 }
1480 1426
1481 FragmentShaderColor::FragmentShaderColor() 1427 FragmentShaderColor::FragmentShaderColor()
1482 : color_location_(-1) {} 1428 : color_location_(-1) {}
1483 1429
1484 void FragmentShaderColor::Init(WebGraphicsContext3D* context, 1430 void FragmentShaderColor::Init(WebGraphicsContext3D* context,
1485 unsigned program, 1431 unsigned program,
1486 bool using_bind_uniform,
1487 int* base_uniform_index) { 1432 int* base_uniform_index) {
1488 static const char* uniforms[] = { 1433 static const char* uniforms[] = {
1489 "color", 1434 "color",
1490 }; 1435 };
1491 int locations[arraysize(uniforms)]; 1436 int locations[arraysize(uniforms)];
1492 1437
1493 GetProgramUniformLocations(context, 1438 GetProgramUniformLocations(context,
1494 program, 1439 program,
1495 arraysize(uniforms), 1440 arraysize(uniforms),
1496 uniforms, 1441 uniforms,
1497 locations, 1442 locations,
1498 using_bind_uniform,
1499 base_uniform_index); 1443 base_uniform_index);
1500 color_location_ = locations[0]; 1444 color_location_ = locations[0];
1501 } 1445 }
1502 1446
1503 std::string FragmentShaderColor::GetShaderString( 1447 std::string FragmentShaderColor::GetShaderString(
1504 TexCoordPrecision precision) const { 1448 TexCoordPrecision precision) const {
1505 return FRAGMENT_SHADER( 1449 return FRAGMENT_SHADER(
1506 precision mediump float; 1450 precision mediump float;
1507 uniform vec4 color; 1451 uniform vec4 color;
1508 void main() { 1452 void main() {
1509 gl_FragColor = color; 1453 gl_FragColor = color;
1510 } 1454 }
1511 ); // NOLINT(whitespace/parens) 1455 ); // NOLINT(whitespace/parens)
1512 } 1456 }
1513 1457
1514 FragmentShaderColorAA::FragmentShaderColorAA() 1458 FragmentShaderColorAA::FragmentShaderColorAA()
1515 : color_location_(-1) {} 1459 : color_location_(-1) {}
1516 1460
1517 void FragmentShaderColorAA::Init(WebGraphicsContext3D* context, 1461 void FragmentShaderColorAA::Init(WebGraphicsContext3D* context,
1518 unsigned program, 1462 unsigned program,
1519 bool using_bind_uniform,
1520 int* base_uniform_index) { 1463 int* base_uniform_index) {
1521 static const char* uniforms[] = { 1464 static const char* uniforms[] = {
1522 "color", 1465 "color",
1523 }; 1466 };
1524 int locations[arraysize(uniforms)]; 1467 int locations[arraysize(uniforms)];
1525 1468
1526 GetProgramUniformLocations(context, 1469 GetProgramUniformLocations(context,
1527 program, 1470 program,
1528 arraysize(uniforms), 1471 arraysize(uniforms),
1529 uniforms, 1472 uniforms,
1530 locations, 1473 locations,
1531 using_bind_uniform,
1532 base_uniform_index); 1474 base_uniform_index);
1533 color_location_ = locations[0]; 1475 color_location_ = locations[0];
1534 } 1476 }
1535 1477
1536 std::string FragmentShaderColorAA::GetShaderString( 1478 std::string FragmentShaderColorAA::GetShaderString(
1537 TexCoordPrecision precision) const { 1479 TexCoordPrecision precision) const {
1538 return FRAGMENT_SHADER( 1480 return FRAGMENT_SHADER(
1539 precision mediump float; 1481 precision mediump float;
1540 uniform vec4 color; 1482 uniform vec4 color;
1541 varying vec4 edge_dist[2]; // 8 edge distances. 1483 varying vec4 edge_dist[2]; // 8 edge distances.
1542 1484
1543 void main() { 1485 void main() {
1544 vec4 d4 = min(edge_dist[0], edge_dist[1]); 1486 vec4 d4 = min(edge_dist[0], edge_dist[1]);
1545 vec2 d2 = min(d4.xz, d4.yw); 1487 vec2 d2 = min(d4.xz, d4.yw);
1546 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0); 1488 float aa = clamp(gl_FragCoord.w * min(d2.x, d2.y), 0.0, 1.0);
1547 gl_FragColor = color * aa; 1489 gl_FragColor = color * aa;
1548 } 1490 }
1549 ); // NOLINT(whitespace/parens) 1491 ); // NOLINT(whitespace/parens)
1550 } 1492 }
1551 1493
1552 FragmentShaderCheckerboard::FragmentShaderCheckerboard() 1494 FragmentShaderCheckerboard::FragmentShaderCheckerboard()
1553 : alpha_location_(-1), 1495 : alpha_location_(-1),
1554 tex_transform_location_(-1), 1496 tex_transform_location_(-1),
1555 frequency_location_(-1) {} 1497 frequency_location_(-1) {}
1556 1498
1557 void FragmentShaderCheckerboard::Init(WebGraphicsContext3D* context, 1499 void FragmentShaderCheckerboard::Init(WebGraphicsContext3D* context,
1558 unsigned program, 1500 unsigned program,
1559 bool using_bind_uniform,
1560 int* base_uniform_index) { 1501 int* base_uniform_index) {
1561 static const char* uniforms[] = { 1502 static const char* uniforms[] = {
1562 "alpha", 1503 "alpha",
1563 "texTransform", 1504 "texTransform",
1564 "frequency", 1505 "frequency",
1565 "color", 1506 "color",
1566 }; 1507 };
1567 int locations[arraysize(uniforms)]; 1508 int locations[arraysize(uniforms)];
1568 1509
1569 GetProgramUniformLocations(context, 1510 GetProgramUniformLocations(context,
1570 program, 1511 program,
1571 arraysize(uniforms), 1512 arraysize(uniforms),
1572 uniforms, 1513 uniforms,
1573 locations, 1514 locations,
1574 using_bind_uniform,
1575 base_uniform_index); 1515 base_uniform_index);
1576 alpha_location_ = locations[0]; 1516 alpha_location_ = locations[0];
1577 tex_transform_location_ = locations[1]; 1517 tex_transform_location_ = locations[1];
1578 frequency_location_ = locations[2]; 1518 frequency_location_ = locations[2];
1579 color_location_ = locations[3]; 1519 color_location_ = locations[3];
1580 } 1520 }
1581 1521
1582 std::string FragmentShaderCheckerboard::GetShaderString( 1522 std::string FragmentShaderCheckerboard::GetShaderString(
1583 TexCoordPrecision precision) const { 1523 TexCoordPrecision precision) const {
1584 // Shader based on Example 13-17 of "OpenGL ES 2.0 Programming Guide" 1524 // Shader based on Example 13-17 of "OpenGL ES 2.0 Programming Guide"
(...skipping 12 matching lines...) Expand all
1597 vec2 texCoord = 1537 vec2 texCoord =
1598 clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texTransform.xy; 1538 clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texTransform.xy;
1599 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); 1539 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0);
1600 float picker = abs(coord.x - coord.y); // NOLINT 1540 float picker = abs(coord.x - coord.y); // NOLINT
1601 gl_FragColor = mix(color1, color2, picker) * alpha; 1541 gl_FragColor = mix(color1, color2, picker) * alpha;
1602 } 1542 }
1603 ); // NOLINT(whitespace/parens) 1543 ); // NOLINT(whitespace/parens)
1604 } 1544 }
1605 1545
1606 } // namespace cc 1546 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/shader.h ('k') | cc/test/fake_web_graphics_context_3d.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698