Bug 628173 - Part 1: Update CanvasLayerD3D9 to respect surface content type. r=jrmuizel a=blocking-final

This commit is contained in:
Bas Schouten 2011-02-10 21:03:24 +01:00
parent 52373ae11b
commit a50d7fec39
2 changed files with 17 additions and 5 deletions

View File

@ -191,6 +191,12 @@ CanvasLayerD3D9::Updated(const nsIntRect& aRect)
sourceStride = sourceSurface->Stride();
}
if (sourceSurface->Format() != gfxASurface::ImageFormatARGB32) {
mHasAlpha = false;
} else {
mHasAlpha = true;
}
for (int y = 0; y < aRect.height; y++) {
memcpy((PRUint8*)lockedRect.pBits + lockedRect.Pitch * y,
startBits + sourceStride * y,
@ -229,7 +235,11 @@ CanvasLayerD3D9::RenderLayer()
SetShaderTransformAndOpacity();
mD3DManager->SetShaderMode(DeviceManagerD3D9::RGBALAYER);
if (mHasAlpha) {
mD3DManager->SetShaderMode(DeviceManagerD3D9::RGBALAYER);
} else {
mD3DManager->SetShaderMode(DeviceManagerD3D9::RGBLAYER);
}
if (mFilter == gfxPattern::FILTER_NEAREST) {
device()->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);

View File

@ -52,10 +52,11 @@ class THEBES_API CanvasLayerD3D9 :
{
public:
CanvasLayerD3D9(LayerManagerD3D9 *aManager)
: CanvasLayer(aManager, NULL),
LayerD3D9(aManager),
mDataIsPremultiplied(PR_FALSE),
mNeedsYFlip(PR_FALSE)
: CanvasLayer(aManager, NULL)
, LayerD3D9(aManager)
, mDataIsPremultiplied(PR_FALSE)
, mNeedsYFlip(PR_FALSE)
, mHasAlpha(PR_TRUE)
{
mImplData = static_cast<LayerD3D9*>(this);
aManager->deviceManager()->mLayersWithResources.AppendElement(this);
@ -86,6 +87,7 @@ protected:
PRPackedBool mDataIsPremultiplied;
PRPackedBool mNeedsYFlip;
PRPackedBool mHasAlpha;
};
} /* layers */