#ifndef CCRenderPass_h
#define CCRenderPass_h
#include "cc/CCDrawQuad.h"
#include "cc/CCOcclusionTracker.h"
#include <wtf/PassOwnPtr.h>
#include <wtf/Vector.h>
namespace WebCore {
class CCLayerImpl;
class CCRenderSurface;
class CCSharedQuadState;
class Color;
class CCQuadList : public Vector<OwnPtr<CCDrawQuad> > {
public:
typedef reverse_iterator backToFrontIterator;
typedef const_reverse_iterator constBackToFrontIterator;
inline backToFrontIterator backToFrontBegin() { return rbegin(); }
inline backToFrontIterator backToFrontEnd() { return rend(); }
inline constBackToFrontIterator backToFrontBegin() const { return rbegin(); }
inline constBackToFrontIterator backToFrontEnd() const { return rend(); }
};
class CCRenderPass {
WTF_MAKE_NONCOPYABLE(CCRenderPass);
public:
static PassOwnPtr<CCRenderPass> create(CCRenderSurface*);
void appendQuadsForLayer(CCLayerImpl*, CCOcclusionTrackerImpl*, bool& hadMissingTiles);
void appendQuadsForRenderSurfaceLayer(CCLayerImpl*, CCOcclusionTrackerImpl*);
void appendQuadsToFillScreen(CCLayerImpl* rootLayer, const Color& screenBackgroundColor, const CCOcclusionTrackerImpl&);
const CCQuadList& quadList() const { return m_quadList; }
CCRenderSurface* targetSurface() const { return m_targetSurface; }
void setSurfaceDamageRect(const FloatRect& surfaceDamageRect) { m_surfaceDamageRect = surfaceDamageRect; }
const FloatRect& surfaceDamageRect() const { return m_surfaceDamageRect; }
private:
explicit CCRenderPass(CCRenderSurface*);
CCRenderSurface* m_targetSurface;
CCQuadList m_quadList;
Vector<OwnPtr<CCSharedQuadState> > m_sharedQuadStateList;
FloatRect m_surfaceDamageRect;
};
typedef Vector<OwnPtr<CCRenderPass> > CCRenderPassList;
}
#endif