mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 620665 - Part 5: Do not use mManager pointer for D3D10 layers. r=roc a=blocking-beta9
This commit is contained in:
parent
a218a71e7c
commit
76fed664bf
@ -91,9 +91,9 @@ SurfaceToTexture(ID3D10Device *aDevice,
|
||||
return texture.forget();
|
||||
}
|
||||
|
||||
ImageContainerD3D10::ImageContainerD3D10(LayerManagerD3D10 *aManager)
|
||||
: ImageContainer(aManager)
|
||||
, mDevice(aManager->device())
|
||||
ImageContainerD3D10::ImageContainerD3D10(ID3D10Device1 *aDevice)
|
||||
: ImageContainer(nsnull)
|
||||
, mDevice(aDevice)
|
||||
, mActiveImageLock("mozilla.layers.ImageContainerD3D10.mActiveImageLock")
|
||||
{
|
||||
}
|
||||
@ -182,7 +182,6 @@ PRBool
|
||||
ImageContainerD3D10::SetLayerManager(LayerManager *aManager)
|
||||
{
|
||||
if (aManager->GetBackendType() == LayerManager::LAYERS_D3D10) {
|
||||
mManager = aManager;
|
||||
return PR_TRUE;
|
||||
}
|
||||
return PR_FALSE;
|
||||
@ -207,20 +206,14 @@ ImageLayerD3D10::RenderLayer()
|
||||
|
||||
ID3D10EffectTechnique *technique;
|
||||
|
||||
if (GetContainer()->Manager() != Manager()) {
|
||||
GetContainer()->SetLayerManager(Manager());
|
||||
}
|
||||
|
||||
if (GetContainer()->Manager() != Manager() ||
|
||||
GetContainer()->GetBackendType() != LayerManager::LAYERS_D3D10 ||
|
||||
if (GetContainer()->GetBackendType() != LayerManager::LAYERS_D3D10 ||
|
||||
image->GetFormat() == Image::CAIRO_SURFACE)
|
||||
{
|
||||
gfxIntSize size;
|
||||
bool hasAlpha;
|
||||
nsRefPtr<ID3D10ShaderResourceView> srView;
|
||||
|
||||
if (GetContainer()->Manager() != Manager() ||
|
||||
GetContainer()->GetBackendType() != LayerManager::LAYERS_D3D10)
|
||||
if (GetContainer()->GetBackendType() != LayerManager::LAYERS_D3D10)
|
||||
{
|
||||
nsRefPtr<gfxASurface> surf = GetContainer()->GetCurrentAsSurface(&size);
|
||||
|
||||
@ -230,6 +223,12 @@ ImageLayerD3D10::RenderLayer()
|
||||
|
||||
device()->CreateShaderResourceView(texture, NULL, getter_AddRefs(srView));
|
||||
} else {
|
||||
ImageContainerD3D10 *container =
|
||||
static_cast<ImageContainerD3D10*>(GetContainer());
|
||||
if (container->device() != device()) {
|
||||
container->SetDevice(device());
|
||||
}
|
||||
|
||||
// image->GetFormat() == Image::CAIRO_SURFACE
|
||||
CairoImageD3D10 *cairoImage =
|
||||
static_cast<CairoImageD3D10*>(image.get());
|
||||
|
@ -49,7 +49,7 @@ namespace layers {
|
||||
class THEBES_API ImageContainerD3D10 : public ImageContainer
|
||||
{
|
||||
public:
|
||||
ImageContainerD3D10(LayerManagerD3D10 *aManager);
|
||||
ImageContainerD3D10(ID3D10Device1 *aDevice);
|
||||
virtual ~ImageContainerD3D10() {}
|
||||
|
||||
virtual already_AddRefed<Image> CreateImage(const Image::Format* aFormats,
|
||||
@ -67,6 +67,9 @@ public:
|
||||
|
||||
virtual LayerManager::LayersBackend GetBackendType() { return LayerManager::LAYERS_D3D10; }
|
||||
|
||||
ID3D10Device1 *device() { return mDevice; }
|
||||
void SetDevice(ID3D10Device1 *aDevice) { mDevice = aDevice; }
|
||||
|
||||
private:
|
||||
typedef mozilla::Mutex Mutex;
|
||||
|
||||
|
@ -289,7 +289,7 @@ LayerManagerD3D10::CreateCanvasLayer()
|
||||
already_AddRefed<ImageContainer>
|
||||
LayerManagerD3D10::CreateImageContainer()
|
||||
{
|
||||
nsRefPtr<ImageContainer> layer = new ImageContainerD3D10(this);
|
||||
nsRefPtr<ImageContainer> layer = new ImageContainerD3D10(device());
|
||||
return layer.forget();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user