Bug 900244 - Implement a shared D3D9 TextureClient. r=nical

This commit is contained in:
Matt Woodrow 2014-01-07 17:20:22 +01:00
parent 89a1de2117
commit 358d2369f8

View File

@ -159,6 +159,55 @@ protected:
bool mIterating;
};
class SharedTextureClientD3D9 : public TextureClient
{
public:
SharedTextureClientD3D9(gfx::SurfaceFormat aFormat, TextureFlags aFlags)
: TextureClient(aFlags)
, mFormat(aFormat)
{}
virtual bool IsAllocated() const MOZ_OVERRIDE { return !!mTexture; }
virtual bool ToSurfaceDescriptor(SurfaceDescriptor& aOutDescriptor) MOZ_OVERRIDE
{
MOZ_ASSERT(IsValid());
if (!IsAllocated()) {
return false;
}
aOutDescriptor = SurfaceDescriptorD3D10((WindowsHandle)(mHandle), mFormat);
return true;
}
void InitWith(IDirect3DTexture9* aTexture, HANDLE aSharedHandle, D3DSURFACE_DESC aDesc)
{
MOZ_ASSERT(!mTexture);
mTexture = aTexture;
mHandle = aSharedHandle;
mDesc = aDesc;
}
virtual gfx::IntSize GetSize() const
{
return gfx::IntSize(mDesc.Width, mDesc.Height);
}
virtual TextureClientData* DropTextureData() MOZ_OVERRIDE
{
mTexture = nullptr;
MarkInvalid();
return nullptr;
}
private:
nsRefPtr<IDirect3DTexture9> mTexture;
gfx::SurfaceFormat mFormat;
HANDLE mHandle;
D3DSURFACE_DESC mDesc;
};
class CompositingRenderTargetD3D9 : public CompositingRenderTarget,
public TextureSourceD3D9
{