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

Side by Side Diff: cc/shader.cc

Issue 11570027: Adding support for per vertex opacity on textured layer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixing unittest Created 8 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 | Annotate | Revision Log
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/shader.h" 5 #include "cc/shader.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include <public/WebGraphicsContext3D.h> 9 #include <public/WebGraphicsContext3D.h>
10 10
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 void main() 129 void main()
130 { 130 {
131 gl_Position = matrix * a_position; 131 gl_Position = matrix * a_position;
132 } 132 }
133 ); 133 );
134 } 134 }
135 135
136 VertexShaderPosTexTransform::VertexShaderPosTexTransform() 136 VertexShaderPosTexTransform::VertexShaderPosTexTransform()
137 : m_matrixLocation(-1) 137 : m_matrixLocation(-1)
138 , m_texTransformLocation(-1) 138 , m_texTransformLocation(-1)
139 , m_vertexOpacityLocation(-1)
139 { 140 {
140 } 141 }
141 142
142 void VertexShaderPosTexTransform::init(WebGraphicsContext3D* context, unsigned p rogram, bool usingBindUniform, int* baseUniformIndex) 143 void VertexShaderPosTexTransform::init(WebGraphicsContext3D* context, unsigned p rogram, bool usingBindUniform, int* baseUniformIndex)
143 { 144 {
144 static const char* shaderUniforms[] = { 145 static const char* shaderUniforms[] = {
145 "matrix", 146 "matrix",
146 "texTransform", 147 "texTransform",
148 "opacity",
147 }; 149 };
148 int locations[2]; 150 int locations[3];
149 151
150 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 152 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
151 153
152 m_matrixLocation = locations[0]; 154 m_matrixLocation = locations[0];
153 m_texTransformLocation = locations[1]; 155 m_texTransformLocation = locations[1];
154 DCHECK(m_matrixLocation != -1 && m_texTransformLocation != -1); 156 m_vertexOpacityLocation = locations[2];
157 DCHECK(m_matrixLocation != -1
158 && m_texTransformLocation != -1
jamesr 2012/12/14 21:18:20 &&s on previous line
Jerome 2012/12/14 21:48:47 Done.
159 && m_vertexOpacityLocation != -1);
155 } 160 }
156 161
157 std::string VertexShaderPosTexTransform::getShaderString() const 162 std::string VertexShaderPosTexTransform::getShaderString() const
158 { 163 {
159 return SHADER( 164 return SHADER(
160 attribute vec4 a_position; 165 attribute vec4 a_position;
161 attribute vec2 a_texCoord; 166 attribute vec2 a_texCoord;
162 attribute float a_index; 167 attribute float a_index;
163 uniform mat4 matrix[8]; 168 uniform mat4 matrix[8];
164 uniform vec4 texTransform[8]; 169 uniform vec4 texTransform[8];
170 uniform float opacity[32];
165 varying vec2 v_texCoord; 171 varying vec2 v_texCoord;
172 varying float v_alpha;
166 void main() 173 void main()
167 { 174 {
168 gl_Position = matrix[int(a_index)] * a_position; 175 gl_Position = matrix[int(a_index) / 4] * a_position;
169 v_texCoord = a_texCoord * texTransform[int(a_index)].zw + texTransfo rm[int(a_index)].xy; 176 vec4 texTrans = texTransform[int(a_index) / 4];
177 v_texCoord = a_texCoord * texTrans.zw + texTrans.xy;
178 v_alpha = opacity[int(a_index)];
170 } 179 }
171 ); 180 );
172 } 181 }
173 182
174 VertexShaderQuad::VertexShaderQuad() 183 VertexShaderQuad::VertexShaderQuad()
175 : m_matrixLocation(-1) 184 : m_matrixLocation(-1)
176 , m_pointLocation(-1) 185 , m_pointLocation(-1)
177 { 186 {
178 } 187 }
179 188
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 "s_texture", 352 "s_texture",
344 }; 353 };
345 int locations[1]; 354 int locations[1];
346 355
347 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 356 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
348 357
349 m_samplerLocation = locations[0]; 358 m_samplerLocation = locations[0];
350 DCHECK(m_samplerLocation != -1); 359 DCHECK(m_samplerLocation != -1);
351 } 360 }
352 361
353 std::string FragmentShaderRGBATexFlipAlpha::getShaderString() const 362 std::string FragmentShaderRGBATexFlipVaryingAlpha::getShaderString() const
354 { 363 {
355 return SHADER( 364 return SHADER(
356 precision mediump float; 365 precision mediump float;
357 varying vec2 v_texCoord; 366 varying vec2 v_texCoord;
367 varying float v_alpha;
358 uniform sampler2D s_texture; 368 uniform sampler2D s_texture;
359 uniform float alpha;
360 void main() 369 void main()
361 { 370 {
362 vec4 texColor = texture2D(s_texture, vec2(v_texCoord.x, 1.0 - v_texC oord.y)); 371 vec4 texColor = texture2D(s_texture, vec2(v_texCoord.x, 1.0 - v_texC oord.y));
363 gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * alpha; 372 gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * v_alpha;
364 } 373 }
365 ); 374 );
366 } 375 }
367 376
368 bool FragmentShaderOESImageExternal::init(WebGraphicsContext3D* context, unsigne d program, bool usingBindUniform, int* baseUniformIndex) 377 bool FragmentShaderOESImageExternal::init(WebGraphicsContext3D* context, unsigne d program, bool usingBindUniform, int* baseUniformIndex)
369 { 378 {
370 static const char* shaderUniforms[] = { 379 static const char* shaderUniforms[] = {
371 "s_texture", 380 "s_texture",
372 }; 381 };
373 int locations[1]; 382 int locations[1];
(...skipping 26 matching lines...) Expand all
400 uniform sampler2D s_texture; 409 uniform sampler2D s_texture;
401 uniform float alpha; 410 uniform float alpha;
402 void main() 411 void main()
403 { 412 {
404 vec4 texColor = texture2D(s_texture, v_texCoord); 413 vec4 texColor = texture2D(s_texture, v_texCoord);
405 gl_FragColor = texColor * alpha; 414 gl_FragColor = texColor * alpha;
406 } 415 }
407 ); 416 );
408 } 417 }
409 418
410 std::string FragmentShaderRGBATexRectFlipAlpha::getShaderString() const 419 std::string FragmentShaderRGBATexVaryingAlpha::getShaderString() const
420 {
421 return SHADER(
422 precision mediump float;
423 varying vec2 v_texCoord;
424 varying float v_alpha;
425 uniform sampler2D s_texture;
426 void main()
427 {
428 vec4 texColor = texture2D(s_texture, v_texCoord);
429 gl_FragColor = texColor * v_alpha;
430 }
431 );
432 }
433
434 std::string FragmentShaderRGBATexRectFlipVaryingAlpha::getShaderString() const
411 { 435 {
412 // This must be paired with VertexShaderPosTexTransform to pick up the texTr ansform uniform. 436 // This must be paired with VertexShaderPosTexTransform to pick up the texTr ansform uniform.
413 // The necessary #extension preprocessing directive breaks the SHADER and SH ADER0 macros. 437 // The necessary #extension preprocessing directive breaks the SHADER and SH ADER0 macros.
414 return "#extension GL_ARB_texture_rectangle : require\n" 438 return "#extension GL_ARB_texture_rectangle : require\n"
415 "precision mediump float;\n" 439 "precision mediump float;\n"
416 "varying vec2 v_texCoord;\n" 440 "varying vec2 v_texCoord;\n"
441 "varying float v_alpha;\n"
417 "uniform vec4 texTransform;\n" 442 "uniform vec4 texTransform;\n"
418 "uniform sampler2DRect s_texture;\n" 443 "uniform sampler2DRect s_texture;\n"
419 "uniform float alpha;\n"
420 "void main()\n" 444 "void main()\n"
421 "{\n" 445 "{\n"
422 " vec4 texColor = texture2DRect(s_texture, vec2(v_texCoord.x, tex Transform.w - v_texCoord.y));\n" 446 " vec4 texColor = texture2DRect(s_texture, vec2(v_texCoord.x, tex Transform.w - v_texCoord.y));\n"
423 " gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColo r.w) * alpha;\n" 447 " gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColo r.w) * v_alpha;\n"
424 "}\n"; 448 "}\n";
425 } 449 }
426 450
427 std::string FragmentShaderRGBATexRectAlpha::getShaderString() const 451 std::string FragmentShaderRGBATexRectVaryingAlpha::getShaderString() const
428 { 452 {
429 return "#extension GL_ARB_texture_rectangle : require\n" 453 return "#extension GL_ARB_texture_rectangle : require\n"
430 "precision mediump float;\n" 454 "precision mediump float;\n"
431 "varying vec2 v_texCoord;\n" 455 "varying vec2 v_texCoord;\n"
456 "varying float v_alpha;\n"
432 "uniform sampler2DRect s_texture;\n" 457 "uniform sampler2DRect s_texture;\n"
433 "uniform float alpha;\n"
434 "void main()\n" 458 "void main()\n"
435 "{\n" 459 "{\n"
436 " vec4 texColor = texture2DRect(s_texture, v_texCoord);\n" 460 " vec4 texColor = texture2DRect(s_texture, v_texCoord);\n"
437 " gl_FragColor = texColor * alpha;\n" 461 " gl_FragColor = texColor * v_alpha;\n"
438 "}\n"; 462 "}\n";
439 } 463 }
440 464
441 std::string FragmentShaderRGBATexOpaque::getShaderString() const 465 std::string FragmentShaderRGBATexOpaque::getShaderString() const
442 { 466 {
443 return SHADER( 467 return SHADER(
444 precision mediump float; 468 precision mediump float;
445 varying vec2 v_texCoord; 469 varying vec2 v_texCoord;
446 uniform sampler2D s_texture; 470 uniform sampler2D s_texture;
447 void main() 471 void main()
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 vec4 color2 = color; 892 vec4 color2 = color;
869 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texT ransform.xy; 893 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texT ransform.xy;
870 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); 894 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0);
871 float picker = abs(coord.x - coord.y); 895 float picker = abs(coord.x - coord.y);
872 gl_FragColor = mix(color1, color2, picker) * alpha; 896 gl_FragColor = mix(color1, color2, picker) * alpha;
873 } 897 }
874 ); 898 );
875 } 899 }
876 900
877 } // namespace cc 901 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698