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

Unified Diff: cc/output/texture_copier.cc

Issue 12665005: cc: Use highp precision for texture coords if available and needed (Closed) Base URL: http://git.chromium.org/chromium/src.git@highp2
Patch Set: rebase after all dependencies landed 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/output/texture_copier.h ('k') | cc/output/texture_copier_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/texture_copier.cc
diff --git a/cc/output/texture_copier.cc b/cc/output/texture_copier.cc
index a32fb65e58f905ce25089f64ea22f7fa2756662b..1ad0ef0d19e068ed0ed02350620bc7cab828f1cb 100644
--- a/cc/output/texture_copier.cc
+++ b/cc/output/texture_copier.cc
@@ -14,8 +14,11 @@ namespace cc {
AcceleratedTextureCopier::AcceleratedTextureCopier(
WebKit::WebGraphicsContext3D* context,
- bool using_bind_uniforms)
- : context_(context), using_bind_uniforms_(using_bind_uniforms) {
+ bool using_bind_uniforms,
+ int highp_threshold_min)
+ : context_(context)
+ , using_bind_uniforms_(using_bind_uniforms)
+ , highp_threshold_min_(highp_threshold_min) {
DCHECK(context_);
GLC(context_, fbo_ = context_->createFramebuffer());
GLC(context_, position_buffer_ = context_->createBuffer());
@@ -29,12 +32,15 @@ AcceleratedTextureCopier::AcceleratedTextureCopier(
GL_ARRAY_BUFFER, sizeof(kPositions), kPositions, GL_STATIC_DRAW));
GLC(context_, context_->bindBuffer(GL_ARRAY_BUFFER, 0));
- blit_program_.reset(new BlitProgram(context_));
+ blit_program_.reset(new BlitProgram(context_, TexCoordPrecisionMedium));
+ blit_program_highp_.reset(new BlitProgram(context_, TexCoordPrecisionHigh));
}
AcceleratedTextureCopier::~AcceleratedTextureCopier() {
if (blit_program_)
blit_program_->Cleanup(context_);
+ if (blit_program_highp_)
+ blit_program_highp_->Cleanup(context_);
if (position_buffer_)
GLC(context_, context_->deleteBuffer(position_buffer_));
if (fbo_)
@@ -72,11 +78,21 @@ void AcceleratedTextureCopier::CopyTexture(Parameters parameters) {
context_->texParameteri(
GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST));
- if (!blit_program_->initialized())
- blit_program_->Initialize(context_, using_bind_uniforms_);
-
- // TODO(danakj): Use EXT_framebuffer_blit if available.
- GLC(context_, context_->useProgram(blit_program_->program()));
+ TexCoordPrecision texCoordPrecision = TexCoordPrecisionRequired(
+ context_, highp_threshold_min_, parameters.size);
+ if (texCoordPrecision == TexCoordPrecisionHigh) {
+ if (!blit_program_highp_->initialized())
+ blit_program_highp_->Initialize(context_, using_bind_uniforms_);
+
+ // TODO(danakj): Use EXT_framebuffer_blit if available.
+ GLC(context_, context_->useProgram(blit_program_highp_->program()));
+ } else {
+ if (!blit_program_->initialized())
+ blit_program_->Initialize(context_, using_bind_uniforms_);
+
+ // TODO(danakj: Use EXT_framebuffer_blit if available.
+ GLC(context_, context_->useProgram(blit_program_->program()));
+ }
const int kPositionAttribute = 0;
GLC(context_, context_->bindBuffer(GL_ARRAY_BUFFER, position_buffer_));
« no previous file with comments | « cc/output/texture_copier.h ('k') | cc/output/texture_copier_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698