Loading libs/hwui/GlopBuilder.cpp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -457,11 +457,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); Loading libs/hwui/GlopBuilder.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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); Loading libs/hwui/OpenGLReadback.cpp +7 −1 Original line number Original line Diff line number Diff line Loading @@ -199,6 +199,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); Loading @@ -216,12 +217,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(); Loading Loading
libs/hwui/GlopBuilder.cpp +4 −2 Original line number Original line Diff line number Diff line Loading @@ -457,11 +457,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); Loading
libs/hwui/GlopBuilder.h +2 −1 Original line number Original line Diff line number Diff line Loading @@ -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); Loading
libs/hwui/OpenGLReadback.cpp +7 −1 Original line number Original line Diff line number Diff line Loading @@ -199,6 +199,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); Loading @@ -216,12 +217,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(); Loading