Commit d69917e0 authored by Mason Chang's avatar Mason Chang
Browse files

Bug 1375452 Fallback to DrawTarget::IntoLuminance if we can't create the effect. r=jrmuizel

parent 0a91438f
Loading
Loading
Loading
Loading
+10 −4
Original line number Original line Diff line number Diff line
@@ -99,18 +99,21 @@ DrawTargetD2D1::Snapshot()
  return snapshot.forget();
  return snapshot.forget();
}
}


void
bool
DrawTargetD2D1::EnsureLuminanceEffect()
DrawTargetD2D1::EnsureLuminanceEffect()
{
{
  if (mLuminanceEffect.get()) {
  if (mLuminanceEffect.get()) {
    return;
    return true;
  }
  }


  HRESULT hr = mDC->CreateEffect(CLSID_D2D1LuminanceToAlpha,
  HRESULT hr = mDC->CreateEffect(CLSID_D2D1LuminanceToAlpha,
                                 getter_AddRefs(mLuminanceEffect));
                                 getter_AddRefs(mLuminanceEffect));
  if (FAILED(hr)) {
  if (FAILED(hr)) {
    gfxWarning() << "Failed to create luminance effect. Code: " << hexa(hr);
    gfxCriticalError() << "Failed to create luminance effect. Code: " << hexa(hr);
    return false;
  }
  }

  return true;
}
}


already_AddRefed<SourceSurface>
already_AddRefed<SourceSurface>
@@ -121,7 +124,10 @@ DrawTargetD2D1::IntoLuminanceSource(LuminanceType aLuminanceType, float aOpacity
  }
  }


  // Create the luminance effect
  // Create the luminance effect
  EnsureLuminanceEffect();
  if (!EnsureLuminanceEffect()) {
    return DrawTarget::IntoLuminanceSource(aLuminanceType, aOpacity);
  }

  mLuminanceEffect->SetInput(0, mBitmap);
  mLuminanceEffect->SetInput(0, mBitmap);


  RefPtr<ID2D1Image> luminanceOutput;
  RefPtr<ID2D1Image> luminanceOutput;
+1 −1
Original line number Original line Diff line number Diff line
@@ -299,7 +299,7 @@ private:
  uint32_t mDeviceSeq;
  uint32_t mDeviceSeq;


  // List of effects we use
  // List of effects we use
  void EnsureLuminanceEffect();
  bool EnsureLuminanceEffect();
  RefPtr<ID2D1Effect> mLuminanceEffect;
  RefPtr<ID2D1Effect> mLuminanceEffect;
};
};