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