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

Side by Side Diff: cc/shader.cc

Issue 12314003: cc: Use highp precision for texture coordinates if available (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Remove synchronous startup call. Fix tests. Created 7 years, 9 months 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 | « cc/shader.h ('k') | 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/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 "cc/gl_renderer.h" // For the GLC() macro.
9 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3 D.h" 10 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3 D.h"
11 #include "third_party/khronos/GLES2/gl2.h"
10 12
11 #define SHADER0(Src) #Src 13 #define SHADER0(Src) #Src
12 #define SHADER(Src) SHADER0(Src) 14 #define VERTEX_SHADER(Src) setVertexTexCoordPrecision(context, SHADER0(Src))
15 #define FRAGMENT_SHADER(Src) setFragTexCoordPrecision(context, SHADER0(Src))
13 16
14 using WebKit::WebGraphicsContext3D; 17 using WebKit::WebGraphicsContext3D;
15 18
16 namespace cc { 19 namespace cc {
17 20
18 namespace { 21 namespace {
19 22
20 static void getProgramUniformLocations(WebGraphicsContext3D* context, unsigned p rogram, const char** shaderUniforms, size_t count, size_t maxLocations, int* loc ations, bool usingBindUniform, int* baseUniformIndex) 23 static void getProgramUniformLocations(WebGraphicsContext3D* context, unsigned p rogram, const char** shaderUniforms, size_t count, size_t maxLocations, int* loc ations, bool usingBindUniform, int* baseUniformIndex)
21 { 24 {
22 for (size_t uniformIndex = 0; uniformIndex < count; uniformIndex ++) { 25 for (size_t uniformIndex = 0; uniformIndex < count; uniformIndex ++) {
23 DCHECK(uniformIndex < maxLocations); 26 DCHECK(uniformIndex < maxLocations);
24 27
25 if (usingBindUniform) { 28 if (usingBindUniform) {
26 locations[uniformIndex] = (*baseUniformIndex)++; 29 locations[uniformIndex] = (*baseUniformIndex)++;
27 context->bindUniformLocationCHROMIUM(program, locations[uniformIndex ], shaderUniforms[uniformIndex]); 30 context->bindUniformLocationCHROMIUM(program, locations[uniformIndex ], shaderUniforms[uniformIndex]);
28 } else 31 } else
29 locations[uniformIndex] = context->getUniformLocation(program, shade rUniforms[uniformIndex]); 32 locations[uniformIndex] = context->getUniformLocation(program, shade rUniforms[uniformIndex]);
30 } 33 }
31 } 34 }
32 35
36 static std::string setFragTexCoordPrecision(WebGraphicsContext3D* context,
37 const char* shaderString)
38 {
39 // TexCoordPrecisionHigh is used for cases where we absolutely need high
40 // precision or where the texture coordinates are not mutated in the
41 // fragment shader.
42 // Some cases that benefit from high precision are:
43 // * Sampling from textures with width or height > 1024.
44 // * Linear filtering of scaled textures.
45 // texCoordPrecisionMedium is used for cases where we don't need the high
46 // precision and can use a lower precision to improve performance.
47
48 return "#ifdef GL_FRAGMENT_PRECISION_HIGH\n"
49 " #define TexCoordPrecisionHigh highp\n"
50 "#else\n"
51 " #define TexCoordPrecisionHigh mediump\n"
52 "#endif\n"
53 "#define TexCoordPrecisionMedium mediump\n" +
54 std::string(shaderString);
55 }
56
57 static std::string setVertexTexCoordPrecision(WebGraphicsContext3D* context,
58 const char* shaderString)
59 {
60 return "#define TexCoordPrecisionHigh highp\n" +
61 std::string(shaderString);
62 }
63
33 } 64 }
34 65
35 VertexShaderPosTex::VertexShaderPosTex() 66 VertexShaderPosTex::VertexShaderPosTex()
36 : m_matrixLocation(-1) 67 : m_matrixLocation(-1)
37 { 68 {
38 } 69 }
39 70
40 void VertexShaderPosTex::init(WebGraphicsContext3D* context, unsigned program, b ool usingBindUniform, int* baseUniformIndex) 71 void VertexShaderPosTex::init(WebGraphicsContext3D* context, unsigned program, b ool usingBindUniform, int* baseUniformIndex)
41 { 72 {
42 static const char* shaderUniforms[] = { 73 static const char* shaderUniforms[] = {
43 "matrix", 74 "matrix",
44 }; 75 };
45 int locations[1]; 76 int locations[1];
46 77
47 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 78 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
48 79
49 m_matrixLocation = locations[0]; 80 m_matrixLocation = locations[0];
50 DCHECK(m_matrixLocation != -1); 81 DCHECK(m_matrixLocation != -1);
51 } 82 }
52 83
53 std::string VertexShaderPosTex::getShaderString() const 84 std::string VertexShaderPosTex::getShaderString(WebGraphicsContext3D* context) c onst
54 { 85 {
55 return SHADER( 86 return VERTEX_SHADER(
56 attribute vec4 a_position; 87 attribute vec4 a_position;
57 attribute vec2 a_texCoord; 88 attribute TexCoordPrecisionHigh vec2 a_texCoord;
58 uniform mat4 matrix; 89 uniform mat4 matrix;
59 varying vec2 v_texCoord; 90 varying TexCoordPrecisionHigh vec2 v_texCoord;
60 void main() 91 void main()
61 { 92 {
62 gl_Position = matrix * a_position; 93 gl_Position = matrix * a_position;
63 v_texCoord = a_texCoord; 94 v_texCoord = a_texCoord;
64 } 95 }
65 ); 96 );
66 } 97 }
67 98
68 VertexShaderPosTexYUVStretch::VertexShaderPosTexYUVStretch() 99 VertexShaderPosTexYUVStretch::VertexShaderPosTexYUVStretch()
69 : m_matrixLocation(-1) 100 : m_matrixLocation(-1)
70 , m_texScaleLocation(-1) 101 , m_texScaleLocation(-1)
71 { 102 {
72 } 103 }
73 104
74 void VertexShaderPosTexYUVStretch::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex) 105 void VertexShaderPosTexYUVStretch::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
75 { 106 {
76 static const char* shaderUniforms[] = { 107 static const char* shaderUniforms[] = {
77 "matrix", 108 "matrix",
78 "texScale", 109 "texScale",
79 }; 110 };
80 int locations[2]; 111 int locations[2];
81 112
82 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 113 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
83 114
84 m_matrixLocation = locations[0]; 115 m_matrixLocation = locations[0];
85 m_texScaleLocation = locations[1]; 116 m_texScaleLocation = locations[1];
86 DCHECK(m_matrixLocation != -1 && m_texScaleLocation != -1); 117 DCHECK(m_matrixLocation != -1 && m_texScaleLocation != -1);
87 } 118 }
88 119
89 std::string VertexShaderPosTexYUVStretch::getShaderString() const 120 std::string VertexShaderPosTexYUVStretch::getShaderString(WebGraphicsContext3D* context) const
90 { 121 {
91 return SHADER( 122 return VERTEX_SHADER(
92 precision mediump float; 123 precision mediump float;
93 attribute vec4 a_position; 124 attribute vec4 a_position;
94 attribute vec2 a_texCoord; 125 attribute TexCoordPrecisionHigh vec2 a_texCoord;
95 uniform mat4 matrix; 126 uniform mat4 matrix;
96 varying vec2 v_texCoord; 127 varying TexCoordPrecisionHigh vec2 v_texCoord;
97 uniform vec2 texScale; 128 uniform TexCoordPrecisionHigh vec2 texScale;
98 void main() 129 void main()
99 { 130 {
100 gl_Position = matrix * a_position; 131 gl_Position = matrix * a_position;
101 v_texCoord = a_texCoord * texScale; 132 v_texCoord = a_texCoord * texScale;
102 } 133 }
103 ); 134 );
104 } 135 }
105 136
106 VertexShaderPos::VertexShaderPos() 137 VertexShaderPos::VertexShaderPos()
107 : m_matrixLocation(-1) 138 : m_matrixLocation(-1)
108 { 139 {
109 } 140 }
110 141
111 void VertexShaderPos::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex) 142 void VertexShaderPos::init(WebGraphicsContext3D* context, unsigned program, bool usingBindUniform, int* baseUniformIndex)
112 { 143 {
113 static const char* shaderUniforms[] = { 144 static const char* shaderUniforms[] = {
114 "matrix", 145 "matrix",
115 }; 146 };
116 int locations[1]; 147 int locations[1];
117 148
118 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 149 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
119 150
120 m_matrixLocation = locations[0]; 151 m_matrixLocation = locations[0];
121 DCHECK(m_matrixLocation != -1); 152 DCHECK(m_matrixLocation != -1);
122 } 153 }
123 154
124 std::string VertexShaderPos::getShaderString() const 155 std::string VertexShaderPos::getShaderString(WebGraphicsContext3D* context) cons t
125 { 156 {
126 return SHADER( 157 return VERTEX_SHADER(
127 attribute vec4 a_position; 158 attribute vec4 a_position;
128 uniform mat4 matrix; 159 uniform mat4 matrix;
129 void main() 160 void main()
130 { 161 {
131 gl_Position = matrix * a_position; 162 gl_Position = matrix * a_position;
132 } 163 }
133 ); 164 );
134 } 165 }
135 166
136 VertexShaderPosTexTransform::VertexShaderPosTexTransform() 167 VertexShaderPosTexTransform::VertexShaderPosTexTransform()
(...skipping 13 matching lines...) Expand all
150 int locations[3]; 181 int locations[3];
151 182
152 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 183 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
153 184
154 m_matrixLocation = locations[0]; 185 m_matrixLocation = locations[0];
155 m_texTransformLocation = locations[1]; 186 m_texTransformLocation = locations[1];
156 m_vertexOpacityLocation = locations[2]; 187 m_vertexOpacityLocation = locations[2];
157 DCHECK(m_matrixLocation != -1 && m_texTransformLocation != -1 && m_vertexOpa cityLocation != -1); 188 DCHECK(m_matrixLocation != -1 && m_texTransformLocation != -1 && m_vertexOpa cityLocation != -1);
158 } 189 }
159 190
160 std::string VertexShaderPosTexTransform::getShaderString() const 191 std::string VertexShaderPosTexTransform::getShaderString(WebGraphicsContext3D* c ontext) const
161 { 192 {
162 return SHADER( 193 return VERTEX_SHADER(
163 attribute vec4 a_position; 194 attribute vec4 a_position;
164 attribute vec2 a_texCoord; 195 attribute TexCoordPrecisionHigh vec2 a_texCoord;
165 attribute float a_index; 196 attribute float a_index;
166 uniform mat4 matrix[8]; 197 uniform mat4 matrix[8];
167 uniform vec4 texTransform[8]; 198 uniform TexCoordPrecisionHigh vec4 texTransform[8];
168 uniform float opacity[32]; 199 uniform float opacity[32];
169 varying vec2 v_texCoord; 200 varying TexCoordPrecisionHigh vec2 v_texCoord;
170 varying float v_alpha; 201 varying float v_alpha;
171 void main() 202 void main()
172 { 203 {
173 gl_Position = matrix[int(a_index * 0.25)] * a_position; 204 gl_Position = matrix[int(a_index * 0.25)] * a_position;
174 vec4 texTrans = texTransform[int(a_index * 0.25)]; 205 TexCoordPrecisionHigh vec4 texTrans = texTransform[int(a_index * 0.2 5)];
175 v_texCoord = a_texCoord * texTrans.zw + texTrans.xy; 206 v_texCoord = a_texCoord * texTrans.zw + texTrans.xy;
176 v_alpha = opacity[int(a_index)]; 207 v_alpha = opacity[int(a_index)];
177 } 208 }
178 ); 209 );
179 } 210 }
180 211
181 std::string VertexShaderPosTexTransformFlip::getShaderString() const 212 std::string VertexShaderPosTexTransformFlip::getShaderString(WebGraphicsContext3 D* context) const
182 { 213 {
183 return SHADER( 214 return VERTEX_SHADER(
184 attribute vec4 a_position; 215 attribute vec4 a_position;
185 attribute vec2 a_texCoord; 216 attribute TexCoordPrecisionHigh vec2 a_texCoord;
186 attribute float a_index; 217 attribute float a_index;
187 uniform mat4 matrix[8]; 218 uniform mat4 matrix[8];
188 uniform vec4 texTransform[8]; 219 uniform TexCoordPrecisionHigh vec4 texTransform[8];
189 uniform float opacity[32]; 220 uniform float opacity[32];
190 varying vec2 v_texCoord; 221 varying TexCoordPrecisionHigh vec2 v_texCoord;
191 varying float v_alpha; 222 varying float v_alpha;
192 void main() 223 void main()
193 { 224 {
194 gl_Position = matrix[int(a_index * 0.25)] * a_position; 225 gl_Position = matrix[int(a_index * 0.25)] * a_position;
195 vec4 texTrans = texTransform[int(a_index * 0.25)]; 226 TexCoordPrecisionHigh vec4 texTrans = texTransform[int(a_index * 0.2 5)];
196 v_texCoord = a_texCoord * texTrans.zw + texTrans.xy; 227 v_texCoord = a_texCoord * texTrans.zw + texTrans.xy;
197 v_texCoord.y = 1.0 - v_texCoord.y; 228 v_texCoord.y = 1.0 - v_texCoord.y;
198 v_alpha = opacity[int(a_index)]; 229 v_alpha = opacity[int(a_index)];
199 } 230 }
200 ); 231 );
201 } 232 }
202 233
203 std::string VertexShaderPosTexIdentity::getShaderString() const 234 std::string VertexShaderPosTexIdentity::getShaderString(WebGraphicsContext3D* co ntext) const
204 { 235 {
205 return SHADER( 236 return VERTEX_SHADER(
206 attribute vec4 a_position; 237 attribute vec4 a_position;
207 varying vec2 v_texCoord; 238 varying TexCoordPrecisionHigh vec2 v_texCoord;
208 void main() 239 void main()
209 { 240 {
210 gl_Position = a_position; 241 gl_Position = a_position;
211 v_texCoord = (a_position.xy + vec2(1.0)) * 0.5; 242 v_texCoord = (a_position.xy + vec2(1.0)) * 0.5;
212 } 243 }
213 ); 244 );
214 } 245 }
215 246
216 VertexShaderQuad::VertexShaderQuad() 247 VertexShaderQuad::VertexShaderQuad()
217 : m_matrixLocation(-1) 248 : m_matrixLocation(-1)
(...skipping 14 matching lines...) Expand all
232 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 263 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
233 264
234 m_matrixLocation = locations[0]; 265 m_matrixLocation = locations[0];
235 m_pointLocation = locations[1]; 266 m_pointLocation = locations[1];
236 m_texScaleLocation = locations[2]; 267 m_texScaleLocation = locations[2];
237 DCHECK_NE(m_matrixLocation, -1); 268 DCHECK_NE(m_matrixLocation, -1);
238 DCHECK_NE(m_pointLocation, -1); 269 DCHECK_NE(m_pointLocation, -1);
239 DCHECK_NE(m_texScaleLocation, -1); 270 DCHECK_NE(m_texScaleLocation, -1);
240 } 271 }
241 272
242 std::string VertexShaderQuad::getShaderString() const 273 std::string VertexShaderQuad::getShaderString(WebGraphicsContext3D* context) con st
243 { 274 {
244 return SHADER( 275 return VERTEX_SHADER(
245 attribute vec4 a_position; 276 attribute TexCoordPrecisionHigh vec4 a_position;
246 attribute vec2 a_texCoord; 277 attribute TexCoordPrecisionHigh vec2 a_texCoord;
247 uniform mat4 matrix; 278 uniform mat4 matrix;
248 uniform vec2 point[4]; 279 uniform TexCoordPrecisionHigh vec2 point[4];
249 uniform vec2 texScale; 280 uniform TexCoordPrecisionHigh vec2 texScale;
250 varying vec2 v_texCoord; 281 varying TexCoordPrecisionHigh vec2 v_texCoord;
251 void main() 282 void main()
252 { 283 {
253 vec2 complement = abs(a_texCoord - 1.0); 284 TexCoordPrecisionHigh vec2 complement = abs(a_texCoord - 1.0);
254 vec4 pos = vec4(0.0, 0.0, a_position.z, a_position.w); 285 TexCoordPrecisionHigh vec4 pos = vec4(0.0, 0.0, a_position.z, a_posi tion.w);
255 pos.xy += (complement.x * complement.y) * point[0]; 286 pos.xy += (complement.x * complement.y) * point[0];
256 pos.xy += (a_texCoord.x * complement.y) * point[1]; 287 pos.xy += (a_texCoord.x * complement.y) * point[1];
257 pos.xy += (a_texCoord.x * a_texCoord.y) * point[2]; 288 pos.xy += (a_texCoord.x * a_texCoord.y) * point[2];
258 pos.xy += (complement.x * a_texCoord.y) * point[3]; 289 pos.xy += (complement.x * a_texCoord.y) * point[3];
259 gl_Position = matrix * pos; 290 gl_Position = matrix * pos;
260 v_texCoord = (pos.xy + vec2(0.5)) * texScale; 291 v_texCoord = (pos.xy + vec2(0.5)) * texScale;
261 } 292 }
262 ); 293 );
263 } 294 }
264 295
(...skipping 14 matching lines...) Expand all
279 int locations[3]; 310 int locations[3];
280 311
281 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 312 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
282 313
283 m_matrixLocation = locations[0]; 314 m_matrixLocation = locations[0];
284 m_pointLocation = locations[1]; 315 m_pointLocation = locations[1];
285 m_vertexTexTransformLocation = locations[2]; 316 m_vertexTexTransformLocation = locations[2];
286 DCHECK(m_matrixLocation != -1 && m_pointLocation != -1 && m_vertexTexTransfo rmLocation != -1); 317 DCHECK(m_matrixLocation != -1 && m_pointLocation != -1 && m_vertexTexTransfo rmLocation != -1);
287 } 318 }
288 319
289 std::string VertexShaderTile::getShaderString() const 320 std::string VertexShaderTile::getShaderString(WebGraphicsContext3D* context) con st
290 { 321 {
291 return SHADER( 322 return VERTEX_SHADER(
292 attribute vec4 a_position; 323 attribute TexCoordPrecisionHigh vec4 a_position;
293 attribute vec2 a_texCoord; 324 attribute TexCoordPrecisionHigh vec2 a_texCoord;
294 uniform mat4 matrix; 325 uniform mat4 matrix;
295 uniform vec2 point[4]; 326 uniform TexCoordPrecisionHigh vec2 point[4];
296 uniform vec4 vertexTexTransform; 327 uniform TexCoordPrecisionHigh vec4 vertexTexTransform;
297 varying vec2 v_texCoord; 328 varying TexCoordPrecisionHigh vec2 v_texCoord;
298 void main() 329 void main()
299 { 330 {
300 vec2 complement = abs(a_texCoord - 1.0); 331 vec2 complement = abs(a_texCoord - 1.0);
301 vec4 pos = vec4(0.0, 0.0, a_position.z, a_position.w); 332 vec4 pos = vec4(0.0, 0.0, a_position.z, a_position.w);
302 pos.xy += (complement.x * complement.y) * point[0]; 333 pos.xy += (complement.x * complement.y) * point[0];
303 pos.xy += (a_texCoord.x * complement.y) * point[1]; 334 pos.xy += (a_texCoord.x * complement.y) * point[1];
304 pos.xy += (a_texCoord.x * a_texCoord.y) * point[2]; 335 pos.xy += (a_texCoord.x * a_texCoord.y) * point[2];
305 pos.xy += (complement.x * a_texCoord.y) * point[3]; 336 pos.xy += (complement.x * a_texCoord.y) * point[3];
306 gl_Position = matrix * pos; 337 gl_Position = matrix * pos;
307 v_texCoord = pos.xy * vertexTexTransform.zw + vertexTexTransform.xy; 338 v_texCoord = pos.xy * vertexTexTransform.zw + vertexTexTransform.xy;
(...skipping 15 matching lines...) Expand all
323 }; 354 };
324 int locations[2]; 355 int locations[2];
325 356
326 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 357 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
327 358
328 m_matrixLocation = locations[0]; 359 m_matrixLocation = locations[0];
329 m_texMatrixLocation = locations[1]; 360 m_texMatrixLocation = locations[1];
330 return m_matrixLocation != -1 && m_texMatrixLocation != -1; 361 return m_matrixLocation != -1 && m_texMatrixLocation != -1;
331 } 362 }
332 363
333 std::string VertexShaderVideoTransform::getShaderString() const 364 std::string VertexShaderVideoTransform::getShaderString(WebGraphicsContext3D* co ntext) const
334 { 365 {
335 return SHADER( 366 return VERTEX_SHADER(
336 attribute vec4 a_position; 367 attribute vec4 a_position;
337 attribute vec2 a_texCoord; 368 attribute TexCoordPrecisionHigh vec2 a_texCoord;
338 uniform mat4 matrix; 369 uniform mat4 matrix;
339 uniform mat4 texMatrix; 370 uniform TexCoordPrecisionHigh mat4 texMatrix;
340 varying vec2 v_texCoord; 371 varying TexCoordPrecisionHigh vec2 v_texCoord;
341 void main() 372 void main()
342 { 373 {
343 gl_Position = matrix * a_position; 374 gl_Position = matrix * a_position;
344 v_texCoord = vec2(texMatrix * vec4(a_texCoord.x, 1.0 - a_texCoord.y, 0.0, 1.0)); 375 v_texCoord = vec2(texMatrix * vec4(a_texCoord.x, 1.0 - a_texCoord.y, 0.0, 1.0));
345 } 376 }
346 ); 377 );
347 } 378 }
348 379
349 FragmentTexAlphaBinding::FragmentTexAlphaBinding() 380 FragmentTexAlphaBinding::FragmentTexAlphaBinding()
350 : m_samplerLocation(-1) 381 : m_samplerLocation(-1)
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 "s_texture", 422 "s_texture",
392 }; 423 };
393 int locations[1]; 424 int locations[1];
394 425
395 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 426 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
396 427
397 m_samplerLocation = locations[0]; 428 m_samplerLocation = locations[0];
398 return m_samplerLocation != -1; 429 return m_samplerLocation != -1;
399 } 430 }
400 431
401 std::string FragmentShaderOESImageExternal::getShaderString() const 432 std::string FragmentShaderOESImageExternal::getShaderString(WebGraphicsContext3D * context) const
402 { 433 {
403 // Cannot use the SHADER() macro because of the '#' char 434 // Cannot use the FRAGMENT_SHADER() macro because of the '#' char
404 return "#extension GL_OES_EGL_image_external : require \n" 435 return setFragTexCoordPrecision(context,
436 "#extension GL_OES_EGL_image_external : require \n"
405 "precision mediump float;\n" 437 "precision mediump float;\n"
406 "varying vec2 v_texCoord;\n" 438 "varying TexCoordPrecisionHigh vec2 v_texCoord;\n"
407 "uniform samplerExternalOES s_texture;\n" 439 "uniform samplerExternalOES s_texture;\n"
408 "void main()\n" 440 "void main()\n"
409 "{\n" 441 "{\n"
410 " vec4 texColor = texture2D(s_texture, v_texCoord);\n" 442 " vec4 texColor = texture2D(s_texture, v_texCoord);\n"
411 " gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor .w);\n" 443 " gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor .w);\n"
412 "}\n"; 444 "}\n");
413 } 445 }
414 446
415 std::string FragmentShaderRGBATexAlpha::getShaderString() const 447 std::string FragmentShaderRGBATexAlpha::getShaderString(WebGraphicsContext3D* co ntext) const
416 { 448 {
417 return SHADER( 449 return FRAGMENT_SHADER(
418 precision mediump float; 450 precision mediump float;
419 varying vec2 v_texCoord; 451 varying TexCoordPrecisionHigh vec2 v_texCoord;
420 uniform sampler2D s_texture; 452 uniform sampler2D s_texture;
421 uniform float alpha; 453 uniform float alpha;
422 void main() 454 void main()
423 { 455 {
424 vec4 texColor = texture2D(s_texture, v_texCoord); 456 vec4 texColor = texture2D(s_texture, v_texCoord);
425 gl_FragColor = texColor * alpha; 457 gl_FragColor = texColor * alpha;
426 } 458 }
427 ); 459 );
428 } 460 }
429 461
430 std::string FragmentShaderRGBATexVaryingAlpha::getShaderString() const 462 std::string FragmentShaderRGBATexVaryingAlpha::getShaderString(WebGraphicsContex t3D* context) const
431 { 463 {
432 return SHADER( 464 return FRAGMENT_SHADER(
433 precision mediump float; 465 precision mediump float;
434 varying vec2 v_texCoord; 466 varying TexCoordPrecisionHigh vec2 v_texCoord;
435 varying float v_alpha; 467 varying float v_alpha;
436 uniform sampler2D s_texture; 468 uniform sampler2D s_texture;
437 void main() 469 void main()
438 { 470 {
439 vec4 texColor = texture2D(s_texture, v_texCoord); 471 vec4 texColor = texture2D(s_texture, v_texCoord);
440 gl_FragColor = texColor * v_alpha; 472 gl_FragColor = texColor * v_alpha;
441 } 473 }
442 ); 474 );
443 } 475 }
444 476
445 std::string FragmentShaderRGBATexRectVaryingAlpha::getShaderString() const 477 std::string FragmentShaderRGBATexRectVaryingAlpha::getShaderString(WebGraphicsCo ntext3D* context) const
446 { 478 {
447 return "#extension GL_ARB_texture_rectangle : require\n" 479 return setFragTexCoordPrecision(context,
480 "#extension GL_ARB_texture_rectangle : require\n"
448 "precision mediump float;\n" 481 "precision mediump float;\n"
449 "varying vec2 v_texCoord;\n" 482 "varying TexCoordPrecisionHigh vec2 v_texCoord;\n"
450 "varying float v_alpha;\n" 483 "varying float v_alpha;\n"
451 "uniform sampler2DRect s_texture;\n" 484 "uniform sampler2DRect s_texture;\n"
452 "void main()\n" 485 "void main()\n"
453 "{\n" 486 "{\n"
454 " vec4 texColor = texture2DRect(s_texture, v_texCoord);\n" 487 " vec4 texColor = texture2DRect(s_texture, v_texCoord);\n"
455 " gl_FragColor = texColor * v_alpha;\n" 488 " gl_FragColor = texColor * v_alpha;\n"
456 "}\n"; 489 "}\n");
457 } 490 }
458 491
459 std::string FragmentShaderRGBATexOpaque::getShaderString() const 492 std::string FragmentShaderRGBATexOpaque::getShaderString(WebGraphicsContext3D* c ontext) const
460 { 493 {
461 return SHADER( 494 return FRAGMENT_SHADER(
462 precision mediump float; 495 precision mediump float;
463 varying vec2 v_texCoord; 496 varying TexCoordPrecisionHigh vec2 v_texCoord;
464 uniform sampler2D s_texture; 497 uniform sampler2D s_texture;
465 void main() 498 void main()
466 { 499 {
467 vec4 texColor = texture2D(s_texture, v_texCoord); 500 vec4 texColor = texture2D(s_texture, v_texCoord);
468 gl_FragColor = vec4(texColor.rgb, 1.0); 501 gl_FragColor = vec4(texColor.rgb, 1.0);
469 } 502 }
470 ); 503 );
471 } 504 }
472 505
473 std::string FragmentShaderRGBATex::getShaderString() const 506 std::string FragmentShaderRGBATex::getShaderString(WebGraphicsContext3D* context ) const
474 { 507 {
475 return SHADER( 508 return FRAGMENT_SHADER(
476 precision mediump float; 509 precision mediump float;
477 varying vec2 v_texCoord; 510 varying TexCoordPrecisionHigh vec2 v_texCoord;
478 uniform sampler2D s_texture; 511 uniform sampler2D s_texture;
479 void main() 512 void main()
480 { 513 {
481 gl_FragColor = texture2D(s_texture, v_texCoord); 514 gl_FragColor = texture2D(s_texture, v_texCoord);
482 } 515 }
483 ); 516 );
484 } 517 }
485 518
486 std::string FragmentShaderRGBATexSwizzleAlpha::getShaderString() const 519 std::string FragmentShaderRGBATexSwizzleAlpha::getShaderString(WebGraphicsContex t3D* context) const
487 { 520 {
488 return SHADER( 521 return FRAGMENT_SHADER(
489 precision mediump float; 522 precision mediump float;
490 varying vec2 v_texCoord; 523 varying TexCoordPrecisionHigh vec2 v_texCoord;
491 uniform sampler2D s_texture; 524 uniform sampler2D s_texture;
492 uniform float alpha; 525 uniform float alpha;
493 void main() 526 void main()
494 { 527 {
495 vec4 texColor = texture2D(s_texture, v_texCoord); 528 vec4 texColor = texture2D(s_texture, v_texCoord);
496 gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha; 529 gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, texColor.w) * alpha;
497 } 530 }
498 ); 531 );
499 } 532 }
500 533
501 std::string FragmentShaderRGBATexSwizzleOpaque::getShaderString() const 534 std::string FragmentShaderRGBATexSwizzleOpaque::getShaderString(WebGraphicsConte xt3D* context) const
502 { 535 {
503 return SHADER( 536 return FRAGMENT_SHADER(
504 precision mediump float; 537 precision mediump float;
505 varying vec2 v_texCoord; 538 varying TexCoordPrecisionHigh vec2 v_texCoord;
506 uniform sampler2D s_texture; 539 uniform sampler2D s_texture;
507 void main() 540 void main()
508 { 541 {
509 vec4 texColor = texture2D(s_texture, v_texCoord); 542 vec4 texColor = texture2D(s_texture, v_texCoord);
510 gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, 1.0); 543 gl_FragColor = vec4(texColor.z, texColor.y, texColor.x, 1.0);
511 } 544 }
512 ); 545 );
513 } 546 }
514 547
515 FragmentShaderRGBATexAlphaAA::FragmentShaderRGBATexAlphaAA() 548 FragmentShaderRGBATexAlphaAA::FragmentShaderRGBATexAlphaAA()
(...skipping 13 matching lines...) Expand all
529 int locations[3]; 562 int locations[3];
530 563
531 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 564 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
532 565
533 m_samplerLocation = locations[0]; 566 m_samplerLocation = locations[0];
534 m_alphaLocation = locations[1]; 567 m_alphaLocation = locations[1];
535 m_edgeLocation = locations[2]; 568 m_edgeLocation = locations[2];
536 DCHECK(m_samplerLocation != -1 && m_alphaLocation != -1 && m_edgeLocation != -1); 569 DCHECK(m_samplerLocation != -1 && m_alphaLocation != -1 && m_edgeLocation != -1);
537 } 570 }
538 571
539 std::string FragmentShaderRGBATexAlphaAA::getShaderString() const 572 std::string FragmentShaderRGBATexAlphaAA::getShaderString(WebGraphicsContext3D* context) const
540 { 573 {
541 return SHADER( 574 return FRAGMENT_SHADER(
542 precision mediump float; 575 precision mediump float;
543 varying vec2 v_texCoord; 576 varying TexCoordPrecisionHigh vec2 v_texCoord;
544 uniform sampler2D s_texture; 577 uniform sampler2D s_texture;
545 uniform float alpha; 578 uniform float alpha;
546 uniform vec3 edge[8]; 579 uniform vec3 edge[8];
547 void main() 580 void main()
548 { 581 {
549 vec4 texColor = texture2D(s_texture, v_texCoord); 582 vec4 texColor = texture2D(s_texture, v_texCoord);
550 vec3 pos = vec3(gl_FragCoord.xy, 1); 583 vec3 pos = vec3(gl_FragCoord.xy, 1);
551 float a0 = clamp(dot(edge[0], pos), 0.0, 1.0); 584 float a0 = clamp(dot(edge[0], pos), 0.0, 1.0);
552 float a1 = clamp(dot(edge[1], pos), 0.0, 1.0); 585 float a1 = clamp(dot(edge[1], pos), 0.0, 1.0);
553 float a2 = clamp(dot(edge[2], pos), 0.0, 1.0); 586 float a2 = clamp(dot(edge[2], pos), 0.0, 1.0);
(...skipping 27 matching lines...) Expand all
581 614
582 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 615 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
583 616
584 m_samplerLocation = locations[0]; 617 m_samplerLocation = locations[0];
585 m_alphaLocation = locations[1]; 618 m_alphaLocation = locations[1];
586 m_fragmentTexTransformLocation = locations[2]; 619 m_fragmentTexTransformLocation = locations[2];
587 m_edgeLocation = locations[3]; 620 m_edgeLocation = locations[3];
588 DCHECK(m_samplerLocation != -1 && m_alphaLocation != -1 && m_fragmentTexTran sformLocation != -1 && m_edgeLocation != -1); 621 DCHECK(m_samplerLocation != -1 && m_alphaLocation != -1 && m_fragmentTexTran sformLocation != -1 && m_edgeLocation != -1);
589 } 622 }
590 623
591 std::string FragmentShaderRGBATexClampAlphaAA::getShaderString() const 624 std::string FragmentShaderRGBATexClampAlphaAA::getShaderString(WebGraphicsContex t3D* context) const
592 { 625 {
593 return SHADER( 626 return FRAGMENT_SHADER(
594 precision mediump float; 627 precision mediump float;
595 varying vec2 v_texCoord; 628 varying TexCoordPrecisionMedium vec2 v_texCoord;
596 uniform sampler2D s_texture; 629 uniform sampler2D s_texture;
597 uniform float alpha; 630 uniform float alpha;
598 uniform vec4 fragmentTexTransform; 631 uniform TexCoordPrecisionMedium vec4 fragmentTexTransform;
599 uniform vec3 edge[8]; 632 uniform vec3 edge[8];
600 void main() 633 void main()
601 { 634 {
602 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.z w + fragmentTexTransform.xy; 635 TexCoordPrecisionMedium vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy;
603 vec4 texColor = texture2D(s_texture, texCoord); 636 vec4 texColor = texture2D(s_texture, texCoord);
604 vec3 pos = vec3(gl_FragCoord.xy, 1); 637 vec3 pos = vec3(gl_FragCoord.xy, 1);
605 float a0 = clamp(dot(edge[0], pos), 0.0, 1.0); 638 float a0 = clamp(dot(edge[0], pos), 0.0, 1.0);
606 float a1 = clamp(dot(edge[1], pos), 0.0, 1.0); 639 float a1 = clamp(dot(edge[1], pos), 0.0, 1.0);
607 float a2 = clamp(dot(edge[2], pos), 0.0, 1.0); 640 float a2 = clamp(dot(edge[2], pos), 0.0, 1.0);
608 float a3 = clamp(dot(edge[3], pos), 0.0, 1.0); 641 float a3 = clamp(dot(edge[3], pos), 0.0, 1.0);
609 float a4 = clamp(dot(edge[4], pos), 0.0, 1.0); 642 float a4 = clamp(dot(edge[4], pos), 0.0, 1.0);
610 float a5 = clamp(dot(edge[5], pos), 0.0, 1.0); 643 float a5 = clamp(dot(edge[5], pos), 0.0, 1.0);
611 float a6 = clamp(dot(edge[6], pos), 0.0, 1.0); 644 float a6 = clamp(dot(edge[6], pos), 0.0, 1.0);
612 float a7 = clamp(dot(edge[7], pos), 0.0, 1.0); 645 float a7 = clamp(dot(edge[7], pos), 0.0, 1.0);
613 gl_FragColor = texColor * alpha * min(min(a0, a2) * min(a1, a3), min (a4, a6) * min(a5, a7)); 646 gl_FragColor = texColor * alpha * min(min(a0, a2) * min(a1, a3), min (a4, a6) * min(a5, a7));
614 } 647 }
615 ); 648 );
616 } 649 }
617 650
618 std::string FragmentShaderRGBATexClampSwizzleAlphaAA::getShaderString() const 651 std::string FragmentShaderRGBATexClampSwizzleAlphaAA::getShaderString(WebGraphic sContext3D* context) const
619 { 652 {
620 return SHADER( 653 return FRAGMENT_SHADER(
621 precision mediump float; 654 precision mediump float;
622 varying vec2 v_texCoord; 655 varying TexCoordPrecisionMedium vec2 v_texCoord;
623 uniform sampler2D s_texture; 656 uniform sampler2D s_texture;
624 uniform float alpha; 657 uniform float alpha;
625 uniform vec4 fragmentTexTransform; 658 uniform TexCoordPrecisionMedium vec4 fragmentTexTransform;
626 uniform vec3 edge[8]; 659 uniform vec3 edge[8];
627 void main() 660 void main()
628 { 661 {
629 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.z w + fragmentTexTransform.xy; 662 TexCoordPrecisionMedium vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * fragmentTexTransform.zw + fragmentTexTransform.xy;
630 vec4 texColor = texture2D(s_texture, texCoord); 663 vec4 texColor = texture2D(s_texture, texCoord);
631 vec3 pos = vec3(gl_FragCoord.xy, 1); 664 vec3 pos = vec3(gl_FragCoord.xy, 1);
632 float a0 = clamp(dot(edge[0], pos), 0.0, 1.0); 665 float a0 = clamp(dot(edge[0], pos), 0.0, 1.0);
633 float a1 = clamp(dot(edge[1], pos), 0.0, 1.0); 666 float a1 = clamp(dot(edge[1], pos), 0.0, 1.0);
634 float a2 = clamp(dot(edge[2], pos), 0.0, 1.0); 667 float a2 = clamp(dot(edge[2], pos), 0.0, 1.0);
635 float a3 = clamp(dot(edge[3], pos), 0.0, 1.0); 668 float a3 = clamp(dot(edge[3], pos), 0.0, 1.0);
636 float a4 = clamp(dot(edge[4], pos), 0.0, 1.0); 669 float a4 = clamp(dot(edge[4], pos), 0.0, 1.0);
637 float a5 = clamp(dot(edge[5], pos), 0.0, 1.0); 670 float a5 = clamp(dot(edge[5], pos), 0.0, 1.0);
638 float a6 = clamp(dot(edge[6], pos), 0.0, 1.0); 671 float a6 = clamp(dot(edge[6], pos), 0.0, 1.0);
639 float a7 = clamp(dot(edge[7], pos), 0.0, 1.0); 672 float a7 = clamp(dot(edge[7], pos), 0.0, 1.0);
(...skipping 24 matching lines...) Expand all
664 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 697 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
665 698
666 m_samplerLocation = locations[0]; 699 m_samplerLocation = locations[0];
667 m_maskSamplerLocation = locations[1]; 700 m_maskSamplerLocation = locations[1];
668 m_alphaLocation = locations[2]; 701 m_alphaLocation = locations[2];
669 m_maskTexCoordScaleLocation = locations[3]; 702 m_maskTexCoordScaleLocation = locations[3];
670 m_maskTexCoordOffsetLocation = locations[4]; 703 m_maskTexCoordOffsetLocation = locations[4];
671 DCHECK(m_samplerLocation != -1 && m_maskSamplerLocation != -1 && m_alphaLoca tion != -1); 704 DCHECK(m_samplerLocation != -1 && m_maskSamplerLocation != -1 && m_alphaLoca tion != -1);
672 } 705 }
673 706
674 std::string FragmentShaderRGBATexAlphaMask::getShaderString() const 707 std::string FragmentShaderRGBATexAlphaMask::getShaderString(WebGraphicsContext3D * context) const
675 { 708 {
676 return SHADER( 709 return FRAGMENT_SHADER(
677 precision mediump float; 710 precision mediump float;
678 varying vec2 v_texCoord; 711 varying TexCoordPrecisionMedium vec2 v_texCoord;
679 uniform sampler2D s_texture; 712 uniform sampler2D s_texture;
680 uniform sampler2D s_mask; 713 uniform sampler2D s_mask;
681 uniform vec2 maskTexCoordScale; 714 uniform TexCoordPrecisionMedium vec2 maskTexCoordScale;
682 uniform vec2 maskTexCoordOffset; 715 uniform TexCoordPrecisionMedium vec2 maskTexCoordOffset;
683 uniform float alpha; 716 uniform float alpha;
684 void main() 717 void main()
685 { 718 {
686 vec4 texColor = texture2D(s_texture, v_texCoord); 719 vec4 texColor = texture2D(s_texture, v_texCoord);
687 vec2 maskTexCoord = vec2(maskTexCoordOffset.x + v_texCoord.x * maskT exCoordScale.x, maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); 720 TexCoordPrecision vec2 maskTexCoord = vec2(maskTexCoordOffset.x + v_ texCoord.x * maskTexCoordScale.x, maskTexCoordOffset.y + v_texCoord.y * maskTexC oordScale.y);
688 vec4 maskColor = texture2D(s_mask, maskTexCoord); 721 vec4 maskColor = texture2D(s_mask, maskTexCoord);
689 gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * alpha * maskColor.w; 722 gl_FragColor = vec4(texColor.x, texColor.y, texColor.z, texColor.w) * alpha * maskColor.w;
690 } 723 }
691 ); 724 );
692 } 725 }
693 726
694 FragmentShaderRGBATexAlphaMaskAA::FragmentShaderRGBATexAlphaMaskAA() 727 FragmentShaderRGBATexAlphaMaskAA::FragmentShaderRGBATexAlphaMaskAA()
695 : m_samplerLocation(-1) 728 : m_samplerLocation(-1)
696 , m_maskSamplerLocation(-1) 729 , m_maskSamplerLocation(-1)
697 , m_alphaLocation(-1) 730 , m_alphaLocation(-1)
(...skipping 18 matching lines...) Expand all
716 749
717 m_samplerLocation = locations[0]; 750 m_samplerLocation = locations[0];
718 m_maskSamplerLocation = locations[1]; 751 m_maskSamplerLocation = locations[1];
719 m_alphaLocation = locations[2]; 752 m_alphaLocation = locations[2];
720 m_edgeLocation = locations[3]; 753 m_edgeLocation = locations[3];
721 m_maskTexCoordScaleLocation = locations[4]; 754 m_maskTexCoordScaleLocation = locations[4];
722 m_maskTexCoordOffsetLocation = locations[5]; 755 m_maskTexCoordOffsetLocation = locations[5];
723 DCHECK(m_samplerLocation != -1 && m_maskSamplerLocation != -1 && m_alphaLoca tion != -1 && m_edgeLocation != -1); 756 DCHECK(m_samplerLocation != -1 && m_maskSamplerLocation != -1 && m_alphaLoca tion != -1 && m_edgeLocation != -1);
724 } 757 }
725 758
726 std::string FragmentShaderRGBATexAlphaMaskAA::getShaderString() const 759 std::string FragmentShaderRGBATexAlphaMaskAA::getShaderString(WebGraphicsContext 3D* context) const
727 { 760 {
728 return SHADER( 761 return FRAGMENT_SHADER(
729 precision mediump float; 762 precision mediump float;
730 varying vec2 v_texCoord; 763 varying TexCoordPrecisionMedium vec2 v_texCoord;
731 uniform sampler2D s_texture; 764 uniform sampler2D s_texture;
732 uniform sampler2D s_mask; 765 uniform sampler2D s_mask;
733 uniform vec2 maskTexCoordScale; 766 uniform TexCoordPrecisionMedium vec2 maskTexCoordScale;
734 uniform vec2 maskTexCoordOffset; 767 uniform TexCoordPrecisionMedium vec2 maskTexCoordOffset;
735 uniform float alpha; 768 uniform float alpha;
736 uniform vec3 edge[8]; 769 uniform vec3 edge[8];
737 void main() 770 void main()
738 { 771 {
739 vec4 texColor = texture2D(s_texture, v_texCoord); 772 vec4 texColor = texture2D(s_texture, v_texCoord);
740 vec2 maskTexCoord = vec2(maskTexCoordOffset.x + v_texCoord.x * maskT exCoordScale.x, maskTexCoordOffset.y + v_texCoord.y * maskTexCoordScale.y); 773 TexCoordPrecisionMedium vec2 maskTexCoord = vec2(maskTexCoordOffset. x + v_texCoord.x * maskTexCoordScale.x, maskTexCoordOffset.y + v_texCoord.y * ma skTexCoordScale.y);
741 vec4 maskColor = texture2D(s_mask, maskTexCoord); 774 vec4 maskColor = texture2D(s_mask, maskTexCoord);
742 vec3 pos = vec3(gl_FragCoord.xy, 1); 775 vec3 pos = vec3(gl_FragCoord.xy, 1);
743 float a0 = clamp(dot(edge[0], pos), 0.0, 1.0); 776 float a0 = clamp(dot(edge[0], pos), 0.0, 1.0);
744 float a1 = clamp(dot(edge[1], pos), 0.0, 1.0); 777 float a1 = clamp(dot(edge[1], pos), 0.0, 1.0);
745 float a2 = clamp(dot(edge[2], pos), 0.0, 1.0); 778 float a2 = clamp(dot(edge[2], pos), 0.0, 1.0);
746 float a3 = clamp(dot(edge[3], pos), 0.0, 1.0); 779 float a3 = clamp(dot(edge[3], pos), 0.0, 1.0);
747 float a4 = clamp(dot(edge[4], pos), 0.0, 1.0); 780 float a4 = clamp(dot(edge[4], pos), 0.0, 1.0);
748 float a5 = clamp(dot(edge[5], pos), 0.0, 1.0); 781 float a5 = clamp(dot(edge[5], pos), 0.0, 1.0);
749 float a6 = clamp(dot(edge[6], pos), 0.0, 1.0); 782 float a6 = clamp(dot(edge[6], pos), 0.0, 1.0);
750 float a7 = clamp(dot(edge[7], pos), 0.0, 1.0); 783 float a7 = clamp(dot(edge[7], pos), 0.0, 1.0);
(...skipping 30 matching lines...) Expand all
781 m_uTextureLocation = locations[1]; 814 m_uTextureLocation = locations[1];
782 m_vTextureLocation = locations[2]; 815 m_vTextureLocation = locations[2];
783 m_alphaLocation = locations[3]; 816 m_alphaLocation = locations[3];
784 m_yuvMatrixLocation = locations[4]; 817 m_yuvMatrixLocation = locations[4];
785 m_yuvAdjLocation = locations[5]; 818 m_yuvAdjLocation = locations[5];
786 819
787 DCHECK(m_yTextureLocation != -1 && m_uTextureLocation != -1 && m_vTextureLoc ation != -1 820 DCHECK(m_yTextureLocation != -1 && m_uTextureLocation != -1 && m_vTextureLoc ation != -1
788 && m_alphaLocation != -1 && m_yuvMatrixLocation != -1 && m_yuvAdjLoca tion != -1); 821 && m_alphaLocation != -1 && m_yuvMatrixLocation != -1 && m_yuvAdjLoca tion != -1);
789 } 822 }
790 823
791 std::string FragmentShaderYUVVideo::getShaderString() const 824 std::string FragmentShaderYUVVideo::getShaderString(WebGraphicsContext3D* contex t) const
792 { 825 {
793 return SHADER( 826 return FRAGMENT_SHADER(
794 precision mediump float; 827 precision mediump float;
795 precision mediump int; 828 precision mediump int;
796 varying vec2 v_texCoord; 829 varying TexCoordPrecisionHigh vec2 v_texCoord;
797 uniform sampler2D y_texture; 830 uniform sampler2D y_texture;
798 uniform sampler2D u_texture; 831 uniform sampler2D u_texture;
799 uniform sampler2D v_texture; 832 uniform sampler2D v_texture;
800 uniform float alpha; 833 uniform float alpha;
801 uniform vec3 yuv_adj; 834 uniform vec3 yuv_adj;
802 uniform mat3 yuv_matrix; 835 uniform mat3 yuv_matrix;
803 void main() 836 void main()
804 { 837 {
805 float y_raw = texture2D(y_texture, v_texCoord).x; 838 float y_raw = texture2D(y_texture, v_texCoord).x;
806 float u_unsigned = texture2D(u_texture, v_texCoord).x; 839 float u_unsigned = texture2D(u_texture, v_texCoord).x;
(...skipping 16 matching lines...) Expand all
823 "color", 856 "color",
824 }; 857 };
825 int locations[1]; 858 int locations[1];
826 859
827 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 860 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
828 861
829 m_colorLocation = locations[0]; 862 m_colorLocation = locations[0];
830 DCHECK(m_colorLocation != -1); 863 DCHECK(m_colorLocation != -1);
831 } 864 }
832 865
833 std::string FragmentShaderColor::getShaderString() const 866 std::string FragmentShaderColor::getShaderString(WebGraphicsContext3D* context) const
834 { 867 {
835 return SHADER( 868 return FRAGMENT_SHADER(
836 precision mediump float; 869 precision mediump float;
837 uniform vec4 color; 870 uniform vec4 color;
838 void main() 871 void main()
839 { 872 {
840 gl_FragColor = color; 873 gl_FragColor = color;
841 } 874 }
842 ); 875 );
843 } 876 }
844 877
845 FragmentShaderCheckerboard::FragmentShaderCheckerboard() 878 FragmentShaderCheckerboard::FragmentShaderCheckerboard()
(...skipping 15 matching lines...) Expand all
861 894
862 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ; 895 getProgramUniformLocations(context, program, shaderUniforms, arraysize(shade rUniforms), arraysize(locations), locations, usingBindUniform, baseUniformIndex) ;
863 896
864 m_alphaLocation = locations[0]; 897 m_alphaLocation = locations[0];
865 m_texTransformLocation = locations[1]; 898 m_texTransformLocation = locations[1];
866 m_frequencyLocation = locations[2]; 899 m_frequencyLocation = locations[2];
867 m_colorLocation = locations[3]; 900 m_colorLocation = locations[3];
868 DCHECK(m_alphaLocation != -1 && m_texTransformLocation != -1 && m_frequencyL ocation != -1 && m_colorLocation != -1); 901 DCHECK(m_alphaLocation != -1 && m_texTransformLocation != -1 && m_frequencyL ocation != -1 && m_colorLocation != -1);
869 } 902 }
870 903
871 std::string FragmentShaderCheckerboard::getShaderString() const 904 std::string FragmentShaderCheckerboard::getShaderString(WebGraphicsContext3D* co ntext) const
872 { 905 {
873 // Shader based on Example 13-17 of "OpenGL ES 2.0 Programming Guide" 906 // Shader based on Example 13-17 of "OpenGL ES 2.0 Programming Guide"
874 // by Munshi, Ginsburg, Shreiner. 907 // by Munshi, Ginsburg, Shreiner.
875 return SHADER( 908 return FRAGMENT_SHADER(
876 precision mediump float; 909 precision mediump float;
877 precision mediump int; 910 precision mediump int;
878 varying vec2 v_texCoord; 911 varying TexCoordPrecisionMedium vec2 v_texCoord;
879 uniform float alpha; 912 uniform float alpha;
880 uniform float frequency; 913 uniform float frequency;
881 uniform vec4 texTransform; 914 uniform vec4 texTransform;
882 uniform vec4 color; 915 uniform vec4 color;
883 void main() 916 void main()
884 { 917 {
885 vec4 color1 = vec4(1.0, 1.0, 1.0, 1.0); 918 vec4 color1 = vec4(1.0, 1.0, 1.0, 1.0);
886 vec4 color2 = color; 919 vec4 color2 = color;
887 vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texT ransform.xy; 920 TexCoordPrecisionMedium vec2 texCoord = clamp(v_texCoord, 0.0, 1.0) * texTransform.zw + texTransform.xy;
888 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0); 921 vec2 coord = mod(floor(texCoord * frequency * 2.0), 2.0);
889 float picker = abs(coord.x - coord.y); 922 float picker = abs(coord.x - coord.y);
890 gl_FragColor = mix(color1, color2, picker) * alpha; 923 gl_FragColor = mix(color1, color2, picker) * alpha;
891 } 924 }
892 ); 925 );
893 } 926 }
894 927
895 } // namespace cc 928 } // namespace cc
OLDNEW
« no previous file with comments | « cc/shader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698