mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-11 12:25:53 +00:00
Bug 809273 - Let ContentHost create an EffectComponentAlpha if necessary. r=nrc
This commit is contained in:
parent
861c0c7d80
commit
4041b4fc04
@ -188,18 +188,20 @@ struct EffectYCbCr : public TexturedEffect
|
||||
|
||||
struct EffectComponentAlpha : public TexturedEffect
|
||||
{
|
||||
EffectComponentAlpha(TextureSource *aOnWhite, TextureSource *aOnBlack)
|
||||
: TexturedEffect(EFFECT_COMPONENT_ALPHA, nullptr, false, gfx::FILTER_LINEAR)
|
||||
, mOnWhite(aOnWhite)
|
||||
EffectComponentAlpha(TextureSource *aOnBlack,
|
||||
TextureSource *aOnWhite,
|
||||
gfx::Filter aFilter)
|
||||
: TexturedEffect(EFFECT_COMPONENT_ALPHA, nullptr, false, aFilter)
|
||||
, mOnBlack(aOnBlack)
|
||||
, mOnWhite(aOnWhite)
|
||||
{}
|
||||
|
||||
#ifdef MOZ_LAYERS_HAVE_LOG
|
||||
virtual const char* Name() { return "EffectComponentAlpha"; }
|
||||
#endif
|
||||
|
||||
TextureSource* mOnWhite;
|
||||
TextureSource* mOnBlack;
|
||||
TextureSource* mOnWhite;
|
||||
};
|
||||
|
||||
struct EffectSolidColor : public Effect
|
||||
@ -224,8 +226,15 @@ struct EffectChain
|
||||
|
||||
inline TemporaryRef<TexturedEffect>
|
||||
CreateTexturedEffect(TextureHost *aTextureHost,
|
||||
TextureHost *aTextureHostOnWhite,
|
||||
const gfx::Filter& aFilter)
|
||||
{
|
||||
if (aTextureHostOnWhite) {
|
||||
MOZ_ASSERT(aTextureHost->GetFormat() == gfx::FORMAT_R8G8B8X8 ||
|
||||
aTextureHost->GetFormat() == gfx::FORMAT_B8G8R8X8);
|
||||
return new EffectComponentAlpha(aTextureHost, aTextureHostOnWhite, aFilter);
|
||||
}
|
||||
|
||||
RefPtr<TexturedEffect> result;
|
||||
switch (aTextureHost->GetFormat()) {
|
||||
case gfx::FORMAT_B8G8R8A8:
|
||||
@ -253,6 +262,13 @@ CreateTexturedEffect(TextureHost *aTextureHost,
|
||||
return result;
|
||||
}
|
||||
|
||||
inline TemporaryRef<TexturedEffect>
|
||||
CreateTexturedEffect(TextureHost *aTextureHost,
|
||||
const gfx::Filter& aFilter)
|
||||
{
|
||||
return CreateTexturedEffect(aTextureHost, nullptr, aFilter);
|
||||
}
|
||||
|
||||
} // namespace layers
|
||||
} // namespace mozilla
|
||||
|
||||
|
@ -32,6 +32,7 @@ ContentHostBase::DestroyFrontHost()
|
||||
MOZ_ASSERT(!mTextureHost || mTextureHost->GetDeAllocator(),
|
||||
"We won't be able to destroy our SurfaceDescriptor");
|
||||
mTextureHost = nullptr;
|
||||
mTextureHostOnWhite = nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
@ -47,13 +48,16 @@ ContentHostBase::Composite(EffectChain& aEffectChain,
|
||||
NS_ASSERTION(aVisibleRegion, "Requires a visible region");
|
||||
|
||||
AutoLockTextureHost lock(mTextureHost);
|
||||
AutoLockTextureHost lockOnWhite(mTextureHostOnWhite);
|
||||
|
||||
if (!mTextureHost || !lock->IsValid()) {
|
||||
if (!mTextureHost ||
|
||||
!lock.IsValid() ||
|
||||
!lockOnWhite.IsValid()) {
|
||||
return;
|
||||
}
|
||||
|
||||
RefPtr<TexturedEffect> effect =
|
||||
CreateTexturedEffect(mTextureHost, aFilter);
|
||||
CreateTexturedEffect(mTextureHost, mTextureHostOnWhite, aFilter);
|
||||
|
||||
aEffectChain.mPrimaryEffect = effect;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user