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

Side by Side Diff: content/browser/compositor/gl_helper_scaling.cc

Issue 1802383002: Move gl_helper to content/browser/compositor (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 4 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/common/gpu/client/gl_helper_scaling.h" 5 #include "content/browser/compositor/gl_helper_scaling.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <deque> 9 #include <deque>
10 #include <string> 10 #include <string>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/bind.h" 13 #include "base/bind.h"
14 #include "base/lazy_instance.h" 14 #include "base/lazy_instance.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 color_weights_[3] = 0.0; 139 color_weights_[3] = 0.0;
140 } 140 }
141 shader_program_ = 141 shader_program_ =
142 scaler_helper_->GetShaderProgram(spec_.shader, spec_.swizzle); 142 scaler_helper_->GetShaderProgram(spec_.shader, spec_.swizzle);
143 143
144 if (subscaler_) { 144 if (subscaler_) {
145 intermediate_texture_ = 0u; 145 intermediate_texture_ = 0u;
146 gl_->GenTextures(1, &intermediate_texture_); 146 gl_->GenTextures(1, &intermediate_texture_);
147 ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl_, 147 ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl_,
148 intermediate_texture_); 148 intermediate_texture_);
149 gl_->TexImage2D(GL_TEXTURE_2D, 149 gl_->TexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, spec_.src_size.width(),
150 0, 150 spec_.src_size.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE,
151 GL_RGBA,
152 spec_.src_size.width(),
153 spec_.src_size.height(),
154 0,
155 GL_RGBA,
156 GL_UNSIGNED_BYTE,
157 NULL); 151 NULL);
158 } 152 }
159 } 153 }
160 154
161 ~ScalerImpl() override { 155 ~ScalerImpl() override {
162 if (intermediate_texture_) { 156 if (intermediate_texture_) {
163 gl_->DeleteTextures(1, &intermediate_texture_); 157 gl_->DeleteTextures(1, &intermediate_texture_);
164 } 158 }
165 } 159 }
166 160
167 // GLHelperShader::ShaderInterface implementation. 161 // GLHelperShader::ShaderInterface implementation.
168 void Execute(GLuint source_texture, 162 void Execute(GLuint source_texture,
169 const std::vector<GLuint>& dest_textures) override { 163 const std::vector<GLuint>& dest_textures) override {
170 if (subscaler_) { 164 if (subscaler_) {
171 subscaler_->Scale(source_texture, intermediate_texture_); 165 subscaler_->Scale(source_texture, intermediate_texture_);
172 source_texture = intermediate_texture_; 166 source_texture = intermediate_texture_;
173 } 167 }
174 168
175 ScopedFramebufferBinder<GL_FRAMEBUFFER> framebuffer_binder( 169 ScopedFramebufferBinder<GL_FRAMEBUFFER> framebuffer_binder(
176 gl_, dst_framebuffer_); 170 gl_, dst_framebuffer_);
177 DCHECK_GT(dest_textures.size(), 0U); 171 DCHECK_GT(dest_textures.size(), 0U);
178 scoped_ptr<GLenum[]> buffers(new GLenum[dest_textures.size()]); 172 scoped_ptr<GLenum[]> buffers(new GLenum[dest_textures.size()]);
179 for (size_t t = 0; t < dest_textures.size(); t++) { 173 for (size_t t = 0; t < dest_textures.size(); t++) {
180 ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl_, dest_textures[t]); 174 ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl_, dest_textures[t]);
181 gl_->FramebufferTexture2D(GL_FRAMEBUFFER, 175 gl_->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + t,
182 GL_COLOR_ATTACHMENT0 + t, 176 GL_TEXTURE_2D, dest_textures[t], 0);
183 GL_TEXTURE_2D,
184 dest_textures[t],
185 0);
186 buffers[t] = GL_COLOR_ATTACHMENT0 + t; 177 buffers[t] = GL_COLOR_ATTACHMENT0 + t;
187 } 178 }
188 ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl_, source_texture); 179 ScopedTextureBinder<GL_TEXTURE_2D> texture_binder(gl_, source_texture);
189 180
190 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 181 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
191 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 182 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
192 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 183 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
193 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 184 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
194 185
195 ScopedBufferBinder<GL_ARRAY_BUFFER> buffer_binder( 186 ScopedBufferBinder<GL_ARRAY_BUFFER> buffer_binder(
196 gl_, scaler_helper_->vertex_attributes_buffer_); 187 gl_, scaler_helper_->vertex_attributes_buffer_);
197 shader_program_->UseProgram(spec_.src_size, 188 shader_program_->UseProgram(spec_.src_size, spec_.src_subrect,
198 spec_.src_subrect, 189 spec_.dst_size, spec_.scale_x,
199 spec_.dst_size, 190 spec_.vertically_flip_texture, color_weights_);
200 spec_.scale_x,
201 spec_.vertically_flip_texture,
202 color_weights_);
203 gl_->Viewport(0, 0, spec_.dst_size.width(), spec_.dst_size.height()); 191 gl_->Viewport(0, 0, spec_.dst_size.width(), spec_.dst_size.height());
204 192
205 if (dest_textures.size() > 1) { 193 if (dest_textures.size() > 1) {
206 DCHECK_LE(static_cast<int>(dest_textures.size()), 194 DCHECK_LE(static_cast<int>(dest_textures.size()),
207 scaler_helper_->helper_->MaxDrawBuffers()); 195 scaler_helper_->helper_->MaxDrawBuffers());
208 gl_->DrawBuffersEXT(dest_textures.size(), buffers.get()); 196 gl_->DrawBuffersEXT(dest_textures.size(), buffers.get());
209 } 197 }
210 // Conduct texture mapping by drawing a quad composed of two triangles. 198 // Conduct texture mapping by drawing a quad composed of two triangles.
211 gl_->DrawArrays(GL_TRIANGLE_STRIP, 0, 4); 199 gl_->DrawArrays(GL_TRIANGLE_STRIP, 0, 4);
212 if (dest_textures.size() > 1) { 200 if (dest_textures.size() > 1) {
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 x_passes = 1; 363 x_passes = 1;
376 } 364 }
377 365
378 for (int i = 0; i < x_passes; i++) { 366 for (int i = 0; i < x_passes; i++) {
379 x_ops->front().UpdateSize(&intermediate_size); 367 x_ops->front().UpdateSize(&intermediate_size);
380 x_ops->pop_front(); 368 x_ops->pop_front();
381 } 369 }
382 } 370 }
383 } 371 }
384 372
385 scaler_stages->push_back(ScalerStage(current_shader, 373 scaler_stages->push_back(ScalerStage(current_shader, src_size, src_subrect,
386 src_size, 374 intermediate_size, scale_x,
387 src_subrect, 375 vertically_flip_texture, swizzle));
388 intermediate_size,
389 scale_x,
390 vertically_flip_texture,
391 swizzle));
392 src_size = intermediate_size; 376 src_size = intermediate_size;
393 src_subrect = gfx::Rect(intermediate_size); 377 src_subrect = gfx::Rect(intermediate_size);
394 vertically_flip_texture = false; 378 vertically_flip_texture = false;
395 swizzle = false; 379 swizzle = false;
396 } 380 }
397 } 381 }
398 382
399 void GLHelperScaling::ComputeScalerStages( 383 void GLHelperScaling::ComputeScalerStages(
400 GLHelper::ScalerQuality quality, 384 GLHelper::ScalerQuality quality,
401 const gfx::Size& src_size, 385 const gfx::Size& src_size,
402 const gfx::Rect& src_subrect, 386 const gfx::Rect& src_subrect,
403 const gfx::Size& dst_size, 387 const gfx::Size& dst_size,
404 bool vertically_flip_texture, 388 bool vertically_flip_texture,
405 bool swizzle, 389 bool swizzle,
406 std::vector<ScalerStage>* scaler_stages) { 390 std::vector<ScalerStage>* scaler_stages) {
407 if (quality == GLHelper::SCALER_QUALITY_FAST || 391 if (quality == GLHelper::SCALER_QUALITY_FAST ||
408 src_subrect.size() == dst_size) { 392 src_subrect.size() == dst_size) {
409 scaler_stages->push_back(ScalerStage(SHADER_BILINEAR, 393 scaler_stages->push_back(ScalerStage(SHADER_BILINEAR, src_size, src_subrect,
410 src_size, 394 dst_size, false,
411 src_subrect, 395 vertically_flip_texture, swizzle));
412 dst_size,
413 false,
414 vertically_flip_texture,
415 swizzle));
416 return; 396 return;
417 } 397 }
418 398
419 std::deque<GLHelperScaling::ScaleOp> x_ops, y_ops; 399 std::deque<GLHelperScaling::ScaleOp> x_ops, y_ops;
420 GLHelperScaling::ScaleOp::AddOps(src_subrect.width(), 400 GLHelperScaling::ScaleOp::AddOps(src_subrect.width(), dst_size.width(), true,
421 dst_size.width(),
422 true,
423 quality == GLHelper::SCALER_QUALITY_GOOD, 401 quality == GLHelper::SCALER_QUALITY_GOOD,
424 &x_ops); 402 &x_ops);
425 GLHelperScaling::ScaleOp::AddOps(src_subrect.height(), 403 GLHelperScaling::ScaleOp::AddOps(
426 dst_size.height(), 404 src_subrect.height(), dst_size.height(), false,
427 false, 405 quality == GLHelper::SCALER_QUALITY_GOOD, &y_ops);
428 quality == GLHelper::SCALER_QUALITY_GOOD,
429 &y_ops);
430 406
431 ConvertScalerOpsToScalerStages(quality, 407 ConvertScalerOpsToScalerStages(quality, src_size, src_subrect, dst_size,
432 src_size, 408 vertically_flip_texture, swizzle, &x_ops,
433 src_subrect, 409 &y_ops, scaler_stages);
434 dst_size,
435 vertically_flip_texture,
436 swizzle,
437 &x_ops,
438 &y_ops,
439 scaler_stages);
440 } 410 }
441 411
442 GLHelper::ScalerInterface* GLHelperScaling::CreateScaler( 412 GLHelper::ScalerInterface* GLHelperScaling::CreateScaler(
443 GLHelper::ScalerQuality quality, 413 GLHelper::ScalerQuality quality,
444 gfx::Size src_size, 414 gfx::Size src_size,
445 gfx::Rect src_subrect, 415 gfx::Rect src_subrect,
446 const gfx::Size& dst_size, 416 const gfx::Size& dst_size,
447 bool vertically_flip_texture, 417 bool vertically_flip_texture,
448 bool swizzle) { 418 bool swizzle) {
449 std::vector<ScalerStage> scaler_stages; 419 std::vector<ScalerStage> scaler_stages;
450 ComputeScalerStages(quality, 420 ComputeScalerStages(quality, src_size, src_subrect, dst_size,
451 src_size, 421 vertically_flip_texture, swizzle, &scaler_stages);
452 src_subrect,
453 dst_size,
454 vertically_flip_texture,
455 swizzle,
456 &scaler_stages);
457 422
458 ScalerImpl* ret = NULL; 423 ScalerImpl* ret = NULL;
459 for (unsigned int i = 0; i < scaler_stages.size(); i++) { 424 for (unsigned int i = 0; i < scaler_stages.size(); i++) {
460 ret = new ScalerImpl(gl_, this, scaler_stages[i], ret, NULL); 425 ret = new ScalerImpl(gl_, this, scaler_stages[i], ret, NULL);
461 } 426 }
462 return ret; 427 return ret;
463 } 428 }
464 429
465 GLHelper::ScalerInterface* GLHelperScaling::CreatePlanarScaler( 430 GLHelper::ScalerInterface* GLHelperScaling::CreatePlanarScaler(
466 const gfx::Size& src_size, 431 const gfx::Size& src_size,
467 const gfx::Rect& src_subrect, 432 const gfx::Rect& src_subrect,
468 const gfx::Size& dst_size, 433 const gfx::Size& dst_size,
469 bool vertically_flip_texture, 434 bool vertically_flip_texture,
470 bool swizzle, 435 bool swizzle,
471 const float color_weights[4]) { 436 const float color_weights[4]) {
472 ScalerStage stage(SHADER_PLANAR, 437 ScalerStage stage(SHADER_PLANAR, src_size, src_subrect, dst_size, true,
473 src_size, 438 vertically_flip_texture, swizzle);
474 src_subrect,
475 dst_size,
476 true,
477 vertically_flip_texture,
478 swizzle);
479 return new ScalerImpl(gl_, this, stage, NULL, color_weights); 439 return new ScalerImpl(gl_, this, stage, NULL, color_weights);
480 } 440 }
481 441
482 GLHelperScaling::ShaderInterface* GLHelperScaling::CreateYuvMrtShader( 442 GLHelperScaling::ShaderInterface* GLHelperScaling::CreateYuvMrtShader(
483 const gfx::Size& src_size, 443 const gfx::Size& src_size,
484 const gfx::Rect& src_subrect, 444 const gfx::Rect& src_subrect,
485 const gfx::Size& dst_size, 445 const gfx::Size& dst_size,
486 bool vertically_flip_texture, 446 bool vertically_flip_texture,
487 bool swizzle, 447 bool swizzle,
488 ShaderType shader) { 448 ShaderType shader) {
489 DCHECK(shader == SHADER_YUV_MRT_PASS1 || shader == SHADER_YUV_MRT_PASS2); 449 DCHECK(shader == SHADER_YUV_MRT_PASS1 || shader == SHADER_YUV_MRT_PASS2);
490 ScalerStage stage(shader, 450 ScalerStage stage(shader, src_size, src_subrect, dst_size, true,
491 src_size, 451 vertically_flip_texture, swizzle);
492 src_subrect,
493 dst_size,
494 true,
495 vertically_flip_texture,
496 swizzle);
497 return new ScalerImpl(gl_, this, stage, NULL, NULL); 452 return new ScalerImpl(gl_, this, stage, NULL, NULL);
498 } 453 }
499 454
500 const GLfloat GLHelperScaling::kVertexAttributes[] = { 455 const GLfloat GLHelperScaling::kVertexAttributes[] = {
501 -1.0f, -1.0f, 0.0f, 0.0f, // vertex 0 456 -1.0f, -1.0f, 0.0f, 0.0f, // vertex 0
502 1.0f, -1.0f, 1.0f, 0.0f, // vertex 1 457 1.0f, -1.0f, 1.0f, 0.0f, // vertex 1
503 -1.0f, 1.0f, 0.0f, 1.0f, // vertex 2 458 -1.0f, 1.0f, 0.0f, 1.0f, // vertex 2
504 1.0f, 1.0f, 1.0f, 1.0f, }; // vertex 3 459 1.0f, 1.0f, 1.0f, 1.0f,
460 }; // vertex 3
505 461
506 void GLHelperScaling::InitBuffer() { 462 void GLHelperScaling::InitBuffer() {
507 ScopedBufferBinder<GL_ARRAY_BUFFER> buffer_binder(gl_, 463 ScopedBufferBinder<GL_ARRAY_BUFFER> buffer_binder(gl_,
508 vertex_attributes_buffer_); 464 vertex_attributes_buffer_);
509 gl_->BufferData(GL_ARRAY_BUFFER, 465 gl_->BufferData(GL_ARRAY_BUFFER, sizeof(kVertexAttributes), kVertexAttributes,
510 sizeof(kVertexAttributes),
511 kVertexAttributes,
512 GL_STATIC_DRAW); 466 GL_STATIC_DRAW);
513 } 467 }
514 468
515 scoped_refptr<ShaderProgram> GLHelperScaling::GetShaderProgram(ShaderType type, 469 scoped_refptr<ShaderProgram> GLHelperScaling::GetShaderProgram(ShaderType type,
516 bool swizzle) { 470 bool swizzle) {
517 ShaderProgramKeyType key(type, swizzle); 471 ShaderProgramKeyType key(type, swizzle);
518 scoped_refptr<ShaderProgram>& cache_entry(shader_programs_[key]); 472 scoped_refptr<ShaderProgram>& cache_entry(shader_programs_[key]);
519 if (!cache_entry.get()) { 473 if (!cache_entry.get()) {
520 cache_entry = new ShaderProgram(gl_, helper_); 474 cache_entry = new ShaderProgram(gl_, helper_);
521 std::basic_string<GLchar> vertex_program; 475 std::basic_string<GLchar> vertex_program;
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 " v_texcoords.zw = texcoord + step * 0.5;\n"); 759 " v_texcoords.zw = texcoord + step * 0.5;\n");
806 fragment_directives.append("#extension GL_EXT_draw_buffers : enable\n"); 760 fragment_directives.append("#extension GL_EXT_draw_buffers : enable\n");
807 fragment_program.append( 761 fragment_program.append(
808 " vec4 lo_uuvv = texture2D(s_texture, v_texcoords.xy);\n" 762 " vec4 lo_uuvv = texture2D(s_texture, v_texcoords.xy);\n"
809 " vec4 hi_uuvv = texture2D(s_texture, v_texcoords.zw);\n" 763 " vec4 hi_uuvv = texture2D(s_texture, v_texcoords.zw);\n"
810 " gl_FragData[0] = vec4(lo_uuvv.rg, hi_uuvv.rg);\n" 764 " gl_FragData[0] = vec4(lo_uuvv.rg, hi_uuvv.rg);\n"
811 " gl_FragData[1] = vec4(lo_uuvv.ba, hi_uuvv.ba);\n"); 765 " gl_FragData[1] = vec4(lo_uuvv.ba, hi_uuvv.ba);\n");
812 break; 766 break;
813 } 767 }
814 if (swizzle) { 768 if (swizzle) {
815 switch(type) { 769 switch (type) {
816 case SHADER_YUV_MRT_PASS1: 770 case SHADER_YUV_MRT_PASS1:
817 fragment_program.append(" gl_FragData[0] = gl_FragData[0].bgra;\n"); 771 fragment_program.append(" gl_FragData[0] = gl_FragData[0].bgra;\n");
818 break; 772 break;
819 case SHADER_YUV_MRT_PASS2: 773 case SHADER_YUV_MRT_PASS2:
820 fragment_program.append(" gl_FragData[0] = gl_FragData[0].bgra;\n"); 774 fragment_program.append(" gl_FragData[0] = gl_FragData[0].bgra;\n");
821 fragment_program.append(" gl_FragData[1] = gl_FragData[1].bgra;\n"); 775 fragment_program.append(" gl_FragData[1] = gl_FragData[1].bgra;\n");
822 break; 776 break;
823 default: 777 default:
824 fragment_program.append(" gl_FragColor = gl_FragColor.bgra;\n"); 778 fragment_program.append(" gl_FragColor = gl_FragColor.bgra;\n");
825 break; 779 break;
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 const gfx::Rect& src_subrect, 836 const gfx::Rect& src_subrect,
883 const gfx::Size& dst_size, 837 const gfx::Size& dst_size,
884 bool scale_x, 838 bool scale_x,
885 bool flip_y, 839 bool flip_y,
886 GLfloat color_weights[4]) { 840 GLfloat color_weights[4]) {
887 gl_->UseProgram(program_); 841 gl_->UseProgram(program_);
888 842
889 // OpenGL defines the last parameter to VertexAttribPointer as type 843 // OpenGL defines the last parameter to VertexAttribPointer as type
890 // "const GLvoid*" even though it is actually an offset into the buffer 844 // "const GLvoid*" even though it is actually an offset into the buffer
891 // object's data store and not a pointer to the client's address space. 845 // object's data store and not a pointer to the client's address space.
892 const void* offsets[2] = { 846 const void* offsets[2] = {0,
893 0, reinterpret_cast<const void*>(2 * sizeof(GLfloat)) 847 reinterpret_cast<const void*>(2 * sizeof(GLfloat))};
894 };
895 848
896 gl_->VertexAttribPointer(position_location_, 849 gl_->VertexAttribPointer(position_location_, 2, GL_FLOAT, GL_FALSE,
897 2, 850 4 * sizeof(GLfloat), offsets[0]);
898 GL_FLOAT,
899 GL_FALSE,
900 4 * sizeof(GLfloat),
901 offsets[0]);
902 gl_->EnableVertexAttribArray(position_location_); 851 gl_->EnableVertexAttribArray(position_location_);
903 852
904 gl_->VertexAttribPointer(texcoord_location_, 853 gl_->VertexAttribPointer(texcoord_location_, 2, GL_FLOAT, GL_FALSE,
905 2, 854 4 * sizeof(GLfloat), offsets[1]);
906 GL_FLOAT,
907 GL_FALSE,
908 4 * sizeof(GLfloat),
909 offsets[1]);
910 gl_->EnableVertexAttribArray(texcoord_location_); 855 gl_->EnableVertexAttribArray(texcoord_location_);
911 856
912 gl_->Uniform1i(texture_location_, 0); 857 gl_->Uniform1i(texture_location_, 0);
913 858
914 // Convert |src_subrect| to texture coordinates. 859 // Convert |src_subrect| to texture coordinates.
915 GLfloat src_subrect_texcoord[] = { 860 GLfloat src_subrect_texcoord[] = {
916 static_cast<float>(src_subrect.x()) / src_size.width(), 861 static_cast<float>(src_subrect.x()) / src_size.width(),
917 static_cast<float>(src_subrect.y()) / src_size.height(), 862 static_cast<float>(src_subrect.y()) / src_size.height(),
918 static_cast<float>(src_subrect.width()) / src_size.width(), 863 static_cast<float>(src_subrect.width()) / src_size.width(),
919 static_cast<float>(src_subrect.height()) / src_size.height(), }; 864 static_cast<float>(src_subrect.height()) / src_size.height(),
865 };
920 if (flip_y) { 866 if (flip_y) {
921 src_subrect_texcoord[1] += src_subrect_texcoord[3]; 867 src_subrect_texcoord[1] += src_subrect_texcoord[3];
922 src_subrect_texcoord[3] *= -1.0; 868 src_subrect_texcoord[3] *= -1.0;
923 } 869 }
924 gl_->Uniform4fv(src_subrect_location_, 1, src_subrect_texcoord); 870 gl_->Uniform4fv(src_subrect_location_, 1, src_subrect_texcoord);
925 871
926 gl_->Uniform2f(src_pixelsize_location_, src_size.width(), src_size.height()); 872 gl_->Uniform2f(src_pixelsize_location_, src_size.width(), src_size.height());
927 gl_->Uniform2f(dst_pixelsize_location_, 873 gl_->Uniform2f(dst_pixelsize_location_, static_cast<float>(dst_size.width()),
928 static_cast<float>(dst_size.width()),
929 static_cast<float>(dst_size.height())); 874 static_cast<float>(dst_size.height()));
930 875
931 gl_->Uniform2f( 876 gl_->Uniform2f(scaling_vector_location_, scale_x ? 1.0 : 0.0,
932 scaling_vector_location_, scale_x ? 1.0 : 0.0, scale_x ? 0.0 : 1.0); 877 scale_x ? 0.0 : 1.0);
933 gl_->Uniform4fv(color_weights_location_, 1, color_weights); 878 gl_->Uniform4fv(color_weights_location_, 1, color_weights);
934 } 879 }
935 880
936 } // namespace content 881 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/compositor/gl_helper_scaling.h ('k') | content/browser/compositor/gl_helper_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698