Merge "Selectively disable filtering if estimated safe" into oc-dev
am: 38c97237e3
Change-Id: Ic3be7167429e8cd6a291ac0465e883522afcf9e3
This commit is contained in:
@@ -457,11 +457,13 @@ GlopBuilder& GlopBuilder::setFillTextureLayer(GlLayer& layer, float alpha) {
|
||||
return *this;
|
||||
}
|
||||
|
||||
GlopBuilder& GlopBuilder::setFillExternalTexture(Texture& texture, Matrix4& textureTransform) {
|
||||
GlopBuilder& GlopBuilder::setFillExternalTexture(Texture& texture, Matrix4& textureTransform,
|
||||
bool requiresFilter) {
|
||||
TRIGGER_STAGE(kFillStage);
|
||||
REQUIRE_STAGES(kMeshStage | kRoundRectClipStage);
|
||||
|
||||
mOutGlop->fill.texture = { &texture, GL_LINEAR, GL_CLAMP_TO_EDGE, &textureTransform };
|
||||
GLenum filter = requiresFilter ? GL_LINEAR : GL_NEAREST;
|
||||
mOutGlop->fill.texture = { &texture, filter, GL_CLAMP_TO_EDGE, &textureTransform };
|
||||
|
||||
setFill(SK_ColorWHITE, 1.0f, SkBlendMode::kSrc, Blend::ModeOrderSwap::NoSwap,
|
||||
nullptr, nullptr);
|
||||
|
||||
@@ -75,7 +75,8 @@ public:
|
||||
GlopBuilder& setFillTextureLayer(GlLayer& layer, float alpha);
|
||||
// TODO: setFillLayer normally forces its own wrap & filter mode,
|
||||
// which isn't always correct.
|
||||
GlopBuilder& setFillExternalTexture(Texture& texture, Matrix4& textureTransform);
|
||||
GlopBuilder& setFillExternalTexture(Texture& texture, Matrix4& textureTransform,
|
||||
bool requiresFilter);
|
||||
|
||||
GlopBuilder& setTransform(const Matrix4& canvas, const int transformFlags);
|
||||
|
||||
|
||||
@@ -199,6 +199,7 @@ inline CopyResult copyTextureInto(Caches& caches, RenderState& renderState,
|
||||
GL_TEXTURE_2D, texture, 0);
|
||||
|
||||
{
|
||||
bool requiresFilter;
|
||||
// Draw & readback
|
||||
renderState.setViewport(destWidth, destHeight);
|
||||
renderState.scissor().setEnabled(false);
|
||||
@@ -216,12 +217,17 @@ inline CopyResult copyTextureInto(Caches& caches, RenderState& renderState,
|
||||
croppedTexTransform.scale(srcRect.getWidth() / sourceTexture.width(),
|
||||
srcRect.getHeight() / sourceTexture.height(), 1);
|
||||
croppedTexTransform.multiply(sFlipV);
|
||||
requiresFilter = srcRect.getWidth() != (float) destWidth
|
||||
|| srcRect.getHeight() != (float) destHeight;
|
||||
} else {
|
||||
requiresFilter = sourceTexture.width() != (uint32_t) destWidth
|
||||
|| sourceTexture.height() != (uint32_t) destHeight;
|
||||
}
|
||||
Glop glop;
|
||||
GlopBuilder(renderState, caches, &glop)
|
||||
.setRoundRectClipState(nullptr)
|
||||
.setMeshTexturedUnitQuad(nullptr)
|
||||
.setFillExternalTexture(sourceTexture, croppedTexTransform)
|
||||
.setFillExternalTexture(sourceTexture, croppedTexTransform, requiresFilter)
|
||||
.setTransform(Matrix4::identity(), TransformFlags::None)
|
||||
.setModelViewMapUnitToRect(Rect(destWidth, destHeight))
|
||||
.build();
|
||||
|
||||
Reference in New Issue
Block a user