diff -r 000000000000 -r 6474c204b198 gfx/layers/d3d9/CanvasLayerD3D9.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/layers/d3d9/CanvasLayerD3D9.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,69 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef GFX_CANVASLAYERD3D9_H +#define GFX_CANVASLAYERD3D9_H + +#include "LayerManagerD3D9.h" +#include "GLContextTypes.h" + +namespace mozilla { +namespace layers { + + +class CanvasLayerD3D9 : + public CanvasLayer, + public LayerD3D9 +{ +public: + CanvasLayerD3D9(LayerManagerD3D9 *aManager); + ~CanvasLayerD3D9(); + + // CanvasLayer implementation + virtual void Initialize(const Data& aData); + + // LayerD3D9 implementation + virtual Layer* GetLayer(); + virtual void RenderLayer(); + virtual void CleanResources(); + virtual void LayerManagerDestroyed(); + + void CreateTexture(); + +protected: + typedef mozilla::gl::GLContext GLContext; + + void UpdateSurface(); + + nsRefPtr mGLContext; + nsRefPtr mTexture; + RefPtr mDrawTarget; + + bool mDataIsPremultiplied; + bool mNeedsYFlip; + bool mHasAlpha; + + nsAutoArrayPtr mCachedTempBlob; + uint32_t mCachedTempBlob_Size; + + uint8_t* GetTempBlob(const uint32_t aSize) + { + if (!mCachedTempBlob || aSize != mCachedTempBlob_Size) { + mCachedTempBlob = new uint8_t[aSize]; + mCachedTempBlob_Size = aSize; + } + + return mCachedTempBlob; + } + + void DiscardTempBlob() + { + mCachedTempBlob = nullptr; + } +}; + +} /* layers */ +} /* mozilla */ +#endif /* GFX_CANVASLAYERD3D9_H */